OpenGL

OpenGL Información
Desarrollado por Silicon Graphics y Khronos Group
Primera versión Enero de 1994
Última versión 4,6 (31 de julio de 2017)
Escrito en VS
Tipo Interfaz de programación
Biblioteca de software
Especificación
Sitio web www.opengl.org

Cronología de versiones

OpenGL ( Open G raphics L ibrary ) es un conjunto estandarizado de funciones para calcular imágenes 2D o 3D lanzado por Silicon Graphics en 1992. Esta interfaz de programación está disponible en muchas plataformas donde se utiliza para aplicaciones que van desde video de juegos hasta CAD pasando por modelado.

OpenGL permite que un programa declare la geometría de objetos como puntos, vectores, polígonos, mapas de bits y texturas. OpenGL luego realiza cálculos de proyección para determinar la imagen de la pantalla, teniendo en cuenta la distancia, la orientación, las sombras, la transparencia y el encuadre.

La interfaz tiene alrededor de 250 funciones diferentes que se pueden usar para mostrar escenas tridimensionales complejas a partir de primitivas geométricas simples. Debido a su apertura, su flexibilidad de uso y su disponibilidad en todas las plataformas, es utilizado por la mayoría de aplicaciones 3D científicas, industriales o artísticas y ciertas aplicaciones vectoriales 2D . Esta biblioteca también se utiliza en la industria de los videojuegos, donde a menudo compite con la biblioteca de Microsoft  : Direct3D . Una versión llamada OpenGL ES fue diseñada específicamente para aplicaciones integradas (teléfonos móviles, agendas de bolsillo, consolas de juegos, etc.).

Historia

OpenGL es una evolución de IrisGL, API 3D desarrollada por Silicon Graphics (SGI). Siendo este último difícil de desarrollar y ampliar, se decidió en Silicon Graphics que OpenGL podría asimilarse a un superconjunto de IrisGL. Las especificaciones y desarrollos básicos fueron realizados por un equipo de Silicon Graphics. El proyecto Fahrenheit , una iniciativa de Microsoft y Silicon Graphics, intentó unificar las interfaces OpenGL y Direct3D . Esto inicialmente trajo esperanza de poner orden en el mundo de las API 3D, pero debido a las limitaciones financieras de Silicon Graphics, el proyecto tuvo que abandonarse.

La especificación OpenGL está actualmente supervisada por la Junta de Revisión de Arquitectura (ARB), formada en 1992 . El ARB está formado por empresas con un profundo interés en construir una API consistente y ampliamente disponible. Según el sitio web oficial de OpenGL, AMD / ATI , Apple , Dell , Evans & Sutherland , Hewlett-Packard , IBM , Intel , Matrox , Nvidia , SGI y Sun se encuentran entre los miembros votantes (junio de 2002). Microsoft , uno de los miembros fundadores, se retiróMarzo de 2003.

OpenGL 1.5

La 29 de julio de 2003Se anuncia OpenGL 1.5. Al mismo tiempo, ARB anuncia las especificaciones para un primer borrador del lenguaje de sombreado OpenGL, así como las tres extensiones ARB_shader_objects , ARB_vertex_shader y ARB_fragment_shader .

OpenGL 2.0

La 7 de septiembre de 2004se anuncia OpenGL 2.0. el OpenGL Shading Language ( GLSL , también apodado GLslang ) con una sintaxis similar al lenguaje C se incluye en una versión definitiva.

OpenGL ES

La 31 de julio de 2006En la conferencia Siggraph , la ARB anunció su decisión de transferir el control de la especificación OpenGL al Grupo Khronos , que ya manejaba varias especificaciones OpenGL para sistemas integrados y consolas de videojuegos, incluido OpenGL ES . La Junta de Revisión de Arquitectura se disolvió el21 de septiembre de 2006, pero por razones históricas se ha mantenido el acrónimo “ARB”.

OpenGL 3.0

