Introduccion a OpenGL

23
Capítulo 2: Introducción a OpenGL 1. Introducción 1.1. Autores Rodrigo Borrego Bernabé. DNI 52.412.535-C Carmen Sánchez Gómez. DNI 07.980.715-Z

Transcript of Introduccion a OpenGL

Page 1: Introduccion a OpenGL

Capítulo 2: Introducción a OpenGL

1. Introducción

1.1. Autores Rodrigo Borrego Bernabé. DNI 52.412.535-C Carmen Sánchez Gómez. DNI 07.980.715-Z

Page 2: Introduccion a OpenGL

1.2. Tabla de contenidos

1. Introducción ................................................................................................ 1

1.1. Autores .................................................................................................. 1

1.2. Tabla de contenidos .............................................................................. 2

1.3. Tabla de figuras .................................................................................... 3

2. Antes de comenzar ..................................................................................... 4

3. ¿Qué es OpenGL? ...................................................................................... 5

4. Historia ........................................................................................................ 7

4.1. OpenGL ................................................................................................ 8

5. Características de OpenGL ........................................................................10

6. Arquitectura de OpenGL ............................................................................11

6.1. OpenGL como una máquina de estado ...............................................11

6.2. Flujo de renderización de OpenGL ......................................................11

6.2.1. Display lists ...................................................................................12

6.2.2. Evaluadores ..................................................................................12

6.2.3. Operaciones Per-Vertex ................................................................12

6.2.4. Ensamblado de primitivas .............................................................13

6.2.5. Operaciones sobre píxeles ............................................................13

6.2.6. Ensamblado de texturas ................................................................13

6.2.7. Rasterización .................................................................................13

6.2.8. Operaciones sobre fragmentos .....................................................13

6.3. Invarianza en OpenGL .........................................................................14

6.3.1. Repetibilidad ..................................................................................14

6.3.2. Algoritmos multipasada .................................................................14

6.3.3. Reglas de invarianza .....................................................................15

7. Bibliotecas relacionadas con OpenGL .......................................................16

7.1. OpenGL Utility Library (GLU) ...............................................................16

7.2. GLX y WGL ..........................................................................................16

7.3. AUX......................................................................................................16

7.4. OpenGL Utility Toolkit (GLUT) .............................................................16

8. Aplicaciones ...............................................................................................17

8.1. Simulación ...........................................................................................17

8.2. Juegos .................................................................................................19

8.3. Ciencia y análisis .................................................................................21

9. Bibliografía .................................................................................................23

Page 3: Introduccion a OpenGL

1.3. Tabla de figuras Ilustración 2.1. Flujo de renderización de OpenGL ...........................................12

Page 4: Introduccion a OpenGL

2. Antes de comenzar

La informática gráfica es la parte de la informática que se encarga de la representación de gráficas en el ordenador y se ha convertido en el mundo de la computación en un recurso habitual para la comunicación entre los ordenadores y los usuarios. En la actualidad las implicaciones son múltiples con otros sectores y su importancia es extrema. Se encarga del almacenamiento, creación y visualización de imágenes en el ordenador. Las imágenes reales o con efectos realistas se consiguen aproximando al máximo la representación gráfica que se genera en la pantalla a las imágenes que percibe el ser humano con la vista. Para dar realismo a las imágenes se emplean técnicas de luz, colores, texturas, transparencias, brillos… OpenGL fue la primera librería gráfica que abordo el uso eficiente de esos recursos, así como la estandarización de los procedimientos de la generación de gráficos. Actualmente es un estándar sobre gráficos por computadora, uno de los más prestigiosos y utilizados del mundo.

Page 5: Introduccion a OpenGL

