2009-10-29

libQGLViewer en Windows usando Microsoft Visual C++ 2008 Express Edition

libQGLViewer es una librería para ver escenas 3D de OpenGL en aplicaciones Qt. Las cosas buenas que tiene libQGLViewer es que ya trae implementadas cosas como el movimiento dinámico de la cámara, y le permite al usuario interactuar con la escena con el ratón y el teclado.

En Linux las cosas con libQGLViewer son supremamente sencillas, simplemente se instala el paquete de desarrollo y la librería queda lista para ser utilizada. En Windows las cosas cambian un poco, es más difícil hacer que la librería quede lista para funcionar y también hacer uso de ella.

En la página oficial de libQGLViewer están los pasos para compilar la librería con el Microsoft Visual Studio pero ellos asumen que uno tiene la integración de la versión comercial de Qt con ell Microsoft Visual Studio y eso no siempre es así, en mi caso por ejemplo, eso no sucede. De modo que aquí están los pasos para compilar la librería usando el Microsoft Visual C++ 2008 Express Edition sin necesidad de usar la integración de la versión comercial.

Estos son los pasos:
  1. Descargar el código fuente del libQGLViewer de la página de la librería.
  2. Descomprimir el código fuente en una carpeta del PC. Yo recomiendo C:\libQGLViewer\2.3.4 (La 2.3.4 fue la que yo descargué pero puede que para el momento en que lean el post haya una versión más reciente. También recuerden que la ruta de acceso carpeta NO DEBE CONTENER ESPACIOS).
  3. Abrir la consola de Microsoft Visual Studio 2008. Inicio -> Todos los programas -> Microsoft Visual C++ 2008 Express Edition -> Visual Studio Tools -> Símbolo del sistema de Visual Studio 2008.
  4. Ir a la carpeta donde se descomprimió el código fuente del libQGLViewer y allí entrar a la carpeta QGLViewer. (Deben quedar ubicados en la ruta C:\libQGLViewer\2.3.4\QGLViewer)
  5. Compilar usando los siguientes comandos:

qmake -config release
nmake

Está compilación crea una carpeta release dentro de la carpeta QGLViewer donde se encuentra el archivo QGLViewer2.dll. Copiamos este .dll a C:\Windows\system32 para que esté disponible para las aplicaciones que usen la librería.

Luego seleccionamos todo lo que hay en el carpeta release y lo movemos a la carpeta QGLViewer (la carpeta padre de release) y eliminamos la carpeta release, esto lo hacemos para facilitar el funcionamiento de la librería. Es solo cuestión de facilidad nada más.

Eso es todo. Ya es posible usar aplicaciones que hagan uso de la librería libQGLViewer.

Ahora explicaré como compilar los ejemplos que vienen en el paquete de código fuente de libQGLViewer. Los ejemplos se encuentran en la carpeta examples. En teoría se debería poder compilarlos todos al tiempo pero esto no funciona así que hay que hacerlo uno a uno. Empezaremos con el más simple, el simpleViewer.

En la carpeta simpleViewer que se encuentra dentro de examples está el código fuente necesario para compilar el simpleViewer. Para compilar el ejemplo se siguen estos pasos:

Abrir el archivo simpleViewer.pro con un editor de texto (puede ser el bloc de notas).

Ese archivo contiene código para tratar de detectar automáticamente donde se encuentran los archivos de inclusión y la librería del QGLViewer pero en Windows no funciona nada bien así que vamos a eliminar todo el código que no sirve para nada.

Localizamos en el archivo la línea ### Unix configuration ### y eliminamos todo el código que hay desde allí hasta la línea ### Windows configuration ###.

Debajo de la línea ### Windows configuration ### se encuentra el siguiente código:

win32 {
MOC_DIR = moc
OBJECTS_DIR = obj
}

Vamos a editarlo para que quede así:

MOC_DIR = moc
OBJECTS_DIR = obj

Luego eliminamos todo el código que está debajo de la línea OBJECTS_DIR, de modo que quedemos solo con algo como esto:

### Windows configuration ###
MOC_DIR = moc
OBJECTS_DIR = obj

Arriba de este código hay dos líneas que empiezan por #INCLUDEPATH y #LIBS. Estas líneas le dicen al compilador donde buscar los archivos de inclusión y la librería de libQGLViewer. Debemos editarlas para hacerlas apuntar a la ruta correcta, las líneas deben quedar más o menos así:

INCLUDEPATH *= C:\libQGLViewer\2.3.4
LIBS *= -LC:\libQGLViewer\2.3.4\QGLViewer -lQGLViewer2

Nota: No hay que olvidarse de quitar el # que se encuentra el inicio de la línea ya que este marca la línea como un comentario.

Eso es todo. Luego de esto ejecutamos qmake para crear el Makefile y luego nmake para compilar el programa. Esto generará un ejecutable simpleViewer.exe en la carpeta. Ya está compilado el ejemplo.

Si encuentran problemas compilando algún ejemplo o la propia librería con los pasos que he dejado aquí no duden en escribir o dejar sus comentarios.

Por ultimo una recomendación. La gran mayoría de los que descargamos el libQGLViewer no lo descargamos para usar aplicaciones que utilizan la librería o para quedarnos pasmados viendo los ejemplos sino para desarrollar nuestras propias aplicaciones.

Si planean usar libQGLViewer en su aplicación yo les recomiendo que no empiecen con un .pro vacío sino que copien uno de los .pro que han editado para compilar los ejemplos y lo editen agregando las fuentes y los headers de su propio proyecto, esto les facilitará mucho la compilación y les quitara de encima problemas de símbolos externos sin resolver que aparecen regularmente al usar libQGLViewer.

4 comentarios:

ML dijo...

Hola Sergio, siguiendo el tutorial pero con MSVC++2005 me aparecen errores del tipo:
1. C:\libQGLViewer-2.3.4\QGLViewer\QGLViewer2.dll : fatal error LNK1107: invalid or corrupt file: cannot read at 0x2C0
2. con QGLViewer2.lib me genera ejecutable pero: "No se puede encontrar el componente... no se encontro mingwm10.dll"
Los has visto antes?

Sergio dijo...

Hola ML

El primer error nunca me ha aparecido y se me hace muy raro. El segundo error te menciona algo del mingwm10.dll a mi nunca me ha aparecido por que para compilar el tanto el Qt como el QGLViewer utilicé el Visual C++ 2008. Mi primera impresión es que descargaste la versión de Qt que no necesita compilación (que baja y se compila con el mingw) y por eso no te funciona con el Visual C++.

Mi recomendación: Sigue el tutorial que hay aquí en el blog para compilar el Qt con el Visual C++ y una vez tengas compilado el Qt sigue nuevamente este tutorial y ya no deberías tener problemas. De cualquier manera si tienes más problemas por favor vuelve a postear aquí en el blog o envíame un correo electrónico y veré que puedo hacer para ayudarte.

Jhon Connor dijo...

hola estoy intentando instalar la version 2.3.17 del libqglviewer en visual express 2008 pero el instalador solo trae un archivo sin extension, no se como continuar supongo que esto no pasaba en versiones anteriores

Sergio Bobillier dijo...

@Jhon Connor
Debes descargar el código fuente del QGLViewer no el instalador. El código fuente es un archivo .zip con varios archivos dentro:

http://www.libqglviewer.com/src/libQGLViewer-2.3.17.zip