Code: Select all
// get vertex data
LPDIRECT3DVERTEXBUFFER9 pVertices;
Mesh->GetVertexBuffer(&pVertices);
DWORD dwVertexSize = Mesh->GetNumBytesPerVertex();
BYTE *pVertexData = 0;
uint numVertices = Mesh->GetNumVertices();
float *dataVertex = new float[numVertices];
pVertices->Lock( 0, 0, ( void** )&pVertexData, 0 );
for(DWORD i = 0; i < numVertices; i += 3){
dataVertex[i + 0] = (*(Vector3*)(pVertexData + (i + 0)*dwVertexSize)).x;
dataVertex[i + 1] = (*(Vector3*)(pVertexData + (i + 1)*dwVertexSize)).y;
dataVertex[i + 2] = (*(Vector3*)(pVertexData + (i + 2)*dwVertexSize)).z;
}
pVertices->Unlock();
pVertices->Release();
// get index data
LPDIRECT3DINDEXBUFFER9 pIndices;
Mesh->GetIndexBuffer(&pIndices);
BYTE* pIndexData;
pIndices->Lock(0, 0, (void**)&pIndexData, 0);
uint numIndex = Mesh->GetNumFaces() * 3;
int *dataIndex = new int[numIndex];
for(DWORD i = 0; i < numIndex; i++)
dataIndex[i] = pIndexData[i];
pIndices->Unlock();
pIndices->Release();
btTriangleIndexVertexArray *trimesh = new btTriangleIndexVertexArray(Mesh->GetNumFaces(), dataIndex, 3 * sizeof(int), Mesh->GetNumVertices(), dataVertex, 3 * sizeof(float));
Index Data:
Code: Select all
0 0 1
0 2 0
3 0 4
0 5 0
6 0 7
0 8 0
9 0 10
0 11 0
12 0 13
0 14 0
15 0 16
0 17 0
18 0 19
0 20 0
21 0 22
0 23 0
Vertex Data:
Code: Select all
-14.1421 0 -14.1421
14.1421 40 14.1421
-14.1421 40 -14.1421
14.1421 0 14.1421
20 0 -3.8147e-006
-20 40 3.8147e-006
20 40 -8.58307e-006
-20 0 8.58307e-006
-1.90735e-006 0 -20
1.90735e-006 40 20
-6.67572e-006 40 -20
6.67572e-006 0 20
14.1421 0 -14.1421
-14.1421 40 14.1421
14.1421 40 -14.1421
-14.1421 0 14.1421