3. ¿Qué es OpenGL? OpenGL es una especificación estándar que define una API multilenguaje y multiplataforma para escribir aplicaciones que produzcan gráficos 2D y 3D. Fue desarrollada por Silicon Graphics Inc. (SGI) en 1992. Su nombre viene del inglés Open Graphics Library, cuya traducción es biblioteca de gráficos abierta (o mejor, libre, teniendo en cuenta su política de licencias). Existen implementaciones eficientes de OpenGL suministradas por fabricantes para Mac OS, Microsoft Windows, Linux, varias plataformas Unix, y PlayStation 3. También existen varias implementaciones software que permiten que OpenGL esté disponible para diversas plataformas sin soporte de fabricante. La especificación OpenGL era revisada por el OpenGL Architecture Review Board (ARB), fundado en 1992. El ARB estaba formado por un nutrido conjunto de empresas interesadas en la creación de una API consistente y ampliamente disponible, entre las que destacan, además de Silicon Graphics, grandes compañías como Compaq, IBM, Intel, Microsoft, HP, Sun Microsystems, Apple, y fabricantes de tarjetas gráficas como por ejemplo ATI, nVidia o 3D labs. El comité ARB se encarga de gestionar el estándar OpenGL para que vaya adoptando nuevas tecnologías, implementadas en un principio como extensiones; y a medida que se aceptan, integrándose en sucesivas versiones del estándar. Las extensiones no son más que llamadas a funciones que no pertenecen al estándar de OpenGL. Cuando una compañía desarrolla una nueva tecnología se la presenta al ARB. Si éste lo acepta, se añade como extensión propia de esa compañía para que se pueda utilizar en OpenGL. Se crean nuevas funciones añadiéndoles en el nombre la abreviatura de la compañía, por ejemplo ATI para ATI y NV para nVidia. Seguidamente, si varias compañías aceptan esa tecnología pasa a ser una extensión con abreviatura _EXT. Si por último el comité ARB acepta como estándar esta tecnología se cambiará el nombre siguiendo la nomenclatura del estándar. En septiembre del 2006 el comité ARB cambió de gestor, y ahora la especificación de OpenGL la controla el consorcio de industria Khronos, dedicada a la creación de API's para la creación y visualización de formatos multimedia en distintos dispositivos y plataformas. Khronos gestiona otros proyectos relacionados con OpenGL como por ejemplo OpenGL ES (Embedded System), para dispositivos móviles, portátiles, etc. OpenGL se utiliza en campos como CAD, realidad virtual, representación científica y de información, simulación de vuelo o desarrollo de videojuegos, en el que su principal competidor es Direct3D de Microsoft Windows. Es independiente del Hardware gráfico y contiene comandos que ayuda a definir objetos, aplicar transformaciones a esos objetos, cambiar sus propiedades (color, textura, lux…) entre otros. Al ser una librería gráfica hay

Page 6: Introduccion a OpenGL

que saber que OpenGL no posee funciones para el control de Audio, Red o Control de Entrada.

Page 7: Introduccion a OpenGL

4. Historia Antes de la aparición a OpenGL, muchos fabricantes tenían diferentes bibliotecas gráficas, esto hacia que hubiera que tratar con interfaces muy diferentes y escribir drivers específicos para cada tipo de hardware, resultando muy costoso. Para solventar esto, se subcontrataban equipos de programadores para agilizar el desarrollo, los cuales tenían que implementar manualmente el código necesario para que el programa pudiera trabajar con cada plataforma, sistema operativo y hardware diferente. Dado que cada equipo trabajaba por separado en sus interfaces, se producía mucho código redundante. También producía que la potabilidad de aplicaciones de una plataforma hardware a otra consumiera demasiado tiempo y entrañara dificultad. Al principio de los años 1990 SGI era un grupo de referencia en gráficos 3D para estaciones de trabajo. Suya era la API IRIS GL, considerada puntera en el campo y estándar de facto, llegando a eclipsar a PHIGS, basada en estándares abiertos. IRIS GL se consideraba más fácil de usar y, lo más importante, soportaba renderizado en modo inmediato. Además, PHIGS, aparte de su mayor dificultad, fue considerada inferior a IRIS GL respecto a funcionalidad y capacidad. La competencia de SGI (Sun Microsystems, Hewlett-Packard e IBM, entre otros) fue capaz de introducir en el mercado hardware 3D compatible con el estándar PHIGS mediante extensiones. Esto fue reduciendo la cuota de mercado de SGI conforme iban entrando diferentes proveedores en el mercado. Por todo ello, en un intento de fortalecer su influencia en el mercado, SGI decidió convertir el estándar IRIS GL en un estándar abierto. SGI observó que la API IRIS GL no podía ser abierta debido a conflictos de licencias y patentes; también contenía funciones no relevantes para los gráficos 3D como APIs para ventanas, teclado o ratón (en parte, porque fue desarrollada antes de la aparición del X Window System o de los sistemas NeWS de Sun). Además, mientras iba madurando el soporte del mercado para el nuevo estándar, se pretendía mantener los antiguos clientes mediante bibliotecas añadidas como Iris Inventor o Iris Performer.

