VR-Vantage 3.0 API Documentation
Home
Modules
Namespaces
Classes
Files
Libraries
Examples
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
include
vrvGraphicsUtils
DtOctree.h
Go to the documentation of this file.
1
/******************************************************************************
2
** Copyright (c) 2019 MAK Technologies, Inc.
3
** All rights reserved.
4
******************************************************************************/
5
9
#pragma once
10
11
#include <
vrvGraphicsUtils/DtAxisAlignedBoundingBox.h
>
12
#include <
vrvGraphicsUtils/DtOctreeNodeFwdDeclare.h
>
13
#include <
vrvGraphicsUtils/DtCameraFwdDeclare.h
>
14
15
#include <list>
16
17
18
namespace
makVrv {
19
26
template
<
class
T>
27
class
DtOctree
28
{
29
public
:
31
DtOctree
(
DtOctree
* parent,
DtOctree
* treeRoot,
size_t
maxDepth );
32
34
~DtOctree
();
35
39
void
addNode
(
DtOctreeNode<T>
* );
40
42
void
removeNode
(
DtOctreeNode<T>
* );
43
45
int
numNodes
()
46
{
47
return
myNumNodes
;
48
};
49
52
DtAxisAlignedBoundingBox<T>
myBox
;
53
55
DtVector3<T>
myHalfSize
;
56
60
DtOctree
*
myChildren
[ 2 ][ 2 ][ 2 ];
61
65
bool
isTwiceSize
(
const
DtAxisAlignedBoundingBox<T>
&
box
)
const
;
66
71
void
getChildIndexes
(
const
DtAxisAlignedBoundingBox<T>
&,
int
*
x
,
int
*
y
,
int
*
z
)
const
;
72
75
void
getCullBounds
(
DtAxisAlignedBoundingBox<T>
* )
const
;
76
77
78
typedef
std::list< DtOctreeNode<T> * >
NodeList
;
79
typedef
std::vector< DtOctreeNode<T> * >
NodeVector
;
80
82
NodeList
myNodes
;
83
84
void
updateOctreeNode
(
DtOctreeNode<T>
* pOctreeNode);
85
void
addOctreeNode
(
DtOctreeNode<T>
* pOctreeNode,
DtOctree<T>
* pOctree,
size_t
depth
= 0);
86
void
removeOctreeNode
(
DtOctreeNode<T>
* pOctreeNode);
87
88
void
findVisibleObjects
(
NodeVector
& visibleNodes
89
,
DtOctree
* pOctree,
const
DtCamera<T>
* pCamera,
bool
foundVisible);
90
void
findVisibleObjects
(
NodeVector
& visibleNodes
91
,
DtOctree
* pOctree,
const
Frustum<T>
* pFrustum,
bool
foundVisible);
92
protected
:
93
95
inline
void
ref
()
96
{
97
myNumNodes
++;
98
99
if
(
myParent
!= 0)
100
{
101
myParent
->
ref
();
102
}
103
};
104
106
inline
void
unref
()
107
{
108
myNumNodes
--;
109
110
if
(
myParent
!= 0)
111
{
112
myParent
->
unref
();
113
};
114
}
115
117
int
myNumNodes
;
118
120
DtOctree
*
myParent
;
121
123
DtOctree
*
myOctreeRoot
;
124
125
size_t
myMaxDepth
;
126
};
127
128
}
//namespace makVrv
129
130
#include "
DtOctree.inl
"
Copyright © 2005-2022 MAK Technologies. All Rights Reserved (
www.mak.com
)