Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'extern/bullet/Bullet/CollisionShapes/StridingMeshInterface.cpp')
-rw-r--r--extern/bullet/Bullet/CollisionShapes/StridingMeshInterface.cpp63
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