El resultado de todo lo anterior fue el lanzamiento del estándar OpenGL, cuyas principales ventajas fueron:

• Estandarizar el acceso al hardware.

• Trasladar a los fabricantes la responsabilidad del desarrollo de las interfaces con el hardware.

• Delegar las funciones para ventanas al sistema operativo.

Con la variedad de hardware gráfico existente, lograr que todos hablasen el mismo lenguaje obtuvo un efecto importante, ofreciendo a los desarrolladores de software una plataforma de alto nivel sobre la que trabajar.

Page 8: Introduccion a OpenGL

SGI lideró la creación del OpenGL Architecture Review Board (OpenGL ARB), grupo de empresas que mantendría y extendería la especificación OpenGL. OpenGL evolucionó desde IRIS GL, superando su problema de dependencia del hardware al ofrecer emulación software para aquellas características no soportadas por el hardware del que se dispusiese. Así, las aplicaciones podían utilizar gráficos avanzados en sistemas relativamente poco potentes. Durante un tiempo, se barajó la posibilidad de lanzar un producto denominado OpenGL++, que se divulgó entre unos pocos grupos interesados, pero nunca apareció finalmente como producto. Como competidor principal de OpenGL debemos mencionar a Microsoft Direct3D, que aunque solo esté disponible para sistemas Windows goza de una gran aceptación entre los fabricantes.

4.1. OpenGL La segunda versión es en realidad la séptima revisión desde lanzamiento de la versión 1.0. El 2 de agosto de 2006 se publicó OpenGL 2.1. Siendo completamente compatible con las versiones anteriores, aporta además nuevas características, entre las que destacan:

• Sombreado programable. Con la nueva versión el núcleo de OpenGL

consta de sus APIs y el OpenGL Shading Language. Entre sus nuevas

funcionalidades OpenGL Shading Language incluye la posibilidad de

crear sombreados asociados al aspecto ("fragmentos") de la geometría

("vértices") de un objeto 3D.

• De una sola vez pueden aplicarse sombreados sobre diferentes

renderizados y generar distintos resultados que se almacenan en

buffers.

• La aplicación de texturas no está condicionada por su tamaño que, a

diferencia de lo que ocurría en el pasado, no tiene por qué ser potencia

de dos. De esta forma ahora se soportan texturas rectangulares y se

reduce el consumo de memoria.

• Se pueden aplicar patrones ("stencil") sobre las dos caras de las

primitivas geométricas, mejorando el rendimiento en el volumen

sombreado y en los algoritmos de renderizado de geometría sólida.

• "Point Sprites", puntos geométricos sobre los que se aplican texturas.

Son especialmente útiles en sistemas con partículas.

Page 9: Introduccion a OpenGL

Incorpora soporte para las interfaces de programación de aplicación (API) del

Lenguaje de Sombreado OpenGL (OpenGL Shading Language). Con la

incorporación de OpenGL Shading Language en el núcleo de OpenGL, los

desarrolladores pueden estar seguros de que todas las tarjetas gráficas que

soportan OpenGL 2.0 incluirán esta característica independientemente del

sistema operativo.

OpenGL® Shading Language ha sido ampliamente probado durante un año

siguiendo los procesos de estandarización definidos por el ARB. Las

potenciales aplicaciones incluyen imágenes de alta calidad para juegos,

imágenes con mayor realismo para formación y simulación, mejores

herramientas de análisis para visualización médica, así como entornos

simulados de productos manufacturados con mejor diseño. Desde que se

anunció en 2003, OpenGL Shading Language se ha convertido en el lenguaje

