Beispiel #1
0
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
		}
	}