Título: Diseño y visita virtual de invernaderos 3D


Objetivos


Con este proyecto se pretenden cubrir dos objetivos bien diferenciados: por un lado elaborar una aplicación que permita diseñar invernaderos 3D y por otro una que permita realizar una visita virtual a la estructura anteriormente creada. Las dos aplicaciones se podrán crear de forma separada (dos programas independientes) o bien crear un solo programa que realice toda la funcionalidad necesaria, como el alumno lo estime oportuno. Los invernaderos creados serán de tipo modular, teniendo la parte superior de los mismos forma de arco.


Descripción detallada


1. Diseño del invernadero


La primera aplicación consistirá en una interfaz gráfica constituida, entre otros elementos, por una estructura rectangular (a partir de ahora llamada plano) dividida en pequeños cuadrados (a partir de ahora cuadrículas) que se corresponderá con una vista aérea o superior de la estructura del invernadero. El plano estará por tanto formado por una maya de cuadrículas, que compartirán vértices y aristas con sus vecinas adyacentes. El tamaño de la arista de cada cuadrícula se corresponderá con una medida en metros determinada de antemano.

El usuario (diseñador de invernaderos) podrá, sobre el plano, delimitar los límites del invernadero, estableciendo de este modo incluso formas irregulares no correspondientes a rectángulos (forma habitual de un invernadero). Para ello podrá marcar los puntos origen y destino de cada una de las “paredes” externas del invernadero, correspondiéndose cada uno de esos puntos con un vértice de una cuadrícula.

Para construir el invernadero, el programa creado por el alumno usará una serie de elementos básicos previamente construidos con alguna herramienta de diseño 3D, como pueden ser Autocad (formato de exportación .dxf), 3D Studio (.3ds) o alguna freeware como puede ser Blender (.blend). Dichas estructuras 3D, independientemente del formato que posean, podrán ser transformadas a cualquier otro formato más sencillo para facilitar la carga de estructuras 3D por parte de la aplicación a construir. Si el alumno así lo desea podrá crear o usar alguna aplicación de exportación de formatos, e incluso crear un programa que modifique la salida de otro en caso de no realizar bien la exportación, para completarla y así adaptarla mejor a sus necesidades.

En dicha interfaz también se podrán modificar una serie de parámetros correspondientes con medidas de las estructuras básicas del invernadero, como por ejemplo la distancia entre los pilares internos, y establecer si la envoltura del invernadero será de plástico o de policarbonato.

A la hora de almacenar la estructura 3D creada (el invernadero completo) existen dos opciones: guardarlas en disco o en memoria. Si el alumno crea dos aplicaciones independientes para elaborar este proyecto, como es evidente deberá guardar la estructura 3D en disco (con el formato que desee) para que la otra aplicación pueda leerla. Si crea una sola aplicación, puede optar por almacenar la estructura del invernadero en memoria si lo desea, y evitar guardarla en disco.

 

2.
Visita virtual


La segunda parte va a consistir en desarrollar un mini-Engine 3D mediante el cual se podrá realizar una visita virtual del invernadero tridimensional. Para ello el alumno usará OpenGL sobre Visual C++ ayudado de todas las APIs que necesite (como por ejemplo GLUT o SDL). En dicha visita el usuario podrá desplazarse horizontalmente por el interior del invernadero mediante el teclado, usando el ratón para poder dirigir el objetivo de la cámara al punto deseado (al purísimo estilo del videojuego Quake).

Además se deberá implementar algún algoritmo para detectar colisiones con las paredes que delimitan los límites del invernadero, para que el visitante quede encerrado en el invernadero. Dicha detección de colisiones sólo se producirá con las paredes, ya que si se produjera con el resto de elementos (como tubos u objetos situados a baja altura) se entorpecería la visita virtual. Por lo tanto, dentro del invernadero la cámara podrá atravesar objetos, pero nunca salir de la estructura que lo delimita. Para implementar la detección de colisiones no es necesario seguir ninguna técnica estándar, el alumno puede incluso escribir su propio método o algoritmo para ello, siempre que contenga alguna base matemática justificada.

La iluminación deberá ser la correcta para poder apreciar los objetos a una cierta distancia y las texturas o materiales usados también deberán apreciarse. También pueden incluirse otros efectos si el alumnos así lo desea, como por ejemplo niebla.


3. Bibliografía básica


3D Game Engine Design: A practical approach to real-time Compuner Graphics, David H. Eberly

OpenGL programming Guide, Jackie Neider (2000)

OpenGL Programming for Windows, Ron Fosner (1997)

OpenGL Programming Guide, Neider & Davis & Woo (1996)

OpenGL SuperBible 2nd Edition, Richard S. Wright Jr & Michael R. Sweet

Interactive Computer Graphics – A top-down approach with OpenGL, Edward Angel

OpenGL Game Programming, Kevin Hawkins & Dave Astle

OpenGL 2.0 Specification  (.pdf desde Internet)