30AugOpenGL y GLUT en Visual C++

Dado mi anterior post sobre OpenGL y GLUT en XCode, he decidido complementarlo con este nuevo post que explica cómo configurar OpenGL y la librería GLUT en el entorno de desarrollo por excelencia en el mundo de MS Windows, Visual Studio. En este caso concreto utilizaremos Visual C++ en su versión gratuita, Visual C++ Express Edition 2008, que se puede descargar desde la página web de Microsoft.

Una vez instalado, nos disponemos a descargar la librería GLUT para Win32 desde la página de Nate Robins o directamente desde este enlace. Al descomprimir el zip descargado nos encontramos con 4 ficheros y un readme.

Ficheros de la librería GLUT para Win32

Ficheros de la librería GLUT para Win32

A continuación abrimos Visual C++ para empezar a configurarlo para incluir la librería. Primero vamos a Herramientas/Opciones….

Vamos a Herramientas/Opciones... para empezar a configurar.

Vamos a Herramientas/Opciones... para empezar a configurar.

En la ventana que se nos abre, seleccionamos en el árbol de la izquierda Proyectos y soluciones/Directorios de VC++.

Seleccionamos Proyectos y soluciones/Directorios de VC++.

Seleccionamos Proyectos y soluciones/Directorios de VC++.

En el desplegable de la esquina superior derecha seleccionamos “Archivos de inclusión“.

En el desplegable seleccionamos "Archivos de inclusión".

En el desplegable seleccionamos "Archivos de inclusión".

Hacemos clic sobre el icono de la carpeta para añadir un nuevo archivo de inclusión que podemos elegir haciendo clic en el botón con los tres puntos suspensivos. Ahí seleccionamos la carpeta de los archivos de glut (glut-3.7.6-bin).

Hacemos clic en la carpeta y en el botón de los tres puntos [ . . . ]

Elegimos la carpeta glut-3.7.6-bin.

En esta misma ventana seleccionamos ahora “Archivos de biblioteca” mediante el mismo procedimiento incluyendo también la carpeta de la librería.

Elegimos la carpeta glut-3.7.6-bin.

Realizamos el mismo procedimiento para archivos de biblioteca.

Realizamos el mismo procedimiento para archivos de biblioteca.

Elegimos la carpeta glut-3.7.6-bin.

Ahora debemos copiar la DLL que se incluye en el paquete de la librería en algún lugar en el que Windows la localice, por ejemplo, en C:\WINDOWS\system32.

Copiamos la glut32.dll en C:\WINDOWS\system32.

Copiamos la glut32.dll en C:WINDOWSsystem32.

Ahora ya podemos crear un nuevo proyecto vacío mediante el menú Archivo/Nuevo/Proyecto.

Creamos un proyecto mediante el menú Archivo/Nuevo/Proyecto.

Creamos un proyecto mediante el menú Archivo/Nuevo/Proyecto.

Elegimos en General, la opción de Proyecto vacío y establecemos un nombre para el proyecto, en este caso “Segmentation Fault”.

Elegimos Proyecto vacío y le damos un nombre.

Elegimos Proyecto vacío y le damos un nombre.

A continuación, añadimos un fichero en el que incluir el código fuente haciendo clic derecho sobre Archivos de código fuente/Agregar/Nuevo Elemento….

Añadimos un nuevo fichero.

Añadimos un nuevo fichero.

Le damos un nombre al fichero, por ejemplo, main.cpp.

Le damos un nombre al fichero.

Le damos un nombre al fichero.

En el nuevo fichero podemos incluir una ligera variante del código que propuse en el anterior post que os detallo a continuación:

#ifdef WIN32
#include <windows.h>
#endif

//include GLUT
#include <glut.h>

//set the macros for the window size
#define SIZEX 500
#define SIZEY 500

//initializing stuff
void init(void)
{
   glDisable( GL_DEPTH_TEST ); //triangles have two sides
   glDisable( GL_CULL_FACE ); //triangles have two sides
}

//Render one frame
void render(void)
{
   //Clear the window and the depth buffer
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

   //Render the triangle
   glBegin(GL_TRIANGLES);
   glColor3f(1.0f, 0.0f, 0.0f ); //change vertex color
   glVertex2d( -0.5f, -0.5f );

   glColor3f(0.0f, 1.0f, 0.0f ); //change vertex color
   glVertex2d( 0.5f, -0.5f );

   glColor3f(0.0f, 0.0f, 1.0f ); //change vertex color
   glVertex2d( 0.0f, 0.5f );
   glEnd();

   //Swap front and back buffer
   glutSwapBuffers();
}

int main(int argc, char **argv)
{
   //init all OpenGL stuff
   glutInit(&argc, argv); //init GLUT
   glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE ); //init framebuffer properties
   glutInitWindowSize(SIZEX, SIZEY); //init window dimensions
   glutCreateWindow("Segmentation Fault");  //create window

   //now that we have the window we can set the opengl state
   init();

   //set the callbacks
   glutDisplayFunc(render);  //render a frame
   glutIdleFunc(render);       //what to do when nothing happens

   //start the GLUT mainloop (this function will be executed in a loop)
   glutMainLoop();

   return 0;
}

El resultado debería ser, al igual que en la anterior entrega, un triángulo colorido.

Resultado final.

Resultado final.

Os recuerdo, como siempre, que tenemos los comentarios para las dudas y problemas que os surjan. Salu2!

Fuentes

Javi Agenjo – http://www.tecn.upf.edu/~jagenjo/

3 Responses and Counting...

  • Eymard

    August 30th 2009

    Hola

    Exelente post, a mi me sirvio mucho, ya que estoy iniciando con Visual C++. Gabi, ¿sabes de algún material para seguir aprendiendo Visual C++?, en particular me interesa el procesamiento de imágenes, ya sabes, fft, filtrado inverso, etc…

    Gracias y felicidades.

  • Gabi García

    Hola Eymard,

    Me alegro que te haya sido útil y te agradezco tu comentario, siempre anima a seguir posteando cuando alguien dedica 5 minutos a agradecerlo.

    Para aprender Visual C++ (el uso del IDE) hay infinidad de tutoriales que encontrarás por internet y nunca está de más echar un ojo al MSDN de Microsoft.

    Si te interesa el tema de procesamiento de imagen yo he trabajado con la librería Magick++ (la librería de ImageMagick para C++) y es muy completa. De hecho hay un post introductorio que realicé hace algún tiempo.

    Para los cálculos de Fourier y semejantes (FFT, DFT, IDFT…) he utilizado Octave/Matlab y también un programa llamado MegaWave muy apropiado para procesamiento de imagen.

    Te dejo algunos enlaces por si te parecen interesantes:

    http://megawave.cmla.ens-cachan.fr/
    http://msdn.microsoft.com/es-es/library/e6w9eycd%28VS.80%29.aspx
    http://www.gnu.org/software/octave/
    http://www.imagemagick.org/Magick++/

    Salu2!!!

  • mariza

    muy bueno el post, yo recien empiezo en esto y tengo el visual c++ 6.0, instale el opengl 2(version) he tratado de correr algunos ejemplos pero me muestra error.