martes, 2 de octubre de 2012



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
Descripción: http://htmlimg1.scribdassets.com/9401p449q8v9kze/images/20-f123d40722.jpgDescripción: http://htmlimg1.scribdassets.com/9401p449q8v9kze/images/20-f123d40722.jpgDescripción: http://htmlimg1.scribdassets.com/9401p449q8v9kze/images/20-f123d40722.jpgDescripción: http://htmlimg1.scribdassets.com/9401p449q8v9kze/images/20-f123d40722.jpg
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
Descripción: http://htmlimg1.scribdassets.com/9401p449q8v9kze/images/35-8e844a424a.jpg
Figura 4.5. Salida del programa "sphere-rebotes-multi" 
36
ESIDE Ghost 
Descripción: http://htmlimg3.scribdassets.com/9401p449q8v9kze/images/36-1cdbd93d26.jpg

No hay comentarios:

Publicar un comentario