You are on page 1of 7

Universidad Autnoma de Cd.

Jurez Instituto de ingeniera y tecnologa

IEC361196 Graficacin

Prctica #17: Proyecciones (Individual)

OBJETIVOS: Aprender acerca de la visualizacin de una o varias primitivas utilizando una proyeccin en perspectiva, as como las diferentes funciones que existen para esto y los parmetros que utilizan.

INTRODUCCIN Y FUNCIONES A UTILIZAR: Las proyecciones en perspectiva son un tipo de proyeccin ms intuitiva porque corresponden a la visin que tenemos del mundo real. El volumen de visin es una pirmide truncada, de forma que los objetos son proyectados de diferente tamao segn lo lejos o cerca que estn del plano de proyeccin. La sensacin de tres dimensiones viene dada tanto por la superposicin de objetos como por la disminucin de tamao de los objetos ms alejados. En OpenGL existen dos funciones para establecer este tipo de proyeccin, glFustrum() y gluPerspective() las cuales se describen a continuacin: glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); Donde el volumen de visin est definido por los parmetros (left, botton, right, top) especificando las coordenadas (x,y,z) de la parte inferior izquierda y la parte superior derecha. Near y far dan los planos de corte de la cercana y la lejana y deben ser siempre valores positivos.

Universidad Autnoma de Cd. Jurez Instituto de ingeniera y tecnologa

gluPerspective(GLdouble near, GLdouble far);

fovy,

GLdouble

aspect,

GLdouble

La cual crea una matriz para una perspectiva simtrica de vista en forma de pirmide y la multiplica por la matriz actual. El argumento fovy es el ngulo de vista en el plano X-Z, este valor puede estar en el intervalo [0.0,180.0]. El argumento aspect es la anchura de la pirmide dividida por la altura. Los valores zNear y zFar son las distancias entre el punto de vista y los planos de corte, a lo largo del eje Z. Estos valores deben ser siempre positivos.

Nota importante: Es importante saber que estas funciones no necesitan de la proyeccin ortogonal glOrtho(), mas bien la sustituyen; ya que por s mismas son proyecciones las cuales afectan a la matriz de proyeccin glMatrixMode(GL_PROJECTION); a diferencia de la cmara, la cual se basa en la vista de modelo glMatrixMode(GL_MODELVIEW);

Universidad Autnoma de Cd. Jurez Instituto de ingeniera y tecnologa

Ejemplos:

Figura 1.0: Volumen de visin y funcin gluFustrum.

Figura 1.1: Volumen de visin y funcin gluPerspective.

Universidad Autnoma de Cd. Jurez Instituto de ingeniera y tecnologa

Ejemplo prctico: Por ejemplo, si tenemos dos toroides del mismo tamao glutWireTorus(1,2,50,50) pero en diferente ubicacin, el azul en la coordenada (-5,0,12) y el rojo en la coordenada (5,0,-4), segn se aprecia en la figura 2 (superior). Si utilizamos la funcin gluPerspective(90,2,1.0,100.0); la vista quedara como se muestra en la figura 2.0 (inferior). Como podemos observar al tener la vista en perspectiva el toroide ms cercano parece ms grande y lejano ms pequeo, lo cual es parecido a cmo percibe las cosas el ojo humano.

Figura 2.0

DESARROLLO: 1. En un proyecto nuevo, agregue el cdigo necesario para crear una ventana de 500x500 y codifique lo siguiente: 2. Una funcin llamada figura que grafique un cubo utilizando la primitiva GL_QUADS para c/u de sus caras

Universidad Autnoma de Cd. Jurez Instituto de ingeniera y tecnologa

(de color diferente), y cuyo centro se encuentre en el origen. (alternativamente puede utilizar tambin la primitiva glutWireCube, aunque perder parte de la naturalidad al no estar slidas y distinguibles las caras entre si) 3. Modifique la funcin que es llamada glutDisplayFunc() para que grafique el cubo funcion figura y utilice la funcion: gluLookAt(0.0,1.0,1.0, 0.0,0.0,0.0, 0.0,1.0,0.0); para obtener una vista inclinacin, del cubo. frontal, con cierta desde de la

4. Divida el rea de visualizacin de la pantalla (dos viewports, uno arriba y otro abajo) de modo que muestre dos visualizacines del cubo (repita el paso 3 para obtener el mismo cubo en cada viewport). Hasta este punto se asume que est utilizando el glOrtho() de manera que obtendr exactamente la misma escena en cada viewport. 5. En seguida utilize la funcion gluPerspective() en una de las visualizaciones, para apreciar la diferencia entre la proyeccin sin perspectiva (la generada por el glOrtho) y la proyeccin con perspectiva (la generada por el gluPerspective). Nota: Recuerde que al utilizar el gluPerspective() la escena debe estar en la parte negativa del eje Z, de manera que puede ser necesario, como en el ejemplo pedido en esta prctica, realizar una traslacin previa para lograr esto. Tambin tome en cuenta que como se van a estar generando los dos viewports cada vez que se grafica la ventana, puede hacer la traslacin solo una vez en la inicializacin, que aunque ser vlida para los dos viewports, no le afecta negativamente al que utilice el glOrtho. 6. Finalmente agrege el cdigo necesario para rotar positiva y negativamente ambas figuras mediante el

Universidad Autnoma de Cd. Jurez Instituto de ingeniera y tecnologa

teclado y observar las diferencias de visualizacion en ambas figuras a pesar de ser de la misma proporcin. Al terminar la prctica deber tener un resultado parecido al de la figura 2.1 y figura 2.2 (se supone que se modific la rotacin de la escena oprimiendo algunas teclas para obtener la visin de la figura 2.2 respecto a la 2.1).

Figura 2.1

Figura 2.2

CONCLUSIONES:

Universidad Autnoma de Cd. Jurez Instituto de ingeniera y tecnologa

En esta preguntas:

seccin

deber

contestar

las

siguientes

1. Qu efecto visual tiene variar la cantidad de grados (fovy) en el primer parmetro del gluPerspective()?. 2. Fue necesario hacer una traslacin en el eje Z? Qu cantidad fue suficiente? Qu sucede si no se hace ninguna traslacin? 3. Cmo logr ventana? ambos tipos de proyeccin en la misma

4. Qu efecto visual tiene variar las distancias en el tercer y cuarto parmetro? Cules son los lmites en los cuales el cubo ya comienza a salir incompleto al hacer rotaciones? CRITERIOS DE EVALUACIN:

You might also like