2012-07-04 3 views
2

PhysX, OpenGL 및 assimp를 사용하고 있습니다. 내가 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); 
} 

에서 '처리되지 않은 예외 ..... 액세스 위반 읽기 위치은 0x00000'을 얻고 :: 수입 나는 .x를 이있다 (24 개)의 정점 (12 개)의 얼굴에 간단한 큐브를 읽고 . 과 루프 2를 사용 점 'mesh-> mFaces [I] .mIndices [J]를'mIndices

I는 함수 CreateActor 불완전 알

으로 algong mNumIndices이 있다는했으나 오류에 있던 ' createTriangleMesh '(마지막 줄) 그래서 나머지는 생략했습니다.

+1

'gPhysicsSDK'는 언제 초기화됩니까? 내 첫 번째 추측은 null 포인터입니다. –

+0

LOL, 네 말이 맞아. 믿을 수가 없어. 실제로 삼각형을 assimp-mesh-> face (for 루프없이)와 동일시하기 전에 요리를하지 못했습니다. 그래서 샘플 코드를 복사했는데 InitNx ('Oh GOD')를 건너 뛰었습니다. –

+0

어쨌든 고맙습니다 ... 건배 :) –

답변

1

gPhysicsSDK는 NULL이므로 전체적인 문제입니다. PhysX를 사용하고 다양한 3D 모델 (.3DS, .X, .obj 등)을로드하려는 사용자는 위의 코드를 편리하게 찾을 수 있습니다 (단, 모든 aimesh를 반복해야합니다.), google assimp.
감사의 타일러