Documentos de Académico
Documentos de Profesional
Documentos de Cultura
3.1.3.2.3.3.3.4.3.5.3.6.-
Proceso de vista 3D Comandos de transformaciones de propsito general Transformaciones de modelo y vista Transformaciones de proyeccin Transformaciones de ventana Manejar la pila de matrices
En este tema veremos como ubicar los objetos y el punto de vista del observador dentro de un espacio tridimensional, para obtener la vista de la escena que deseemos. Para crear una imagen plana es decir bidimensional sobre la pantalla del ordenador, a partir de una descripcin tridimensional de la escena, tenemos que realizar una serie de operaciones, que incluyen la proyeccin y el recorte de los objetos sobre un volumen de vista especfico. Basndose en OpenGL estas operaciones son las siguientes: Transformaciones, que se utilizan para operaciones de modelado, vista y proyeccin. Recorte de objetos o porciones de objetos no visibles. Correspondencia entre coordenadas 2D y pixeles de la pantalla. En este captulo veremos las funciones de OpenGL que nos facilitan estas operaciones.
Informtica grfica.
Informtica grfica.
void glMatrixMode (GLenum mode) Especifica cual de las matrices se va a modificar segn el argumento mode. Las matrices que se pueden modificar son la matriz de modelo y vista combinadas, la matriz de proyeccin y la matriz de textura, que no utilizaremos en este curso. Los parmetros que se utilizan para cada caso se reflejan en la tabla 3.1.
Tabla 3.1.
Los siguientes comandos de transformacin afectan a la matriz especificada por esta funcin. Slo puede modificarse una matriz en cada operacin, y estar activa la ltima indicada por la funcin anterior. Por defecto se modifica la matriz de modelo y vista (ModelView). Al comienzo todas las matrices estn inicializadas a la matriz identidad.
void glLoadIdentity (void) Inicializa la matriz actual, con los valores de la matriz identidad de 4x4. Se utiliza para limpiar la matriz actual, al comienzo o bien para volver a la posicin inicial del objeto. void glLoadMatrix{fd} (const TYPE *m) Especifica una matriz a partir del puntero para cargarla en la matriz actual. El m argumento m es un vector de 16 (4x4) componentes. Si definimos una matriz en lenguaje C como m[4][4], entonces en OpenGL el elemento m[i][j] es la columna i y la fila j. Esto es la notacin contraria a la que normalmente se utiliza, por lo tanto para evitar problemas es ms fcil definir siempre vectores de 16 componentes es decir m[16]. void glMultMatrix{fd} (const TYPE *m) Multiplica la matriz actual por la matriz de 4x4 especificada por el parmetro m. El orden de la multiplicacin es matriz actual C por matriz especificada M, es decir el resultado es C * M.
Informtica grfica.
Informtica grfica.
Escalar por valores mayores que 1.0 estira un objeto y con valores menores de 1.0 encoge el objeto.
Informtica grfica.
aplicada al principio de todo tiene el mismo efecto que desplazar el punto de vista a la posicin (0.0, 0.0, 5.0):
Por otro lado, para ver la escena desde un lado se pueden rotar estos, o bien la posicin del observador. As pues, con la secuencia de pasos: glTraslate (0.0, 0.0, -5.0) glRotate (90.0, 0.0, 1.0, 0.0) obtenemos una vista lateral del objeto, ya que primero me alejo y despus lo roto 90, en el sentido positivo del eje Y.
Informtica grfica.
Especificar los parmetros de proyeccin es lo mismo que seleccionar el objetivo de una cmara. Es decir los factores que se ven afectados por estos parmetros son al ngulo de vista y la forma de proyectar. Antes de especificar ninguno de estos parmetros tenemos que activar la matriz de proyeccin como matriz actual e inicializarla con la matriz identidad. Para esto se utiliza la secuencia de funciones siguiente: glMatrixMode (GL_PROJECTION); glLoadIdentity (); El propsito de estas transformaciones es seleccionar el volumen de vista. Este volumen se usa para: Determinar cmo se proyectan los objetos en la pantalla, es decir si se utiliza proyeccin perspectiva o paralela. Definir qu objetos o porciones de los objetos sern visibles en la imagen final. Si bien OpenGL permite los dos tipos de proyecciones, tanto perspectiva como paralela slo se presentan aqu las funciones para la proyeccin perspectiva, pues es la que se utilizar en estas prcticas.
Informtica grfica.
La funcin que define la pirmide es la siguiente: void glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far) Crea una matriz para una vista en perspectiva y la multiplica por la matriz actual. No requiere que el volumen de vista sea regular. Este volumen se define por los parmetros: (left, bottom, near) - (right, top, near) que definen las coordenadas (x, y, z) de las esquinas inferior-izquierda, y superiorderecha del plano de recorte de cerca, near y far definen las distancias desde el punto de vista del observador a los planos de recorte de cerca y lejos, como se puede ver en la figura anterior. Todos estos valores deben ser positivos. La pirmide tiene una orientacin por defecto en el espacio tridimensional. Pero se puede trasladar y rotar la matriz de proyeccin para alterar esta situacin, y hacer trucos con la imagen. En lugar de esto se puede utilizar la funcin auxiliar siguiente: void gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar)
Esta funcin crea una matriz de proyeccin que define una vista simtrica y la multiplica por la matriz actual. El argumento fovy determina el ngulo del campo de vista, en el plano X-Z y su rango es [0.0, 180.0]. El parmetro aspect es el cociente entre el ancho de la pirmide dividido por el alto de la base de la pirmide. Los valores zNear y zFar son las distancias desde el punto de vista a los planos de recorte. Deben ser siempre positivos. Se debe dar un valor adecuado para el campo de vista, pues sino la imagen aparecer distorsionada. Hay que hacer algunos clculos entre el ancho de la pantalla, el ngulo de visin y la distancia del observador a la pantalla, como se ha visto en la parte de teora.
Informtica grfica.
Informtica grfica.
Descarta la primera matriz de la pila, dejando la segunda como cabeza de la misma. La matriz que se extrae de la pila se destruye. La matriz actual sobre la que se va a trabajar se activa con la funcin glMatrixMode (). Esta funcin sirve para deshacer un paso de transformacin, es decir volver un paso atrs y situarme en el punto donde estaba antes de hacer la ltima transformacin.