Public feed
#529736
// 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(); // ... }