Panda3D
physxSceneDesc.cxx
Go to the documentation of this file.
1 /**
2  * PANDA 3D SOFTWARE
3  * Copyright (c) Carnegie Mellon University. All rights reserved.
4  *
5  * All use of this software is subject to the terms of the revised BSD
6  * license. You should have received a copy of this license along
7  * with this source code in a file named "LICENSE."
8  *
9  * @file physxSceneDesc.cxx
10  * @author enn0x
11  * @date 2009-09-05
12  */
13 
14 #include "physxSceneDesc.h"
15 #include "physxManager.h"
16 #include "physxBounds3.h"
17 
18 /**
19  * Sets the gravity vector.
20  */
22 set_gravity(const LVector3f &gravity) {
23 
24  nassertv_always(!gravity.is_nan());
25  _desc.gravity = PhysxManager::vec3_to_nxVec3(gravity);
26 }
27 
28 /**
29  * Get the gravity vector.
30  */
31 LVector3f PhysxSceneDesc::
32 get_gravity() const {
33 
34  return PhysxManager::nxVec3_to_vec3(_desc.gravity);
35 }
36 
37 /**
38  * Raise or lower individual scene flags.
39  */
41 set_flag(const PhysxSceneFlag flag, bool value) {
42 
43  if (value == true) {
44  _desc.flags |= flag;
45  }
46  else {
47  _desc.flags &= ~(flag);
48  }
49 }
50 
51 /**
52  * Returns the specified scene flag.
53  */
55 get_flag(const PhysxSceneFlag flag) const {
56 
57  return (_desc.flags & flag) ? true : false;
58 }
59 
60 /**
61  * Set the max scene bounds.
62  *
63  * If scene bounds are provided (maxBounds in the descriptor), the SDK takes
64  * advantage of this information to accelerate scene-level collision queries
65  * (e.g. raycasting). When using maxBounds, you have to make sure created
66  * objects stay within the scene bounds. In particular, the position of
67  * dynamic shapes should stay within the provided bounds. Otherwise the
68  * shapes outside the bounds will not be taken into account by all scene
69  * queries (raycasting, sweep tests, overlap tests, etc). They will
70  * nonetheless still work correctly for the main physics simulation.
71  */
74 
75  _desc.maxBounds = &(bounds._bounds);
76 }
77 
78 /**
79  *
80  */
81 PhysxBounds3 PhysxSceneDesc::
82 get_max_bounds() const {
83  assert(false /* Not implemented */);
84 
85  // PhysxBounds3 value; value._bounds = *(_desc.maxBounds); return value;
86  return PhysxBounds3();
87 }
88 
89 /**
90  * Defines the structure used to store static objects.
91  */
93 set_static_structure(PhysxPruningStructure value) {
94 
95  _desc.staticStructure = (NxPruningStructure)value;
96 }
97 
98 /**
99  * Defines the subdivision level for acceleration structures used for scene
100  * queries. This is only used when maxBounds are defined!
101  */
102 void PhysxSceneDesc::
103 set_dynamic_structure(PhysxPruningStructure value) {
104 
105  _desc.dynamicStructure = (NxPruningStructure)value;
106 }
107 
108 /**
109  * Returns the structure used to store static objects.
110  */
111 PhysxEnums::PhysxPruningStructure PhysxSceneDesc::
113 
114  return (PhysxPruningStructure)_desc.staticStructure;
115 }
116 
117 /**
118  * Returns the subdivision level for acceleration structures used for scene
119  * queries.
120  */
121 PhysxEnums::PhysxPruningStructure PhysxSceneDesc::
123 
124  return (PhysxPruningStructure)_desc.dynamicStructure;
125 }
126 
127 /**
128  * Defines the subdivision level for acceleration structures used for scene
129  * queries. This is only used when maxBounds are defined!
130  */
131 void PhysxSceneDesc::
132 set_subdivision_level(unsigned int value) {
133 
134  _desc.subdivisionLevel = (NxU32)value;
135 }
136 
137 /**
138  * Defines the number of broadphase cells along the grid x-axis. Must be
139  * power of two. Max is 8 at the moment. The broadphase type must be set to
140  * BPT_sap_multi for this parameter to have an effect.
141  */
142 void PhysxSceneDesc::
143 set_num_grid_cells_x(unsigned int value) {
144 
145  _desc.nbGridCellsX = (NxU32)value;
146 }
147 
148 /**
149  * Defines the number of broadphase cells along the grid y-axis. Must be
150  * power of two. Max is 8 at the moment. The broadphase type must be set to
151  * BPT_sap_multi for this parameter to have an effect.
152  */
153 void PhysxSceneDesc::
154 set_num_grid_cells_y(unsigned int value) {
155 
156  _desc.nbGridCellsY = (NxU32)value;
157 }
158 
159 /**
160  * Returns the subdivision level for acceleration structures used for scene
161  * queries.
162  */
163 unsigned int PhysxSceneDesc::
165 
166  return _desc.subdivisionLevel;
167 }
168 
169 /**
170  * Returns the number of broadphase cells along the grid x-axis.
171  */
172 unsigned int PhysxSceneDesc::
174 
175  return _desc.nbGridCellsX;
176 }
177 
178 /**
179  * Returns the number of broadphase cells along the grid y-axis.
180  */
181 unsigned int PhysxSceneDesc::
183 
184  return _desc.nbGridCellsY;
185 }
186 
187 /**
188  * Defines which type of broadphase to use.
189  *
190  * (1) BPT_sap_single: A sweep-and-prune (SAP) algorithm to find pairs of
191  * potentially colliding shapes.
192  *
193  * (2) BPT_sap_multi: A multi sweep-and-prune algorithm to find pairs of
194  * potentially colliding shapes. Uses a configurable 2D grid to divide the
195  * scene space into cells. The potentially overlapping shape pairs are
196  * detected in each cell and the information is merged together. This
197  * approach is usually faster than BPT_sap_single in scenarios with many
198  * shapes and a high creation/deletion rate of shapes. However, the amount of
199  * memory required is considerably higher depending on the number of grid
200  * cells used. The following extra parameters need to be defined: -
201  * PhysxSceneDesc.set_max_bounds - PhysxSceneDesc.set_num_grid_cells_x -
202  * PhysxSceneDesc.set_num_grid_cells_y (the scene up direction is set via
203  * config options)
204  */
205 void PhysxSceneDesc::
206 set_bp_type(PhysxBroadPhaseType value) {
207 
208  _desc.bpType = (NxBroadPhaseType)value;
209 }
210 
211 /**
212  * Returns the type of broadphase to use.
213  */
214 PhysxEnums::PhysxBroadPhaseType PhysxSceneDesc::
215 get_bp_type() const {
216 
217  return (PhysxBroadPhaseType)_desc.bpType;
218 }
bool get_flag(PhysxSceneFlag flag) const
Returns the specified scene flag.
unsigned int get_num_grid_cells_x() const
Returns the number of broadphase cells along the grid x-axis.
LVector3f get_gravity() const
Get the gravity vector.
unsigned int get_subdivision_level() const
Returns the subdivision level for acceleration structures used for scene queries.
Represention of a axis aligned bounding box.
Definition: physxBounds3.h:29
unsigned int get_num_grid_cells_y() const
Returns the number of broadphase cells along the grid y-axis.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
void set_bp_type(PhysxBroadPhaseType value)
Defines which type of broadphase to use.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
void set_static_structure(PhysxPruningStructure value)
Defines the structure used to store static objects.
void set_num_grid_cells_x(unsigned int value)
Defines the number of broadphase cells along the grid x-axis.
void set_gravity(const LVector3f &gravity)
Sets the gravity vector.
static NxVec3 vec3_to_nxVec3(const LVector3f &v)
Converts from LVector3f to NxVec3.
Definition: physxManager.I:27
static LVector3f nxVec3_to_vec3(const NxVec3 &v)
Converts from NxVec3 to LVector3f.
Definition: physxManager.I:36
PhysxPruningStructure get_dynamic_structure() const
Returns the subdivision level for acceleration structures used for scene queries.
PhysxBroadPhaseType get_bp_type() const
Returns the type of broadphase to use.
void set_flag(PhysxSceneFlag flag, bool value)
Raise or lower individual scene flags.
void set_dynamic_structure(PhysxPruningStructure value)
Defines the subdivision level for acceleration structures used for scene queries.
void set_num_grid_cells_y(unsigned int value)
Defines the number of broadphase cells along the grid y-axis.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
void set_max_bounds(PhysxBounds3 &bounds)
Set the max scene bounds.
PhysxPruningStructure get_static_structure() const
Returns the structure used to store static objects.
void set_subdivision_level(unsigned int value)
Defines the subdivision level for acceleration structures used for scene queries.