Atras Menú

Black-byte

Hola Complicado Mundo OpenGL-Win32

Este tutorial aborda la creación de una ventana en Windows con un contexto gráfico OpenGL, pero a diferencia de los tutoriales basados en GLUT o AUX, esta aplicación se desarrollará a partir de las librerías de Windows, haciendo todo “manualmente”. Surge la inquietud de ¿por qué hacer este tutorial, si podría hacerse más fácilmente con GLUT, AUX o cualquier otra librería?, la respuesta es porque este tutorial permite conocer mejor la estructura de un programa de Windows, que es útil si se necesita algo mas de control (y problemas) sobre la aplicación. Además, es divertido “ensuciarse” un poco las manos con el API de Windows de bajo nivel.

PROGRAMANDO ORIENTADO A EVENTOS

Windows y en general los sistemas operativos GUI utilizan una arquitectura orientada a eventos para manejar la interacción usuario – sistema – aplicación de manera organizada y eficiente. El modelo es bastante simple, cada vez que el usuario realiza una acción, el sistema determina sobre que aplicación se realizó y le envía un mensaje describiendo la acción, el programa lee y procesa el mensaje, si es que este le interesa (un clic sobre el menú por ejemplo) y realiza los cambios pertinentes.

Un ejemplo con un clic podría ser como este:

usuario-os-aplicacion

En este caso la aplicación, por ejemplo un juego de estrategia, averiguaría la posición en la que en la que se encontraba el puntero cuando se hizo el clic y movería una unidad a esta posición. Es importante anotar que este modelo fue creado para ser eficiente en uso de recursos cuando varias aplicaciones corren “simultáneamente”, un videojuego por el contrario es una aplicación destinada a consumir recursos por su naturaleza de aplicación en “tiempo real”, la razón de esto es que aunque el usuario se tome una siesta, el videojuego está realizando cálculos, reproduciendo sonidos, dibujando la pantalla, la IA esta intentando conquistar el mundo, etc.

LA APLICACION

Las siguientes estructuras y tipos de datos serán usados en el desarrollo de la aplicación:

  • HDC: Handle to Device context. Es el identificador de un Device Context. Un Device Context es una aplicación a través de la cual tienen que pasar las operaciones de dibujo, para que estas puedan ser mostradas en un dispositivo físico, en este caso particular un monitor.
  • PFD: Píxel Format Descriptor. Estructura que describe las propiedades de los píxeles en una superficie de dibujado.
  • HWND: Handle to Window. Es el identificador de una ventana.
  • WNDCLASS: Estructura que contiene los datos necesarios para el registro de una clase ventana, como son su nombre, estilo, función de paso de mensajes, icono, cursor, entre otros.
  • HGLRC: Handle to GL Render Context. Es el identificador de un Render Context, similar al HDC, solo que este no es usado por GDI sino por OpenGL para realizar el dibujado sobre la pantalla.

Es posible dividir esta aplicación en 4 tareas principales:

  • Crear la ventana win32.
  • Preparar la ventana y ligarla a OpenGL.
  • Inicializar OpenGL.
  • Hacer el ciclo de mensajes y dibujado.

Las macros y variables del programa son:

#define VENTANA_ANCHO 640
#define VENTANA_ALTO  480

HDC     hdc=NULL;
HGLRC  hglrc=NULL;
HWND  hWnd=NULL;
HINSTANCE hInstance;
Páginas: 1 2 3 4