//============================================================================== OdeMesh::OdeMesh( const OdeCollisionObject* parent, const aiScene* scene, const Eigen::Vector3d& scale) : OdeGeom(parent), mOdeTriMeshDataId(nullptr) { // Fill vertices, normals, and indices in the ODE friendly data structures. fillArrays(scene, scale); /// This will hold the vertex data of the triangle mesh if (!mOdeTriMeshDataId) mOdeTriMeshDataId = dGeomTriMeshDataCreate(); // Build the ODE triangle mesh dGeomTriMeshDataBuildDouble1( mOdeTriMeshDataId, mVertices.data(), 3*sizeof(double), static_cast<int>(mVertices.size()), mIndices.data(), static_cast<int>(mIndices.size()), 3*sizeof(int), mNormals.data()); mGeomId = dCreateTriMesh(0, mOdeTriMeshDataId, nullptr, nullptr, nullptr); }
void dGeomTriMeshDataBuildDouble(dTriMeshDataID g, const void* Vertices, int VertexStride, int VertexCount, const void* Indices, int IndexCount, int TriStride) { dGeomTriMeshDataBuildDouble1(g, Vertices, VertexStride, VertexCount, Indices, IndexCount, TriStride, NULL); }
void dGeomTriMeshDataBuildSimple1(dTriMeshDataID g, const dReal* Vertices, int VertexCount, const dTriIndex* Indices, int IndexCount, const int* Normals){ #ifdef dSINGLE dGeomTriMeshDataBuildSingle1(g, Vertices, 4 * sizeof(dReal), VertexCount, Indices, IndexCount, 3 * sizeof(dTriIndex), Normals); #else dGeomTriMeshDataBuildDouble1(g, Vertices, 4 * sizeof(dReal), VertexCount, Indices, IndexCount, 3 * sizeof(dTriIndex), Normals); #endif }