lunes, 24 de septiembre de 2012

Proyeccion en OpenGL

Es  necesario activar la matriz e inicializarla mediante las órdenes OpenGL:

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

La proyección define el volumen del espacio que va a utilizarse para formar la imagen; en el caso de la proyección perspectiva este volumen es una pirámide truncada o frustum. Por lo tanto, en esta proyección se produce un efecto tamaño - distancia y es la proyección más usada en animación por ordenador o simulación visual, donde se requiere un alto grado de realismo. El frustum de visualización se define en OpenGL de la forma siguiente:

void glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top,

GLdouble near, GLdouble far)

Dónde los parámetros left, right, bottom, top, near y far definen el frustum tal y como se muestra en la figura siguiente:

Tal y como se muestra en la figura, el frustum no tiene porqué ser simétrico respecto al eje Z, ya que es posible utilizar valores distintos para left y right, o para bottom y top.

La especificación de una proyección perspectiva mediante glFrustum puede resultar complicada debido a que la forma de definición no resulta intuitiva. En lugar de esta orden, podemos utilizar la rutina de la librería de utilidades de OpenGL gluPerspective. Esta rutina permite especificar el volumen de la vista de forma diferente, utilizando el ángulo de visión sobre el plano XZ (fovy) y el ratio de la anchura respecto a la altura (aspect). Mediante estos parámetros es posible determinar el volumen de la vista, tal y como se muestra en la figura siguiente: 
Esta forma de definir la proyección resulta más intuitiva. La sintaxis de la rutina gluPerspective es la siguiente:

void gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble near, GLdouble far)

Cuando utilicemos la rutina gluPerspective tendremos que tomar precauciones con respecto a los valores de fovy y near. Una mala elección de dichos valores puede producir deformaciones en la imagen similares a las aberraciones ópticas habituales en las lentes fotográficas (v.g. efecto “ojo de pez”).

Otra forma de definir la manera en que una cámara sintética observa una escena es mediante dos posiciones en el espacio: la del punto de interés o punto al que la cámara está enfocando, y la del punto de vista o punto dónde se encuentra situada la cámara. Esta forma de definir la transformación de la vista es la que utiliza la orden de la librería de utilidades de OpenGL gluLookAt. La sintaxis de la orden es la siguiente:

gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez,

GLdouble centerx, GLdouble centery, GLdouble centerz,

GLdouble upx, GLdouble upy, GLdouble upz);

Donde los parámetros eyex, eyey, eyez indican la posición del punto de vista; centerx, centery, centerz especifican el punto de interés y upx, upy, upz la dirección tomada como “arriba”, o inclinación de la cámara

La proyección ortográfica define un volumen de la vista cuya geometría es la de un paralelepípedo rectangular (o informalmente, una “caja”). A diferencia de la proyección perspectiva, la distancia de un objeto a la cámara no influye en el tamaño final del mismo en la imagen. Este tipo de proyecciones son comunes en aplicaciones de diseño asistido por ordenador, ya que las medidas sobre la imagen son proporcionales a las reales de acuerdo a un determinado factor de escala. Entre las proyecciones ortográficas más comunes en este tipo de sistemas cabe destacar la proyección ortográfica (planta, alzado y perfil) y la proyección isométrica. La caja de visualización se define en OpenGL de la forma siguiente:

void glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top,

GLdouble near, GLdouble far)

Dónde los parámetros left, right, bottom, top, near y far definen la caja tal y como se muestra en la figura siguiente:
 

No hay comentarios:

Publicar un comentario