¿Qué es OpenGL?

opengl.gifOpenGL es sin lugar a dudas la API que prevalece en la industria para desarrollar aplicaciones gráficas 2D y 3D. Se le puede considerar el sucesor a la formidable IRIS GL-library de Silicon Graphics que hizo tan popular las estaciones de trabajo SGI como plataforma predilecta para desarrollo científico, de ingeniería y de efectos especiales. SGI puso en OpenGL una buena parte de su pericia para hacer una API para el futuro fácil de usar, intuitiva, portable y perceptiva a las redes. Al mismo tiempo podemos acreditar a SGI por darse cuenta de la importancia de los estándares abiertos. Varios fabricantes de software y hardware tomaron parte en la especificación de OpenGL y permanecen detrás suyo. Gracias a esto podemos decir que las aplicaciones OpenGL pueden ser fácilmente portadas a virtualmente cualquier plataforma del mercado, desde PC windows95 a nuestro glorioso sistema Linux, pasando por estaciones UNIX de alto nivel y mainframes. La Architectural Review Board (Junta de Revisión de Arquitecturas) gobierna sobre OpenGL, sus especificaciones, acepta o rechaza cambios y propone tests de conformidad.

En contraste con la antigua IRIS GL-library de SGI, OpenGL es por diseño independiente de plataformas y sistemas operativos. Es perceptiva a la red, de manera que es posible separar nuestra aplicación OpenGL en un servidor y un cliente que verdaderamente produzca los gráficos. Existe un protocolo para mover por la red los comandos OpenGL entre el servidor y el cliente. Gracias a su independencia del sistema operativo, el servidor y el cliente no tiene porque ejecutarse en el mismo tipo de plataforma, muy a menudo el servidor sera un supercomputador ejecutando una compleja simulación y el cliente una simple estación de trabajo mayormente dedicada a la visualización gráfica. OpenGL permite al desarrollador escribir aplicaciones que se puedan desplegar en varias plataformas fácilmente.

Por encima de todo, OpenGL es una biblioteca estilizada de trazado de gráficos de alto rendimiento, hay varias tarjetas gráficas aceleradoras y especializadas en 3D que implementan primitivas OpenGL a nivel hardware. Hasta hace poco, estas xgl_cube.pngavanzadas bibliotecas gráficas solian ser muy caras y solo estaban disponibles para estaciones SGI u otras estaciones de trabajo UNIX. Las cosas están cambiando muy deprisa y gracias a las generosas licencias y el kit de desarrollo de controladores de SGI, vamos a ver más y más hardware OpenGL para usuarios de PCs. ¡Si, los usuarios de Linux van a poder aprovechar esta oportunidad! Una compañía denominada 3Dfx Interactive provee de una serie de tarjetas gráficas 3D y de soporte para SO Linux a través de su Glide library. Hay otro artículo en esta serie de Phillip Ross (Tarjetas Gráficas 3Dfx) que describe con detalle las tarjetas de 3Dfx disponibles para nosotros. Esto muestra un cambio de actitud por parte de algunos fabricantes de hardware que se dan cuenta por fin de que el mercado de Linux está aquí para quedarse. Los fans de Linux deberían apoyar y favorecer este tipo de iniciativas.

Para conseguir la independencia del hardware de OpenGL, no se incluyeron comandos para tareas de ventanas, ni para obtener entrada del usuario. Esto suena como un serio contratiempo pero como veremos después (veáse serie de Programación GLUT), tiene un simple arreglo. De hecho, para mantener el estilo y alto rendimiento de OpenGL, no se provee de comandos para describir modelos complejos, tales como moléculas, aeroplanos, casas, pájaros, etc. En OpenGL solo encontrarás primitivas de objetos geométricos: puntos, líneas y polígonos. El desarrollador tiene que construir sus propios modelos basándose en unas pocas y simples primitivas. Hay bibliotecas relacionadas que proveen de modelos más complejos, y cualquier usuario se puede construir las suyas.

En nuestra serie de artículos sobre programación con OpenGL usaremos la interface C para OpenGL porque es la más popular. Sin embargo el lector debería saber que hay otros bindings disponibles: FORTRAN, C++, Ada y Java . Más adelante en nuestras series, despues de que el lector se haya familiarizado con la interface C para OpenGL diremos algo sobre Open-inventor, una extensión a la biblioteca C++ para OpenGL.

