2. OpenGl
• es una especificación estándar que define una API
multilenguaje y multiplataforma para escribir aplicaciones
que produzcan gráficos 2D y 3D. La interfaz consiste en más
de 250 funciones diferentes que pueden usarse para
dibujar escenas tridimensionales complejas a partir de
primitivas geométricas simples, tales como puntos, líneas y
triángulos. Fue desarrollada originalmente por Silicon
Graphics Inc. (SGI) en 19922 y se usa ampliamente en
CAD, realidad virtual, representación
científica, visualización de información y simulación de
vuelo. También se usa en desarrollo de videojuegos, donde
compite con Direct3D en plataformas Microsoft Windows.
3. Historia
• En los años 1980 el desarrollo de software que fuese compatible con un
amplio rango de hardware gráfico era un verdadero reto para los
desarrolladores. Había que tratar con interfaces muy diferentes y escribir
drivers específicos para cada tipo de hardware, resultando muy costoso;
por ello, se subcontrataban equipos de programadores para agilizar el
desarrollo. Dado que cada equipo trabajaba por separado en sus
interfaces, se producía mucho código redundante. Además, era un
proceso caro, por lo que varios grupos innovadores aceptaron el reto de
encontrar un método mejor.
• 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,10 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.
4. • 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.
5. El resultado de todo lo anterior fue el lanzamiento del
estándar OpenGL.
• Algunos de los logros que se consiguieron 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.
6. • En 1992,11 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 en los años siguientes. 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.
• En 1994 SGI barajó la posibilidad de lanzar un producto denominado
OpenGL++, el cual incluía elementos como una API de scene-graph (basada
presumiblemente en la tecnología de Performer). Dicha especificación fue
divulgada entre unos pocos grupos interesados, pero nunca apareció
finalmente como producto.12
• En 1995 Microsoft lanzó Direct3D, que se convertiría en el principal
competidor de OpenGL. El 17 de diciembre de 199713 Microsoft y SGI
iniciaron el proyecto Fahrenheit, esfuerzo cooperativo con el objetivo de
unificar las interfaces de OpenGL y Direct3D (y añadir también una API
scene-graph). En 1998 se uniría al proyecto Hewlett-Packard.14 Pese a
tener un principio prometedor en estandarizar las APIs de gráficos 3D,
debido a restricciones financieras en SGI y la falta general de apoyo por
parte de la industria, fue finalmente abandonado en 1999.15
7. Historia versiones
• OpenGL 1.0
• Publicada en enero de 1992.
La primera especificación de OpenGL fue
publicada por Mark Segal y Kurt Akeley.
• OpenGL 1.1
• Publicada en enero de 1997.
OpenGL 1.1 se enfocó en el soporte de texturas
y formatos de textura sobre hardware de GPU.
Tarjetas gráficas soportadas: todas
9. OpenGL 1.2
Publicada el 16 de marzo de 1998.
OpenGL 1.2 se enfocó en el soporte de texturas de volumen, píxeles empaquetados, reescalado
normal, muestreo de texturas clamped/edge y procesamiento de imágenes.
Tarjetas gráficas soportadas: Rage 128, Rage 128 GL, Rage XL/XC, Rage 128 Pro, Rage Fury MAXX,
y todas las tarjetas posteriores.
Extensión Id de extensión Funciones
3D Volume Textures GL_EXT_texture3D glTexImage3DEXT
BGR_EXT, BGRA_EXT (in
BGRA Texture Format GL_EXT_bgra
glTexImage2D)
Packed Pixels GL_EXT_packed_pixels
Normal Rescaling GL_EXT_rescale_normal
GL_EXT_separate_specular
Separate Specular Color
_color
Texture Coord Edge
SGIS_texture_edge_clamp
Clamping
Texture LOD Control SGIS_texture_lod
Draw Range Elements EXT_draw_range_elements glDrawRangeElements
EXT_color_table,
EXT_convolution,
SGI_color_matrix,
Image Processing Subset
EXT_histogram,
EXT_blend_color,
EXT_blend_minmax
10. OpenGL 1.2.1
Publicada el 14 de octubre de 1998
OpenGL 1.2.1 fue un lanzamiento menor publicado depués de
OpenGL 1.2 (16 de marzo de 1998) el cual añadió multi-textura,
o unidades de textura, al canal de renderizado. Esto permitió
texturas múltiples que son combinadas por píxel durante la
rasterización.
Tarjetas gráficas soportadas: Radeon, Radeon Mobility, Radeon
7500 Mobility, Radeon 8500, Radeon 9000, Radeon 9200,
Radeon 9600, Radeon 9800, GeForce 3, GeForce 4Ti, GeForce
FX, y todas las tarjetas posteriores
Extensión Id de extensión Funciones
glActiveTextureARB,
Multi-Texturing SGIS_multitexture
glClientActiveTextureARB
11. • OpenGL 1.3
• Publicada el 14 de agosto de 2001.
OpenGL 1.3 añadió soporte para textura cubemap, múltiples
texturas, multi-muestreo y operaciones de combinación de
unidades de textura (añadir, combinar, dot3, border clamp).
Tarjetas gráficas soportadas: Radeon 32/36, Radeon 64/7200,
Radeon 7000, Radeo AIW, Radeon 7500, Radeon IGP 320M,
Radeon IGP 345M, ES1000, Radeon 8500, Radeon 9000/Pro,
Radeon 9100/9200/9250 (Pro & IGP), GeForce 3, GeForce 4Ti,
GeForce FX, y todas las tarjetas posteriores.
12. • OpenGL 1.4
• Publicada el 24 de julio de 2002.
OpenGL 1.4 añadió soporte de sombreado por
hardware, coordenadas niebla, generación automática de
mipmaps, y modos de textura adicionales.
Tarjetas gráficas soportadas: Quadro DCC, Quadro4 380
XGL, Quadro4 500XGL, 550XGL, Quadro4
700XGL, 750XGL, 900XGL, 980XGL, y todas las tarjetas
posteriores.
13. • OpenGL 1.5
• Publicada el 29 de julio de 2003.
OpenGL 1.5 añadió soporte para objetos de búfer de vértice
(VBOs), consultas de oclusión, y amplió las funciones de
sombreado.
Tarjetas gráficas soportadas: Radeon X800, Radeon
9600, Radeon 9700, Radeon 9800, GeForce FX, y todas las
tarjetas posteriores.
14. • OpenGL 2.0
• OpenGL 2.0 añadió soporte para un lenguaje ensamblador basado en GPU
verdadero, llamado ARB (diseñado por el Architecture Review Board), que se
convertiría en el estándar para vertex y fragment shaders. Las tarjetas
publicadas con OpenGL 2.0 fueron las primeras en ofrecer shaders
programables por el usuario.
• OpenGL 2.0 fue concebido por 3Dlabs para abordar las preocupaciones de que
OpenGL estaba estancado y carecía de una dirección fuerte. 3Dlabs propuso
una serie de importantes adiciones a la norma. La mayoría de estas fueron, en
ese momento, rechazadas por el ARB o de otra manera nunca llegaron a
realizarse en la forma que 3Dlabs propuso. Sin embargo, su propuesta de un
lenguaje de sombreado de estilo C se completó con el tiempo, resultando en la
formulación actual del GLSL (OpenGL Shading Language, también slang).Al
igual que los lenguajes de sombreado estilo-ensamblador que trataba de
sustituir, permite al programador sustituir los fixed-function vertex y el
fragment pipe con shaders, aunque esta vez escritos en un lenguaje tipo C de
alto nivel.
• El diseño de GLSL se destacó por hacer relativamente pocas concesiones a las
limitaciones del hardware entonces disponible, lo que recordaba a la tradición
anterior de OpenGL estableciendo un objetivo ambicioso, con visión de futuro
para los aceleradores 3D en lugar de simplemente seguir el estado de
hardware disponible actualmente. La última especificación OpenGL 2.016
incluye soporte para GLSL.
15. • OpenGL 2.1
• El 2 de agosto de 2006 se publicó OpenGL 2.1. Siendo
completamente compatible con las versiones
anteriores, aporta además nuevas características como:
• Revisión 1.20 del OpenGL Shading Language (GLSL).
• Comandos que soportan la especificación de matrices no
cuadradas.
• Objetos Pixel buffer para acelerar el tráfico de imágenes en
los buffers en comandos
como glTexImage2D y glReadPixels.
• Esta funcionalidad corresponde a la
extensión ARB_pixel_buffer_object.Texturas sRGB.
• Esta funcionalidad corresponde a la
extensión GL_EXT_texture_sRGB.
16. • OpenGL 3.0
• OpenGL 3.1
• La versión 3.1 (Longs Peak Reloaded) fue publicada el 24 de marzo de 2009, y
presenta una serie de características para hacer la API más conveniente de utilizar,
además de las características orientadas al rendimiento:
• Lenguaje de Sombreado OpenGL revisión 1.40 (GLSL)
• Texture Buffer Objects - un tipo de nueva textura que contiene una matriz
unidimensional de texels
• Uniform Buffer Objects para compartir o actualñizar datos de forma rápida
• Texturas normalizadas firmadas (rango ± 1,0)
• Un mínimo de 16 unidades de textura accesibles por el Vertex Shader
• Reinicio de primitiva
• Instancias - dibujo de objetos en múltiples ocasiones a través de la reutilización de
los vertex data
• CopyBuffer API para copia rápida de datos, utilizada en conjunto con OpenCL
• Con la liberación de la especificación OpenGL 3.1, también fue publicada una
extensión de compatibilidad que permite a los desarrolladores acceder a la
funcionalidad de OpenGL 1.X/2.X eliminada en OpenGL 3.1. En particular, se
mantiene funcionalidad legacy para una amplia línea de soporte.
17. • OpenGL 3.1
• OpenGL 3.1
• La versión 3.1 (Longs Peak Reloaded) fue publicada el 24 de marzo de 2009, y
presenta una serie de características para hacer la API más conveniente de
utilizar, además de las características orientadas al rendimiento:
• Lenguaje de Sombreado OpenGL revisión 1.40 (GLSL)
• Texture Buffer Objects - un tipo de nueva textura que contiene una matriz
unidimensional de texels
• Uniform Buffer Objects para compartir o actualñizar datos de forma rápida
• Texturas normalizadas firmadas (rango ± 1,0)
• Un mínimo de 16 unidades de textura accesibles por el Vertex Shader
• Reinicio de primitiva
• Instancias - dibujo de objetos en múltiples ocasiones a través de la reutilización
de los vertex data
• CopyBuffer API para copia rápida de datos, utilizada en conjunto con OpenCL
• Con la liberación de la especificación OpenGL 3.1, también fue publicada una
extensión de compatibilidad que permite a los desarrolladores acceder a la
funcionalidad de OpenGL 1.X/2.X eliminada en OpenGL 3.1. En particular, se
mantiene funcionalidad legacy para una amplia línea de soporte.
18. • OpenGL 3.2
• La versión 3.2 fue publicada el 3 de agosto de 2009.
Incluye las siguientes características:
• Lenguaje de Sombreado OpenGL revisión 1.50 (GLSL)
• Soporte de Geometría Shader
• BGRA vértice componente de pedidos
• Fragmento Shader coordinar el control de convención
• Perfecta mapa cubo filtrado
• Fragmento de profundidad de sujeción
• Multisampled texturas y textura de las muestras para
lugares específicos de la muestra
• Objetos de sincronización y cerca
19. • OpenGL 3.3
• OpenGL 3.3, simultáneamente lanzado con
OpenGL 4.0 y complementada por un
conjunto de nuevas extensiones ARB, porta
tanta funcionalidad como es posible desde la
especificación OpenGL 4.0 para su uso en la
generación anterior de hardware GPU. Incluye
GLSL 3.30.
20. • OpenGL 4.0
• Tarjetas compatibles: Radeon HD serie 5000, nVidia GTX serie 400;
• Características:19
• OpenGL Shading Language versión 4.00 (GLSL)
• Dos fases de sombreado que permiten a la GPU descargar el teselado
geométrico de la CPU.
• Per-shaders fragmento de la muestra y de sombreado programable
posiciones fragmento de entrada para mayor calidad de representación y
anti-aliasing de flexibilidad.
• Subrutinas Shader para una flexibilidad de programación aumentada
significativamente.
• Separación del estado de textura y de los datos de textura mediante la
adición de un nuevo tipo de objeto llamado sampler objetos.
• Dibujo de los datos generados por el API de OpenGL o APIs externos, tales
como OpenCL, sin intervención de la CPU.
• Operaciones de 64-bit de coma flotante de doble precisión de sombreado
y entradas / salidas para prestar mayor precisión y calidad.
• Mejoras de rendimiento, tales como shaders de geometría en instancias,
instancias matrices y una consulta de nuevo temporizador.
21. • OpenGL 4.1
• Tarjetas soportadas: Nvidia GeForce 400 series, Nvidia GeForce 500
series, ATI Radeon HD 5000 series, AMD Radeon HD 6000 Series
• Esta nueva versión añade estas características adicionales a la
especificación, muchas de las cuales ayudan a ponerla en
consonancia con las de Direct3D 11:
• Lenguaje de sombreado OpenGL (GLSL) 4.1
• Compatibilidad completa con OpenGL para sistemas integrados
(OpenGL ES) 2.0
• Reducción de tiempos de recompilación
• La capacidad de vincular los programas de forma individual a las
cinco etapas programables (Vertex, Control de mosaico, Evaluación
de el Teselado, la Geometría, y Fragmento)
• Mejoras a la coma flotante general de 64 bits compatible con
agregado en OpenGL 4.0eral de 64 bits compatible con agregado en
OpenGL 4.0
22. • OpenGL 4.2
• Tarjetas soportadas: Nvidia GeForce 400 series, Nvidia GeForce 500
series, ATI Radeon HD 5000 series, AMD Radeon HD 6000 Series, ATI
Radeon HD 7000 series
• Soporte para shaders con contadores atómicos y load/store/atomic
read-modify-write operations en un único nivel de una textura.
• Capacidad de capturar geometría de la GPU en mosaico y dibujar
varias instancias de una "transform feedback " para que los objetos
complejos sean fácilmente replicados o cambiados de posición.
• OpenGL puede modificar ahora un subconjunto arbitrario de una
textura comprimida sin necesidad de volver a descargar toda la
textura a la GPU llevando esto a un mayor rendimiento.
• Soporte para empaquetar varios valores de 8 bits y 16 bits en un
único valor de 32 bits, llevando a un procesamiento más eficiente
del shader y presión reducida en la memoria y el ancho de banda.
23. OpenGL 4.3
• 201222 Tarjetas Soportadas: Nvidia GeForce 400 series, Nvidia GeForce 500 series, Nvidia GeForce
600 series
• Incluye la versión más actualizada de GLSL en su versión 4.30 (OpenGL Shading Language).
• Cálculo de shaders que aprovechan el paralelismo de la GPU para todo lo relacionado con geometría
o gráficos.
• Almacenamiento en búfer de objetos Shader.
• Consultas de parámetros de texturas para hallar los límites que las plataformas pueden tener para
procesar las mismas.
• Alta calidad de comprensión en texturas ETC2/EAC como característica estándar.
• Compatibilidad total con las APIs de OpenGL ES 3.0.
• Capacidades de depuración que permiten recibir mensajes de depuración mientras se desarrolla la
aplicación.
• Vistas de texturas para análisis de las mismas en diferentes formas sin replicación de datos.
• Incrementa la seguridad de la memoria.
• Una extensión multi-aplicación que añade robustez al sistema, e impide que las aplicaciones que
provoquen un fallo y tengan que resetearse afecten a otras que estén en ejecución.
24. OpenGl Comparada con
directx de microsoft
• Si nos guiamos por la portabilidad, DirectX difícilmente
supera a OpenGL, dada su gran dependencia con Windows
y sus componentes. Fuera de este sistema
operativo, solamente se encuentra implementada en la
consola Xbox. En cambio, OpenGL es compatible no sólo
con WindSows, sino que se utiliza en sistemas
Unix, Linux, Macy hasta en consolas como PlayStation 3 y
Nintendo Wii. En resumen: Exceptuando Windows y
Xbox, todos los sistemas que proveen soporte para
aceleración 3D han escogido a OpenGL. Por algo
será, ¿No?. . Además, OpenGL fue diseñada para asegurar
retrocompatibilidad. Es decir, la primera versión de OpenGL
puede ser compilada y ejecutada por la última versión sin
ningún problema.
25. • La diferencia principal es que DirectX es una
API cuya plataforma se basa en lo que el
hardware es capaz de realizar, mientras que
OpenGL es un tanto más independiente. A su
vez, de su implimentacion depende la
administración de los recursos, algo que en
DirectX corre por cuenta de la aplicación. Esto
hace que sea más proponeso a sufrir los
temidos errores de propagación (mejor
conocidos como bugs).
26. lenguajes
• Fortran 90 OpenGL Bindings
• f90gl es una implementación de dominio público de los
oficiales de Fortran 90 enlaces para OpenGL. Con los
nuevos enlaces, un programador puede escribir Fortran
que sigan los estándares de las aplicaciones gráficas
que serán portátil en la mayoría de plataformas
informáticas. La versión actual es la Versión 1.2.3 Esta
versión implementa la interfaz para OpenGL 1.2, 1.2
GLU, GLUT 3,7, y varias extensiones. Es compatible con
varias estaciones de trabajo Unix y Windows
95/98/NT. También es la interfaz de Fortran para Mesa.
27. • Java enlaces para OpenGL
• Los JOGL Java / OpenGL enlaces
– El proyecto JOGL acoge la versión de desarrollo de Java ™
de la unión de la API OpenGL (JSR-231), y está diseñado
para proporcionar el hardware de gráficos compatibles 3D
para aplicaciones escritas en Java. JOGL proporciona
acceso completo a la API de OpenGL en el 1,3 a 3,0, 3,1 -
3,3, ≥ 4,0, ES 1.x y especificación ES 2.x, así como casi
todas las extensiones de proveedor. Se integra con el AWT
y columpios widget, así como con kits de herramientas de
ventanas personalizadas con la API de
NativeWindow. Forma parte de un conjunto de tecnologías
de código abierto iniciado por el Grupo de Tecnología de
Juegos de Sun Microsystems. Por favor vea las demos
JOGL para las ilustraciones de las técnicas avanzadas de
OpenGL ahora es posible con la plataforma Java.
28. • Lightweight Java Game Library
Dirigido a programadores Java profesionales y
aficionados por igual con soporte para OpenGL,
OpenAL, gamepads, volante y Joysticks
• Java 3D (retenido SUN biblioteca modo de capas
en OpenGL)
• Java 3D para Mac OS X
• OpenGL para Java (GL4Java)
• YAJOGLB (otro Java OpenGL Binding)
• JGL: una biblioteca de gráficos 3D para Java
29. • Perl OpenGL Bindings
• Perl OpenGL (POGL) Módulo es un binario Perl
vinculante de OpenGL que soporta el procesamiento
GPGPU.
• Perl enlaces OpenGL 0,64 - Módulo de Perl para
mostrar datos en 3D usando OpenGL, GLU, GLUT y GLU
GLXf es compatible y GLUT debe contar con el apoyo
de hasta API versión 3
• OpenGL Perl, C y Puntos de Referencia de Python
• Pike OpenGL Bindings
• Pike tiene una interfaz nativa de OpenGL. Además de
Pikes Pike apoyo GL también soporta GLU y GLUT.
30. • Python Bindings OpenGL
• PyOpenGL es una fuente multi-plataforma
abierta Python vinculante a la norma API OpenGL
proporciona 2-D y 3-D de dibujo gráfico.
PyOpenGL apoya el GL, GLU, GLUT y bibliotecas.
La biblioteca se puede utilizar con el Tkinter,
wxPython, FxPy, y bibliotecas Win32GUI de
ventanas (o casi cualquier biblioteca de ventanas
que puede proporcionar un contexto OpenGL).
• PyGlut hace GLUT disponible en el intérprete de
Python.
31. • Delphi Bindings
• OpenGL Delphi Bindings ( alemán )
• Ada OpenGL Bindings
• Ada bindings OpenGL soporta GL & GLU y GLUT.
• OpenGL y Visual Basic
• Programación OpenGL con Visual Basic
• Un control ActiveX de la aplicación de OpenGL
1.1. para su uso con Visual Basic
• OpenGL y Visual Basic
• Visual Basic fragmentos de código y archivos
32. Proyectos construidos en OpenGl
• GruaGl
se trata de un proyecto realizado para la asignatura Diseño
Asistido Por Computador (DAC) de la Universidad de Granada.
El lenguaje de programación usado es C y la api OpenGl.
• Proyecto Dado en openGL con Mono
• Robot en opengl
• Sistema Solar en Opengl
33. • Como lo habiamos mencionado anteriormente en
opengl es posible realizar todo tipo de graficos en 3d
como por ejemplo un juego, y es justamente un juego
muy sencillo pero antiguo pacman.
Para este juego se emplearon cubos, esferas, triangulos
y otros. Para empezar se preparó la plataforma del
juego, acomodando cubos de distintas dimenciones
para los caminos, luego se le dió forma a los
"mounstritos" y se configuró su desplazamiento lo cual
fué algo complicado de programar. También se
acomodaron las esferas que se deben "comer".