2

私は PhysX、OpenGL、および assimp を使用しています。最終行に「unhandled exception ..... Access violation reading location 0x00000」が表示されます

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::Importer を使用して、単純な立方体を .x で読みました。24 個の頂点と 12 個の面があります。'mesh->mFaces[i].mIndices[j]' で 2 for ループを使用するポイントは、mNumIndices と mNumIndices アルゴリズムがあることです。

関数 CreateActor が不完全であることはわかっていますが、エラーは「createTriangleMesh」(最後の行) にあったため、残りを省略しました。

4

1 に答える 1

1

gPhysicsSDK は NULL だったので、それが全体の問題でした。PhysX を使用していて、さまざまな 3D モデル (.3DS、.X、.obj など) をロードしたい場合は、上記のコードが便利です (ただし、すべての aimesh をループする必要があります)、google assimp.
ありがとうタイラー

于 2012-07-05T07:43:20.013 に答える