Sistema de Partículas Un sistema de partículas es un conjunto de pequeños objetos que están en movimiento usando algún algoritmo Modelar fuego, humo, explosiones, lluvia, nieve, estrellas… No es una forma de renderizar, sino de animar los objetos que renderizamos.
Sistema de Partículas La idea es controlar la creación, movimiento, cambio y eliminación de partículas durante el tiempo. Tenemos un numero n máximo de partículas, cada una se crea en un instante de tiempo t, evoluciona a lo largo del tiempo según valores propios o del conjunto de partículas
Lluvia CreaciónPara cada partícula Crear en posición (z, (x, y)) aleatoria Generar velocidad (vz, (vx, vy)) SimulaciónPara cada partícula activa z = z vz Si toca suelo y continua lloviendo z = zmax generar (x, y) (vz, (vx, vy))
Lluvia RenderizaciónPara cada partícula Dibujar linea (x, y, z) a (x+vx, y+vy, z+vz) FinalizaciónCuando no ha de continuar lloviendo yPara cada partícula desactivada es cierto
class CRain : CObject3D {public: CRain(); CRain(int numParticles); ~CRain(); void Create(int numParticles); void Destroy(); int GetNumParticles(); void Simulate(float fIncTime); virtual void Render(); virtual void RenderShadow(){}; bool IsActive(); void Active(bool bActivate=true); void SetDimensions(float fX, float fY, float fZ); void GetDimensions(float&fX, float&fY, float&fZ);protected: float m_fDimx, m_fDimy, m_fDimz; bool m_bActivate; int m_nParticles bool m_bCreated; CParticleRain* m_pParticles; };
Consideraciones El número de partículas no debe ser excesivo para no saturar la CPU Usar arrays de tamaño fijo y controlar el número de partículas vivas No solo la posición es objeto de simulación, se puede simular el tamaño, el color… La simulación ha de ser realista pero de bajo coste computacional (SIMD)
Ejemplo: Demo.zip
Bibliografía A. Watt, F. Policarpo 3D Games: Real-time Rendering and Software Techonology Ed. Acm-Press T. Möller, E. Haines Real-time Rendering Ed. A K Peters K. Hawkins, D. Astle, A. LaMothe OpenGL Game Programming Ed. Prima Tech