Sin entrar en demasiados detalles, describiremos algunas de las características que OpenGL implementa:

  • Primitivas geométricas Permiten construir descripciones matemáticas de objetos. Las actuales primitivas son: puntos, líneas, polígonos, imágenes y bitmaps.
  • Codificación del Color en modos RGBA (Rojo-Verde-Azul-Alfa) o de color indexado.
  • Visualización y Modelado que permite disponer objetos en una escena tridimensional, mover nuestra cámara por el espacio y seleccionar la posicíon ventajosa deseada para visualizar la escena de composición.
  • Mapeado de texturas que ayuda a traer realismo a nuestros modelos por medio del dibujo de superficies realistas en las caras de nuestros modelos poligonales
  • La iluminación de materiales es una parte indispensable de cualquier grágico 3D. OpenGL provee de comandos para calcular el color de cualquier punto dadas las propiedades del material y las fuentes de luz en la habitación.
  • El doble buffering ayuda a eliminar el parpadeo de las animaciones. Cada fotograma consecutivo en una animación se construye en un buffer separado de memoria y mostrado solo cuando está completo.
  • El Anti-alizado reduce los bordes escalonados en las líneas dibujadas sobre una pantalla de ordenador. Los bordes escalonados aparecen a menudo cuando las líneas se dibujan con baja resolución. El anti-alizado es una ténica común en gráficos de ordenador que modifica el color y la intensidad de los pixels cercanos a la línea para reducir el zig-zag artificial.
  • El sombreado Gouraud es una técnica usada para aplicar sombreados suaves a un objeto 3D y producir una sutilscreenshot.jpg diferencia de color por sus superfícies.
  • El Z-buffering mantiene registros de la coordenada Z de un objeto 3D. El Z-buffer se usa para registrar la proximidad de un objeto al observador, y es también crucial para el eliminado de superfícies ocultas.
  • Efectos atmosféricos como la niebla, el humo y las neblinas hacen que las imágenes producidas por ordenador sean más realistas. Sin efectos atmosféricos las imágenes aparecen a veces irrealmente nítidas y bien definidas. Niebla es un término que en realidad describe un algoritmo que simula neblinas, brumas, humo o polución o simplemente el efecto del aire, añadiendo profundidad a nuestras imágenes.
  • El Alpha blending usa el valor Alfa (valor de material difuso) del código RGBA, y permite combinar el color del fragmento que se procesa con el del pixel que ya está en el buffer. Imagina por ejemplo dibujar una ventana transparente de color azul claro enfrente de una caja roja. El Alpha blending permite simular la transparencia de la ventana, de manera que la caja vista a través del cristal aparezca con un tono magenta.
  • Los planos de plantilla permiten restringir el trazado a ciertas regiones de la pantalla.
  • Las listas de Display permiten almacenar comandos de dibujo en una lista para un trazado posterior, cuando las listas de display se usan apropiadamente puedan mejorar mucho el rendimiento de nuestras aplicaciones.
  • Los Evaluadores Polinómicos sirven para soportar B-splines racionales no uniformes, esto es para ayudar a dibujar curvas suaves a través de unos cuantos puntos de referencia, ahorrándose la necesidad de acumular grandes cantidades de puntos intermedios.
  • Características de Feedback, Selección y Elección que ayudan a crear aplicaciones que permiten al usuario seleccionar una región de la pantalla o elegir un objeto dibujado en la misma. El modo de feedback permite al desarrollador obtener los resultados de los cálculos de trazado.
  • Primitivas de Raster (bitmaps y rectángulos de pixels)
  • Operaciones con Pixels
  • Transformaciones: rotación, escalado, perspectivas en 3D

Como hemos mencionado para hacer OpenGL verdaderamente portable e independiente de la plataforma fue necesario sacrificar todos los comandos que interactuaban con el sistema de ventanas, por ejemplo: abrir una ventana, cerrar una ventana, escalar una ventana, dar forma a una ventana, leer la posición del cursor; y también con los dispositivos de entrada como la lectura del teclado etc.. Todas estas acciones son altamente dependientes del sistema operativo. Originalmente, la biblioteca GL tenía su propio conjunto de comandos para manejo de ventanas y periféricos pero eran específicos de IRIX (el SO UNIX de SGI). Se deja al desarrollador de OpenGL conocer su propia plataforma y tomar medidas para manejar ventanas en la plataforma nativa.

Extraido de http://www.linuxfocus.org – Salu2

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: