// Physics SDK globals NxPhysicsSDK* gPhysicsSDK = NULL; NxScene* gScene = NULL; // Actor globals NxActor* gameLevel = NULL; NxActor* CreateLevelMesh() { gLevelMesh.convertLevel(); // Build physical model @@NxTriangleMeshDesc levelDesc; @@levelDesc.numVertices = g_Level.m_numOfVerts; @@levelDesc.numTriangles = gLevelMesh.nbTriangles; @@levelDesc.pointStrideBytes = sizeof(tBSPVertex); @@levelDesc.triangleStrideBytes = 3*sizeof(NxU32); @@levelDesc.points = (const NxPoint*)&(g_Level.m_pVerts[0].vPosition); @@levelDesc.triangles = gLevelMesh.triangles; @@levelDesc.flags = 0; NxTriangleMeshShapeDesc levelShapeDesc; NxInitCooking(); if (0) { // Cooking from file bool status = NxCookTriangleMesh(levelDesc, UserStream("c:\\tmp.bin", false)); levelShapeDesc.meshData = gPhysicsSDK->createTriangleMesh(UserStream("c:\\tmp.bin", true)); } else { // Cooking from memory MemoryWriteBuffer buf; bool status = NxCookTriangleMesh(levelDesc, buf); levelShapeDesc.meshData = gPhysicsSDK->createTriangleMesh(MemoryReadBuffer(buf.data)); } NxActorDesc actorDesc; actorDesc.shapes.pushBack(&levelShapeDesc); NxActor* actor = gScene->createActor(actorDesc); actor->userData = (void*)1; return actor; } void InitNx() { // ... // Initialize BSP Level Actor LoadBSP(); gameLevel = CreateLevelMesh(); // ... }