Las especificaciones oficiales para OpenGL 3.0 se publicaron el 11 de agosto de 2008. Originalmente, se suponía que OpenGL 3 sería un cambio importante, con una revisión completa de la API para hacerlo más competitivo con Direct3D . En particular, se trataba de abandonar funcionalidades obsoletas que, hasta entonces, se habían mantenido solo por compatibilidad con versiones antiguas, el uso de un nuevo modelo de objetos más coherente que encapsula notablemente estados, etc. Sin embargo, después de un año de retraso y una completa falta de comunicación por parte del grupo Khronos, esta revisión total se abandonó en favor de una actualización incremental para simplemente admitir las últimas tecnologías gráficas . Esta decisión obedecería al deseo de tranquilizar a determinados mercados, por ejemplo en CAD , que no querían ver desaparecer estas viejas funcionalidades. Sin embargo, las funciones obsoletas se marcarán como "  obsoletas  " en las nuevas especificaciones y pueden eliminarse en versiones futuras.

OpenGL 3.1

Las especificaciones para OpenGL 3.1 se publicaron el 28 de mayo de 2009. Elimina todas las funciones que se declararon obsoletas en OpenGL 3.0.

OpenGL 3.2

Las especificaciones para OpenGL 3.2 se publicaron el 3 de agosto de 2009. Las especificaciones se dividen en 2; perfil principal ( perfil principal ) y perfil compatible ( perfil de compatibilidad ).

Junto con su lanzamiento, está el lanzamiento de la especificación del lenguaje de sombreado GLSL 1.50.

OpenGL 3.3

Las especificaciones OpenGL 3.3 se publicaron el 11 de marzo de 2010, son las últimas especificaciones de la serie 3.3. Al igual que con OpenGL 3.2, hay un perfil principal y un perfil compatible .

Esta versión se usa a menudo como una versión fundamental para alcanzar antes de migrar el software de OpenGL a Vulkan.

OpenGL 4.0

La 11 de marzo de 2010, Se anuncia OpenGL 4.0, su objetivo es aprovechar al máximo el hardware compatible con DirectX 11.

Al mismo tiempo, también se anuncia OpenGL 3.3.

Vulkan

En un principio anunciado bajo el nombre OpenGL Next , Vulkan está revisando conceptos importantes de OpenGL para adaptarse a los 25 años de evolución de los procesadores gráficos 3D desde la primera versión. Ya no se garantiza la compatibilidad con versiones anteriores.

Los cambios más notables son:

Extensiones

El estándar OpenGL permite a diferentes fabricantes agregar nuevas funcionalidades en forma de extensiones . Una extensión se distribuye en 2 partes: un archivo de encabezado que contiene las funciones prototipo de la extensión y los controladores del fabricante. Cada uno de ellos tiene una abreviatura que se utiliza para nombrar sus nuevas funciones y constantes. Por ejemplo, la abreviatura de nVidia ("NV") se usa para definir su función propietaria "glCombinerParameterfvNV ()" y su constante "GL_NORMAL_MAP_NV". Puede suceder que más de un fabricante implemente la misma funcionalidad. En este caso, se utiliza la abreviatura "EXT". También puede suceder que la ARB formalice una prórroga. Esto luego se convierte en un estándar y se utiliza la abreviatura "ARB". La primera extensión ARB fue GL_ARB_multitexture.

Bibliotecas

Varias bibliotecas se desarrollan a partir de OpenGL para proporcionar una funcionalidad que no está disponible en la propia biblioteca de OpenGL:

Nótese en particular la biblioteca OpenGL Performer , desarrollada por Silicon Graphics y disponible para IRIX , Linux y algunas versiones de Windows , que permite la creación de aplicaciones de renderizado en tiempo real.

Ejemplo simple de programa OpenGL

Aquí hay un programa simple, en 2D, dibujando un triángulo y permitiendo modificar instantáneamente su color presionando una de las teclas r, g, by la de abajo con R, G, B. La tecla q sale del programa. Este, que usa GLUT para simplificar la programación (piense en instalarlo por Synaptic u otro), es compilado y ejecutado, bajo Linux o WSL bajo Windows 10 , por cc colorswap.c -lglut -lGL -lGLU && ./a.out. Las bibliotecas OpenGL deben instalarse desde los repositorios de su distribución particular. El objetivo del código aquí es la legibilidad y no el rendimiento.

