Bullet Collision Detection & Physics Library: btBvhTriangleMeshShape.h Source File

Bullet Collision Detection & Physics Library

- Main Page
- Namespaces
- Classes
- Files

- File List
- File Members

btBvhTriangleMeshShape.h
Go to the documentation of this file.
1 /*
2 Bullet Continuous Collision Detection and Physics Library
3 Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
4
5 This software is provided 'as-is', without any express or implied warranty.
6 In no event will the authors be held liable for any damages arising from the use of this software.
7 Permission is granted to anyone to use this software for any purpose,
8 including commercial applications, and to alter it and redistribute it freely,
9 subject to the following restrictions:
10
11 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
12 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
13 3. This notice may not be removed or altered from any source distribution.
14 */
15
16 #ifndef BT_BVH_TRIANGLE_MESH_SHAPE_H
17 #define BT_BVH_TRIANGLE_MESH_SHAPE_H
18
19 #include "btTriangleMeshShape.h"
20 #include "btOptimizedBvh.h"
21 #include "LinearMath/btAlignedAllocator.h"
22 #include "btTriangleInfoMap.h"
23
34 ATTRIBUTE_ALIGNED16(class) btBvhTriangleMeshShape : public btTriangleMeshShape
35 {
36
37 btOptimizedBvh* m_bvh;
38 btTriangleInfoMap* m_triangleInfoMap;
39
40 bool m_useQuantizedAabbCompression;
41 bool m_ownsBvh;
42 #ifdef __clang__
43 bool m_pad[11] __attribute__((unused));
44 #else
45 bool m_pad[11];
46 #endif
47
48 public:
49
50 BT_DECLARE_ALIGNED_ALLOCATOR();
51
52
53 btBvhTriangleMeshShape(btStridingMeshInterface* meshInterface, bool useQuantizedAabbCompression, bool buildBvh = true);
54
56 btBvhTriangleMeshShape(btStridingMeshInterface* meshInterface, bool useQuantizedAabbCompression,const btVector3& bvhAabbMin,const btVector3& bvhAabbMax, bool buildBvh = true);
57
58 virtual ~btBvhTriangleMeshShape();
59
60 bool getOwnsBvh () const
61 {
62 return m_ownsBvh;
63 }
64
65
66
67 void performRaycast (btTriangleCallback* callback, const btVector3& raySource, const btVector3& rayTarget);
68 void performConvexcast (btTriangleCallback* callback, const btVector3& boxSource, const btVector3& boxTarget, const btVector3& boxMin, const btVector3& boxMax);
69
70 virtual void processAllTriangles(btTriangleCallback* callback,const btVector3& aabbMin,const btVector3& aabbMax) const;
71
72 void refitTree(const btVector3& aabbMin,const btVector3& aabbMax);
73
75 void partialRefitTree(const btVector3& aabbMin,const btVector3& aabbMax);
76
77 //debugging
78 virtual const char* getName()const {return "BVHTRIANGLEMESH";}
79
80
81 virtual void setLocalScaling(const btVector3& scaling);
82
83 btOptimizedBvh* getOptimizedBvh()
84 {
85 return m_bvh;
86 }
87
88 void setOptimizedBvh(btOptimizedBvh* bvh, const btVector3& localScaling=btVector3(1,1,1));
89
90 void buildOptimizedBvh();
91
92 bool usesQuantizedAabbCompression() const
93 {
94 return m_useQuantizedAabbCompression;
95 }
96
97 void setTriangleInfoMap(btTriangleInfoMap* triangleInfoMap)
98 {
99 m_triangleInfoMap = triangleInfoMap;
100 }
101
102 const btTriangleInfoMap* getTriangleInfoMap() const
103 {
104 return m_triangleInfoMap;
105 }
106
107 btTriangleInfoMap* getTriangleInfoMap()
108 {
109 return m_triangleInfoMap;
110 }
111
112 virtual int calculateSerializeBufferSize() const;
113
115 virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
116
117 virtual void serializeSingleBvh(btSerializer* serializer) const;
118
119 virtual void serializeSingleTriangleInfoMap(btSerializer* serializer) const;
120
121 };
122
124 struct btTriangleMeshShapeData
125 {
126 btCollisionShapeData m_collisionShapeData;
127
128 btStridingMeshInterfaceData m_meshInterface;
129
130 btQuantizedBvhFloatData *m_quantizedFloatBvh;
131 btQuantizedBvhDoubleData *m_quantizedDoubleBvh;
132
133 btTriangleInfoMapData *m_triangleInfoMap;
134
135 float m_collisionMargin;
136
137 char m_pad3[4];
138
139 };
140
141
142 SIMD_FORCE_INLINE int btBvhTriangleMeshShape::calculateSerializeBufferSize() const
143 {
144 return sizeof(btTriangleMeshShapeData);
145 }
146
147
148
149 #endif //BT_BVH_TRIANGLE_MESH_SHAPE_H
btBvhTriangleMeshShape::usesQuantizedAabbCompression
bool usesQuantizedAabbCompression() const
Definition: btBvhTriangleMeshShape.h:92
btBvhTriangleMeshShape::m_ownsBvh
bool m_ownsBvh
Definition: btBvhTriangleMeshShape.h:41
btTriangleMeshShapeData::m_pad3
char m_pad3[4]
Definition: btBvhTriangleMeshShape.h:137
btBvhTriangleMeshShape::getTriangleInfoMap
const btTriangleInfoMap * getTriangleInfoMap() const
Definition: btBvhTriangleMeshShape.h:102
btTriangleMeshShapeData::m_collisionShapeData
btCollisionShapeData m_collisionShapeData
Definition: btBvhTriangleMeshShape.h:126
btQuantizedBvhFloatData
Definition: btQuantizedBvh.h:539
btBvhTriangleMeshShape::m_bvh
btOptimizedBvh * m_bvh
Definition: btBvhTriangleMeshShape.h:37
SIMD_FORCE_INLINE
#define SIMD_FORCE_INLINE
Definition: btScalar.h:63
btTriangleMeshShapeData::m_meshInterface
btStridingMeshInterfaceData m_meshInterface
Definition: btBvhTriangleMeshShape.h:128
btAlignedAllocator.h
btOptimizedBvh.h
btTriangleMeshShapeData::m_triangleInfoMap
btTriangleInfoMapData * m_triangleInfoMap
Definition: btBvhTriangleMeshShape.h:133
btTriangleInfoMap.h
btSerializer
Definition: btSerializer.h:68
btTriangleMeshShape
The btTriangleMeshShape is an internal concave triangle mesh interface. Don&#39;t use this class directly...
Definition: btTriangleMeshShape.h:24
btBvhTriangleMeshShape
The btBvhTriangleMeshShape is a static-triangle mesh shape, it can only be used for fixed/non-moving ...
Definition: btBvhTriangleMeshShape.h:34
btStridingMeshInterfaceData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
Definition: btStridingMeshInterface.h:146
btBvhTriangleMeshShape::m_triangleInfoMap
btTriangleInfoMap * m_triangleInfoMap
Definition: btBvhTriangleMeshShape.h:38
btTriangleCallback
The btTriangleCallback provides a callback for each overlapping triangle when calling processAllTrian...
Definition: btTriangleCallback.h:24
btBvhTriangleMeshShape::calculateSerializeBufferSize
virtual int calculateSerializeBufferSize() const
Definition: btBvhTriangleMeshShape.h:142
btOptimizedBvh
The btOptimizedBvh extends the btQuantizedBvh to create AABB tree for triangle meshes, through the btStridingMeshInterface.
Definition: btOptimizedBvh.h:27
btTriangleMeshShapeData::m_quantizedDoubleBvh
btQuantizedBvhDoubleData * m_quantizedDoubleBvh
Definition: btBvhTriangleMeshShape.h:131
btQuantizedBvhDoubleData
Definition: btQuantizedBvh.h:556
btVector3
btVector3 can be used to represent 3D points and vectors.
Definition: btVector3.h:83
ATTRIBUTE_ALIGNED16
#define ATTRIBUTE_ALIGNED16(a)
Definition: btScalar.h:64
btBvhTriangleMeshShape::m_useQuantizedAabbCompression
bool m_useQuantizedAabbCompression
Definition: btBvhTriangleMeshShape.h:40
btTriangleInfoMapData
Definition: btTriangleInfoMap.h:97
btStridingMeshInterface
The btStridingMeshInterface is the interface class for high performance generic access to triangle me...
Definition: btStridingMeshInterface.h:30
btBvhTriangleMeshShape::getName
virtual const char * getName() const
Definition: btBvhTriangleMeshShape.h:78
btTriangleMeshShapeData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
Definition: btBvhTriangleMeshShape.h:124
BT_DECLARE_ALIGNED_ALLOCATOR
#define BT_DECLARE_ALIGNED_ALLOCATOR()
Definition: btScalar.h:388
btBvhTriangleMeshShape::getOwnsBvh
bool getOwnsBvh() const
Definition: btBvhTriangleMeshShape.h:60
btBvhTriangleMeshShape::setTriangleInfoMap
void setTriangleInfoMap(btTriangleInfoMap *triangleInfoMap)
Definition: btBvhTriangleMeshShape.h:97
btTriangleMeshShape.h
btTriangleMeshShapeData::m_collisionMargin
float m_collisionMargin
Definition: btBvhTriangleMeshShape.h:135
btTriangleInfoMap
The btTriangleInfoMap stores edge angle information for some triangles. You can compute this informat...
Definition: btTriangleInfoMap.h:58
btTriangleMeshShapeData::m_quantizedFloatBvh
btQuantizedBvhFloatData * m_quantizedFloatBvh
Definition: btBvhTriangleMeshShape.h:130
btBvhTriangleMeshShape::getOptimizedBvh
btOptimizedBvh * getOptimizedBvh()
Definition: btBvhTriangleMeshShape.h:83
btCollisionShapeData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
Definition: btCollisionShape.h:155
btBvhTriangleMeshShape::getTriangleInfoMap
btTriangleInfoMap * getTriangleInfoMap()
Definition: btBvhTriangleMeshShape.h:107