Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porEduarda Ledesma Modificado hace 10 años
1
Integrantes: -Carlos Asmadt. - Manuel Perez.
3
Creación del struct partícula: struct tParticle { tParticle *prev,*next; // enlaces con otras partículas tvector pos; // posición actual tvector prevPos; // posición anterior tvector dir; // dirección y velocidad actual int life; // tiempo de vida tColor color; // color actual tColor prevColor; // color anterior tColor deltaColor; // delta para cambio de color };
4
Creacion de la estructura del emisor: struct tEmitter { long id; // ID del emisor char name[80]; // nombre del emisor long flags; // banderas del emisor // Información de enlaces tEmitter *prev; // apuntador al padre tEmitter *next; // apuntador al hijo // Información de transformación tvector pos; // posición XYZ float yaw, yawVar; // Rotación en Y y variación float pitch, pitchVar; // Rotación en X y variación float speed,speedVar; // velocidad y variación de velocidad // Partícula tParticle *particle; // Lista enlazada terminada en NULL int totalParticles; // Total emitidas en cualquier momento int particleCount; // Total emitidas en este momento int emitsPerFrame, emitVar; // Emitidas por frame y su variación int life, lifeVar; // tiempo de vida y su variación tColor startColor, startColorVar; // color actual tColor endColor, endColorVar; // color actual // Física tvector force; //fuerza de gravedad, viento, etc. };
5
Proceso que dibuja la escena: void drawScene(){ //limpiar bufferes de profundidad y de color AQUI glPushMatrix(); //Establecer posición y orientación del emisor AQUI renderEmitter(&m_Emitter); //desplegar emisor //limpiar y actualizar glPopMatrix(); glFinish(); SwapBuffers(m_hDC); UpdateStatus(); }
6
Proceso que agrega una partícula al sistema: BOOL addParticle(tEmitter *emitter) { /// Variables locales /////////////////////////////////////////////////////////// tParticle *particle; tColor start,end; float yaw,pitch,speed; /////////////////////////////////////////////////////////////// // si hay un emisor y una partícula en el grupo... //... y si no he emitido el máximo.... if (emitter != NULL && m_ParticlePool != NULL && emitter- >particleCount totalParticles) { particle = m_ParticlePool; // La partícula actual //Actualizar apuntadores m_ParticlePool = m_ParticlePool->next; if (emitter->particle != NULL) emitter->particle->prev = particle; particle->next = emitter->particle; particle->prev = NULL; //agregarla al emisor emitter->particle = particle; //establecer su posición (relativa a la posición del emisor) particle->pos.x = 0.0f; particle->pos.y = 0.0f; particle->pos.z = 0.0f;
7
//guardar posición anterior para antialising particle->prevPos.x = 0.0f; particle->prevPos.y = 0.0f; particle->prevPos.z = 0.0f; // calcular vector dirección inicial yaw = emitter->yaw + (emitter->yawVar * RandomNum()); pitch = emitter->pitch + (emitter->pitchVar * RandomNum()); // convertir las rotaciones a un vector RotationToDirection(pitch,yaw,&particle->dir); // Multiplicarlo en el factor de velocidad speed = emitter->speed + (emitter->speedVar * RandomNum()); particle->dir.x *= speed; particle->dir.y *= speed; particle->dir.z *= speed; // Calcular los colores start.r = emitter->startColor.r+(emitter->startColorVar.r*RandomNum()); start.g = emitter->startColor.g+(emitter- >startColorVar.g*RandomNum()); start.b = emitter->startColor.b+(emitter- >startColorVar.b*RandomNum()); end.r = emitter->endColor.r + (emitter->endColorVar.r*RandomNum()); end.g = emitter->endColor.g + (emitter->endColorVar.g* RandomNum()); end.b = emitter->endColor.b + (emitter->endColorVar.b* RandomNum()); particle->color.r = start.r; particle->color.g = start.g; particle->color.b = start.b; // Calcular tiempo de vida // Calcular tiempo de vida particle->life=emitter- >life+(int)((float)emitter->lifeVar* RandomNum()); // Crear la variación del color particle->deltaColor.r = (end.r - start.r) / particle->life; particle->deltaColor.g = (end.g - start.g) / particle->life; particle->deltaColor.b = (end.b - start.b) / particle->life; //aumentar contador de partículas emitter->particleCount++; return TRUE; } return FALSE; }
8
Se crea una función que actualice los parámetros de las partículas según el efecto que se desea modelar y se llama esa función numeradas veces hasta obtenerlo y así completar nuestro sistema de partículas.
10
X men 2Prince of Persia
12
Half life Dirt 2 Mafia 2 Prototype
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.