You are on page 1of 8

Simulacin de una cmara con OpenGL. La cmara en OpenGL. Transformacin de vis...

Pgina 1 de 8

Transformacin de vista
En este punto se trata el tema de la colocacin de la cmara en la escena y el movimiento de la misma. Conceptos Punto de atencin: El objeto o conjunto de objetos sobre los que se fija la vista. Punto de vista: Desde donde se mira el punto de atencin. Linea de visin: Recta definida por el punto de atencin 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 sera el que recorreramos si pudisemos 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 cdigo: glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // para evitar que otras transformaciones de modelado afecten a las que queremos hacer. Una transformacin de vista cambia la posicin y orientacin del punto de vista. Las transformaciones de vista en OpenGL son bsicamente transformaciones de modelado aplicadas a toda la escena siendo el punto de atencin 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 cmara son glTranslatef y glRotatef y su combinacin 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 cmara simples como la rotacin entorno a la escena el zoom son sencillos de realizar y solo necesitan una transformacin (para el zoom basta con aplicar glTranslate), pero ciertos movimientos como el movimiento en diagonal requieren la combinacin de transformaciones. Para este caso se ha definido una funcin en la librera de utilidades que es gluLookAt() y que sita el punto de vista respecto al punto de atencin, la sintaxis de la funcin 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_atencin son las coordenadas tridimensionales del punto de vista y del punto de atencin respectivamente, ambos definen la linea de visin. 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 proyeccin y viene a indicar donde est el cielo). La funcin realiza internamente las transformaciones de modelado necesarias para situar la cmara en la posicin adecuada, por ello es importante llamarla antes de construir la escena porque de lo contrario habri objetos que no se verian afectados. Ejemplos A continuacin se mostrarn una serie de ejemplos en los que se muestran los distintos movimientos de cmara. El cdigo 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

Simulacin de una cmara con OpenGL. La cmara en OpenGL. Transformacin de vis... Pgina 2 de 8

aplica las transformaciones el cdigo debe presentar un cierto orden en funcin de lo que se quiera hacer, 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. En las imgenes de ejemplo es interesante observar el eje de las esferas de alambre que siempre apunta al mismo punto de fuga dando mayor sensacin de movimiento de cmara.
Zoom:

Para realizar el zoom se emplea glTranslatef con lo que se desplaza la escena hacia delante o hacia atrs simulando el acercamiento o alejamiento de la cmara. El cdigo es: glTranslatef(0.0f, 0.0f, posObjeto); Donde posObjeto es un flotante que indica cuanto se mueve la escena en el eje Z. Como en todos los casos que implican movimiento de cmara, la funcin debe llamarse antes de construir la escena para que afecte a todos los objetos.

Alejamiento de la escena.

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

Simulacin de una cmara con OpenGL. La cmara en OpenGL. Transformacin de vis... Pgina 3 de 8

Acercamiento de la escena.

Rotacin vertical y horizontal de la cmara:

Imaginando una esfera que envuelve la escena, estos movimientos representan el desplazamiento de la cmara por la superficie de la esfera. Por el contrario el zoom modifica el radio de la esfera. La funcin OpenGL que realiza estos movimientos es glRotatef. El cdigo es: glRotatef(anguloCamaraY, 0.0f, 1.0f, 0.0f); glRotatef(anguloCamaraX,1.0f,0.0f,0.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).El valor numrico de los angulos puede ser cualquiera y la escena har una rotacin completa cada 360 grados.

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

Simulacin de una cmara con OpenGL. La cmara en OpenGL. Transformacin de vis... Pgina 4 de 8

Escena tras hacer una rotacin en el eje X (moviendo la cmara hacia abajo).

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

Simulacin de una cmara con OpenGL. La cmara en OpenGL. Transformacin de vis... Pgina 5 de 8

Escena tras hacer una rotacin el el eje X (moviendo hacia arriba la cmara).

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

Simulacin de una cmara con OpenGL. La cmara en OpenGL. Transformacin de vis... Pgina 6 de 8

Escena tras hacer una rotacin el el eje Y (camara a la izquierda).

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

Simulacin de una cmara con OpenGL. La cmara en OpenGL. Transformacin de vis... Pgina 7 de 8

Escena tras hacer una rotacin el el eje Y (camara a la derecha).

Posicionamiento de la cmara mediante la funcin gluLookAt:

Como ya se ha comentado la funcin gluLookAt() facilita el posicionamiento de la cmara en ngulos que requieren la combinacin de traslaciones y rotaciones. El cdigo para colocar la cmara en la posicin de la figura es: gluLookAt(-5,10,5,0,0,0,1,12,4);

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

Simulacin de una cmara con OpenGL. La cmara en OpenGL. Transformacin de vis... Pgina 8 de 8

Escena con la cmara situada en una posicin diagonal a la escena.

volver

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

You might also like