1) Qué es Opengl?

1.1) El "Assembler" de los gráficos 3D

OpenGL es una librería gráfica muy poderosa que permite crear dibujos 3D en varios sistemas y entornos de desarrollo. Esta librería provee al programador una serie de primitivas que le permiten definir un entorno tridimensional, dibujar objetos geométricos en su interior, agregarles luz y color, mejorar la calidad visual mediante algunas técnicas avanzadas (transparencias, antialiasing, niebla, etc.) y asignar texturas a los objetos (para obtener efectos más realistas).

Existen otras librerías gráficas que hacen lo mismo (en especial, DirectX de Microsoft). Entonces, ¿Por qué elegir OpenGL? Algunas de las razones principales son las siguientes:

- OpenGL es una biblioteca desarrollada por SGI (www.sgi.org), la mayor organización especializada en software gráfico en el mundo. Esto le asegura tener el respaldo de años de investigación. Otros paquetes no cuentan con esta ventaja, lo que los deja muy atrás en eficiencia e interfaz para el programador (la gente de SGI tiene bastante claro cómo prefieren los programadores crear sus gráficos; lo hicieron durante años).

- OpenGL es portable: existen APIs de OpenGL para C++, Java y Visual Basic (entre otros), y el código es portable (si el programador es suficientemente cuidadoso) incluso a distintos sistemas operativos. OpenGL corre bajo Windows, Linux, Unix, etc.

- OpenGL es el estándar actual en la industria de los gráficos 3D (aunque Microsoft siga luchando para mantener a DirectX en competencia...). ¿Han escuchado hablar de juegos como el Quake o el Half Life? Bueno, adivinen qué paquetes gráficos usan...

- OpenGL maneja los gráficos a muy bajo nivel (por algo se lo conoce como el "Assembler" de los gráficos 3D). Esto explica por qué es hasta 10 veces más rápido que otros paquetes, pero sobre todo proporciona una gran libertad de acción al programador. Además, es muy fácil de usar (mucho más que otras librerías!)

1.2) Cómo funciona

El secreto de la eficiencia y portabilidad de OpenGL es que funciona como una interfaz entre el programador y el Sistema Operativo. Es decir, OpenGL no "hace" los dibujos, simplemente le indica al sistema operativo lo que hay que hacer. Podría esquematizarse su funcionamiento así:

Programa -----> OpenGL ------> Sistema Operativo -----> Gráficos en Pantalla.

La ventaja de esta aproximación es que el Sistema Operativo sabe mejor que nadie cómo hacer las cosas. En Windows 95/98/NT/2000, de la interfaz entre OpenGL y el OS se ocupa opengl32.dll. Cada tarjeta gráfica 3D tiene su propia versión de opengl32.dll, que suele venir optimizada para obtener un mejor rendimiento de los comandos OpenGL para esa tarjeta. Por lo tanto, el programador simplemente escribe los comandos OpenGL y puede confiar en que su versión de opengl32.dll se ocupará de ejecutarlos en la forma más eficiente para su propia tarjeta gráfica. En el caso de otros sistemas operativos, la librería vendrá de otra forma, pero la idea es la misma.

1.3) Un ejemplo

Un ejemplo de código OpenGL puede dar una idea de cómo se usa. Supongamos que ya tenemos todo pronto para programar bajo OpenGL, que ya fijamos las condiciones de iluminación, la posición de la cámara, y el área del "mundo virtual" que estará visible en pantalla (en los capítulos siguientes iremos viendo cómo hacer todo esto). Ahora queremos dibujar un triángulo. Nada más fácil; el siguiente código lo hace (y creo que se explica solo):

glBegin(GL_TRIANGLE);
glVertex3f(3.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 3.0, 0.0);
glEnd();

"glBegin .... glEnd" indican que se está definiendo un objeto geométrico. GL_TRIANGLE indica que es un triángulo. Y glVertex permite especificar la coordenada de cada uno de los (tres) vértices del triángulo. En cuanto al apéndice "3f" en "glVertex3f", por ahora no es importante y más adelante vamos a ver de qué se trata.



Algunos links...

Página anterior: Curso de OpenGL

Página siguiente: 2: Cómo inicializar OpenGL

Volver a la página principal

Puedes enviar tus comentarios, sugerencias, insultos y demás a: Feedback Programación