En el siguiente artículo me gustaría hablar sobre OpenGL, muchos la conocéis como la alternativa a Direct3D, intentaré hablar un poco sobre su origen e historia. Además, espero aclarar ciertos conceptos erróneos que he escuchado sobre OpenGL.
OpenGL viene de Open Graphics Library, es decir, librería gráfica abierta. Y aquí viene la primera idea que puede llevar a confusión: OpenGL no tiene nada que ver con el movimiento Open Source, muchos piensan que OpenGL es una librería gratuita y abierta y NO es así.
OpenGL es un estándar que especifica las librerías de acceso al hardware, es decir, los drivers que generalmente son desarrollados por los fabricantes del hardware. Éstos deben implementar las especificaciones que dicta OpenGL. De esta manera puede existir mucho hardware distinto que si cumple con el estándar OpenGL permitirá a los desarrolladores de aplicaciones 3D (incluido videojuegos) tener una capa común para el desarrollo independiente del hardware.
Historia
Al principio de los 90, Silicon Graphics Inc (o SGI), que era el líder en estaciones de trabajo 3D, tenía un API de programación llamado IrisGL. El sector del 3D en esa época no era demandado por la industria de los videojuegos, sino por la industria que necesitaba profesionalmente gráficos 3D, como por ejemplo empresas desarrolladoras de aplicaciones de arquitectura, industria, simulaciones, etc.
Sun Microsystems, HP e IBM comenzaron a introducir sus soluciones hardware 3D en el mercado, restándole cuota de ventas a la solución de Silicon Graphics, la competencia. Utilizaban las extensiones de un sistema estándar llamado PHIGS. IrisGL estaba considerado mejor y más sencillo que PHIGS, pero estaba perdiendo valor debido a la competencia de PHIGS, de manera que Silicon Graphics entonces decidió abrirlo al mercado para que se adoptase como estándar.
Debido a que IrisGL ya estaba patentado y tenía licencias registradas, no se podía abrir al mercado. Además no sólo era un API 3D, sino que también tenía otras cualidades como un gestor de ventanas, control de teclado, etc. (en aquella época no se había desarrollado el sistema de ventanas X11). De esta manera Silicon Graphics presentó el estándar OpenGL, el cual se encarga sólo de la representación de gráficos, dejando al sistema operativo la gestión de ventanas, eventos, etc.
Evolución de OpenGL
En 1992 Silicon Graphics creó el OpenGL ARB (Arquitecture Review Board) donde un grupo de compañías se encargaría del mantenimiento y evolución del estándar OpenGL. Como se puede suponer, los miembros del ARB, además de Silicon Graphics, eran 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, las cuales se implementan como extensiones; y a medida que se aceptan, pasan a ser en el futuro parte 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 de la función con la abreviatura a _ARB y en la siguiente versión estándar de OpenGL, esa tecnología ya pertenecerá a la especificación estándar.
Ejemplos de extensiones:
- WGL_ARB_render_texture
- GL_ARB_vertex_shader
- GL_EXT_texture3D
- GL_SGI_color_table
- GL_NV_texture_shader
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.
En resumen, OpenGL es una marca registrada de Silicon Graphics, y el comité ARB se encarga de la especificación y mantenimiento del estándar OpenGL. Ese estándar se traduce como documentación en inglés donde se explica detalladamente lo que deben acometer las especificaciones de la librería y el resultado que deben dar. Esta documentación la utilizan los fabricantes de hardware 3D para su soporte OpenGL, y esa implementación también se llama OpenGL. Obviamente los fabricantes tienen que pagar dinero por tal documentación, es decir por licenciar OpenGL. Una vez hecha la implementación, el ARB la prueba y verifica para que concedan el logo de OpenGL al producto desarrollado.
Como comenté anteriormente, OpenGL es una marca registrada, y no tiene nada que ver con el movimiento Open Source, de hecho existe una libería abierta llamada Mesa para linux que implementa el estándar de OpenGL, pero para evitar costes de licencia (o problemas jurídicos) los desarrolladores de Mesa deben decir que es un API muy parecida a OpenGL.
Filosofía de OpenGL:
La programación sobre OpenGL sigue la filosofía de una máquina de estados. Se establece un estado, se hacen operaciones, se termina el estado y se pasa a hacer otra cosa.
OpenGL considera como primitivas los vértices, líneas y polígonos. Generalmente la unidad básica en la representación de gráficos 3D es el triángulo, el polígono más usado para formar objetos 3D. Este es un ejemplo de cómo se pinta un triángulo en OpenGL:
glBegin(GL_TRIANGLES); // Drawing Using Triangles
glVertex3f( 0.0f, 1.0f, 0.0f); // Top
glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left
glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right
glEnd(); // Finished Drawing
Al final juntando todos los triángulos pueden formar objetos tan sencillos pero a la vez tan hermosos como la mítica tetera de OpenGL, usada continuamente para hacer pruebas 3D.
Como véis se representan con coordenadas 3D, luego OpenGL es el que se encarga de transformar eso a un plano 2D. No penséis que la representación de una escena 3D o render de un juego es algo tan sencillo como decirle a OpenGL que abra un fichero de una escena 3D de Maya o de 3D StudioMax y lo pinte en pantalla. De todo eso se encarga el motor 3D, que por supuesto, cada compañía de videojuegos la tiene que programar desde cero (a menos que compre una hecha) y como elementos básicos que se le proporcionan a OpenGL son las posiciones en el espacio de los vértices, y su posición correspondiente en una textura 2D. Al ser tan bajo el nivel de descripción del mundo 3D se permite a los programadores mucha libertad para poder experimentar con nuevas técnicas, mejoras de rendimiento y al final diferenciarse para tener un producto mejor. Aunque como punto negativo esto hace que cualquiera que quiera programar en OpenGL necesita tener un gran conocimiento sobre 3D y sus algoritmos para su representación. No os preocupéis, esto pasa igualmente con Direct3D.
lightman
|