Simulación de una cámara con OpenGL. La cámara en OpenGL. Transformación de vis...

Página 1 de 8

Transformación de vista
En este punto se trata el tema de la colocación de la cámara en la escena y el movimiento de la misma. Conceptos • • • • Punto de atención: El objeto o conjunto de objetos sobre los que se fija la vista. Punto de vista: Desde donde se mira el punto de atención. Linea de visión: Recta definida por el punto de atención y el punto de vista. Eje de coordenadas tridimensional: Define el espacio virtual en OpenGL. El centro del eje se situa en el centro de la ventana donde se muestra la escena, de ese centro parten el eje X horizontal, el eje Y vertical y el eje Z que sería el que recorreríamos si pudiésemos atravesar la ventana. • Matriz de modelado: Matriz sobre la que se realizan los cambios que afectan a los objetos de la escena.En openGL antes de realizar un cambio en los objetos de la escena es preciso cargar la matriz de modelado, esto se hace con el siguiente código: glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // para evitar que otras transformaciones de modelado afecten a las que queremos hacer. Una transformación de vista cambia la posición y orientación del punto de vista. Las transformaciones de vista en OpenGL son básicamente transformaciones de modelado aplicadas a toda la escena siendo el punto de atención el inicio del eje de coordenadas tridimensionales. Para que las transformaciones de vista afecten a todos los objetos de la escena se deben realizar antes de construir la escena. En OpenGL las transformaciones de modelado necesarias para mover la cámara son glTranslatef y glRotatef y su combinación permite realizar cualquier movimiento. glTranslatef permite desplazar algo en uno de los ejes de coordenadas, ese algo puede ser un objeto ó la escena completa. glRotatef rota algo en torno a un eje y como en el caso anterior puede ser un objeto ó la escena completa. Movimientos de cámara simples como la rotación entorno a la escena ó el zoom son sencillos de realizar y solo necesitan una transformación (para el zoom basta con aplicar glTranslate), pero ciertos movimientos como el movimiento en diagonal requieren la combinación de transformaciones. Para este caso se ha definido una función en la librería de utilidades que es gluLookAt() y que sitúa el punto de vista respecto al punto de atención, la sintaxis de la función es: void gluLookAt( Gldouble P_vistaX, Gldouble P_vistaY, Gldouble P_vistaZ, Gldouble P_atencionX, Gldouble P_atencionY, Gldouble P_atencionZ, Gldouble arribaX, Gldouble arribaY, Gldouble arribaZ) P_vista y P_atención son las coordenadas tridimensionales del punto de vista y del punto de atención respectivamente, ambos definen la linea de visión. Los puntos Arriba y P_vista definen el vector que indica donde esta la parte superior del plano de vista (este concepto se tratará en el apartado de transformaciones de proyección y viene a indicar donde está el cielo). La función realiza internamente las transformaciones de modelado necesarias para situar la cámara en la posición adecuada, por ello es importante llamarla antes de construir la escena porque de lo contrario habriá objetos que no se verian afectados. Ejemplos A continuación se mostrarán una serie de ejemplos en los que se muestran los distintos movimientos de cámara. El código mostrado corresponde a las funciones necesarias para efectuar las acciones pero debido a la forma en que openGL

http://sabia.tic.udc.es/gc/Contenidos%20adicionales/trabajos/Opengl/camara_Ogl/ogl_vis... 20/08/2012

por eso al final del tutorial se muestra un programa completo en el que se aprecia la importancia del orden a la hora de aplicar las transformaciones. 20/08/2012 .udc. Transformación de vis. posObjeto). Donde posObjeto es un flotante que indica cuanto se mueve la escena en el eje Z. El código es: glTranslatef(0. 0. Zoom: Para realizar el zoom se emplea glTranslatef con lo que se desplaza la escena hacia delante o hacia atrás simulando el acercamiento o alejamiento de la cámara. Alejamiento de la escena.0f. Página 2 de 8 aplica las transformaciones el código debe presentar un cierto orden en función de lo que se quiera hacer...es/gc/Contenidos%20adicionales/trabajos/Opengl/camara_Ogl/ogl_vis.0f..Simulación de una cámara con OpenGL. La cámara en OpenGL. la función debe llamarse antes de construir la escena para que afecte a todos los objetos.. Como en todos los casos que implican movimiento de cámara. http://sabia. En las imágenes de ejemplo es interesante observar el eje de las esferas de alambre que siempre apunta al mismo punto de fuga dando mayor sensación de movimiento de cámara.tic.

glRotatef(anguloCamaraX. 0.0f. http://sabia. Rotación vertical y horizontal de la cámara: Imaginando una esfera que envuelve la escena..0f. Donde anguloCamaraY indica los grado que se gira entorno al eje Y (movimientos horizontales) y anguloCamaraX indica los grados que se gira entorno al eje X (movimientos verticales). estos movimientos representan el desplazamiento de la cámara por la superficie de la esfera..0f.udc.. La cámara en OpenGL.0.tic.es/gc/Contenidos%20adicionales/trabajos/Opengl/camara_Ogl/ogl_vis. Transformación de vis. 0.1.El valor numérico de los angulos puede ser cualquiera y la escena hará una rotación completa cada 360 grados. La función OpenGL que realiza estos movimientos es glRotatef.0f). Por el contrario el zoom modifica el radio de la esfera. 20/08/2012 ..0f).Simulación de una cámara con OpenGL.0f. El código es: glRotatef(anguloCamaraY. 1.0. Página 3 de 8 Acercamiento de la escena.

. 20/08/2012 . Transformación de vis.Simulación de una cámara con OpenGL. Página 4 de 8 Escena tras hacer una rotación en el eje X (moviendo la cámara hacia abajo).es/gc/Contenidos%20adicionales/trabajos/Opengl/camara_Ogl/ogl_vis. http://sabia... La cámara en OpenGL..udc.tic.

.tic. http://sabia.es/gc/Contenidos%20adicionales/trabajos/Opengl/camara_Ogl/ogl_vis.Simulación de una cámara con OpenGL. La cámara en OpenGL.udc.. 20/08/2012 .. Transformación de vis. Página 5 de 8 Escena tras hacer una rotación el el eje X (moviendo hacia arriba la cámara)..

20/08/2012 . http://sabia.. La cámara en OpenGL. Transformación de vis. Página 6 de 8 Escena tras hacer una rotación el el eje Y (camara a la izquierda).udc.es/gc/Contenidos%20adicionales/trabajos/Opengl/camara_Ogl/ogl_vis.Simulación de una cámara con OpenGL...tic..

El código para colocar la cámara en la posición de la figura es: gluLookAt(-5.10.0.... Transformación de vis. Posicionamiento de la cámara mediante la función gluLookAt: Como ya se ha comentado la función gluLookAt() facilita el posicionamiento de la cámara en ángulos que requieren la combinación de traslaciones y rotaciones.5. http://sabia..0. La cámara en OpenGL.4). Página 7 de 8 Escena tras hacer una rotación el el eje Y (camara a la derecha).udc.0.12. 20/08/2012 .Simulación de una cámara con OpenGL.tic.1.es/gc/Contenidos%20adicionales/trabajos/Opengl/camara_Ogl/ogl_vis.

Página 8 de 8 Escena con la cámara situada en una posición diagonal a la escena....Simulación de una cámara con OpenGL.udc.es/gc/Contenidos%20adicionales/trabajos/Opengl/camara_Ogl/ogl_vis.tic. Transformación de vis. volver http://sabia.. 20/08/2012 . La cámara en OpenGL.