Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Estructura fsica
Partcula: entidad que guarda las
propiedades individuales entregadas por
el sistema y se ve afectada por ellas.
Grupo de Partculas: se encarga de
agregar o quitar partculas al sistema.
Sistema de Partculas: organiza todas las
partculas y les da propiedades.
Partcula
Propiedades tpicas: posicin, color,
velocidad, edad.
No existe lmite en el tipo o cantidad de
propiedades.
Suelen tener vida limitada, al morir son
creadas de nuevo con propiedades
iniciales.
Grupo de Partculas
Almacena todas las partculas para que
su uso sea ms simple
Acciones limitadas, slo agregar o quitar
partculas.
Tales acciones se deben comnmente a
la muerte o nacimiento de una nueva
partcula.
Sistema de Partculas
Genera las reglas por las cuales las
partculas se rigen.
Mientras avanza el tiempo, se encarga de
renovar las propiedades de las partculas.
Controla la lgica detrs de las acciones.
Estructura Lgica
Emisor: espacio en donde se generan las
partculas
Administrador: se encarga de las
propiedades globales de las partculas y
cuando se ejecutan acciones
Acciones: funciones que actualizan
propiedades de las partculas segn
alguna mtrica (e.g. tiempo)
Emisor
Espacio geomtrico en el cual las
partculas son generadas.
Cuando nacen, el emisor les entrega
propiedades iniciales dentro del rango
creado por el sistema de partculas.
Administrador
Es la clase Sistema que engloba todas las
partculas, el emisor y las acciones.
El Administrador es el nexo entre un
programa y el sistema de partculas.
Llamadas frecuentes: Actualizar y Dibujar.
Acciones
Cambios en las propiedades se debe a
las acciones
Son llamadas por el administrador cuando
algn criterio se cumple.
Ejemplo: chocar, cambiar color, cambiar
velocidad, morir.
Implementacin OpenGL
Partcula
public struct Particula
{
public Vector3 pos;
public Vector3 pos_ant;
public Vector3 vel;
public Vector3 vel_ant;
public Vector3 color;
public float alpha,edad;
}
Implementacin OpenGL
Grupo Partcula
public struct Grupo
{
public int cantidad;
public int max_cantidad;
public Particula[] p;
public void Sacar(int i)
public bool Agregar(Vector3 pos,Vector3 pos2,Vector3 color,
Vector3 vel,params float[] extra)
}
Ejemplos Rango
Dominio Esfera(0,0,0,radio 5)
Rango es cualquier vector del origen a
una distancia 5.
Dominio Punto(4,2,1)
Rango es slo el vector (4,2,1).
Implementacin OpenGL
Informacin Emisor
public struct sEmision
{
public Rango posicion ,velocidad ,color
public float alpha,frecuencia0 ,edad ,dev_edad;
var)
Implementacin OpenGL
Clase Sistema
public class Sistema
{
Random r= new Random();
Grupo grupop;
sEmision Einfo;
int tiempo;
Implementacin OpenGL
//Se llama para indicar donde se generarn las partculas
public void Emisor(float freq,Dominio tipo,params float[] var)
{
Einfo = new sEmision(freq,tipo,var);
Einfo.velocidad = Valor.Vel;
Einfo.color = Valor.Color;
Einfo.alpha = Valor.alpha;
Einfo.edad = Valor.edad;
Einfo.dev_edad = Valor.dev_edad;
Implementacin OpenGL
public void Actualizar(){
int deltat =1000;
if((deltat - tiempo) > Valor.dt){
Vector3 acc =new Vector3(0,0,0);
for(int i=0;i<grupop.cantidad;i++){
Valor.Accel.GenerarPunto(ref acc,ref r);
grupop.p[i].edad +=Valor.dt*10;
grupop.p[i].pos +=grupop.p[i].vel*Valor.dt;
grupop.p[i].vel +=acc*Valor.dt; }}
tiempo = deltat;
AccionEmisor();AccionMatar();AccionChoca(); }
Implementacin OpenGL
public void Dibuja(){
for(int i=0;i < grupop.cantidad ;i++){
Gl.glPushMatrix();
Gl.glTranslatef(grupop.p[i].pos.x,grupop.p[i].pos.y,grupop.p[i].pos.z);
Gl.glScalef(escalax,escalay,escalaz);
Gl.glColor4f(grupop.p[i].color.x,grupop.p[i].color.y,grupop.p[i].color.z,grupop.p[i].al
pha);
Gl.glBegin(Gl.GL_QUADS);
Gl.glTexCoord2d(1,1); Gl.glVertex3f(0.5f,0.5f,0);
Gl.glTexCoord2d(0,1); Gl.glVertex3f(-0.5f,0.5f,0);
Gl.glTexCoord2d(0,0); Gl.glVertex3f(-0.5f,-0.5f,0);
Gl.glTexCoord2d(1,0); Gl.glVertex3f(0.5f,-0.5f,0);
Gl.glEnd();
Gl.glPopMatrix();
}}
Implementacin OpenGL
Acciones
Implementacin OpenGL
Inicializacin
Loop
PS.Actualizar(); PS.Dibuja();