de sombreado más utilizado para el desarrollo de aplicaciones de visualización

y gráficos interactivos, con implementaciones en UNIX, Microsoft Windows,

Linux y otros sistemas operativos.

Page 10: Introduccion a OpenGL

5. Características de OpenGL OpenGL está enfocado a la creación de contenido visual para su volcado sobre un framebuffer que luego será mostrado en pantalla (y eventualmente a la lectura de la información almacenada en ese framebuffer). No contempla el manejo de dispositivos relacionados indirectamente con la interacción gráfica con el ordenador (como el ratón o el teclado). OpenGL basa su funcionamiento en una serie de modos configurables y la ejecución de una serie de primitivas de dibujo que no son más que la realización de segmentos, polígonos, puntos o rectángulos de píxeles. Los modos se seleccionan y configuran y las operaciones se realizan mediante el envío de comandos gracias a la invocación de funciones (llamadas a métodos). Los comandos OpenGL se organizan en secuencias y su procesamiento se realiza siempre en el orden en que se reciben, aunque puede producirse un retraso entre la ejecución de un comando y la representación de sus efectos. Este comportamiento implica que la ejecución de una primitiva debe ser completada (se debe realizar por completo el trazado) antes de que cualquier otra primitiva subsecuente pueda ser invocada y pueda actuar sobre el contenido del frambuffer. Esto implica también que la obtención de información (operaciones de lectura) recupera siempre un estado consistente con la ejecución completa de los comandos OpenGL anteriormente invocados (salvo que explícitamente se especifique otro comportamiento). OpenGL proporciona mecanismos para el control directo de las operaciones fundamentales en el trabajo con gráficos en dos y tres dimensiones, incluyendo tratamiento de luces, métodos de anti-aliasing, etc. Sin embargo, no proporciona mecanismos de definición de objetos geométricos complejos, más bien permite especificar cómo dichos objetos deben ser renderizados a partir de objetos geométricos simples. El ámbito de operación de OpenGL llega hasta el framebuffer pero en ningún caso más allá. Es decir, queda bajo la responsabilidad del sistema sobre el que se ejecuta la aplicación el control de las ventanas de la aplicación, del volcado del framebuffer al monitor (y la realización de operaciones como la corrección del gamma, etc.).

Page 11: Introduccion a OpenGL

6. Arquitectura de OpenGL OpenGL implementa una arquitectura cliente servidor, donde un programa (el cliente) solicita comandos y dichos comandos son interpretados y procesados por el sistema OpenGL (el servidor). No es necesario que el servidor se sitúe en el mismo ordenador que el cliente, permitiendo a la especificación OpenGL ser “transparente a la red”. Un mismo servidor puede mantener una serie de contextos OpenGL, representando cada uno de ellos el encapsulamiento de un estado OpenGL . Un cliente selecciona el contexto al que se desea conectar para solicitar las operaciones (y el comportamiento ante la solicitud de comandos sin estar conectado a un contexto queda sin definir).

6.1. OpenGL como una máquina de estado Se ha mencionado ya implícitamente que OpenGL es una máquina de estado. Existen ciertas variables de estado como el color, por ejemplo, que determinan el estado de la máquina. Este estado puede ser modificado mediante comandos y las modificaciones se mantendrán hasta que se vuelvan a alterar las variables. Un buen número de variables de estado se refieren a modos que pueden ser habilitados o deshabilitados con los comandos glEnable() y glDisable(). Se puede comprobar el estado de un modo con glIsEnabled(). Además de los modos, las variables de estado almacenan valores que pueden ser recuperados con diferentes comandos según el tipo de dato que se quiera obtener (glGetBooleanv(), glGetDoublev(), glGetFloatv(), glGetIntegerv(), glGetPointerv(), etc.). Se puede acceder a ciertas variables de estado mediante invocaciones específicas, como glGetLight*(), glGetError() o glGetPolygonStipple(). Es posible almacenar colecciones de variables de estado en pilas con los métodos glPushAttrib() o glPushClientAttrib() y recuperarlas después con glPopAttrib() o glPopClientAttrib(). El listado completo de variables de estado disponibles puede ser consultado en la documentación.

