GameScene::~GameScene() { for(auto pObj : m_Objects) delete pObj; std::set<PostProcessingEffect*> uniquePostproEffects; for(auto effectPair : m_PostProEffects) uniquePostproEffects.insert(effectPair.second); for(auto pEffect : uniquePostproEffects) delete pEffect; NxGetPhysicsSDK()->releaseScene(*m_pPhysicsScene); }
void VisualDebugger::setVisualisationMode(NxOgre::Enums::VisualDebugger dm) { NxPhysicsSDK* sdk = NxGetPhysicsSDK(); if (dm == NxOgre::Enums::VisualDebugger_ShowNone) { sdk->setParameter(NX_VISUALIZATION_SCALE, 0); return; } sdk->setParameter(NX_VISUALIZATION_SCALE, 1.0f); sdk->setParameter(NX_VISUALIZE_WORLD_AXES, true); sdk->setParameter(NX_VISUALIZE_BODY_AXES, true); sdk->setParameter(NX_VISUALIZE_BODY_MASS_AXES, true); sdk->setParameter(NX_VISUALIZE_BODY_LIN_VELOCITY, true); sdk->setParameter(NX_VISUALIZE_BODY_ANG_VELOCITY, true); sdk->setParameter(NX_VISUALIZE_BODY_JOINT_GROUPS, true); sdk->setParameter(NX_VISUALIZE_JOINT_LOCAL_AXES, true); sdk->setParameter(NX_VISUALIZE_JOINT_WORLD_AXES, true); sdk->setParameter(NX_VISUALIZE_JOINT_LIMITS, true); sdk->setParameter(NX_VISUALIZE_CONTACT_POINT, true); sdk->setParameter(NX_VISUALIZE_CONTACT_NORMAL, true); sdk->setParameter(NX_VISUALIZE_CONTACT_ERROR, true); sdk->setParameter(NX_VISUALIZE_CONTACT_FORCE, true); sdk->setParameter(NX_VISUALIZE_ACTOR_AXES, true); sdk->setParameter(NX_VISUALIZE_COLLISION_AABBS, true); sdk->setParameter(NX_VISUALIZE_COLLISION_SHAPES, true); sdk->setParameter(NX_VISUALIZE_COLLISION_AXES, true); sdk->setParameter(NX_VISUALIZE_COLLISION_COMPOUNDS, true); sdk->setParameter(NX_VISUALIZE_COLLISION_VNORMALS, true); sdk->setParameter(NX_VISUALIZE_COLLISION_FNORMALS, true); sdk->setParameter(NX_VISUALIZE_COLLISION_EDGES, true); sdk->setParameter(NX_VISUALIZE_COLLISION_SPHERES, true); #if (NX_SDK_VERSION_NUMBER < 280) sdk->setParameter(NX_VISUALIZE_COLLISION_SAP, true); #endif sdk->setParameter(NX_VISUALIZE_COLLISION_STATIC, true); sdk->setParameter(NX_VISUALIZE_COLLISION_DYNAMIC, true); sdk->setParameter(NX_VISUALIZE_COLLISION_FREE, true); sdk->setParameter(NX_VISUALIZE_COLLISION_CCD, true); sdk->setParameter(NX_VISUALIZE_COLLISION_SKELETONS, true); sdk->setParameter(NX_VISUALIZE_FLUID_EMITTERS, true); sdk->setParameter(NX_VISUALIZE_FLUID_POSITION, true); sdk->setParameter(NX_VISUALIZE_FLUID_VELOCITY, true); sdk->setParameter(NX_VISUALIZE_FLUID_KERNEL_RADIUS, true); sdk->setParameter(NX_VISUALIZE_FLUID_BOUNDS, true); sdk->setParameter(NX_VISUALIZE_FLUID_PACKETS, true); sdk->setParameter(NX_VISUALIZE_FLUID_MOTION_LIMIT, true); sdk->setParameter(NX_VISUALIZE_FLUID_DYN_COLLISION, true); sdk->setParameter(NX_VISUALIZE_FLUID_STC_COLLISION, true); sdk->setParameter(NX_VISUALIZE_FLUID_MESH_PACKETS, true); sdk->setParameter(NX_VISUALIZE_FLUID_DRAINS, true); sdk->setParameter(NX_VISUALIZE_FLUID_PACKET_DATA, true); sdk->setParameter(NX_VISUALIZE_CLOTH_MESH, true); sdk->setParameter(NX_VISUALIZE_CLOTH_COLLISIONS, true); sdk->setParameter(NX_VISUALIZE_CLOTH_SELFCOLLISIONS, true); sdk->setParameter(NX_VISUALIZE_CLOTH_WORKPACKETS, true); sdk->setParameter(NX_VISUALIZE_CLOTH_SLEEP, true); sdk->setParameter(NX_VISUALIZE_CLOTH_TEARABLE_VERTICES, true); sdk->setParameter(NX_VISUALIZE_CLOTH_TEARING, true); sdk->setParameter(NX_VISUALIZE_CLOTH_ATTACHMENT, true); sdk->setParameter(NX_VISUALIZE_SOFTBODY_MESH, true); sdk->setParameter(NX_VISUALIZE_SOFTBODY_COLLISIONS, true); sdk->setParameter(NX_VISUALIZE_SOFTBODY_WORKPACKETS, true); sdk->setParameter(NX_VISUALIZE_SOFTBODY_SLEEP, true); sdk->setParameter(NX_VISUALIZE_SOFTBODY_TEARABLE_VERTICES, true); sdk->setParameter(NX_VISUALIZE_SOFTBODY_TEARING, true); sdk->setParameter(NX_VISUALIZE_SOFTBODY_ATTACHMENT, true); }
static void outputHeightFieldToStream( NxHeightFieldShape* hfShape, NxShape* shape, IntArray& geom_stream, TriArray& world_triangles, TriArray* world_edge_normals, IntArray& edge_flags, const NxExtendedVec3& origin, const NxBounds3& tmpBounds ) { // Do AABB-mesh query NxU32 Nb; const NxU32* TF; // Collide AABB against current mesh if(!hfShape->overlapAABBTriangles(tmpBounds, NX_QUERY_WORLD_SPACE, Nb, TF)) return; NxVec3 tmp = shape->getGlobalPosition(); // LOSS OF ACCURACY NxVec3 MeshOffset; MeshOffset.x = float(tmp.x - origin.x); MeshOffset.y = float(tmp.y - origin.y); MeshOffset.z = float(tmp.z - origin.z); TouchedMesh* touchedMesh = (TouchedMesh*)reserve(geom_stream, sizeof(TouchedMesh)/sizeof(NxU32)); touchedMesh->mType = TOUCHED_MESH; // ptchernev: seems to work touchedMesh->mUserData = shape; touchedMesh->mOffset = origin; touchedMesh->mNbTris = Nb; touchedMesh->mIndexWorldTriangles = world_triangles.size(); touchedMesh->mIndexWorldEdgeNormals = world_edge_normals ? world_edge_normals->size() : 0; touchedMesh->mIndexEdgeFlags = edge_flags.size(); // Reserve memory for incoming triangles NxTriangle* TouchedTriangles = reserve(world_triangles, Nb); NxTriangle* EdgeTriangles = world_edge_normals ? reserve(*world_edge_normals, Nb) : NULL; // Loop through touched triangles while(Nb--) { NxU32 Index = *TF++; // Compute triangle in world space, add to array NxTriangle& CurrentTriangle = *TouchedTriangles++; NxTriangle edgeTri; NxU32 edgeFlags; hfShape->getTriangle(CurrentTriangle, &edgeTri, &edgeFlags, Index, false); CurrentTriangle.verts[0] += MeshOffset; CurrentTriangle.verts[1] += MeshOffset; CurrentTriangle.verts[2] += MeshOffset; if(EdgeTriangles) { *EdgeTriangles++ = edgeTri; } edge_flags.pushBack(edgeFlags); #ifdef VISUALIZE_CCT_TRIS // Visualize debug triangles { // PhysicsSDK::getInstance().getDebugRenderable()->addTriangle((const NxVec3&)CurrentTriangle.mVerts[0], (const NxVec3&)CurrentTriangle.mVerts[1], (const NxVec3&)CurrentTriangle.mVerts[2], NX_ARGB_GREEN); NxGetPhysicsSDK()->getDebugRenderable()->addTriangle((const NxVec3&)CurrentTriangle.mVerts[0], (const NxVec3&)CurrentTriangle.mVerts[1], (const NxVec3&)CurrentTriangle.mVerts[2], NX_ARGB_GREEN); // PhysicsSDK::getInstance().getDebugRenderable()->addLine((const NxVec3&)CurrentTriangle.mVerts[0], (const NxVec3&)CurrentTriangle.mVerts[1], NX_ARGB_GREEN); // PhysicsSDK::getInstance().getDebugRenderable()->addLine((const NxVec3&)CurrentTriangle.mVerts[1], (const NxVec3&)CurrentTriangle.mVerts[2], NX_ARGB_GREEN); // PhysicsSDK::getInstance().getDebugRenderable()->addLine((const NxVec3&)CurrentTriangle.mVerts[2], (const NxVec3&)CurrentTriangle.mVerts[0], NX_ARGB_GREEN); } #endif } }