Implementación de un sistema de partÃculas
El Z-buffer
El Z-Buffer es un mecanismo, usualmente implementado en hardware por la placa de video, que nos permite dibujar polÃgonos sin un orden preestablecido y sin importar su distancia a la cámara. Si no activamos esta opción, un polÃgono que se encontrase parcialmente ocluido por otro deberÃa ser siempre dibujado primero, de otro modo la escena no se verÃa correctamente.
Gracias al z-buffer no debemos estar ordenando los polÃgonos de nuestra escena previa a ser dibujada cada vez. Sin embargo, cuando los objetos son semitransparentes el sistema no funciona, pues si dibujamos primero un objeto semitransparente y luego uno sólido detrás, el chequeo contra el z-buffer de los pÃxels ocluidos del segundo objeto dictará que los mismos no sean dibujados, en lugar de modificar el color del pixel en la posición correspondiente según la especificación del alpha blending que posea nuestra aplicación.
Las partÃculas suelen utilizar mucho los efectos de transparencia. De hecho, en la demostración lo que realizamos las partÃculas a medida que van muriendo se van haciendo cada vez más transparentes hasta desaparecer. Por lo tanto, deberÃamos tomar alguna medida al respecto para que nuestro sistema se vea correctamente.
En nuestra lista de partÃculas vivas, siempre tomaremos como primera la partÃcula más vieja (ya que la manipulamos como una cola), de modo que la lista se encontrará ordenada por antigüedad. Lo que haremos será deshabilitar el z-buffer para dibujar el sistema y dibujar las partÃculas haciendo uso del orden natural de la lista. Por supuesto, que esto no soluciona nuestro problema, sólo lo disimula en gran parte de los casos. Si las partÃculas ascendiesen sobre el eje Y nosotros realizáramos una vista superior del sistema, podrÃamos apreciar el error, pues las partÃculas nuevas (las de abajo) “pisarÃan” a las partÃculas más nuevas (las de arriba).
El ejemplo que acompaña al tutorial
La aplicación que acompaña este tutorial implementa un sistema de partÃculas con ciertas flexibilidades y ciertas limitaciones. Por un lado es posible establecer por medio de su panel de configuración ciertos parámetros a ser:
. Color fijado cuando las partÃculas nacen (color desde) y color al cual van cambiando a medida que transcurre su vida.
. Tiempo de generación de las partÃculas. Un intervalo menor hará que se generen una mayor cantidad de partÃculas por unidad de tiempo.
. Tiempo de vida de las partÃculas
. Escala por defecto de las partÃculas
. Dispersión de la partÃcula. La dispersión es el ruido aplicado a la velocidad vectorial inicial de la partÃcula. Si la dispersión es 0, la partÃcula comenzará
. Si la partÃcula es afectada o no por la gravedad.
. El bitmap de partÃcula a cargar entre un listado de partÃculas posibles.
Varios parámetros más podrÃan agregarse para variar los efectos producidos. En la demostración la generación es puntual y el punto es fijo. Esto podrÃa modificarse para que el punto se moviese por un determinado trayecto (recta, cÃrculo, etc.) o podrÃa ser randómico dentro de un segmento o superficie.
También podrÃa agregarse viento de modo que las partÃculas se desplacen hacia un lado u otro (de hecho, el viento podrÃa variar de manera randómica durante la ejecución de la aplicación haciendo “bailar” en el aire a las partÃculas como si fuesen hojas caÃdas de un árbol).
Invitamos a los lectores a realizar estas modificaciones para que se adapten a sus necesidades y propongan nuevas modificaciones. Por el momento, con la demostración realizada se puede logran múltiples efectos:
Fuego
Humo
Chispas
Sistema de Sistemas
Hemos establecido que no es conveniente crear y destruir partÃculas dinámicamente, pues existe un tiempo en la asignación / desasignación de memoria que repercutirá en un deceso de cantidad de cuadros por segundo que podrá generar nuestra aplicación. Del mismo modo si nuestro juego/aplicación requiere que existan en pantalla de manera simultánea diversos sistemas de partÃculas que nacen y mueren con frecuencia deberemos adoptar una polÃtica similar con ellos.
Por lo tanto, podrÃamos poseer un repositorio de sistemas de partÃculas los cuales serÃan reutilizados a medida que se lo requiera. De este modo estableceremos una cantidad máxima de sistema de partÃculas en escena, cada uno de los cuales poseerá, a su vez, una cantidad máxima de partÃculas simultáneas que podrá mostrar.

Figura 10. Ahora incorporamos una nueva clase que gestiona sistemas de partÃculas
Conclusión
Un sistema de partÃculas es una caracterÃstica que casi nunca es imprescindible en un juego pero que siempre lo mejora muchÃsimo visualmente, lo que se suele conocer como un eye candy (golosina para los ojos). Además, si el sistema es creado con la suficiente flexibilidad puede ser reutilizado para la creación de muchos efectos distintos. Espero que este tutorial les haya sido de utilidad.
Para descargar la aplicación de ejemplo, puede hacer click aquÃ.
~fuzzyLogic








Comentarios (7)



lindo tutorial, gracias!
Muy bueno
Oe man…precioso tutorial… te pasaste on… Por los diagramas de clases y diagramas de flujos y la paciencia que tienes para explicart …te puyedo asegurar que tienes dotes de profesor on..Bueno espero que sigas subiendo mas tutoriales on… son super buenos…A solo queria preguntarte si pronto vas a subir el tutorial de MD2(segunda parte y posteriores me serian de gran utilidad)
Oe man buen tutorial on(te pasaste)… por los graficos y diagramas te puedo asegurar que tienes dotes de profe on… sinceramente bueno …sigue colgando mas tutoriales on serian de mucha ayuda… A man ya ps acuerdate de subir el tutorial MD2 (segunda parte)
Man buenazo on te pasaste …se ve que tienes dotes de profesor
sinceramente myu bueno man…tienes dotes de profesor on…
muy bueno muy bueno.