示例#1
0
文件: Fluid.cpp 项目: franaisa/Gloom
	CFluid::CFluid(unsigned int maxParticles, float restitution, float viscosity,
				   float stiffness, float dynamicFriction, float particleDistance) : _runOnGPU(false) {

		// Obtenemos la sdk de physics y comprobamos que ha sido inicializada
		_physxSDK = Physics::CServer::getSingletonPtr()->getPhysxSDK();
		assert(_physxSDK && "No se ha inicializado physX");
		// Obtenemos la escena de physx y comprobamos que ha sido inicializada
		_scene = Physics::CServer::getSingletonPtr()->getActiveScene();
		assert(_scene && "No existe una escena fisica");
		
		// Creamos el fluido con los parametros pasados
		createFluid(maxParticles, restitution, viscosity, stiffness, dynamicFriction, particleDistance);
		createParticleBufferInfo(maxParticles);

		// declare particle descriptor for creating new particles
		PxParticleCreationData particleCreationData;
		
		// Numero de particulas
		particleCreationData.numParticles = maxParticles;

		// La informacion sobre el array de particulas de momento lo hacemos temporal, ya que no lo vamos
		// a necesitar en nigun otro sitio
		particleCreationData.indexBuffer = PxStrideIterator<const PxU32>(_indexBuffer);
		particleCreationData.positionBuffer = PxStrideIterator<const PxVec3>(_positionBuffer);
		particleCreationData.velocityBuffer = PxStrideIterator<const PxVec3>(_velocityBuffer);
		particleCreationData.restOffsetBuffer = PxStrideIterator<const PxF32>(_restOffsetBuffer);
		particleCreationData.flagBuffer = PxStrideIterator<const PxU32>(_flagBuffer);

		// create particles in *PxParticleSystem* ps
		bool success = _fluid->createParticles(particleCreationData);
		_fluid->releaseParticles();
	} // CFluid
示例#2
0
//Startup for the vortex sample, loads the backyard scene and creates a vortex
void SampleVortex::setup(NxScene *scene)
{
	assert(scene);
	m_scene = scene;
	
	createFluid();
	
	//Create a kinematic 
	NxActorDesc actorDesc;
	NxBodyDesc bodyDesc;

	bodyDesc.flags			  |= NX_BF_KINEMATIC;
	bodyDesc.massSpaceInertia = NxVec3(1, 1, 1);
	bodyDesc.mass			  = 1.0f;
	actorDesc.body			  = &bodyDesc;
	m_kinematicActor		  = scene->createActor(actorDesc);
	m_forceFieldActor		  = m_kinematicActor;

	//Create the force field for this sample, see code above
	createVortexForceField(NxVec3(0, 3, 0), m_kinematicActor, scene);
}