Vegastrike 0.5.1 rc1
1.0
Original sources for Vegastrike Evolved
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
OPC_TreeBuilders.h
Go to the documentation of this file.
1
/*
3
* OPCODE - Optimized Collision Detection
4
* Copyright (C) 2001 Pierre Terdiman
5
* Homepage: http://www.codercorner.com/Opcode.htm
6
*/
8
10
16
19
// Include Guard
20
#ifndef __OPC_TREEBUILDERS_H__
21
#define __OPC_TREEBUILDERS_H__
22
24
enum
SplittingRules
25
{
26
// Primitive split
27
SPLIT_LARGEST_AXIS
= (1<<0),
28
SPLIT_SPLATTER_POINTS
= (1<<1),
29
SPLIT_BEST_AXIS
= (1<<2),
30
SPLIT_BALANCED
= (1<<3),
31
SPLIT_FIFTY
= (1<<4),
32
// Node split
33
SPLIT_GEOM_CENTER
= (1<<5),
34
//
35
SPLIT_FORCE_DWORD
= 0x7fffffff
36
};
37
39
struct
OPCODE_API
BuildSettings
40
{
41
inline_
BuildSettings
() : mLimit(1), mRules(
SPLIT_FORCE_DWORD
) {}
42
43
udword
mLimit
;
44
udword
mRules
;
45
};
46
47
class
OPCODE_API
AABBTreeBuilder
48
{
49
public
:
51
AABBTreeBuilder
() :
52
mNbPrimitives(0),
53
mNodeBase(
null
),
54
mCount(0),
55
mNbInvalidSplits(0) {}
57
virtual
~AABBTreeBuilder
() {}
58
60
67
virtual
bool
ComputeGlobalBox(
const
udword
* primitives,
udword
nb_prims,
AABB
& global_box)
const
= 0;
69
71
77
virtual
float
GetSplittingValue(
udword
index
,
udword
axis)
const
= 0;
79
81
89
virtual
float
GetSplittingValue(
const
udword
*
/*primitives*/
,
udword
/*nb_prims*/
,
const
AABB
& global_box,
udword
axis)
const
91
{
92
// Default split value = middle of the axis (using only the box)
93
return
global_box.
GetCenter
(axis);
94
}
95
97
104
virtual
BOOL
ValidateSubdivision(
const
udword
*
/*primitives*/
,
udword
nb_prims,
const
AABB
&
/*global_box*/
)
106
{
107
// Check the user-defined limit
108
if
(nb_prims<=mSettings.mLimit)
return
FALSE
;
109
110
return
TRUE
;
111
}
112
113
BuildSettings
mSettings
;
114
udword
mNbPrimitives
;
115
void
*
mNodeBase
;
116
// Stats
117
inline_
void
SetCount
(
udword
nb) { mCount=nb; }
118
inline_
void
IncreaseCount
(
udword
nb) { mCount+=nb; }
119
inline_
udword
GetCount
()
const
{
return
mCount; }
120
inline_
void
SetNbInvalidSplits
(
udword
nb) { mNbInvalidSplits=nb; }
121
inline_
void
IncreaseNbInvalidSplits
() { mNbInvalidSplits++; }
122
inline_
udword
GetNbInvalidSplits
()
const
{
return
mNbInvalidSplits; }
123
124
private
:
125
udword
mCount;
126
udword
mNbInvalidSplits;
127
};
128
129
class
OPCODE_API
AABBTreeOfVerticesBuilder
:
public
AABBTreeBuilder
130
{
131
public
:
133
AABBTreeOfVerticesBuilder
() : mVertexArray(
null
) {}
135
virtual
~AABBTreeOfVerticesBuilder
() {}
136
137
override
(
AABBTreeBuilder
)
bool
ComputeGlobalBox
(
const
udword
* primitives,
udword
nb_prims,
AABB
& global_box)
const
;
138
override
(
AABBTreeBuilder
)
float
GetSplittingValue
(
udword
index
,
udword
axis)
const
;
139
override
(
AABBTreeBuilder
)
float
GetSplittingValue
(
const
udword
* primitives,
udword
nb_prims,
const
AABB
& global_box,
udword
axis)
const
;
140
141
const
Point
*
mVertexArray
;
142
};
143
144
class
OPCODE_API
AABBTreeOfAABBsBuilder
:
public
AABBTreeBuilder
145
{
146
public
:
148
AABBTreeOfAABBsBuilder
() : mAABBArray(
null
) {}
150
virtual
~AABBTreeOfAABBsBuilder
() {}
151
152
override
(
AABBTreeBuilder
)
bool
ComputeGlobalBox
(
const
udword
* primitives,
udword
nb_prims,
AABB
& global_box)
const
;
153
override
(
AABBTreeBuilder
)
float
GetSplittingValue
(
udword
index,
udword
axis)
const
;
154
155
const
AABB
*
mAABBArray
;
156
};
157
158
class
OPCODE_API
AABBTreeOfTrianglesBuilder
:
public
AABBTreeBuilder
159
{
160
public
:
162
AABBTreeOfTrianglesBuilder
() : mIMesh(
null
) {}
164
virtual
~AABBTreeOfTrianglesBuilder
() {}
165
166
override
(
AABBTreeBuilder
)
bool
ComputeGlobalBox
(
const
udword
* primitives,
udword
nb_prims,
AABB
& global_box)
const
;
167
override
(
AABBTreeBuilder
)
float
GetSplittingValue
(
udword
index,
udword
axis)
const
;
168
override
(
AABBTreeBuilder
)
float
GetSplittingValue
(
const
udword
* primitives,
udword
nb_prims,
const
AABB
& global_box,
udword
axis)
const
;
169
170
const
MeshInterface
*
mIMesh
;
171
};
172
173
#endif // __OPC_TREEBUILDERS_H__
src
cmd
collide2
OPC_TreeBuilders.h
Generated on Fri May 29 2015 23:07:13 for Vegastrike 0.5.1 rc1 by
1.8.4