This works fine if I copy vertex data into btTriangleMesh, and use that to create a btBvhTriangleMeshShape. However, copying is obviously not desirable.
The approach I am currently trying is:
- Describe vertex layout using btIndexedMesh referencing existing visual data
 - Create btTriangleIndexVertexArray using btIndexedMesh
 - Create btBvhTriangleMeshShape using btTriangleIndexVertexArray
 
Code: Select all
	typedef struct {
		int a;
		int b;
		int c;
	} Face;
	typedef struct {
		glm::vec3 position;
		glm::vec3 normal;
		glm::vec2 textureCoordinate;
	} Vertex;Code: Select all
	const std::vector<Vertex>& 			vertices() const;
	const std::vector<Face>&			faces() const;Code: Select all
	auto triangleIndexVertexArray = btTriangleIndexVertexArray();
	for (auto& element : geometry->elements()) {
		auto verts = element->vertices();
		auto faces = element->faces();
		auto indexedMesh = btIndexedMesh();
		indexedMesh.m_numTriangles = (int)faces.size();
		indexedMesh.m_triangleIndexBase = (const unsigned char *)&faces[0];
		indexedMesh.m_triangleIndexStride = sizeof(Face); // sizeof(Face), sizeof(int)?
		indexedMesh.m_indexType = PHY_INTEGER;
		indexedMesh.m_numVertices = (int)verts.size();
		indexedMesh.m_vertexBase = (const unsigned char *)&verts[0];
		indexedMesh.m_vertexStride = sizeof(Vertex); // sizeof(Vertex), sizeof(glm::vec3)?
		indexedMesh.m_vertexType = PHY_FLOAT;
		triangleIndexVertexArray.addIndexedMesh(indexedMesh);
	}
	auto shape = btBvhTriangleMeshShape(&triangleIndexVertexArray, true);Can anybody shed some light on this? Am I using btIndexedMesh incorrectly? Much thanks.