/* * colorswap.c - Options -lglut -lGL -lGLU : * cc colorswap.c -lglut -lGL -lGLU && ./a.out * * Donnez le focus à la fenêtre, puis pressez : * R G B ou Y pour couleur du fond * r g b ou y pour celle de l'encre * q pour quitter. * * Programme écrit sous OpenSuSE avec Geany sous * Sony Satellite G50 bootant Linux d'un SSD USB3 * en inhibant le secure boot et en donnant la * priorité de boot à l'USB. */ #include <GL/glut.h> int firstPass = 1; // simule le « once » d'Eiffel // Fonction associée (« callback ») à la fenêtre. // Elle redessine tout quand on redimensionne. void Rafraichir(void) { glClear(GL_COLOR_BUFFER_BIT); // Effacer la surface graphique if (firstPass) { glColor3f(0, 0, 1.0); // Encre bleue au départ firstPass = 0; } // Dessiner un triangle glBegin(GL_POLYGON); // Commencer un polygone glVertex2i(100, 100); // Coordonnées des trois points glVertex2i(400, 100); glVertex2i(250, 400); glEnd(); // Fermer le polygone glFlush(); // Dessiner le polygone } // Action sur frappe d'une touche au clavier void Clavier(unsigned char key, int x, int y) { switch(key) { case 'q' : exit(0); // q => « quitter » case 'R' : glClearColor(1, 0, 0, 0); break; // R G B : couleur fond case 'G' : glClearColor(0, 1, 0, 0); break; case 'B' : glClearColor(0, 0, 1, 0); break; case 'Y' : glClearColor(1, 1, 0, 0); break; // Y : jaune case 'r' : glColor3f(1, 0, 0); break; // r g b : couleur encre case 'g' : glColor3f(0, 1, 0); break; case 'b' : glColor3f(0, 0, 1); break; case 'y' : glColor3f(1, 1, 0); break; // y ; jaune } Rafraichir(); // Affichage } int main(int argc, char *argv[]) { int win; // Identificateur de fenêtre (une seule) glutInit(&argc, argv); // initialise GLUT glutInitDisplayMode(GLUT_RGB); // On travaille en RGB glutInitWindowSize(500,400); // 500px large, 400px haut win = glutCreateWindow("Pressez r/g/b/y/R/G/B/Y/q"); // Ordres maintenant exécutés dans la fenêtre « win » glClearColor(0.9, 0.9, 0.2, 0); // Jaune gluOrtho2D(0,600,0,600); // On garde ces coordonnées glutDisplayFunc(Rafraichir); // Callback de la fenêtre glutKeyboardFunc(Clavier); // Callback du clavier glutMainLoop(); // Boucle infinie /* Le programme n'atteint jamais ce point */ return 0; }

Implementaciones

Existen varias implementaciones de OpenGL (que aprovechan la aceleración 3D proporcionada por el hardware) para Windows, muchas estaciones Unix y Mac OS . Estas implementaciones las proporcionan generalmente los fabricantes de hardware de gráficos y están estrechamente relacionadas con ellos. Existe una implementación gratuita de esta biblioteca, denominada Mesa , creada en 1993 por Brian Paul y utilizando la misma API, que permitía:

  • prescindir de la licencia OpenGL en la mayoría de los casos, ya que la implementación de SGI tiene licencia, pero la API en sí no puede tener licencia;
  • para ejecutar aplicaciones OpenGL en terminales X básicos que no eran adecuados para ello (el rendimiento es entonces arbitrario debido a la falta de aceleración del hardware, pero esto a menudo es mejor que no ejecutarlo y sigue siendo aceptable si uno no tiene necesidad de animación en tiempo real) . Como estas estaciones generalmente no tienen aceleración 3D por hardware, solo se pueden usar para modelos simples que comprenden relativamente pocos polígonos: desde unas pocas decenas hasta unos pocos miles.

Interés de OpenGL para Silicon Graphics

La política de Silicon Graphics es lanzar la penúltima versión de GL, la biblioteca de gráficos de GL, al dominio público cada vez . Este enfoque :

  • evitó la competencia (OpenGL es libre y abierto, ¿por qué reinventarlo?);
  • disuadido de modificar OpenGL, porque cualquier adición tendría que ser copiada de la próxima versión;
  • dio a las estaciones de trabajo Silicon Graphics una ventaja notable, con GL siempre un paso por delante de OpenGL;
  • era una forma de patrocinio buena para el "  karma  " de la sociedad en los círculos de código abierto

Usos

