- Objetivos.
- Introducción a la herramienta de compilación Visual C++.
- Utilización de la biblioteca de funciones glut
y de las MFCs.
- Creación de una aplicación utilizando las funciones de visualización
de OpenGL.
- Utilización de primitivas poligonales de OpenGl, y de primitivas
de la librería auxiliar glut.
- Utilización de materiales e iluminación.
- Interacción con la escena a través del ratón y teclado.
- Enunciado.
Desarrollar un programa que abra una ventana y se pueda dibujar en ella utilizando
la biblioteca de funciones gráficas OpenGl. Para ello, se utilizará
como base un proyecto del Visual, proporcionado por el profesor.
En la primera sesión de laboratorio se utilizará la biblioteca
de funciones glut, que permite abrir ventanas, visualizar en ellas y gestionar
eventos. La segunda sesión de laboratorio se utilizarán las
funciones de las clases MFCs para las mismas tareas.
En el centro de la ventana, se dibujarán tres ejes coordenados, utilizando
para ello las primitivas de dibujar líneas de opengl. Estos ejes tendrán
un tamaño de dos unidades, y cada uno será de un color. El ejex
de color rojo, eje y de color verde
y el eje z de color azul.
Los objetos se dibujarán centrados en el eje de coordenadas.

Nuestro programa tendrá una serie de menús, que nos permitirán
cambiar la forma de visualizar la escena, y los objetos que en ella aparecen.
Los menús serán los siguientes:
- Menú de visualización. Con dos opciones para la visualización
de polígonos:
- Menú de objetos. Donde se podrá seleccionar el objeto
que aparece en nuestra escena. Los posibles objetos serán:
- Cubo.
- Cuadrado.
- Esfera
- Cilindro.
- Cono.
- Toro.
- Tetera.
- Superficies de Bezier
- NURBS
Todos los objetos tendrán de tamaño máximo "1".
Los cuatro primeros objetos serán dibujados utilizando las primitivas
básicas de la opengl, y los tres últimos utilizando la biblioteca
de objetos glaux.Cada vez que se seleccione un objeto nuevo en el menú,
cambiará el objeto visualizado en la escena.
- Menú de materiales. Se podrán seleccionar tres materiales
que se aplicarán sobre el objeto dibujado: blanco, amarillo y verde.
- Menú de interacción. Permitirá elegir entre
los ditintos modos de interacción con la escena.
Cuando se seleccionen los distintos modos de interacción, el movimiento
en la escena, tanto de zoom como de rotación se realizará
pulsando el botón izquiero del ratón.
- Menú de iluminación. Nuestra escena tendrá
un foco de luz siempre activo. Además, se podrán activar en
este menú otros dos focos:
- Luz 2. Será una luz amarilla, situada en la posición (-60.0,
25.0, 50.0)
- Spot. Será un foco direccional, situado en la posición...
con ángulo....
- Desarrollo de la práctica.
La práctica se desarrollará en dos sesiones de laboratorio.
Sesión 1.
En la primera sesión se realizarán únicamente las funciones
del menú de objetos y del menú de visualización. En esta
sesión no utilizaremos las funciones de clases de las MFCs para crear
menús, por tanto, los distintos modos de visualización y objetos
a dibujar, se seleccionarán desde el teclado.
Los pasos a realizar son los siguientes:
- Crear un proyecto con el Visual C++ del tipo Win32 Console Application.
A continuación hay que incluir
en el proyecto las bibliotecas necesarias para utilizar la opengl, glut
y glaux.
- Incluir en el proyecto los ficheros glcode.cpp y glutcode.cpp. Estos ficheros
contienen respectivamente el código opengl de nuestra apliación,
y el código glut para abrir ventanas y gestionar eventos. Es importante
que todo el código opengl se incluya en el fichero glcode.cpp, puesto
que este fichero lo utilizaremos posteriormente en otro proyecto en el que
no utilizaremos las funciones de la glut. Podéis coger aquí
los ficheros.
- Revisar el código escrito en estos dos ficheros, para conocer la
estructura del programa.
- Dibujar los ejes coordenados en el centro de la ventana.
- Implementar las funciones que dibujan las distintas figuras geométricas.
Cada una de las figuras se dibujará en una función independiente,
a la que se le pasarán como parámetros los posibles valores
de la figura (alto, ancho, número de divisiones, etc.). La figura
a dibujar podrá ser seleccionada desde un menú que se abrirá
con el botón derecho del ratón.
- Las objetos deben ser dibujados utilizando las siguiente primitivas de
opengl y de la glut.
- Cuadrado: GL_POLYGON
- Cubo: GL_QUADS
- Esfera: GL_TRIANGLE_STRIP
- Cilindro: GL_QUAD_STRIP
- Cono: GL_TRIANGLE_FAN
- Toro: glutSolidTorus
- Tetera: glutSolidTeapot
- Superficie de Bezier
- Superficie NURBS.
- En la escena aparecerá dibujado únicamente uno de los objetos.
Cada vez que pulsemos el ratón izquiero del ratón se dibujará
uno distinto.
- Activar los dos modos de visualización (rejilla y relleno), respondiendo
a las pulsaciones de teclado W y F.
- Activar tres materiales distintos utilizando distintas teclas.
Sesión 2.
En esta sesión se realizarán el resto de funciones. Además,
en lugar de utilizar la bilioteca glut se utilizarán las MFCs para
abrir la ventana de visualización y crear los menús.
Los pasos serán los siguientes:
- Crear un proyecto nuevo con el Visual C++ del tipo MFCAppWizard.
LLamaremos al proyecto MfcGl. A continuación se sustituirá
los ficheros de la clase MfcGlView por los proporcionados por el profesor.
También se incluirá el fichero glcode.cpp creado en la sesión
anterior. Ficheros.
- Revisar el código de la clase vista, para ver cómo se prepara
un ventana Windows para dibujar sobre ella con las funciones de OpenGl.
- Crear todos los menús de la aplicación.
- Implementar las funciones para seleccionar desde el menú materiales,
luces, modos de interacción y transformaciones.
- Entrega de la práctica.
La práctica habrá que enseñársela al profesor al finalizar
las sesiones de prácticas. Si durante las sesiones no se ha terminado,
habrá que entregarla antes de la próxima sesión de
prácticas.