PFC: OpenGL Simple Engine

Lo que empezó como un tutorial montado encima de otro acabó siendo el 75% de mi proyecto de final de carrera. El objetivo de éste era representar de forma fluida en un espacio 3D un IOM (Individual Oriented Model) basado en un banco de peces.

Para explicarlo de forma sencilla, un IOM no es más que un modelo matemático que simula el comportamiento de un gran conjunto de individuos a través de las acciones de éstos. El gran problema que se presenta con un IOM es la alta capacidad computacional necesaria para solventar la mayoría de problemas que representan. Es decir, pensad en un conjunto de 100.000 individuos, donde el comportamiento de cada individuo se calcula a través de las acciones de individuos cercanos (vecinos). Ya de por sí, es bastante complejo a nivel de cómputo. Bien, pues ahora añadidle el cálculo necesario para visualizar todo esto en un entorno 3D.

Así pues el desafío que planteaba el proyecto en sí, era diseñar un visualizador que respondiera adecuadamente. Es decir, se pudiera mostrar un conjunto entero de individuos a una tasa de frames (FPS) aceptable.

Como cumplí el objetivo del proyecto bastante antes del plazo de entrega, le di unas cuantas manos de pintura:

  • Le añadí un sistema de consola para poder configurar el entorno mediante variables. Muy al estilo quake, de hecho las variables, tenían su cierto estilo (r_fishDetail, r_showFPS, …) que se le va a hacer, soy un nostálgico.
  • Cree un programa externo en entorno windows para configurar el entorno. Digamos que una consola para torpes.
  • Implementé algoritmos de colisiones, frustum culling y física simple a la cámara. Rediseñé la clase de movimiento para que se pudiera correr, saltar, caer y como no acelerar a base de strafe jumps.
  • Por último diseñé un lector de scripts que interpretaba shaders (efectos de textura) para después aplicarlas en el entorno.

Por ejemplo, strafe jump:

Los scripts de shaders estarían compuestos por estructuras como ésta, el engine se encarga de interpretarlos y ejecutarlos con las extensiones ARB de OpenGL:

sea1/flame1.jpg
{
	NUMERO_TEXTURAS 1
	TEXTURA1
	{
		NOMBRE flame1.jpg
		OPACIDAD 0.9
		BLENDFUNC 2 GL_SRC_ALPHA GL_ONE
		VELOCIDAD_SECUENCIA 0.1
		SECUENCIA 8 flame1.jpg#flame2.jpg#flame3.jpg#flame4.jpg#flame5.jpg#flame6.jpg#flame7.jpg#flame8.jpg
	}
}

En el siguiente video se puede ver un entorno renderizado con shaders y posteriormente sin ellas:

Etiquedado como , , ,

Deja un comentario

Tu dirección de correo electrónico no será publicada.