6.2. Flujo de renderización de OpenGL La mayoría de las implementaciones de OpenGL implementan un orden de operaciones idéntico, una serie de etapas de procesamiento denominado el flujo de renderización de OpenGL (OpenGL rendering pipeline). El flujo está representado en la Ilustración 2.1, y aunque es necesario resaltar que no es una definición estricta ni obligatoria, proporciona indicaciones bastante fiables sobre el orden de las operaciones en OpenGL.

Page 12: Introduccion a OpenGL

Ilustración 2.1. Flujo de renderización de OpenGL

Lo primero que se debe reseñar es que el flujo de datos de la información geométrica (vértices, líneas y polígonos) es distinto en una parte del proceso del flujo de la información de píxeles (píxeles, mapas de bits e imágenes). La segunda parte del proceso, sin embargo, es común para ambos tipos de datos hasta finalizar toda la información en los buffers de salida (framebuffers).

6.2.1. Display lists Según el modo seleccionado, una serie de datos a mostrar pueden ser mostrados inmediatamente cuando son creados o bien almacenarlos para mostrarlos con posterioridad. Cuando su salida es retardada, se almacenan en las display list hasta que son requeridos.

6.2.2. Evaluadores Las primitivas geométricas están definidas en última instancia como un conjunto de vértices. Las curvas paramétricas y las superficies están definidas por puntos de control y funciones polinómicas denominadas funciones base. Los evaluadores proporcionan los mecanismos para obtener los vértices utilizados para representar las superficies a partir de los puntos de control. El método proporciona los vértices, las coordenadas de las texturas, los colores y los valores de coordenadas espaciales.

6.2.3. Operaciones Per-Vertex Antes de poder procesar la información geométrica los vértices deben ser convertidos en primitivas. Ciertos datos geométricos (por ejemplo las coordenadas espaciales) son transformados por matrices 4x4 de números reales para convertir una posición en el modelo tridimensional en una posición en la pantalla. Esta operación puede ser aún más complicada si están activadas algunas capacidades avanzadas. Es en esta fase donde se procesa la aplicación de las texturas, calculando las zonas a mostrar y su posición. Las modificaciones debidas a la iluminación también son procesadas en esta fase,

Page 13: Introduccion a OpenGL

que debe tener en cuenta los vértices procesados, las superficies, la posición de los focos de luz y las propiedades de los materiales para producir la información sobre el color a mostrar.

6.2.4. Ensamblado de primitivas En esta fase deben calcularse los puntos que por su posición quedan fuera de la imagen visible, esto es, aquella información geométrica que no debe ser renderizada. También deben calcularse las intersecciones entre primitivas (que pueden añadir nuevos vértices con la intersección de líneas o polígonos). Es también en esta fase cuando se realiza el procesamiento de la perspectiva.

6.2.5. Operaciones sobre píxeles Como ya se ha reseñado, la información de píxeles es procesada de manera diferente. La primera operación a realizar sobre una matriz de píxeles en memoria es la conversión entre una amplia variedad de formatos a las correspondientes componentes activas. A continuación los datos son escalados, trasladados y procesados por un mapa de píxeles para enviar el resultado a la etapa de rasterización o almacenados en la memoria de texturas. El proceso puede ser inverso, esto es, es posible la extracción de los datos de los framebuffers para su conservación en la memoria del sistema.

6.2.6. Ensamblado de texturas Las aplicaciones OpenGL pueden aplicar imágenes de texturas sobre los objetos geométricos para proporcionarles una apariencia más realista. Si se utilizan varias imágenes simultáneamente es aconsejable cargarlas sobre objetos de texturas de modo que se puedan intercambiar entre ellos. Algunas implementaciones destinan recursos específicos para acelerar el proceso y mejorar el rendimiento de la aplicación de texturas y existen memorias de alto rendimiento para texturas.

6.2.7. Rasterización La rasterización es la conversión de los datos, tanto geométricos como de píxeles, en fragmentos. Cada cuadro en un fragmento se corresponde con un pixel en el framebuffer. Para esta conversión es necesario tener en cuenta los vértices, las líneas, las intersecciones, los tamaños de puntos, el grosor de las líneas, el modelo de sombras, la ocultación de ciertos objetos, etc. Además, cada cuadro de un fragmento debe llevar asociada una información de color.

