OpenGL
OpenGL (Open Graphics Library) ist eine Spezifikation für ein plattform- und programmiersprachenunabhängiges API (Application Programming Interface) zur Entwicklung von 3D-Computergrafik. Der OpenGL-Standard beschreibt etwa 250 Befehle, die die Darstellung komplexer 3D-Szenen in Echtzeit erlauben. Zudem können andere Organisationen (zumeist Hersteller von Grafikkarten) auch proprietäre Erweiterungen definieren.
Die Implementierung des OpenGL-API wird in der Regel als Teil der Grafikkarten-Treiber ausgeliefert. Diese führen dann entsprechend Befehle der Grafikkarte aus, insbesondere müssen aber auch auf der Grafikkarte nicht vorhandene Funktionen auf der CPU emuliert werden. Weiterhin gibt es Open Source-Implementierungen, wie z.B. die Mesa-Bibliothek.
Inhaltsverzeichnis
Das Programmiermodell
Viele Parameter können die Darstellung von gerenderten Objekten beeinflussen, beispielsweise können sie texturiert und beleuchtet sein, gestreckt, verschoben, transparent oder opak, sie können eine rauhe oder glatte Oberfläche haben, usw.
OpenGL wurde als Zustandautomat entworfen, der nicht bei jedem Funktionsaufruf alle benötigten Parameter erhält, sondern so lange die selben Werte verwendet, bis die entsprechenden Zustände geändert werden. Auf diese Weise muss man z.B. nicht für jeden Vertex OpenGL die gewünschte Farbe mitteilen, sondern setzt einmalig eine Farbe, woraufhin alle folgenden Vertize in dieser Farbe dargestellt werden. Auf die selbe Weise kann man global Lichtquellen an- oder ausschalten und viele weitere Zustände setzen.
Der Grund für dieses Design ist, dass fast jede Änderung des Zeichenmodus aufwändige Reorganisationen der Rendering-Pipeline nach sich zieht, daher vermeidet man diese lieber, so lange es sinnvoll möglich ist. Auch wäre es für den Programmierer ermüdend, die Dutzende von Parametern immer wieder neu anzugeben. Oft können viele tausend Vertize bearbeitet werden bevor wieder ein Zustand geändert werden muss, während manche Zustände sogar nie geändert werden. Beispielsweise bleiben die Lichtquellen meistens für alle Objekte einer Szene die gleichen. Viele Zustände werden zumindest für die Dauer des Renderns eines kompletten Objekts beibehalten, z.B. wird ein Auto komplett um einen bestimmten Vektor verschoben und nicht in seine Einzelteile zerlegt und diese einzeln verschoben. Auch in Direct3D verfolgt man dieses Zustands-basierte Konzept.
Historische Entwicklung
OpenGL entstand ursprünglich aus dem von Silicon Graphics (SGI) entwickelten IRIS GL. Im so genannten Fahrenheit-Projekt versuchten Microsoft und SGI ihre 3D-Standards zu vereinheitlichen, das Projekt wurde jedoch aufgrund finanzieller Schwierigkeiten auf Seiten von SGI abgebrochen.
Der OpenGL-Standard wird vom OpenGL Architecture Review Board (ARB) festgelegt. Das ARB existiert seit 1992 und besteht aus einer Reihe von Firmen wie 3Dlabs, Apple, ATI, Dell, Evans & Sutherland, Hewlett-Packard, IBM, Intel, Matrox, NVidia, SGI und Sun. Microsoft, eines der Gründungsmitglieder, hat das ARB im März 2003 verlassen. Neue Funktionen in OpenGL werden meist zuerst als herstellerspezifische Erweiterungen eingeführt und gehen dann den Weg über herstellerübergreifende Erweiterungen und ARB Erweiterungen zu Kernfunktionalität. Dies erlaubt es, neueste Möglichkeiten der Grafikhardware zu nutzen und dennoch OpenGL abstrakt genug zu halten.
Aufgrund seiner Plattformunabhängigkeit ist OpenGL im professionellen Bereich als 3D-Standard nach wie vor führend. Im Bereich der Computerspiele wurde es jedoch in den letzten Jahren zunehmend von Microsofts Direct3D verdrängt und hält sich hauptsächlich noch aufgrund der Beliebtheit der Engines von id Software und der Portabilität auf andere Plattformen. Die aktuelle Version des Standards ist OpenGL 2.0. Mit dieser Version wurde auch die OpenGL Shading Language in den Standard mit aufgenommen, mit deren Hilfe es möglich ist nicht nur vordefinierte Funktionen der Grafikkarten zu nutzen, sondern auch eigene Programme (sogenannte Shader) direkt auf der Grafikkarte ausführen zu lassen.
Bedeutende in Zusammenhang mit OpenGL stehende APIs sind:
- GLU, die OpenGL Utility Library, die vom ARB standardisiert und Teil jeder OpenGL Implementierung ist.
- GLX, die das Interface zwischen dem X Window System und OpenGL bildet
- WGL, die Windows Graphics Library, die OpenGL und Windows verbindet und
- AGL und CGL, das entsprechende Gegenstück für Mac OS.
- GLUT, eine Bibliothek, die aufbauend auf OpenGL, GLU und je nach Plattform GLX, WGL oder AGL eine plattformunabhängige API für Ein-/Ausgabe, Erstellen von Rendering-Kontexten und dergleichen mehr bietet.
- GLSL, die OpenGL Shading Language zum direkten Programmieren der Grafikhardware, Bestandteil von OpenGL 2.0
Verwendete Verfahren
Typische Anwendungen für OpenGL
Unterstützte Plattformen
OpenGL wird von den meisten großen Betriebssystem unterstützt:
- Microsoft Windows: OpenGL v1.1 ist in Win32 enthalten, OpenGL v1.5 Treiber sind für die meisten aktuellen Grafikkarten verfügbar. Leider ist die Zukunft von OpenGL in kommenden Windows-Versionen (Windows Vista) ungewiss.
- Mac OS: OpenGL ist fester Bestandteil von Mac OS 9 und [[:de:Mac OS X]|Mac OS X]].
- X Window System: OpenGL wird vom X Window System auf folgenden Plattformen unterstützt:
- Linux: OpenGL und GLX sind Linux-Systemkomponenten und sollten Bestandteil der meisten Distributionen (Debian, SuSE, Redhat, Caldera) sein.
OpenGL ES (OpenGL for Embedded Systems) gibt es für folgende Plattformen:
- PlayStation 2 / PlayStation 3
- INTEGRITY
- VxWorks
- Acorn RISC OS
- Amiga (StormMesa) und Amiga MiniGL
Unterstützte Programmiersprachen
Für viele Sprachen stehen Implementierungen oder Wrapper zur Verfügung:
- C/C++
- Java:
- Lightweight Java Game Library (LWJGL)
- Java 3D
- YAJOGLB (Yet Another Java OpenGL Binding)
- JoGL
- Tree
- JavaOpenGL
- Fortran 90: f90gl
- Perl:
- Perl OpenGL Bindings
- OpenGL Perl Module
- Pike: Nativ
- Python:
- PyOpenGL
- PyGlut
- Ada: Ada OpenGL 1.1 bindings
- C-Sharp: Tao
- Delphi: DelphiGL
Siehe auch
- Java 3D, eine Bibliothek von Java-Klassen zur Erzeugung, Manipulation und Darstellung dreidimensionaler Grafiken innerhalb von Java-Applikationen und -Applets. Nutzt je nach Plattform und Implementierung OpenGL oder Direct 3D.
- [[:de:OpenAL]|OpenAL]], eine plattformunabhängige 3D-Audio-API, die eine Art Audio-Erweiterung zu OpenGL darstellt und vom Aufbau, Programmierstil und Namenskonventionen an OpenGL angelehnt ist.
- SDL, der Simple DirectMedia Layer, eine plattformunabhängige API für Grafik, Audio und Eingabegeräte. Nutzt OpenGL für 3D-Grafik.
Literatur
- Richard S. Wright Jr. und Benjamin Lipchak: OpenGL Superbible, Third Edition, Sams Publishing, 2005, ISBN 0672326019, das Standardwerk über OpenGL, allerdings nur in englischer Sprache.
- Lorenz Burggraf: Jetzt lerne ich OpenGL . Der einfache Einstieg in die Schnittstellenprogrammierung, Markt+Technik, 2003, ISBN 3827262372
Weblinks
- www.OpenGL.org - Offizielle Webseite (englisch)
- www.robsite.de – Linkpage mit vielen Tutorials
- nehe.gamedev.net – Sehr umfangreiche Tutorialsammlung (englisch)
- www.codecolony.de/OpenGL – OpenGL-Tutorials für Anfänger und Fortgeschrittene
- DGL Wiki - Die Delphi-OpenGL-Community hat es sich mit diesem Wiki zum Ziel gemacht eine freie Wissensdatenbank rund um das Thema OpenGL zu erschaffen, an der alle Interessierten mitwirken, oder einfach nur Wissen nachschlagen können.