CINVESTAV-IPN

Maestría en Ciencias de la Computación

Jose Luis Ortigosa Flores

Realidad Aumentada

Tarea 4: Escena en 3D en OpenGL

MATERIAREALIDAD AUMENTADA
ALUMNOORTIGOSA FLORES JOSE LUIS
FECHA ENTREGA5-NOV-2015

Actividades

  1. Diseño de la escena
  2. Dibujando los objetos en OpenGL
  3. Moviendo el COCHE
  4. Perspective, Ortho y Frustum
  5. Porgramas

Diseño de la escena

Diseño de los objetos de la tarea anterior en 3D. Un COCHE y un ROMBO, El COCHE debe de poder moverse y el ROMBO debe estar fijo.
Para transformar el COCHE de 2D a 3D se decidio hacer otro diseño para quitarle complejidad.
En el caso del ROMBO se desicidio transformarlo en una especie de prisma.

Diseño del Rombo

Para el diseño del prisma se empeso por dibujar un ROMBO en el plano cartesiano como se ve en la siguiente imagen.

Diseño del rombo en el plano XY.

Para después agregar puntos extras en 3D para lograr la siguiente forma.

Rombo transformado a 3D en una especie de prisma.

Diseño de la rueda

Para dibujar la rueda primero se traso un poligono en el plano tal como se ve en la siguiente imagen.

Rueda en el plano cartesiano.

Para transformar este poligono en un rueda en 3D. Se le dio volumne al duplicar este poligono y moverlo una unidad sobre el eje z. para tener una forma como la siguiente:

Diseño de la rueda en 3D.

Diseño de la carroceria

Para diseñar la carroceria se toma la idea usada para crear la rueda, que fue, crear dos poligonos similares y paralelos y trasar lineas para unir sus vertices.
Para la carroceria se creo el siguiente poligono en el plano cartesiano.

Poligono base para la carroceria en el plano XY.

Este poligono se duplica y se coloca en la posición de z = 4 para darle volumen, de tal forma que se obtiene el siguiente solido.

Diseño de la carroceria en 3D.

Dibujando los objetos en openGL

La rueda

Para dibujar la rueda primero se creo una matriz que almacenara los puntos de los dos poligonos que forman las caras de la rueda.

Ya con los vertices almacenados en la estructura se procedio a dibujar primero la cara trasera con GL_POLYGON para despues dibujar la cara frontal del la rueda con otro GL_POLYGON, no sin antes trasar cuadrados con GL_QUAD_STRIP para que se unieran los dos poligonos. Esto se puede ver en el siguiente fragmento de código.

La carroceria

Al igual que con la rueda primero se creo una estructura que almacenara los vertices de los dos poligonos.
En el siguiente fragmento se ve la estructura que almanena los vertices que conforman la carroceria; estos vertices fueron tomandos directamente del diseño.

Para dibujar la carroceria se usaron dos GL_POLYGON para crear las caras lateralales de la carroceria, no sin antes dibujar una serie de cuadrados con GL_QUAD_STRIP que uniera los puntos de los dos polygonos.

Dibujado del coche

Como se puede ver en las secciones anteriores, los objetos fueron dibujados muy cerca del origen, para facilitar las cosas, ahora el siguiente paso es usar los objetos anteriores para que que formen un COCHE.

Para craar el COCHE partimos de la posición donde esta la carrocería, sólo creamos 4 ruedas y las trasladamos a los lugares que les corresponde.

Tomando en cuenta que las ruedas deben quedar en la posición que indica la imagen anterior, hacemos las traslaciones correspondientes a cada una de las 4 ruendas, En el codigo siguiente se ve la creacón del COCHE.

En el fragmento de código anterior podemos ver que se crean primero 2 ruedas que son las que estan más hacia atras y se trasladan a sus posiciones correspondientes. Lo siguiente que se dibuja es la carroceria para finalizar con las últimas 2 ruedas. Y finalmente todo el conjunto de objetos se traslada a otra posición para aleja, unpoco, al COCHE del origen.

Dibujando el rombo

Para dibujar el rombo en 3D se cargaron los vertices una matriz para falicitar el dibujado al permitir la reultilización de los vertices.

Para crear el prisma nos ayudamos de GL_TRIANGLE_FAN donde usamos al primer y último vertice como vertices centrales.

Con el primer "For" creamos la parte superior del prima y con el segundo la parte inferior.

Moviendo el COCHE

El coche se puede mover con las flechas del teclado, el coche se mueve sobre el plano XZ. Para lograr que se moviera se usa la translación, a la cual se le asocian dos variables que se incrementan y decrementan segun eventos del teclado.

variables dx y dz asociadas al teclado.

Perspective, Ortho y Frustum

Perspective

Para activar glPerspective() podemos presionar los numeros 1, 2, 3, 4 ó 5, los cuales a su vez activan 5 posiciones de camaras diferentes.

Las posiciones de la camara fueron almacenados en la matriz camaras y estas son seleccionadas con el teclado, el código encargado de realizar esta operación es la siguiente.

Coche visto con perspectiva y camara 1.
Coche visto con perspectiva y camara 4.

Frustum y Ortho

Con el número 6 se activa la vista con Ortho y con 7 para Frustum

Código para la activación de Frustum y ortho.
Coche visto con Frustum.
Coche visto con Ortho.

Configuración

Para usar las funciones gluPerspective() o gluLookAt() se req1uiere incluir el header GL/glu.h

Y para que qmake lo considere a la hora de generar el makefile el necesario modificar el archivo *.pro y agregar la linea: LIBS += -lGLU
Que significa que a la hora de compilar se debe de agregar la bandera -lGLU, lo que hara que ligue la biblioteca en donde estan definidas las funciones gluPerspective y gluLookAt.

De tal modo que para compilar el programa, sólo se requiere llamar ejecutar el comando qmake y después el comando make, para finalmente ejecutar el programa.

Programa

Tarea4.OrtigosaFloresJoseLuis.tar