Logo Search packages:      
Sourcecode: blender version File versions  Download package

void btStridingMeshInterface::InternalProcessAllTriangles ( btInternalTriangleIndexCallback *  callback,
const btVector3 &  aabbMin,
const btVector3 &  aabbMax 
) const [virtual]

if the number of parts is big, the performance might drop due to the innerloop switch on indextype

Definition at line 24 of file btStridingMeshInterface.cpp.

References getNumSubParts().

Referenced by btConvexTriangleMeshShape::batchedUnitVectorGetSupportingVertexWithoutMargin(), calculateAabbBruteForce(), btConvexTriangleMeshShape::calculatePrincipalAxisTransform(), and btDiscreteDynamicsWorld::debugDrawObject().

{
      (void)aabbMin;
      (void)aabbMax;
      int numtotalphysicsverts = 0;
      int part,graphicssubparts = getNumSubParts();
      const unsigned char * vertexbase;
      const unsigned char * indexbase;
      int indexstride;
      PHY_ScalarType type;
      PHY_ScalarType gfxindextype;
      int stride,numverts,numtriangles;
      int gfxindex;
      btVector3 triangle[3];
      btScalar* graphicsbase;

      btVector3 meshScaling = getScaling();

      ///if the number of parts is big, the performance might drop due to the innerloop switch on indextype
      for (part=0;part<graphicssubparts ;part++)
      {
            getLockedReadOnlyVertexIndexBase(&vertexbase,numverts,type,stride,&indexbase,indexstride,numtriangles,gfxindextype,part);
            numtotalphysicsverts+=numtriangles*3; //upper bound

            switch (gfxindextype)
            {
            case PHY_INTEGER:
                  {
                        for (gfxindex=0;gfxindex<numtriangles;gfxindex++)
                        {
                              unsigned int* tri_indices= (unsigned int*)(indexbase+gfxindex*indexstride);
                              graphicsbase = (btScalar*)(vertexbase+tri_indices[0]*stride);
                              triangle[0].setValue(graphicsbase[0]*meshScaling.getX(),graphicsbase[1]*meshScaling.getY(),graphicsbase[2]*meshScaling.getZ());
                              graphicsbase = (btScalar*)(vertexbase+tri_indices[1]*stride);
                              triangle[1].setValue(graphicsbase[0]*meshScaling.getX(),graphicsbase[1]*meshScaling.getY(),     graphicsbase[2]*meshScaling.getZ());
                              graphicsbase = (btScalar*)(vertexbase+tri_indices[2]*stride);
                              triangle[2].setValue(graphicsbase[0]*meshScaling.getX(),graphicsbase[1]*meshScaling.getY(),     graphicsbase[2]*meshScaling.getZ());
                              callback->internalProcessTriangleIndex(triangle,part,gfxindex);
                        }
                        break;
                  }
            case PHY_SHORT:
                  {
                        for (gfxindex=0;gfxindex<numtriangles;gfxindex++)
                        {
                              unsigned short int* tri_indices= (unsigned short int*)(indexbase+gfxindex*indexstride);
                              graphicsbase = (btScalar*)(vertexbase+tri_indices[0]*stride);
                              triangle[0].setValue(graphicsbase[0]*meshScaling.getX(),graphicsbase[1]*meshScaling.getY(),graphicsbase[2]*meshScaling.getZ());
                              graphicsbase = (btScalar*)(vertexbase+tri_indices[1]*stride);
                              triangle[1].setValue(graphicsbase[0]*meshScaling.getX(),graphicsbase[1]*meshScaling.getY(),     graphicsbase[2]*meshScaling.getZ());
                              graphicsbase = (btScalar*)(vertexbase+tri_indices[2]*stride);
                              triangle[2].setValue(graphicsbase[0]*meshScaling.getX(),graphicsbase[1]*meshScaling.getY(),     graphicsbase[2]*meshScaling.getZ());
                              callback->internalProcessTriangleIndex(triangle,part,gfxindex);
                        }
                        break;
                  }
            default:
                  btAssert((gfxindextype == PHY_INTEGER) || (gfxindextype == PHY_SHORT));
            }

            unLockReadOnlyVertexBase(part);
      }
}


Generated by  Doxygen 1.6.0   Back to index