Algunos programas usan OpenGL para administrar toda su interfaz, incluso 2D, como Blender , Google Earth (versión OpenGL), GLtron, XBMC o la versión SGI de X11 .

Reseñas

Rich Geldreich y Joshua Barczak, en sus blogs personales, critican OpenGL. Sus quejas sugieren, por un lado, la necesidad de una revisión completa a la luz de la experiencia adquirida y, por otro, la necesidad de controlar mejor la dispersión de los porteos. Sin embargo, se trata de usuarios de alta tecnología que necesitan utilizar las funciones más avanzadas de las tarjetas gráficas de 2014.

Notas y referencias

  1. "  https://www.khronos.org/news/press/khronos-releases-opengl-4.6-with-spir-v-support  "
  2. (en) David Astle y Kevin H. Hawkins A partir de programación OpenGL juego , Cengage Learning - 2004 ( ISBN  9781592003693 ) .
  3. (en) Paul Martz, OpenGL Distilled , Addison-Wesley Professional - 2006 ( ISBN  9780132701785 ) .
  4. (en) PJ Cabrera, Peter Bakhirev, Ian Marsh, Ben Smith, Eric Wing, Scott Penberthy, Beginning iPhone Games Development , Apress - 2010 ( ISBN  9781430226000 ) .
  5. (in) The OpenGL Pipeline Newsletter - Volume 002  " , Transitions , noviembre de 2006.
  6. Long Peaks  : presentación en el sitio web de Icare3D .
  7. http://www.presence-pc.com/tests/Opengl-DirectX-guerre-22813/ .
  8. (en) http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=243307&#Post243307 .
  9. (en) Mark Segal y Kurt Akeley, The OpenGL® Graphics System: A Specification (Versión 3.1 - 28 de mayo de 2009) , The Khronos Group,28 de mayo de 2009( leer en línea ) , pág.  294 (Apéndice E)
  10. Nÿco, "  Especificaciones de OpenGL 3.1  " , en Linuxfr.org ,25 de marzo de 2009
  11. (en) John Kessenich, The OpenGL Shading Language - Versión de idioma: 1.50 (Revisión 11) , Khronos,4 de diciembre de 2009( leer en línea )
  12. (en) "  OpenGL 3.3 (perfil principal) - 11 de marzo de 2010  " , Khronos,11 de marzo de 2010
  13. PDF OpenGL 3.3 (perfil de compatibilidad) - 11 de marzo de 2010 , Khronos ( leer en línea )
  14. Un derivado de este programa también es compartido por su autor en una biblioteca pública de Github: https://github.com/fdarmingaud/colorswap/blob/master/colorswap.c
  15. Por ejemplosudo apt install freeglut3-dev
  16. http://en.swpat.org/wiki/OpenGL
  17. (en) Rich Geldreich, Cosas que me vuelven loco sobre OpenGL  " , Blog tecnológico de Rich Geldreich , 11 de mayo de 2014.
  18. (en) Michael Larabel, Train AMD Developer: OpenGL Is Broken  " , Phoronix, 31 de mayo de 2014.

Ver también

Artículos relacionados

Bibliografía

  • Open GL 2.0: Guía oficial , Jackie Neider, Mason Woo, Tom Davis, Dave Shreiner, Véronique Campillo, 2006, CampusPress ( ISBN  978-2-7440-2086-5 )
  • (en) Guía de programación de OpenGL: La guía oficial para aprender OpenGL, versión 2 , Dave Shreiner, Mason Woo, Jackie Neider, 2005, Addison-Wesley ( ISBN  978-0-321-33573-9 )
  • (en) OpenGL Reference Manual: El documento de referencia oficial para Open Gl, versión 1.4 , Dave Shreiner, 2004, Addison-Wesley ( ISBN  978-0-321-17383-6 )
  • (en) Lenguaje de sombreado OpenGL , Randi J. Rost, 2005, Addison-Wesley ( ISBN  978-0-321-33489-3 )
  • OpenGL Superbible , Richard S., Jr. Wright, Benjamin Lipchak, 2004, Sams ( ISBN  978-0-672-32601-1 )
  • (en) Programación de juegos abiertos para principiantes , Dave Astle, Kevin Hawkins, 2004, Tecnología de cursos ( ISBN  1-59200-369-9 )

Especificación

enlaces externos