Las transformaciones
Finalmente, como operaciones básicas, vamos a comentar aquellas que nos
van apermitir
situar los objetos en el espacio, es decir, aplicarles transformaciones:
glTranslate*:
nos va a permitir trasladar un objeto en el espacio
glRotate*:
nos va a permitir rotar un objeto
glScale*:
nos va a permitir escalar un objeto
glMultMatrix:
multiplica la matriz de transformación actual por una matriz dada. Estoes algo
muy utilizado en motores 3DEs muy importante
el orden en el que vayamos a realizar las transformaciones. No eslo
mismo trasladar algo y después rotarlo, que primero rotarlo y luego
trasladarlo, comopodremos comprobar posteriormente...
La proyección en OpenGL
En el modo de proyección podemos especificar cómo va a afectar la
posición de unobjeto a su visualización. Tenemos dos maneras de visualizar el espacio:
con unaproyección
ortográfica, y con una proyección perspectiva:
La
proyección ortográfica:La proyección
ortográfica nos permite visualizar todo aquello que se encuentredentro de un cubo, delimitado por los parámetros
de la función glOrto. A la hora devisualizar, la distancia al observador sólo
se tiene en cuenta para determinar si elobjeto está dentro o fuera del
cubo...
Figura
3.6. Volúmen de proyección ortográfico
La
proyección perspectiva:La proyección
perspectiva delimita un volúmen de visualización dado por un ángulode cámara, y una relación alto/ancho. La distancia
al observador determinará eltamaño con el que un objeto se visualiza.
20
ESIDE
Ghost
Anchura
L a r g u r a
Altura




El doble buffering
El doble
buffering es una técnica muy simple, que dibuja la escena en un buffer fuera de
lapantalla, mientras que la imágen de la
pantalla no se toca para nada. Una vez que laimágen se ha dibujado en el buffer
de fondo, se intercambia por el de la pantalla, demanera que eliminamos el parpadeo. El siguiente
frame lo dibujaremos en lo que antesera el buffer de pantalla (ahora
oculto), y luego se cambiará, y así sucesivamente.Activar el doble buffering es algo muy sencillo.
Hemos de indicar a GLUT que vamos
autilizar doble buffering al crear la pantalla con GLUT_DOUBLE, en lugar
deGLUT_SINGLE:
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
Y después
de dibujar un frame hemos de cambiar el buffer oculto por el activo con:
glutSwapBuffers();
Una vez
añadido esto, el código quedaría como el que se encuentra en el anexo.El
resultado del programa es el siguiente:
Figura
4.4. Salida del programa "sphere-rebotes"
Y con una pequeña modificación (sphere-rebotes-multi) podemos conseguir
una locuracomo
esta:
© 2003 -
Jorge García (Bardok)
35

Figura
4.5. Salida del programa "sphere-rebotes-multi"
36
ESIDE
Ghost

No hay comentarios:
Publicar un comentario