OpenGL es una biblioteca gráfica para la creación de escenas 3D, pero finalmente, desde el ordenador nos asomamos a ese mundo 3D a través de una ventana en dos dimensiones. Al igual que en la analogía de la cámara fotográfica, debemos proyectar el mundo 3D sobre una vista 2D, bien sea la fotografía positivada, o como en nuestra caso, una ventana 2D (Tutorial). Al llevar a cabo una proyección, cualquier objeto que caiga totalmente fuera del campo de vista, por ejemplo, los objetos que están a espaldas del observador, no apareceran en la proyección 2D. Y de aquellos objetos que caigan parcialmente dentro del campo de vista solo se proyectará las partes que al recortarse contra el volumen de la vista caigan dentro de él. |
Proyección Ortogonal.
El tipo de proyección que hemos utilizado hasta ahora es una proyección ortogonal. Una proyección ortogonal define un volumen de la vista de tipo paralelepipédico tal y como se muestra en la siguiente figura. La principal característica de esta proyección es que el tamaño de los objetos es independiente de la distancia a la que estén del observador, por ejemplo, dos cilindros del mismo tamaño, uno a cinco unidades y el otro a diez unidades de distancia del observador se proyectarán con el mismo tamaño. Para definir una proyección ortogonal en OpenGL hay que dar los siguiente pasos: glMatrix(GL_PROJECTION); /* Voy a manejar la matriz de proyección */ glLoadIdentity(); /* Cargo inicialmente la identidad */ /* Y ahora defino la proyección ortogonal */void glOrtho(izquierda, derecha, abajo, arriba, cerca, lejos); Si lo que deseamos es trabajar con una proyección ortogonal 2D: void gluOrtho2D(izquierda, derecha, abajo, arriba); que no es más que una proyección ortogonal donde el plan delantero está en -1 y el trasero en 1. |
Proyección perspectiva.
La proyección ortogonal no da sensación de profundidad porque el tamaño de los objetos no depende de su distancia al observador. Para conseguir este efecto necesitamos definir una proyección perspectiva. Esta proyección define un volumen de la vista que es una prisma truncado de base rectangular, como el de la siguiente figura: la función OpenGL que establece este tipo de perspectiva es: void glFrustum(izquierda, derecha, abajo, arriba, cerca, lejos); este modo de definir la proyección perspectiva no es demasiado intuitivo, es más sencillo establecerla con un esquema como el que se muestra en la siguiente figura: y la función OpenGL que la establece es: void gluPerspective(fovy, aspecto, cerca, lejos); donde fovy es el ángulo de apertura del objetivo de la cámara, en grados, y aspecto es la relación ancho/alto de la base de la pirámide. |
No hay comentarios:
Publicar un comentario