domingo, 28 de abril de 2013

OpenGL desde 0. Capitulo 1: Bases de OpenGL

Capítulo perteneciente al tutorial de opengl desde cero

Hola a todos,

En este blog ya hemos trabajado con OpenGL en varias ocasiones (por ejemplo en motores gráficos y pakengine), pero nunca os he explicado realmente como funciona OpenGL.

Las bases son sencillas:
- Todo lo que pintamos por pantalla es una representación ortogonal de objetos 3D. Es decir, "aplastamos" objetos 3D contra el monitor del PC.
- Estos objetos 3D estan representados por triangulos 2D que conforman su superficie. Es decir, el objeto 3D que vemos solo es una carcasa hecha con triangulos (en general) muy pequeños.
- Estos triangulos se definen mediante 3 puntos en coordenadas 3D. A la vez que definimos estos puntos normalmente también definimos coordenadas de cada punto a una región de una textura, haciendo que el modelo 3D que estamos representando tenga un "dibujo" que nos de mayor sensación de realidad (sin las texturas los objetos 3D serían de color sólido sin ningún tipo de detalle)

Resumiendo (a muy grosso modo) , openGL para pintar escenas 3D solamente usa puntos en 3D y relaciones de esos puntos con coordenadas 2D de una textura.

Fácil no?? Bueno, realmente esto solo es el principio. Solo hemos explicado como crear un mundo 3D, pero... como lo visualizamos?

Una vez el mundo 3D ya está creado hemos de generar una cámara que nos permita visualizar toda esa información. La cámara es la que se encargará de "aplastar" esos objetos 3D contra nuestra pantalla 2D. La gran pregunta es.... y como funciona todo ese proceso de "aplastamiento" ?? (A partir de ahora le llamaremos renderizado :) )
La respuesta es fácil de explicar pero dificil de entender al 100%. Con matemáticas, todo el proceso de renderizado se basa en cálculo matricial (tranquilos que todo el proceso lo hará la tarjeta gráfica) que si bien no deberemos saber como funciona realmente si que tendremos que irlo interiorizando con el tiempo. Esto quiere decir que openGL permite acumular matrices de transformación que nos permiten realizar diferentes tareas (traslaciones, rotaciones, etc...).

Ya sabemos la teoria de como crear un mundo 3D y de como visualizarlo, así que ahora solo nos falta un glosario rápido de funciones openGL para poder ir aprendiendo de códigos que vayamos viendo por la red (Nehe es un muy buen sitio para comenzar).


glViewport(0,0,width,height) : Esta función sirve para decirle a OpenGL en que zona de la ventana queremos que nos renderice la escena. Por defecto querremos que nos renderice la escena en toda la pantalla.


glMatrixMode (modo de matriz) : Esta función nos cambia el tipo de matriz sobre la que vamos a trabajar. Hay 4 tipos básicos de matrices sobre las que vamos a trabajar (ya las explicaremos más a fondo): GL_MODELVIEW, GL_PROJECTION,  GL_TEXTURE y  GL_COLOR.
    
glLoadIdentity(): Carga la matriz identidad. En matemáticas la matriz identidad es la mátriz neutra, es decir, limpiamos toda la pila de operaciones que teniamos hasta el momento.

glBegin/glEnd : Nos indica una zona de código donde le pasaremos a openGL los puntos de nuestros objetos 3D y el formato como queremos que los una (ya lo explicaremos en posteriores capitulos)

glVertex: Nos permite enviar puntos 3D que conforman un objeto 3D a la tarjeta gráfica. Ya iremos profundizando sobre esta funcionalidad.

Pese a que nos faltan todavía muchas funciones, con esto tendreis una pequeña ayuda para ir entendiendo códigos.

Espero que para ser el primer capítulo no se os haya hecho pesado y que os lo hayaís pasado bien. En el próximo capitulo iré introduciendo un poco de código para que lo veais más claro.

Nos vemos en el siguiente capitulo de openGL desde 0.


LordPakusBlog

0 comentarios :

Publicar un comentario

Entradas populares