Entwickelt von | Silicon Graphics und Chronos Group |
---|---|
Erste Version | Januar 1994 |
Letzte Version | 4,6 (31. Juli 2017) |
Geschrieben in | VS |
Art |
Programmierschnittstelle Softwarebibliothek Spezifikation |
Webseite | www.opengl.org |
Chronologie der Versionen
OpenGL ( Öffnen G raphics L ibrary ) ist ein standardisierter Satz von Funktionen für die Berechnung 2D oder 3D - Bilder durch gestartet Silicon Graphics in 1992. Diese Programmierschnittstelle ist auf vielen Plattformen verfügbar , wo es für Anwendungen verwendet wird , im Bereich von Video in CAD durch Modellierung Gaming.
OpenGL ermöglicht einem Programm, die Geometrie von Objekten als Punkte, Vektoren, Polygone, Bitmaps und Texturen zu deklarieren. OpenGL führt dann Projektionsberechnungen durch , um das Bildschirmbild zu bestimmen, wobei Entfernung, Ausrichtung, Schatten, Transparenz und Rahmung berücksichtigt werden.
Die Oberfläche verfügt über rund 250 verschiedene Funktionen, mit denen sich komplexe dreidimensionale Szenen aus einfachen geometrischen Primitiven darstellen lassen. Aufgrund seiner Offenheit, seiner Einsatzflexibilität und seiner Verfügbarkeit auf allen Plattformen wird es von den meisten wissenschaftlichen, industriellen oder künstlerischen 3D-Anwendungen und bestimmten 2D-Vektoranwendungen verwendet . Diese Bibliothek wird auch in der Videospielindustrie verwendet, wo sie oft in Konkurrenz zu Microsofts Bibliothek steht : Direct3D . Eine Version namens OpenGL ES wurde speziell für Bordanwendungen (Handys, Taschenkalender, Spielekonsolen usw.) entwickelt.
OpenGL ist eine Weiterentwicklung von IrisGL, einer von Silicon Graphics (SGI) entwickelten 3D-API . Da letzteres schwer zu entwickeln und zu erweitern war, wurde bei Silicon Graphics entschieden, dass OpenGL einer Obermenge von IrisGL gleichgesetzt werden kann. Die grundlegenden Spezifikationen und Entwicklungen wurden von einem Team von Silicon Graphics durchgeführt. Das Fahrenheit- Projekt , eine Initiative von Microsoft und Silicon Graphics, versuchte, die OpenGL- und Direct3D- Schnittstellen zu vereinheitlichen . Dies weckte zunächst die Hoffnung, Ordnung in die Welt der 3D-APIs zu bringen, doch aufgrund finanzieller Zwänge seitens Silicon Graphics musste das Projekt aufgegeben werden.
Die OpenGL-Spezifikation wird derzeit vom Architecture Review Board (ARB) überwacht , das 1992 gegründet wurde . Der ARB setzt sich aus Unternehmen zusammen, die ein starkes Interesse am Aufbau einer konsistenten und weit verbreiteten API haben. Laut der offiziellen OpenGL-Website gehören AMD/ATI , Apple , Dell , Evans & Sutherland , Hewlett-Packard , IBM , Intel , Matrox , Nvidia , SGI und Sun zu den stimmberechtigten Mitgliedern (Juni 2002). Microsoft , eines der Gründungsmitglieder, zog sich zurückMärz 2003.
Das 29. Juli 2003ist OpenGL 1.5 angekündigt. Gleichzeitig kündigt ARB die Spezifikationen für einen ersten Entwurf der OpenGL Shading Language sowie die drei Erweiterungen ARB_shader_objects , ARB_vertex_shader und ARB_fragment_shader an .
Das 7. September 2004wird OpenGL 2.0 angekündigt. die OpenGL Shading Language ( GLSL , auch Spitzname GLslang ) mit einer Syntax ähnlich der C-Sprache ist in einer definitiven Version enthalten.
Das 31. Juli 2006Auf der Siggraph- Konferenz gab der ARB seine Entscheidung bekannt, die Kontrolle über die OpenGL-Spezifikation an die Khronos Group zu übertragen , die bereits verschiedene OpenGL-Spezifikationen für eingebettete Systeme und Videospielkonsolen einschließlich OpenGL ES bearbeitet hat . Das Architektur Review Board wurde aufgelöst am21. September 2006, aber aus historischen Gründen wurde die Abkürzung „ARB“ beibehalten.
Die offiziellen Spezifikationen für OpenGL 3.0 wurden am 11. August 2008 veröffentlicht. Ursprünglich sollte OpenGL 3 eine große Änderung sein, mit einer kompletten API-Überarbeitung, um es wettbewerbsfähiger mit Direct3D zu machen . Insbesondere ging es um den Verzicht auf veraltete Funktionalitäten, die bis dahin nur aus Kompatibilitätsgründen zu alten Versionen beibehalten wurden, die Verwendung eines neuen, kohärenteren Objektmodells, das insbesondere Zustände kapselt usw. Nach einem Jahr Verzögerung und völlig fehlender Kommunikation seitens der Khronos-Gruppe wurde diese komplette Überarbeitung jedoch zugunsten eines inkrementellen Updates aufgegeben, um einfach die neuesten Grafiktechnologien zu unterstützen . Diese Entscheidung wäre auf den Wunsch zurückzuführen, bestimmte Märkte, beispielsweise im CAD , zu beruhigen , die diese alten Funktionalitäten nicht verschwinden sehen wollten. Allerdings werden veraltete Funktionen in den neuen Spezifikationen als " deprecated " gekennzeichnet und können in zukünftigen Versionen entfernt werden.
Die Spezifikationen für OpenGL 3.1 wurden am 28. Mai 2009 veröffentlicht. Es entfernt alle Funktionen, die in OpenGL 3.0 für veraltet erklärt wurden.
Die Spezifikationen für OpenGL 3.2 wurden am 3. August 2009 veröffentlicht. Die Spezifikationen sind unterteilt in 2; Hauptprofil ( Kernprofil ) und kompatibles Profil ( Kompatibilitätsprofil ).
Zusammen mit seiner Veröffentlichung erfolgt die Veröffentlichung der Shader-Sprachspezifikation GLSL 1.50.
Die OpenGL 3.3-Spezifikationen wurden am 11. März 2010 veröffentlicht, sie sind die letzten Spezifikationen der 3.3-Reihe. Wie bei OpenGL 3.2 gibt es ein Hauptprofil und ein kompatibles Profil .
Diese Version wird oft als zentrale Version verwendet, um vor der Portierung von Software von OpenGL auf Vulkan zu gelangen.
Das 11. März 2010, OpenGL 4.0 wird angekündigt, zielt darauf ab, die mit DirectX 11 kompatible Hardware voll auszuschöpfen .
Gleichzeitig wird auch OpenGL 3.3 angekündigt.
Zu Beginn unter dem Namen OpenGL Next angekündigt , überprüft Vulkan wichtige Konzepte von OpenGL, um sich an die 25-jährige Evolution der 3D-Grafikprozessoren seit der ersten Version anzupassen. Die Kompatibilität mit älteren Versionen ist nicht mehr gewährleistet.
Die bemerkenswertesten Änderungen sind:
Der OpenGL-Standard ermöglicht es verschiedenen Herstellern, neue Funktionalitäten in Form von Erweiterungen hinzuzufügen . Eine Erweiterung wird in 2 Teilen verteilt: einer Header-Datei, die die Prototypfunktionen der Erweiterung und die Treiber des Herstellers enthält. Jeder von ihnen hat eine Abkürzung, die verwendet wird, um ihre neuen Funktionen und Konstanten zu benennen. Beispielsweise wird die Abkürzung für nVidia ("NV") verwendet, um ihre proprietäre Funktion "glCombinerParameterfvNV()" und ihre Konstante "GL_NORMAL_MAP_NV" zu definieren. Es kann vorkommen, dass mehr als ein Hersteller die gleiche Funktionalität implementiert. In diesem Fall wird die Abkürzung „EXT“ verwendet. Es kann auch vorkommen, dass der ARB eine Verlängerung formalisiert. Dies wird dann zum Standard und es wird die Abkürzung „ARB“ verwendet. Die erste ARB-Erweiterung war GL_ARB_multitexture.
Mehrere Bibliotheken werden aus OpenGL entwickelt, um Funktionen bereitzustellen, die in der OpenGL-Bibliothek selbst nicht verfügbar sind:
Beachten Sie insbesondere die OpenGL Performer- Bibliothek , die von Silicon Graphics entwickelt wurde und für IRIX , Linux und einige Windows- Versionen verfügbar ist , die die Erstellung von Echtzeit-Rendering-Anwendungen ermöglicht.
Hier ist ein einfaches Programm in 2D, das ein Dreieck zeichnet und es ermöglicht, seine Farbe sofort zu ändern, indem Sie eine der Tasten r, g, b und die untere mit R, G, B drücken. Die q-Taste beendet das Programm. Dieser, der GLUT verwendet , um die Programmierung zu vereinfachen (denke an die Installation von Synaptic oder anderen), wird unter Linux oder WSL unter Windows 10 von kompiliert und ausgeführt cc colorswap.c -lglut -lGL -lGLU && ./a.out. OpenGL-Bibliotheken müssen aus den Repositorys Ihrer speziellen Distribution installiert werden. Das Ziel des Codes ist hier Lesbarkeit und nicht Leistung.
/* * 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; }Für Windows, viele Unix- und Mac OS-Stationen gibt es mehrere OpenGL-Implementierungen (die die von der Hardware bereitgestellte 3D-Beschleunigung ausnutzen) . Diese Implementierungen werden im Allgemeinen von Herstellern von Grafikhardware bereitgestellt und sind eng mit diesen verwandt. Es gibt eine kostenlose Implementierung dieser Bibliothek namens Mesa , die 1993 von Brian Paul erstellt wurde und dieselbe API verwendet, die Folgendes ermöglicht:
Die Politik von Silicon Graphics sieht vor, jedes Mal die vorletzte Version von GL, der Grafikbibliothek von GL, öffentlich zu machen . Dieser Ansatz :
Einige Software verwendet OpenGL, um ihre gesamte Benutzeroberfläche zu verwalten, sogar 2D, wie Blender , Google Earth (OpenGL-Version), GLtron, XBMC oder die SGI- Version von X11 .
Rich Geldreich und Joshua Barczak kritisieren in ihren persönlichen Blogs OpenGL. Ihre Beschwerden legen einerseits die Notwendigkeit einer vollständigen Überarbeitung im Lichte der gesammelten Erfahrungen nahe, andererseits die Notwendigkeit, die Verteilung der Portagen besser zu kontrollieren. Dies sind jedoch High-Tech-Benutzer, die die fortschrittlichsten Funktionen von 2014er Grafikkarten verwenden müssen.