1
Primer Parcial Te´orico-Pr´actico: Visualizaci´on tridimensional y geometr´ıa en OpenGL Universidad Militar Nueva Granada Programa de Ingenier´ıa en Multimedia Computaci´on Gr´afica 2009-02
I.
REGLAS
LEA ATENTAMENTE CADA UNA DE LAS INDICACIONES ANTES DE SOLUCIONAR EL PARCIAL. El parcial se debe realizar u´ nicamente en grupos de 2 personas o en forma individual. Para los parciales en grupos de dos, se deben tomar los n´umeros abcdef los cuales salen de tomar tres d´ıgitos de cada c´odigo de estudiante as´ı 1200abc y 1200def . Si es un s´olo estudiante se usa su c´odigo dos veces. Para realizar cada ejercicio se debe: 1. Hacer un diagrama o esquema gr´afico de la situaci´on planteada. 2. Definir las matrices a emplear en cada una de las transformaciones de la tuberia de visualizaci´on. 3. Hacer un programa en usando solamente funciones propias de OpenGL para las transformaciones necesarias. 4. Hacer un programa en OpenGL usando las matrices de transformaci´on especificadas en el punto 2. La evaluaci´on del parcial se har´a en dos etapas. La primera etapa es una evaluaci´on te´orica de los dos primeros puntos, para el grupo 1 el d´ıa 25 de agosto y para el grupo 2 el d´ıa 24 de agosto en la oficina del programa. Para ello se deben traer en papel a mano: los diagramas, planteamientos, c´alculos y matrices de cada punto. En la segunda etapa se evaluar´a la soluci´on final te´orica y pr´actica del parcial, en el laboratorio correspondiente, en los horarios de clase. La soluci´on del parcial debe estar publicada en internet el d´ıa 26 de Agosto antes de las 9AM en la p´agina web de cada uno. Se debe publicar lo siguiente: 1. Un documento en pdf con el diagrama de la situaci´on y las matrices necesarias. 2. Un zip que contenga archivos cpp por cada uno de los puntos implementados. El c´odigo debe estar marcado dentro del c´odigo y externamente y tambi´en debe estar completamente comentariado. El nombre del archiv zip debe ser abc-def.zip, donde abceef viene de sus c´odigos. El nombre de los archivos cpp deben estar de la siguiente forma: Para los puntos correspondientes al item 3 (c´odigo solo OpenGL) el archivo debe llamarse: abc-def-Punto##-GL.cpp Ejemplo: Si los estudiantes tienen los c´odigos 1200125 y 1200324, es el c´odigo del segundo punto y corresponde a la implementaci´on usando s´olo funciones OpenGL el archivo debe llamarse: 125-324-Punto02-GL.cpp. Para los puntos correspondientes al item 4 (c´odigo con matrices calculadas) el archivo debe llamarse: abc-def-Punto##-M.cpp. Ejemplo: Si los estudiantes tienen los c´odigos 1200125 y 1200324, es el c´odigo del segundo punto y corresponde a la implementaci´on usando las matrices calculadas te´oricamente el archivo debe llamarse: 125-324-Punto02-M.cpp. As´ı que el zip en ambos ejemplos deber´ıa llamarse 125-324.zip
2
II.
E JERCICIOS
Para todos los puntos debe construir un modelo geom´etrico en OpenGL que se ajuste a la especificaci´on de la figura 1, d´onde L = a + b + c + d + e + f Las especificaciones de las 5 escenas a graficar son:
L/2
y x z
L/2
L
(0,0,0)
2L
L
Figura 1. Modelo a desarrollar
1. El modelo esta ubicado en el origen de coordenadas. La c´amara observa desde la coordenada (0, 0, L) mirando hacia el punto (0, 0, 0), y con vector arriba en la direcci´on (0, 1, 0). El volumen de visualizaci´on es de proyecci´on ortogonal y se ubica con plano lejano a una distancia de 3L con respecto al plano de visualizaci´on y el plano cercano a una distancia L del plano de visualizaci´on, la ventana de recorte tiene ancho y alto de 2L. 2. Ubique el modelo trasladado desde el origen a la posici´on (L, L, L). Ubique la c´amara en la coordenada (4L, 4L, 4L) mirando hacia el punto (0, 0, 0), y con vector arriba en la direcci´on (0, 1, 0). El volumen de visualizaci´on es de proyecci´on ortogonal y se ubica con plano lejano a una distancia de 6L con respecto al plano de visualizaci´on y el plano cercano a una distancia L del plano de visualizaci´on, la ventana de recorte tiene ancho y alto de 5L. 3. Ubique el modelo en el origen de coordenadas. Ubique la c´amara en la coordenada (0, 0, L) mirando hacia el punto (0, 0, 0), y con vector arriba en la direcci´on (0, 1, 0). El volumen de visualizaci´on es ortogonal oblicua y se ubica con plano lejano a una distancia de 3L con respecto al plano de visualizaci´on y el plano cercano a una distancia L del plano de visualizaci´on, la ventana de recorte tiene ancho y alto de 5L. El angulo α = L y φ = L 4. El modelo esta ubicado en el origen de coordenadas. La c´amara observa desde la coordenada (0, 0, L) mirando hacia el punto (0, 0, 0), y con vector arriba en la direcci´on (0, 1, 0). El volumen de visualizaci´on es de proyecci´on en perspectiva y se ubican con respecto al punto de referencia de la proyecci´on a distancia de 3L para el plano lejano y −L para el plano cercano, la ventana de recorte se ubica en le plano cercano y tiene ancho y alto de 2L. 5. El modelo esta ubicado en el origen de coordenadas. La c´amara observa desde la coordenada (0, 0, L) mirando hacia el punto (0, 0, 0), y con vector arriba en la direcci´on (0, 1, 0). El volumen de visualizaci´on es de proyecci´on en perspectiva y se ubican con respecto al punto de referencia de la proyecci´on a distancia de 3L para el plano lejano y −L para el plano cercano, la ventana de recorte se ubica en le plano cercano y tiene alto de 2L, relaci´on de aspecto 4 : 3 y a´ ngulo de apertura de L grados. III.
´ F UNDAMENTOS TE ORICOS
El resumen de teor´ıa que se enuncia a continuaci´on proviene principalmente del cap´ıtulo 7 y 8 del libro Gr´aficos por computadora con OpenGL (Hearn y Baker, 2006) y de los cap´ıtulos 1 al 3 y el anexo F de la gu´ıa de programaci´on de OpenGL (Woo, Neider, Tom, y Shreiner, 1999), se recomienda antes de implementar leer cuidadosament el cap´ıtulo 3 (Viewing) de dicho libro. En cuanto a la informaci´on concerniente a comandos propios de OpenGL la referencia principal es el OpenGL SDK disponible en internet (OpenGL Software Development Kit, 2009).
3
III-A.
Visualizaci´on tridimensional
En la visualizaci´on tridimensional se estudia el planteamiento conceptual, matem´atico, de implementaci´on y de uso asociado a la siguiente pregunta: ¿C´omo visualizar en una pantalla bidimensional, escenas tridimensionales almacenadas en una m´aquina de c´omputo? Para ello se parte de varios referentes conceptuales y te´oricos entre ellos a mi modo de ver los principales son: el dibujo t´ecnico y de proyecci´on, la geometr´ıa, la trigonometr´ıa, el a´ lgebra lineal y la computaci´on. El problema que plantea la pregunta anteriormente enunciada se establece de la siguiente manera: Dado que se tiene un conjunto de objetos geom´etricos, los cuales est´an definidos en t´erminos de coordenadas en un espacio tridimensional; se desea establecer una proyecci´on bidimensional de los objetos que son visibles para un observador desde una posici´on dada. Dicha proyecci´on se realiza sobre un plano de proyecci´on, el cual se limita en unos valores m´aximos y m´ınimos para coordenadas como se ve en la figura 2, de tal manera que se deben gr´aficar en la pantalla u´ nicamente los objetos cuyas coordenadas proyectadas est´an dentro de la ventana de recorte y no son ocluidos por otros objetos. Plano de visualización
ypv
(xvmax , yvmax)
(xvmin , yvmax)
v
zpv
n u
y
xpv x
z
Ventana de recorte (xvmax , yvmin) (xvmin , yvmin)
Figura 2. Proyecci´on sobre una ventana de recorte.
Para hacer esta graficaci´on se realizan una serie de transformaciones de las coordenadas del modelo (CM ) hasta llegar a las coordenadas de pantalla o de despliegue (CD). Seg´un lo muestra la figura 3. El resultado del uso de estas matrices depende del orden en el cual se aplican o multiplican, dicho orden debe se˜nirse al que presenta la figura 3 de acuerdo del objetivo de la ubicaci´on de escena a lograr.
CM
Transformación de modelado
Transformación de proyección
CP
CU
Transformación de visualización
Transformación de normalización y recorte
CN
CV
Transformación de visor
CD
Figura 3. Tuber´ıa de visualizaci´on.
Las ecuaciones generales a emplear con respecto al libro de (Hearn y Baker, 2006) son las del cuadro I. III-B.
Graficaci´on y visualizaci´on en OpenGL
Para la graficaci´on de geometr´ıa y al visualizaci´on en OpenGL se deben tener encuenta: 1. La graficaci´on se puede hacer con las variaciones de graficaci´on para pol´ıgonos, cuadros o tri´angulos, para ello debe tenerse en cuenta que la cara mira hacia el frente si el orden de los v´ertices va en sentido anti-horario y hacia atr´as si se ordenan en sentido horario (Cap´ıtulo 2 State Management and Drawing Objects secci´on OpenGL Geometric Drawing Primitives y secci´on Polygon Details).
4
Cuadro I ´ 3D (L IBRO DE (H EARN Y BAKER , 2006)) E CUACIONES IMPORTANTES PARA LA VISUALIZACI ON Sistema de coordenadas de visualizaci´on Proyecci´on paralela Proyecci´on paralela oblicua Proyecci´on perspectiva Transformaci´on de visor o pantalla
ec. 7.1 a 7.5 ec. 7.6 y 7.7 ec.7.13 y 7.14 ec.7.40 y 7.41 ec.7.42
2. Para ubicar adecuadamente las geometr´ıas o modelos se debe comprender claramente le uso de los comandos glTranslate, glRotate y glScale. Se recomienda leer bien el Cap´ıtulo 3 Viewing, secci´on A Simple Example: Drawing a cube y secci´on Viewing Transformations del libro (Woo y cols., 1999). 3. Para la multiplicaci´on de matrices con fines de hacer composici´on de transformaciones se debe entender bien el comando glMultMatrix (Cap´ıtulo 3 Viewing, secci´on Thinking about transformations del libro (Woo y cols., 1999)). 4. Para ubicar la c´amara se debe comprender claramente le uso del comando glLookAt. Se recomienda leer bien el Cap´ıtulo 3 Viewing, secci´on A Simple Example: Drawing a cube y secci´on Viewing Transformations del libro (Woo y cols., 1999). 5. La construcci´on de al visualizaci´on paralela se realiza con el comando glOrtho (Ver cap´ıtulo 3 Viewing y el ap´endice F del libro (Woo y cols., 1999) ) 6. La construcci´on de al visualizaci´on en perspectiva se realiza con el comando glFrustum y gluPerspective(Ver cap´ıtulo 3 Viewing y el ap´endice F del libro (Woo y cols., 1999)) 7. La especificaci´on de las matrices y la forma de c´alculo para cada comando se puede ver tambi´en en la guia de funciones que se encuentra en el SDK de OpenGL (OpenGL Software Development Kit, 2009) o en el manual de referencia de OpengL. IV.
A NEXOS
Se anexan c´odigo fuente de ejemplo de uso de graficaci´on usando comandos OpengL y ejemplo usando la matriz calculada 1. Archivo EjemploGL.cpp 2. Archivo EjemploM.cpp R EFERENCIAS Hearn, D., y Baker, M. P. (2006). Gr´aficos por computadora con opengl. Pearson Educaci´on S.A. Opengl software development kit. (2009). En internet. Disponible en http://www.opengl.org/sdk/ Woo, M., Neider, J., Tom, D., y Shreiner, D. (1999). Opengl programing guide. Addison Wesley. http://www.glprogramming.com/red/
Disponible en