Example #1
0
//==============================================================================
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
}