6.2.8. Operaciones sobre fragmentos

Page 14: Introduccion a OpenGL

Una vez que todas las operaciones anteriores han sido realizadas y como último paso antes del volcado de los fragmentos en el framebuffer es necesario realizar una serie de operaciones que pueden alterar (o incluso descartar) los distintos fragmentos. Todas estas operaciones pueden estar habilitadas o no según el estado de la máquina OpenGL. La primera operación es la aplicación de texturas, donde para cada fragmento se genera y se aplica un texel (texture element) a partir de la memoria de texturas. A continuación se efectúan los cálculos relativos a la niebla, el test de las tijeras, el test de transparencias, la eliminación de superficies ocultas, operaciones lógicas, fusión de fragmentos, etc.

6.3. Invarianza en OpenGL Debido a que OpenGL no es una especificación exacta a nivel de píxel no está garantizada la coincidencia entre dos imágenes producidas por diferentes implementaciones OpenGL. Sin embargo, lo que sí está especificado es la coincidencia exacta, en ciertos casos, de imágenes producidas por la misma implementación. La invarianza está expresada en la especificación OpenGL por el cumplimiento de varias reglas.

6.3.1. Repetibilidad La repetición de la misma serie de comandos partiendo de un mismo estado inicial debe producir el mismo estado final y los mismos resultados en los framebuffers. El propósito de la repetibilidad es evitar comportamientos extraños cuando se redibuje una escena con doble buffer. Estos comportamientos, si no se verifica la repetibilidad pueden ser molestos para el observador. Además, esta regla es útil para la realización de pruebas con las implementaciones. Sin embargo, así descrita la repetibilidad es una condición demasiado débil, puesto que atendiendo solo a esta regla la variación de un único y minúsculo polígono podría dar lugar a una representación con todos los píxeles diferentes. Es por ello que son necesarias reglas adicionales de invarianza para garantizar la utilidad de una implementación.

6.3.2. Algoritmos multipasada Los algoritmos multipasada se caracterizan por renderizar una escena múltiples veces, cada una de ellas partiendo de un vector de modo OpenGL ligeramente diferente, para, eventualmente, producir una salida en el framebuffer. Un ejemplo de estos algoritmos sería el borrado de una primitiva del framebuffer pintándola de nuevo, bien con un color diferente (el color de fondo) o utilizando la operación lógica XOR. Estos algoritmos, en una implementación consistente

Page 15: Introduccion a OpenGL

deben producir en cada renderizado resultados que difieran entre sí de manera coherente con los cambios realizados sobre el vector de modo.

6.3.3. Reglas de invarianza Para un contexto OpenGL concreto:

Regla 1. Para un vector de estado de la máquina OpenGL y el framebuffer y para cualquier comando OpenGL el estado de la máquina OpenGL y el framebuffer resultante debe ser idéntico en cada ejecución.

Regla 2. Los cambios en una serie de valores de estado no deben generar efectos colaterales (no deben interferir con otros valores de estado). La lista de valores de estado completa puede consultarse en la especificación OpenGL, catalogados en valores de estado que deben cumplir esta regla y los que se sugiere que la cumplan. Corolario 1. La generación de fragmentos debe ser invariable con

respecto a las variables de estado más significativas.

Corolario 2. Las coordenadas de ventana (en las tres dimensiones) de los fragmentos generados también deben ser invariantes en sus características básicas.

Regla 3. La aritmética de cada operación aplicada sobre un fragmento debe ser invariante excepto en lo relativo a parámetros que directamente controlen dicha operación. Corolario 1. Las imágenes renderizadas en diferentes buffers de color

pero compartiendo el mismo framebuffer (bien simultáneamente o por separado utilizando la misma secuencia de comandos) deben ser idénticas píxel a píxel.

Regla 4. El mismo sombreado debe producir el mismo resultado al ser efectuado repetidas veces sobre la misma entrada.

Page 16: Introduccion a OpenGL

