Comunidad orientada al desarrollo de videojuegos

Sistemas de Partículas en Wave Engine

OBJETIVOS

Un sistema de partículas es un componente que usa pequeñas texturas/sprites para simular fenómenos de la vida real como fuego, nubes, lluvia, polvo, etc.

Introducimos en Wave Engine un Sitema de Partículas para simular un simple efecto de partículas de fuego.

CREAR UN PROYECTO

Crear un nuevo Game Project desde la plantilla Wave Engine, y renómbralo como TorchFire:

01createproject

CREAR LA CAMARA

Lo primero que vamos a necesitar es una cámara para ver el mundo. Vamos a MyScene.cs y añadimos estos usings:

using WaveEngine.Components.Cameras;
using WaveEngine.Common.Math;

Ahora, en el método CreateScene() creamos una cámara para poder ver de esta manera el mundo.

RenderManager.BackgroundColor = Color.Black;

var camera = new FreeCamera("Camera", new Vector3(50, 50, 50), Vector3.Zero);

EntityManager.Add(camera);

CREAR EL SISTEMA DE PARTICULAS

Antes de añadir el código necesario para crear un sistema de partículas, necesitamos estos usings:

using WaveEngine.Framework.Graphics;
using WaveEngine.Components.Particles;
using WaveEngine.Components.Graphics3D;
using WaveEngine.Materials;

Después de la linea EntityManager.Add(camera), añade este código para inicializar nuestro sistema de partículas:

ParticleSystem fireParticle = new ParticleSystem()
{
     NumParticles = 18,
     MinLife = TimeSpan.FromSeconds(0.2f),
     MaxLife = TimeSpan.FromSeconds(0.7f),
     LocalVelocity = new Vector3(0.0f, 0.6f, 0.0f),
     RandomVelocity = new Vector3(0.1f, 0.0f, 0.0f),
     MinSize = 3,
     MaxSize = 8,
     MinRotateSpeed = 0.1f,
     MaxRotateSpeed = -0.1f,
     EndDeltaScale = 0.0f,
     EmitterSize = new Vector2(2),
     EmitterShape = ParticleSystem.Shape.Circle,
};

Echa un vistazo a esta tabla para saber que es cada parámetro:

NumParticles Obtiene o establece el número de partículas
MinLife Obtiene o establece el periodo de duración mínimo de la partícula
MaxLife Obtiene o establece el periodo de duración máximo de la partícula
LocalVelocity Cuanta velocidad en los ejes X, Y y Z va a tener cada partícula
RandomVelocity Cuanta velocidad aleatoria va a tener cada partícula
MinSize Obtiene o establece el tamaño mínimo de la partícula
MaxSize Obtiene o establece el tamaño máximo de la partícula
MinRotateSpeed Obtiene o establece la velocidad de rotación mínima de la partícula
MaxRotateSpeed Obtiene o establece la velocidad de rotación máxima de la partícula
EndDeltaScale Obtiene o establece la escala final delta
EmitterSize Tamaño de emisión
EmitterShape Forma de emisión

Hay más propiedades con las que podemos jugar en un sistema de partículas, pero para nuestro ejemplo estas son las mínimas requeridas.

CREAR LA ENTIDAD DE LA PARTÍCULA

Para hacer que un sistema de partículas muestre las partículas, necesitamos crear una entidad que las use. Después de inicializar fireParticle añadimos este código para definir la entidad que necesitamos:

var fireParticleEntity = new Entity("fire")
     .AddComponent(new Transform3D())
     .AddComponent(fireParticle)
     .AddComponent(new MaterialsMap(new BasicMaterial("Content/particleFire.wpk", DefaultLayers.Additive) { VertexColorEnabled = true }))
     .AddComponent(new ParticleSystemRenderer());

Nota: Seleccionar cada archivo .wpk e ir a propiedades, dentro, en la opción “copiar en el directorio de resultados“ elegid “copiar siempre” o “copiar si es posterior”.

Vemos como esta añadido el sistema fireParticle como un componente en la entidad. Esto le aplicara todas las físicas, comportamientos y propiedades definidas previamente en el sistema de particulas. Tened en cuenta que el BasicMaterial lo estamos agregando como aditivo.

Lo último que queda por hacer es añadir esta entidad a la escena, para ello añadimos esta línea al final:

EntityManager.Add(fireParticleEntity);

Ahora puedes iniciar la aplicación y veremos lo siguiente:

02screenshot

Puedes moverte alrededor con las teclas W,A,S,D y el ratón.

DESCARGAR EL CÓDIGO

Puedes descargar el proyecto completo aquí.

FUENTES

Tutorial original en inglés: http://blog.waveengine.net

Para descargar Wave Engine: http://www.waveengine.net

Traducido por Carlos Sánchez López

, , ,

Leave a Reply