Realidad Aumentada
Tarea 4: Escena en 3D en OpenGL
MATERIA | REALIDAD AUMENTADA |
---|---|
ALUMNO | ORTIGOSA FLORES JOSE LUIS |
FECHA ENTREGA | 5-NOV-2015 |
Actividades
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.
Para después agregar puntos extras en 3D para lograr la siguiente forma.
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.
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 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.
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.
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.
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.
Frustum y Ortho
Con el número 6 se activa la vista con Ortho y con 7 para Frustum
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.