Personal Pack para OpenGL

Presentación

OpenGL (Silicon Graphics) no necesita presentación, pues es conocida entre los programadores y especialistas en la computación gráfica, pero en este articulo nos dedicamos a presentar las bondades de la Personal Pack para OpenGL, este Pack a diferencia de GLUT (gl utilies toolkit), o la glaux (auxiliar gl) es configurable en tiempo de diseño y de compilación, si deseamos que dependa de una DLL externa o que sea totalmente independiente de librerías dinámicas y trabaje directamente con el OpenGL Core, todo esto depende del desarrollador...

bits1.jpg
ML Pack para OpenGL


Cabe destacar que recomiendo que usen la versión glPak. Lib estatica para así evitar problemas de DLL sobre cualquier computador con Windows 9x o superior.

Otras librerías para OpenGL

OpenGL (Core) :

Son las DLL que contienen las primitivas para OpenGL, ademas de las API para crear el contexto de renderizacion llamado HGLRC que es intercambiado con la HDC de Windows. en el listado de la parte inferior mostramos las DLL por defecto que vienen al instalar cualquier Windows

OpenGL (core) esta contenido por :

  1. OpenGL32.dll OpenGl32.Lib Primitivas de dibujo
  2. glu32.dll glu32.lib extras del nucleo GL

GLUT (GL Utilies Toolkit) :

Esta en la versión 3.7.6 , Desarrollado por colaboradores de OpenGL para renderizar graficos sobre ventanas Win32 y ademas poder tomar el control sobre los diversos dispositivos de un computador (teclado, mouse, etc) claro que tiene el problemas de las DLL pero para aquellos que no se hacen probelemas , en hora buena...

Pueden descargar el archivo adjunto glut-3.7.6-bin.zip (ver mas abajo)

GLAUX (GL Auxiliar) :

Fue desarrollada antes de GLUT, pero tuvo regular aceptación, hoy es casi obsoleto pues la GLUT es superior en gran medida, lo único rescatable de GLAUX son las rutinas para cargar BMP y convierte internamente los BMP para la manipulación de Texturas.

En lo particular considero que GLAUX es bueno, pues en una LIB estática, no necesita DLL, pero con MingW o Dev-C++ no se que pasa hay un error con GLAUX, pues al terminar de compilar pide glaux.dll y eso no es correcto.

Personal Pack para OpenGL

Desarrollado por MicroLogic © Software Corp. para cuestiones algo diferentes de la enseñanza de OpenGL, pero aqui lo tenemos para el deleite de nuestros lectores.

glPak es mas versatil que cualquier otro producto pues ademas de permitir la comunicacion entre los perifericos y la ventana, permite crear un contexto de renderizacion separado y adjudicable a un formulario padre. es decir se puede crear la View de renderizacion y manipularla desde un Dialogo MFC , Formulario Delphi o C++ Builder.

bits2.jpg
Personal Pack para OpenGL


  • Version DLL :

    Para quienes gustan de trabajar con DLL, esta version les permitira obtener los beneficio de la glPak, usando un modulo separado ademas de que es reemplazable para quienes desean buscar las actualizaciones.

    Disponible para descargas : glPak-vDLL (ver mas abajo)
  • Version LIB estática :

    Esta es mi favorita pues necesita una .DLL y el EXE se hace completamente libre de ellas y solo necesita un computador con Win9x o superior, la utilizacion de esta version no varia, pues el archivo glPak.h, se encarga de la conversion para LIB o LIB-DLL, solo es necesario cambiar los archivos LIB, y todo listo.

    Disponible para descargas : glPak-vLIB (ver mas abajo)

Modo de Uso

Copiar los archivos es de la siguiente manera :

Code: Seleccionar todo
  1. glPak.dll       .\WindowsSystem   y  .\Windows\System32\

  2. glPak.lib       .\Microsoft Visual Studio\Vc98\Lib\

  3. glPak.h         .\Microsoft Visual Studio\Vc98\Include\GL\



La Version LIB estatica, no necesita tanto, pues solo neceista copiar la .H y el archivo .LIB puede estar en la misma carpeta que el proyecto a compilar como podran apreciar en los ejemplos, ahora veamos como se declara en el .CPP

Code: Seleccionar todo
  1.  //

  2.  // Ejemplo 1 : Uso correcto de glPak

  3.  

  4.  #include <windows.h>      // De rigor

  5.  #include <gl/gl.h>        // para las primitivas

  6.  #include <gl/glPak.h>     // nuestro glPak

  7.  

  8. // ....

  9.  

  10.  

  11.  void OnDisplay( )

  12.  {

  13.     // Incializacion de la lona de dibujo

  14.     glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

  15.  

  16.     // define la primitiva de dibujo

  17.     glBegin( GL_QUADS );

  18.         glColor3f( 1.0, 0.0, 1.0 ); glVertex2f( -0.5,0.5 );

  19.         glColor3f( 0.0, 0.0, 1.0 ); glVertex2f(  0.5,0.5 );

  20.         glColor3f( 0.0, 1.0, 0.0 ); glVertex2f(  0.5,-0.5 );

  21.         glColor3f( 1.0, 0.0, 0.0 ); glVertex2f( -0.5,-0.5 );

  22.     glEnd();

  23.    

  24.     // enviar la orden de volcado

  25.     mglSwapBuffers();

  26.  };

  27.  

  28.  int WINAPI WinMain( HINSTANCE hInstance,

  29.                      HINSTANCE hPrevInst,

  30.                      LPSTR lpArgs, int nCmdShow )

  31.  {

  32.         mglInitDisplayMode( 0 );

  33.         mglInitWindowRect( 100, 100, 300, 300 );

  34.         mglCreateWindow( "Demostracion - ML Pack" );

  35.         mglDisplayFunc( OnDisplay );

  36.         mglKeyboardFunc( OnKeyPress );

  37.         mglResizeFunc( OnResizeWindow );

  38.         mglIdleFunc( OnIdle );

  39.         mglMainLoop();

  40.  }



Ejemplos



  • Ejemplo 01 : Texturas
    Aquí hemos recompilado un viejo ejemplo que usaba glaux, esta variante usa nuestra glPak con algunas mejoras todo funciona normalmente.

    bits3.jpg
    glPack - Textura

  • Ejemplo 02 : Renderizar en MFC
    Como crear contexto de rederizacion fuera del clasico Win32, para desarrolladores de alto vuelo con MFC, crea como Child y adjudica al dialogo padre para manipular el dibujo se pasa como argumento una funcion de redibujado, incluye codigo abstracto de MFC con CodeGeneratorX

    bits4.jpg
    Renderizar en MFC

  • Ejemplo 03 : glPak con Dev-C++
    Ejemplos usando Win32 con el mejor compilador para Win32 - GNU MingW, Visual C++ con Win32 no pasa nada, pues se desperdicia tanto potencial.

    bits5.jpg
    glPak con Dev-C++

Archivos Adjuntos

Otros Artículos en esta sección

¿Alguna duda? Sientete libre de hacer tus pruntas en nuestro:
foro de Visual C++ »