Zum Inhalt springen

OpenGL

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 26. November 2006 um 07:36 Uhr durch TARBOT (Diskussion | Beiträge) (Bot: Ergänze: ar:مكتبة الرسوميات المفتوحة). Sie kann sich erheblich von der aktuellen Version unterscheiden.
OpenGL

Basisdaten

Entwickler Silicon Graphics
Erscheinungsjahr 30. Juni 1992[1]
Aktuelle Version 2.1
(2. August 2006)
Betriebssystem plattformunabhängig
Programmier­sprache C, GLSL
Kategorie API
Lizenz verschieden
opengl.org

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) proprietäre Erweiterungen definieren.

Die Implementierung des OpenGL-API wird in der Regel als Teil der Grafikkarten-Treiber ausgeliefert. Diese führen entsprechend Befehle der Grafikkarte aus, insbesondere müssen auf der Grafikkarte nicht vorhandene Funktionen durch die CPU emuliert werden. Weiterhin gibt es Open Source-Implementierungen, wie die Mesa-Bibliothek.

Das Programmiermodell

Viele Parameter können die Darstellung von gerenderten Objekten beeinflussen, beispielsweise können sie texturiert und beleuchtet sein, gestreckt, verschoben, transparent oder undurchsichtig, sie können eine rauhe oder glatte Oberfläche haben und so weiter.

OpenGL wurde als Zustandautomat entworfen, der nicht bei jedem Funktionsaufruf alle benötigten Parameter erhält, sondern so lange dieselben Werte verwendet, bis die entsprechenden Zustände geändert werden. Auf diese Weise muss man zum Beispiel nicht für jeden Vertex OpenGL die gewünschte Farbe mitteilen, sondern setzt einmalig eine Farbe, woraufhin alle folgenden Vertices in dieser Farbe dargestellt werden. Auf dieselbe 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 Vertices 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 zustandsbasierte Konzept.

Erweiterungen

Eine wichtige Eigenschaft von OpenGL ist dessen Erweiterbarkeit. Einzelne Anbieter (typischerweise der Grafikkartenhersteller) können die Zustandsmaschine von OpenGL um weitere Zustände erweitern. Dabei wird eine vierstufige Vorgehensweise verfolgt:

  1. Wenn ein Hersteller eine Erweiterung realisieren möchte, so liefert er eine C-Headerdatei aus, in der er die Erweiterung mit den nötigen Konstanten und evtl. Funktionsprototypen definiert. Die Funktionsnamen und Konstanten erhalten ein herstellerspezifisches Postfix (z. B. NV für NVIDIA).
  2. Einigen sich dann mehrere Hersteller darauf, die gleiche Erweiterung anzubieten, bekommen die Funktionsnamen und Konstanten den Postfix EXT.
  3. Einigt sich schließlich das ARB (Architecture Review Board) darauf, die Erweiterung zu standardisieren, erhalten alle Namen den Postfix ARB.
  4. Die meisten vom ARB standardisierten Erweiterungen werden in der folgenden OpenGL-Spezifikation dann Core. Das heißt, sie werden Bestandteil von OpenGL selbst und führen ab dann keinen Postfix mehr.

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 ARB (Architecture Review Board) festgelegt. Das ARB existiert seit 1992 und besteht aus einer Reihe von Firmen. Stimmberechtigte Mitglieder sind die Firmen 3DLabs, Apple, ATI, Dell, IBM, Intel, NVIDIA, SGI und Sun (Stand Nov. 2004). Weiter mitwirkende Firmen sind Evans and Sutherland, Imagination Technologies, Matrox, Quantum3D, S3 Graphics, Spinor GmbH, Tungsten Graphics, und Xi Graphics. 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.

Seit dem 31. Juli 2006 liegt die Weiterentwicklung der OpenGL-API in der Hand der Khronos Group.

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 wichtigsten Ergänzungen der einzelnen Versionen waren

  • OpenGL 1.0 (1. Juli 1992)
    • erste Veröffentlichung
  • OpenGL 1.1 (1997)
    • Vertex Arrays
    • Texture Objects
    • Polygon Offset
  • OpenGL 1.2 (16. März 1998)
    • 3D-Texturen
    • Neue Pixelformate (BGRA, Packed)
    • Level-Of-Detail Texturen
  • OpenGL 1.2.1 (14. Oktober 1998)
    • ARB Extensions eingeführt
    • ARB Multitexture
  • OpenGL 1.3 (14. August 2001)
    • komprimierte Texturen
    • Cube-Maps
    • Multitexturing
  • OpenGL 1.4 (24. Juli 2002)
    • Tiefentexturen (für Shadow-Mapping)
    • Automatische MipMap-Erzeugung
    • Nebelkoordinaten
  • OpenGL 1.5 (29. Juli 2003)
    • Pufferobjekte (Vorhalten von Daten im Grafikspeicher)
    • Occlusion Queries
  • OpenGL 2.0 (7. September 2004)
    • Shaderprogramme OpenGL Shading Language
    • Multiple Render Targets
    • Texturen beliebiger Größe (nicht mehr 2n für Höhe und Breite)
  • OpenGL 2.1 (2. August 2006)

