85 m_bvh->~btOptimizedBvh();
103 virtual void processNode(
int nodeSubPart,
int nodeTriangleIndex)
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);
154 m_callback->
processTriangle(m_triangle, nodeSubPart, nodeTriangleIndex);
161 m_bvh->reportRayOverlappingNodex(&myNodeCallback, raySource, rayTarget);
177 virtual void processNode(
int nodeSubPart,
int nodeTriangleIndex)
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);
228 m_callback->
processTriangle(m_triangle, nodeSubPart, nodeTriangleIndex);
235 m_bvh->reportBoxCastOverlappingNodex(&myNodeCallback, raySource, rayTarget, aabbMin, aabbMax);
257 m_callback(callback),
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);
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);
344 m_bvh->~btOptimizedBvh();
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";
446 int len =
m_bvh->calculateSerializeBufferSizeNew();
448 const char* structType =
m_bvh->serialize(chunk->
m_oldPtr, serializer);
#define btAlignedFree(ptr)
#define btAlignedAlloc(size, alignment)
@ TRIANGLE_MESH_SHAPE_PROXYTYPE
PHY_ScalarType
PHY_ScalarType enumerates possible scalar types.
#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
virtual void serializeSingleBvh(btSerializer *serializer) const
void performRaycast(btTriangleCallback *callback, const btVector3 &raySource, const btVector3 &rayTarget)
void refitTree(const btVector3 &aabbMin, const btVector3 &aabbMax)
virtual ~btBvhTriangleMeshShape()
void setOptimizedBvh(btOptimizedBvh *bvh, const btVector3 &localScaling=btVector3(1, 1, 1))
virtual void processAllTriangles(btTriangleCallback *callback, const btVector3 &aabbMin, const btVector3 &aabbMax) const
void partialRefitTree(const btVector3 &aabbMin, const btVector3 &aabbMax)
for a fast incremental refit of parts of the tree. Note: the entire AABB of the tree will become more...
void performConvexcast(btTriangleCallback *callback, const btVector3 &boxSource, const btVector3 &boxTarget, const btVector3 &boxMin, const btVector3 &boxMax)
btTriangleInfoMap * m_triangleInfoMap
bool m_useQuantizedAabbCompression
virtual void setLocalScaling(const btVector3 &scaling)
virtual void serializeSingleTriangleInfoMap(btSerializer *serializer) const
virtual const char * serialize(void *dataBuffer, btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
btBvhTriangleMeshShape(btStridingMeshInterface *meshInterface, bool useQuantizedAabbCompression, bool buildBvh=true)
Bvh Concave triangle mesh is a static-triangle mesh shape with Bounding Volume Hierarchy optimization...
virtual const char * serialize(void *dataBuffer, btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
btScalar m_collisionMargin
The btOptimizedBvh extends the btQuantizedBvh to create AABB tree for triangle meshes,...
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
The btStridingMeshInterface is the interface class for high performance generic access to triangle me...
The btTriangleCallback provides a callback for each overlapping triangle when calling processAllTrian...
virtual void processTriangle(btVector3 *triangle, int partId, int triangleIndex)=0
btTriangleMeshShape(btStridingMeshInterface *meshInterface)
btTriangleMeshShape constructor has been disabled/protected, so that users will not mistakenly use th...
virtual void processAllTriangles(btTriangleCallback *callback, const btVector3 &aabbMin, const btVector3 &aabbMax) const
virtual void setLocalScaling(const btVector3 &scaling)
btStridingMeshInterface * m_meshInterface
virtual const btVector3 & getLocalScaling() const
btVector3 can be used to represent 3D points and vectors.
const btScalar & getZ() const
Return the z value.
const btScalar & getY() const
Return the y value.
const btScalar & getX() const
Return the x value.
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