7. Bibliotecas relacionadas con OpenGL OpenGL contiene un conjunto de poderosos pero primitivos comandos que efectúan operaciones a muy bajo nivel. Además, acciones como la apertura de una ventana en el sistema grafico u otras similares no entran en el ámbito de OpenGL. Por ello es muy habitual contar con el apoyo de algunas bibliotecas de funciones ajenas a OpenGL pero muy relacionadas con ella. Las más populares se describen a continuación:

7.1. OpenGL Utility Library (GLU) Contiene bastantes rutinas que usan OpenGL a bajo nivel para realizar tareas como transformaciones de matrices para tener una orientación especifica, subdivisión de polígonos, etc. Son funciones con un nivel de abstracción por encima de OpenGL para facilitar la labor de programación de aplicaciones. Esta biblioteca suele estar incluida en las implementaciones OpenGL y sus métodos son fácilmente reconocibles porque comienzan por el prefijo glu.

7.2. GLX y WGL GLX da soporte para maquinas que utilicen X Windows System y permite realizar todos los procesos gráficos relacionados con las ventanas de aplicación. WGL es el equivalente para sistemas Microsoft.

7.3. AUX La biblioteca de funciones AUX fue desarrollada en la etapa inicial de desarrollo de OpenGL por SGI para server de apoyo a la creación de pequeños programas de demostración. Actualmente está declarada obsoleta y ya no está ni soportada ni actualizada. El desarrollo de aplicaciones utilizando esta biblioteca está desaconsejado, debiéndose utilizar GLUT en su lugar. AUX se describirá en profundidad en el capítulo 4.

7.4. OpenGL Utility Toolkit (GLUT) Es un sistema de ventanas, escrito por Mark Kilgard, independiente del sistema usado. GLUT ofrece una interfaz común para múltiples plataformas para el manejo de ventanas, buffers, renderización de texto, entrada por teclado y menús, permitiendo a los desarrolladores utilizar un interface común para el sistema de ventanas independiente de la plataforma. Además, debido a su sencillez, tiene una suave curva de aprendizaje. GLUT es actualmente soportado por varios lenguajes, en especial ANSI C y FORTRAN.

Page 17: Introduccion a OpenGL

8. Aplicaciones Existen múltiples aplicaciones para las que OpenGL ha servido como base, desarrolladas en diferentes plataformas (Windows, Unix/Linux, Mac Os, Java y Sistemas embebidos) y con diferente finalidad (simulación, juegos, salvapantallas, científicos, mapas, navegación, procesadores…). A continuación se mencionan algunas de las diferentes aplicaciones desarrollados con OpenGL, indicar que donde mayor variedad se encuentran es en la plataforma Windows y sobre todo en juegos.

8.1. Simulación

Aerofly Simulación de control aéreo Windows

Cloth-Sim Simulador en tiempo real de ropa Windows

Page 18: Introduccion a OpenGL

Biodesigner Simulación y modelación molecular Windows

Dex Desarrollo, análisis y visualización de múltiples cuerpos Linux

X-Vison Visualización y animación de datos en 3D Linux

Page 19: Introduccion a OpenGL

8.2. Juegos

Chess Commander Juego de ajedrez. Windows

Jedi Academy Entrenamiento de un jedi. Windows

PinBall Juego de Pinball. Windows

Page 20: Introduccion a OpenGL

Follbilliard Simulación física del juego del billar Linux

KhunPhan Pullze Linux

Page 21: Introduccion a OpenGL

8.3. Ciencia y análisis

Great Stella Estudio de poliedros Windows

MVE – Medical Volume Explorer Visualización en 3D de datos médicos. Windows

Visit Visualización y parametrización de múltiples datos Linux

Page 22: Introduccion a OpenGL

Medit Visualización científica Linux

Page 23: Introduccion a OpenGL

9. Bibliografía � OpenGL Programming Guide � OpenGL Programming Guide, Second Edition. Addison Wesley. � Mark Segal, Kurt Akeley. The OpenGL Graphics System: A Specification,

2004. � Wright, Richard S.; Lipchak, Benjamin. OpenGL, 1ª Ed. Anaya Multimedia.

� http://www.opengl.org/

� http://www.sgi.com/