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
//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); }