Der große Sprung von OpenGL 1.5 auf 2.0 erklärt sich mit der Einführung der OpenGL Shading Language. Dies stellt eine so große Änderung und Erweiterung dar, dass sich das ARB zu diesem Schritt entschieden hat.

OpenGL 2.0 Treiber

  • April 2005: 3DLabs liefert die ersten OpenGL-2.0-Treiber für die 3DLabs Wildcat Realizm Grafikkarten.
  • Juni 2005: OpenGL-2.0-Treiber von NVIDIA
  • Januar 2006: OpenGL-2.0-Treiber von ATI
  • Februar 2006: Mesa unterstützt GLSL in einer Alphaversion

Schnittstellen zum System

Da es sich bei OpenGL um eine reine Grafikbibliothek handelt, kümmert sie sich nicht um die Verwaltung von Zeichenoberflächen (Fenster), weiteren Puffern (wie etwa dem Z-Buffer oder dem Stencil-Buffer) oder Renderkontexten, um mit mehreren Anwendungen gleichzeitig die Schnittstelle nutzen zu können. Diese müssen mit Hilfe dafür vorgesehener, betriebssystemabhängiger Bibliotheken zur Verfügung gestellt werden.

Es existieren hier verschiedenste Bibliotheken die OpenGL mit dem darunter liegenden Betriebssystem verbinden:

  • GLX, die das Interface zwischen dem X Window System und OpenGL bildet
  • WGL, die Windows Graphics Library, die OpenGL und Windows verbindet
  • 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 bietet
  • GLFW, ähnliche Bibliothek wie GLUT, die das darunterliegenende Betriebssystem abstrahiert
  • SDL, kann ebenfalls plattformunabhänging einen OpenGL Kontext erzeugen

Typische Anwendungen für OpenGL

Unterstützte Plattformen

OpenGL wird von den meisten großen Betriebssystemen unterstützt:

  • Microsoft Windows: OpenGL ist Bestandteil von Windows 98, Me, NT, XP und 2000. Für Windows 95 wird ein Patch benötigt. Windows Vista wird ebenfalls OpenGL-fähig sein. Ursprünglich sollte jedoch das graphische Oberflächensystem Aero mit OpenGL nicht funktionieren. OpenGL wäre durch ein Layering auf die Version 1.4 eingefroren und nur im Vollbildmodus voll verfügbar gewesen. Für moderne 3D-Applikationen, die OpenGL im normalen Fenstermodus verwenden, wäre dies das Aus gewesen. Vermutlich wollte Microsoft so seinen eigenen Standard DirectX weiter fördern. Mitte März 2006 wurde jedoch bekanntgegeben, dass man sich von dieser Politik entfernt hat. Microsoft gab den Herstellern nun die Möglichkeit, vollständige Treiber für Windows Vista zu entwickeln.
  • Mac OS: OpenGL ist fester Bestandteil von Mac OS 9 und Mac OS X.
  • X Window System: OpenGL wird vom X Window System auf folgenden Plattformen unterstützt:
  • ZETA: OpenGL Support wird mittels MESA für diverse NVIDIA Grafikkarten geliefert

OpenGL ES (OpenGL for Embedded Systems) gibt es für folgende Plattformen:

Unterstützte Programmiersprachen

Die typische OpenGL-Implementierung liegt in Form einer dynamischen Programmbibliothek und einer C-Headerdatei vor. Somit ist die Nutzung aus C und C++ heraus problemlos möglich. Es existieren aufgrund der großen Beliebtheit von OpenGL jedoch Anbindungen an eine Reihe weiterer Programmiersprachen.

Siehe auch

  • GLU, die OpenGL Utility Library, die vom ARB standardisiert und Teil jeder OpenGL-Implementierung ist.
  • 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.
  • 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 und bietet Funktionen zum Initialisieren eines OpenGL-Kontext.
  • DevIL, eine plattformübergreifende API zum schnellen Laden und Speichern von Grafiken. Ehemals OpenIL. Arbeitet sehr gut mit OpenGL zusammen, da es möglich ist, mit einem einzigen Funktionsaufruf eine Bilddatei in eine OpenGL-Textur zu laden oder Bildschirmfotos ("screen shot") abzuspeichern.

Literatur

  • Richard S. Wright Jr. und Benjamin Lipchak: OpenGL Superbible. Third Edition, Sams Publishing, April 2004, ISBN 0-672-32601-9 – das Standardwerk über OpenGL, allerdings nur in englischer Sprache
  • Lorenz Burggraf: Jetzt lerne ich OpenGL. Der einfache Einstieg in die Schnittstellenprogrammierung. Markt+Technik, 9. Mai 2003, ISBN 3-8272-6237-2
  1. phoronix.com.