2012-07-04 64 views
2

我正在使用PhysX,OpenGL和assimp。我在最后一行createTriangleMesh未处理的异常

void CreateActor(const aiScene *scene) 
{ 
NxTriangleMeshDesc t; 
aiMesh *mesh = scene->mMeshes[0]; 
t.numVertices = mesh->mNumVertices; 
t.points = mesh->mVertices; 
t.pointStrideBytes = sizeof(aiVector3D); 
t.numTriangles = mesh->mNumFaces; 
NxU32 *tr = new NxU32[mesh->mNumFaces*3]; 
NxU32 k=0; 
for(NxU32 i=0;i<mesh->mNumFaces;i++) 
    for(int j=0;j<3;j++) 
     tr[k++]=mesh->mFaces[i].mIndices[j]; 
t.triangles = tr; 
t.triangleStrideBytes = sizeof(NxU32)*3; 
t.flags=0; 
NxTriangleMeshShapeDesc terrainShapeDesc; 

// Cooking from memory 
InitCooking(); 
MemoryWriteBuffer buf; 
bool status = CookTriangleMesh(t, buf); 
MemoryReadBuffer readBuffer(buf.data); 
gPhysicsSDK->createTriangleMesh(readBuffer); 
} 

使用Assimp获得“未处理的异常.....访问冲突阅读位置0x00000” ::进口商我已阅读.X 它有24个顶点,12个面的简单的立方体。 使用2 for循环的点与'mesh-> mFaces [i] .mIndices [j]'是有一个mNumIndices阿尔贡与mIndices

我知道函数CreateActor是不完整的,但错误是' createTriangleMesh'(最后一行),所以我省略了休息。

+1

什么时候gPhysicsSDK初始化?我的第一个猜测会是空指针。 –

+0

哈哈,你是对的。不能相信它。实际上,在我将三角形直接与assimp-mesh-> faces(没有for循环)等同之前,它不能做饭。所以我从样本中复制了一些代码,我认为这跳过了InitNx()'哦上帝' –

+0

谢谢无论如何......干杯:) –

回答

1

gPhysicsSDK是NULL,所以这是整个问题。 对于任何使用PhysX并希望加载各种3D模型(.3DS,.X,.obj等)的用户,您可以方便地找到上面的代码(除非您必须遍历所有aimesh),google assimp。
谢谢泰勒