diff options
Diffstat (limited to 'extern/bullet/Bullet/CollisionShapes/StridingMeshInterface.cpp')
-rw-r--r-- | extern/bullet/Bullet/CollisionShapes/StridingMeshInterface.cpp | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/extern/bullet/Bullet/CollisionShapes/StridingMeshInterface.cpp b/extern/bullet/Bullet/CollisionShapes/StridingMeshInterface.cpp index 8fd761f06cb..cbbbdcbe99e 100644 --- a/extern/bullet/Bullet/CollisionShapes/StridingMeshInterface.cpp +++ b/extern/bullet/Bullet/CollisionShapes/StridingMeshInterface.cpp @@ -14,3 +14,66 @@ StridingMeshInterface::~StridingMeshInterface() { } + + +void StridingMeshInterface::InternalProcessAllTriangles(InternalTriangleIndexCallback* callback,const SimdVector3& aabbMin,const SimdVector3& aabbMax) const +{ + + SimdVector3 meshScaling = getScaling(); + + int numtotalphysicsverts = 0; + int part,graphicssubparts = getNumSubParts(); + for (part=0;part<graphicssubparts ;part++) + { + const unsigned char * vertexbase; + const unsigned char * indexbase; + int indexstride; + PHY_ScalarType type; + PHY_ScalarType gfxindextype; + int stride,numverts,numtriangles; + getLockedReadOnlyVertexIndexBase(&vertexbase,numverts,type,stride,&indexbase,indexstride,numtriangles,gfxindextype,part); + + numtotalphysicsverts+=numtriangles*3; //upper bound + + + int gfxindex; + SimdVector3 triangle[3]; + + for (gfxindex=0;gfxindex<numtriangles;gfxindex++) + { + + int graphicsindex=0; + +#ifdef DEBUG_TRIANGLE_MESH + printf("triangle indices:\n"); +#endif //DEBUG_TRIANGLE_MESH + ASSERT(gfxindextype == PHY_INTEGER); + int* gfxbase = (int*)(indexbase+gfxindex*indexstride); + + for (int j=2;j>=0;j--) + { + + graphicsindex = gfxbase[j]; +#ifdef DEBUG_TRIANGLE_MESH + printf("%d ,",graphicsindex); +#endif //DEBUG_TRIANGLE_MESH + float* graphicsbase = (float*)(vertexbase+graphicsindex*stride); + + triangle[j] = SimdVector3( + graphicsbase[0]*meshScaling.getX(), + graphicsbase[1]*meshScaling.getY(), + graphicsbase[2]*meshScaling.getZ()); +#ifdef DEBUG_TRIANGLE_MESH + printf("triangle vertices:%f,%f,%f\n",triangle[j].x(),triangle[j].y(),triangle[j].z()); +#endif //DEBUG_TRIANGLE_MESH + } + + + //check aabb in triangle-space, before doing this + callback->InternalProcessTriangleIndex(triangle,part,gfxindex); + + } + + unLockReadOnlyVertexBase(part); + } +}
\ No newline at end of file |