24btBvhTriangleMeshShape::btBvhTriangleMeshShape(
btStridingMeshInterface* meshInterface,
bool useQuantizedAabbCompression,
bool buildBvh)
43btBvhTriangleMeshShape::btBvhTriangleMeshShape(
btStridingMeshInterface* meshInterface,
bool useQuantizedAabbCompression,
const btVector3& bvhAabbMin,
const btVector3& bvhAabbMax,
bool buildBvh)
66void btBvhTriangleMeshShape::partialRefitTree(
const btVector3& aabbMin,
const btVector3& aabbMax)
74void btBvhTriangleMeshShape::refitTree(
const btVector3& aabbMin,
const btVector3& aabbMax)
81btBvhTriangleMeshShape::~btBvhTriangleMeshShape()
85 m_bvh->~btOptimizedBvh();
103 virtual void processNode(
int nodeSubPart,
int nodeTriangleIndex)
105 btVector3 m_triangle[3];
106 const unsigned char* vertexbase;
110 const unsigned char* indexbase;
126 unsigned int* gfxbase = (
unsigned int*)(indexbase + nodeTriangleIndex * indexstride);
129 for (
int j = 2; j >= 0; j--)
132 switch (indicestype) {
133 case PHY_INTEGER: graphicsindex = gfxbase[j];
break;
134 case PHY_SHORT: graphicsindex = ((
unsigned short*)gfxbase)[j];
break;
135 case PHY_UCHAR: graphicsindex = ((
unsigned char*)gfxbase)[j];
break;
141 float* graphicsbase = (
float*)(vertexbase + graphicsindex * stride);
143 m_triangle[j] =
btVector3(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
147 double* graphicsbase = (
double*)(vertexbase + graphicsindex * stride);
149 m_triangle[j] =
btVector3(
btScalar(graphicsbase[0]) * meshScaling.getX(),
btScalar(graphicsbase[1]) * meshScaling.getY(),
btScalar(graphicsbase[2]) * meshScaling.getZ());
154 m_callback->
processTriangle(m_triangle, nodeSubPart, nodeTriangleIndex);
161 m_bvh->reportRayOverlappingNodex(&myNodeCallback, raySource, rayTarget);
164void btBvhTriangleMeshShape::performConvexcast(
btTriangleCallback*
callback,
const btVector3& raySource,
const btVector3& rayTarget,
const btVector3& aabbMin,
const btVector3& aabbMax)
177 virtual void processNode(
int nodeSubPart,
int nodeTriangleIndex)
179 btVector3 m_triangle[3];
180 const unsigned char* vertexbase;
184 const unsigned char* indexbase;
200 unsigned int* gfxbase = (
unsigned int*)(indexbase + nodeTriangleIndex * indexstride);
203 for (
int j = 2; j >= 0; j--)
206 switch (indicestype) {
207 case PHY_INTEGER: graphicsindex = gfxbase[j];
break;
208 case PHY_SHORT: graphicsindex = ((
unsigned short*)gfxbase)[j];
break;
209 case PHY_UCHAR: graphicsindex = ((
unsigned char*)gfxbase)[j];
break;
215 float* graphicsbase = (
float*)(vertexbase + graphicsindex * stride);
217 m_triangle[j] =
btVector3(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
221 double* graphicsbase = (
double*)(vertexbase + graphicsindex * stride);
223 m_triangle[j] =
btVector3(
btScalar(graphicsbase[0]) * meshScaling.getX(),
btScalar(graphicsbase[1]) * meshScaling.getY(),
btScalar(graphicsbase[2]) * meshScaling.getZ());
228 m_callback->
processTriangle(m_triangle, nodeSubPart, nodeTriangleIndex);
235 m_bvh->reportBoxCastOverlappingNodex(&myNodeCallback, raySource, rayTarget, aabbMin, aabbMax);
239void btBvhTriangleMeshShape::processAllTriangles(
btTriangleCallback*
callback,
const btVector3& aabbMin,
const btVector3& aabbMax)
const
243 btTriangleMeshShape::processAllTriangles(
callback, aabbMin, aabbMax);
252 btVector3 m_triangle[3];
262 virtual void processNode(
int nodeSubPart,
int nodeTriangleIndex)
265 const unsigned char* vertexbase;
269 const unsigned char* indexbase;
285 unsigned int* gfxbase = (
unsigned int*)(indexbase + nodeTriangleIndex * indexstride);
289 for (
int j = 2; j >= 0; j--)
291 int graphicsindex = indicestype ==
PHY_SHORT ? ((
unsigned short*)gfxbase)[j] : indicestype ==
PHY_INTEGER ? gfxbase[j] : ((
unsigned char*)gfxbase)[j];
293#ifdef DEBUG_TRIANGLE_MESH
294 printf(
"%d ,", graphicsindex);
298 float* graphicsbase = (
float*)(vertexbase + graphicsindex * stride);
301 graphicsbase[0] * meshScaling.getX(),
302 graphicsbase[1] * meshScaling.getY(),
303 graphicsbase[2] * meshScaling.getZ());
307 double* graphicsbase = (
double*)(vertexbase + graphicsindex * stride);
310 btScalar(graphicsbase[0]) * meshScaling.getX(),
311 btScalar(graphicsbase[1]) * meshScaling.getY(),
312 btScalar(graphicsbase[2]) * meshScaling.getZ());
314#ifdef DEBUG_TRIANGLE_MESH
315 printf(
"triangle vertices:%f,%f,%f\n", triangle[j].
x(), triangle[j].
y(), triangle[j].
z());
319 m_callback->
processTriangle(m_triangle, nodeSubPart, nodeTriangleIndex);
326 m_bvh->reportAabbOverlappingNodex(&myNodeCallback, aabbMin, aabbMax);
331void btBvhTriangleMeshShape::setLocalScaling(
const btVector3& scaling)
335 btTriangleMeshShape::setLocalScaling(scaling);
340void btBvhTriangleMeshShape::buildOptimizedBvh()
344 m_bvh->~btOptimizedBvh();
355void btBvhTriangleMeshShape::setOptimizedBvh(
btOptimizedBvh* bvh,
const btVector3& scaling)
365 btTriangleMeshShape::setLocalScaling(scaling);
370const char* btBvhTriangleMeshShape::serialize(
void* dataBuffer,
btSerializer* serializer)
const
385#ifdef BT_USE_DOUBLE_PRECISION
395#ifdef BT_USE_DOUBLE_PRECISION
403 int sz = m_bvh->calculateSerializeBufferSizeNew();
405 const char* structType = m_bvh->serialize(chunk->
m_oldPtr, serializer);
437 memset(trimeshData->
m_pad3, 0,
sizeof(trimeshData->
m_pad3));
439 return "btTriangleMeshShapeData";
442void btBvhTriangleMeshShape::serializeSingleBvh(
btSerializer* serializer)
const
446 int len = m_bvh->calculateSerializeBufferSizeNew();
448 const char* structType = m_bvh->serialize(chunk->
m_oldPtr, serializer);
453void btBvhTriangleMeshShape::serializeSingleTriangleInfoMap(
btSerializer* serializer)
const
#define btAlignedFree(ptr)
#define btAlignedAlloc(size, alignment)
@ TRIANGLE_MESH_SHAPE_PROXYTYPE
btTriangleInfoMap * m_triangleInfoMap
bool m_useQuantizedAabbCompression
virtual const btVector3 & getLocalScaling() const =0
btScalar m_collisionMargin
SIMD_FORCE_INLINE const btScalar & z() const
Return the z value.
#define btQuantizedBvhData
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
@ BT_SERIALIZE_NO_TRIANGLEINFOMAP
#define BT_TRIANLGE_INFO_MAP
#define BT_QUANTIZED_BVH_CODE
btStridingMeshInterface * m_meshInterface
btTriangleMeshShape(btStridingMeshInterface *meshInterface)
SIMD_FORCE_INLINE btScalar length2() const
Return the length of the vector squared.
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
virtual void processNode(int subPart, int triangleIndex)=0
virtual btChunk * allocate(size_t size, int numElements)=0
virtual void * getUniquePointer(void *oldPtr)=0
virtual int getSerializationFlags() const =0
virtual void finalizeChunk(btChunk *chunk, const char *structType, int chunkCode, void *oldPtr)=0
virtual void * findPointer(void *oldPtr)=0
virtual void processTriangle(btVector3 *triangle, int partId, int triangleIndex)=0
DEGForeachIDComponentCallback callback
draw_view in_light_buf[] float
virtual const char * serialize(void *dataBuffer, btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
virtual int calculateSerializeBufferSize() const
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
btStridingMeshInterfaceData m_meshInterface
btQuantizedBvhDoubleData * m_quantizedDoubleBvh
btQuantizedBvhFloatData * m_quantizedFloatBvh
btCollisionShapeData m_collisionShapeData
btTriangleInfoMapData * m_triangleInfoMap