NxActor* PhysX::GenerateTriangleMeshFromDXMesh(ID3DXMesh* Mesh, NxVec3 pos, short* indices, float* vertices)
{
//dump indices:
std::ofstream out(L"out.txt");
//Used to copy indices
typedef struct {
int IBNumber[3];
} IndexBufferStruct;
int NumVerticies = Mesh->GetNumVertices();
int NumTriangles = Mesh->GetNumFaces();
DWORD FVFSize = D3DXGetFVFVertexSize(Mesh->GetFVF());
//Create pointer for vertices
NxVec3* verts = new NxVec3[Mesh->GetNumVertices()];
int ii = -1;
for(int i = 0; i < Mesh->GetNumVertices(); i++)
{
++ii;
verts[i].x = vertices[ii]/2;
verts[i].y = vertices[++ii]/2;
verts[i].z = vertices[++ii]/2;
}
//Create pointer for indices
NxU32 *tris = new NxU32[NumTriangles * 3];
IndexBufferStruct *DXMeshIBPtr;
ii = 0;
for(int NumInd = 0; NumInd < NumTriangles * 3; NumInd++)
{
tris[NumInd] = indices[ii];
out<<indices[ii]<<"\n";
NumInd++;
tris[NumInd] = indices[++ii];
out<<indices[ii]<<"\n";
NumInd++;
tris[NumInd] = indices[++ii];
out<<indices[ii]<<"\n";
++ii;
}
NxU16* tri = new NxU16[NumTriangles];
// Build physical model
NxTriangleMeshDesc TriMeshDesc;
TriMeshDesc.numVertices = NumVerticies;
TriMeshDesc.numTriangles = NumTriangles;
TriMeshDesc.pointStrideBytes = sizeof(NxVec3);
TriMeshDesc.triangleStrideBytes = 3*sizeof(NxU16);
TriMeshDesc.points = verts;
TriMeshDesc.triangles = tris;
TriMeshDesc.flags = NX_MF_16_BIT_INDICES;
NxTriangleMeshShapeDesc ShapeDesc;
if(0)
{
// Cooking from file
bool status = NxCookTriangleMesh(TriMeshDesc, UserStream("c:\\tmp.bin", false));
ShapeDesc.meshData = gPhysicsSDK->createTriangleMesh(UserStream("c:\\tmp.bin", true));
}
else
{
// Cooking from memory
MemoryWriteBuffer buf;
bool status = NxCookTriangleMesh(TriMeshDesc, buf); //<-- status always fails
ShapeDesc.meshData = gPhysicsSDK->createTriangleMesh(MemoryReadBuffer(buf.data)); //<-- Null pointer error here
}
NxActorDesc actorDesc;
actorDesc.shapes.pushBack(&ShapeDesc);
actorDesc.globalPose.t = pos;
NxActor* PhysXActor = gScene->createActor(actorDesc);
PhysXActor->userData = (void*)1;
delete[] verts;
delete[] tris;
return PhysXActor;
}
However I keep getting null pointer errors at the point where it's supposed to cook a triangle mesh (NxCookTriangleMesh(trimeshdesc, buf); I don't understand why, I've looked over the SDK and some physx tutorials to no avail.












