2012-07-04 195 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。
謝謝泰勒