OpenGL: Unterschied zwischen den Versionen

GISWiki - Das freie Portal für Geoinformatik (GIS)
Wechseln zu: Navigation, Suche
 
(Weblinks)
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''OpenGL''' is the premier environment for developing portable, interactive 2D and 3D graphics applications. Since its introduction in 1992, OpenGL has become the industry's most widely used and supported 2D and 3D graphics application programming interface (API), bringing thousands of applications to a wide variety of computer platforms. OpenGL fosters innovation and speeds application development by incorporating a broad set of rendering, texture mapping, special effects, and other powerful visualization functions. Developers can leverage the power of OpenGL across all popular desktop and workstation platforms, ensuring wide application deployment.
+
'''OpenGL''' (Open Graphics Library) ist eine [[:de:Spezifikation|Spezifikation]] für ein plattform- und programmiersprachenunabhängiges [[:de:Application Programming Interface|API]] (Application Programming Interface) zur Entwicklung von [[:de:3D-Computergrafik|3D-Computergrafik]]. Der OpenGL-Standard beschreibt etwa 250 Befehle, die die Darstellung komplexer 3D-Szenen in [[:de:Echtzeit|Echtzeit]] erlauben. Zudem können andere Organisationen (zumeist Hersteller von Grafikkarten) auch proprietäre Erweiterungen definieren.
  
* http://www.opengl.org/
+
Die Implementierung des OpenGL-API wird in der Regel als Teil der Grafikkarten-Treiber ausgeliefert. Diese führen dann entsprechend Befehle der [[:de:Grafikkarte|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 [[:de:Mesa 3D|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 opak, sie können eine rauhe oder glatte Oberfläche haben, usw.
 +
 
 +
OpenGL wurde als [[:de:Automat_%28Informatik%29|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 [[:de:Rendering-Pipeline|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 [[:de:Direct3D|Direct3D]] verfolgt man dieses Zustands-basierte Konzept.
 +
 
 +
== Historische Entwicklung ==
 +
OpenGL entstand ursprünglich aus dem von [[:de:Silicon Graphics|Silicon Graphics]] (SGI) entwickelten [[:de:IRIS GL|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 [[:de:3Dlabs|3Dlabs]], [[:de:Apple|Apple]], [[:de:ATI|ATI]], [[:de:Dell Computer|Dell]], [[:de:Evans & Sutherland|Evans & Sutherland]], [[:de:Hewlett-Packard|Hewlett-Packard]], [[:de:IBM|IBM]], [[:de:Intel|Intel]], [[:de:Matrox|Matrox]], [[:de:NVidia|NVidia]], [[:de:SGI|SGI]] und [[:de:Sun Microsystems|Sun]]. [[:de:Microsoft|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 [[:de:Computerspiele|Computerspiele]] wurde es jedoch in den letzten Jahren zunehmend von Microsofts [[:de:Direct3D|Direct3D]] verdrängt und hält sich hauptsächlich noch aufgrund der Beliebtheit der Engines von [[:de:id Software|id Software]] und der Portabilität auf andere Plattformen. Die aktuelle Version des Standards ist OpenGL 2.0. Mit dieser Version wurde auch die [[:de:OpenGL Shading Language|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 [[:de:Shader|Shader]]) direkt auf der Grafikkarte ausführen zu lassen.
 +
 
 +
Bedeutende in Zusammenhang mit OpenGL stehende APIs sind:
 +
*[[:de:GLU|GLU]], die OpenGL Utility Library, die vom ARB standardisiert und Teil jeder OpenGL Implementierung ist.
 +
*[[:de:GLX|GLX]], die das Interface zwischen dem [[:de:X Window System|X Window System]] und OpenGL bildet
 +
*[[:de:WGL|WGL]], die Windows Graphics Library, die OpenGL und [[:de:Microsoft Windows|Windows]] verbindet und
 +
*[[:de:AGL|AGL]] und [[:de:CGL|CGL]], das entsprechende Gegenstück für [[:de:Mac OS|Mac OS]].
 +
*[[:de:GLUT|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.
 +
*[[:de:GLSL|GLSL]], die OpenGL Shading Language zum direkten Programmieren der Grafikhardware, Bestandteil von OpenGL 2.0
 +
 
 +
==Verwendete Verfahren==
 +
*[[:de:Scanline Rendering|Scanline Rendering]]
 +
*[[:de:Shading|Shading]]
 +
**[[:de:Gouraud Shading|Gouraud Shading]]
 +
**[[:de:Flat Shading|Flat Shading]]
 +
*[[:de:Beleuchtungsmodell|Beleuchtungsmodell]]
 +
**[[:de:Phong-Beleuchtungsmodell|Phong-Beleuchtungsmodell]]
 +
*[[:de:Rendering-Pipeline|Rendering-Pipeline]]
 +
*[[:de:Doublebuffer|Doublebuffer]]ing
 +
 
 +
==Typische Anwendungen für OpenGL ==
 +
*[[:de:Virtual Reality|Virtual Reality]]
 +
*[[:de:Augmented Reality|Augmented Reality]]
 +
*[[:de:Computer Aided Design|CAD]]
 +
*[[:de:Computerspiel|Computerspiel]]
 +
*[[VRML]] Authoring
 +
*[[:de:Bildschirmschoner|Bildschirmschoner]]
 +
*[[:de:Simulation|Simulation]]
 +
 
 +
== Unterstützte Plattformen ==
 +
OpenGL wird von den meisten großen Betriebssystem unterstützt:
 +
* [[:de:Microsoft Windows|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 ([[:de:Microsoft Windows Vista|Windows Vista]]) ungewiss.
 +
* [[:de:Mac OS|Mac OS]]: OpenGL ist fester Bestandteil von [[:de:Mac OS (bis 9)|Mac OS 9]] und [[:de:Mac OS X]|Mac OS X]].
 +
* [[:de:X Window System|X Window System]]: OpenGL wird vom X Window System auf folgenden Plattformen unterstützt:
 +
** [[:de:Solaris|Solaris]] ([[:de:Sun Microsystems|Sun Microsystems]])
 +
** [[:de:AIX|AIX]] ([[:de:IBM|IBM]])
 +
** [[:de:HP-UX|HP-UX]] ([[:de:Hewlett-Packard|Hewlett-Packard]])
 +
** [[:de:IRIX|IRIX]] ([[:de:Silicon Graphics|Silicon Graphics]])
 +
** [[:de:Tru64|Tru64]] ([[:de:Compaq|Compaq]])
 +
** [[:de:FreeBSD|FreeBSD]]
 +
** [[Linux]]
 +
* [[Linux]]: OpenGL und GLX sind Linux-Systemkomponenten und sollten Bestandteil der meisten Distributionen ([[:de:Debian GNU/Linux|Debian]], [[:de:SUSE LINUX|SuSE]], [[:de:Red Hat Linux|Redhat]], [[:de:Caldera Linux|Caldera]]) sein.
 +
 
 +
OpenGL ES (OpenGL for Embedded Systems) gibt es für folgende Plattformen:
 +
* [[:de:PlayStation 2|PlayStation 2]] / [[:de:PlayStation 3|PlayStation 3]]
 +
* [[:de:INTEGRITY|INTEGRITY]]
 +
* [[:de:VxWorks|VxWorks]]
 +
* [[:de:Acorn|Acorn]] [[:de:RISC OS|RISC OS]]
 +
* [[:de:Amiga|Amiga]] (StormMesa) und Amiga MiniGL
 +
 
 +
== Unterstützte Programmiersprachen ==
 +
Für viele Sprachen stehen Implementierungen oder [[:de:Wrapper|Wrapper]] zur Verfügung:
 +
* [[C]]/[[C|C++]]
 +
* [[Java]]:
 +
** [[:de:LWJGL|Lightweight Java Game Library]] (LWJGL)
 +
** [[Java 3D]]
 +
** YAJOGLB (Yet Another Java OpenGL Binding)
 +
** JoGL
 +
** Tree
 +
** JavaOpenGL
 +
* [[:de:Fortran|Fortran 90]]: f90gl
 +
* [[Perl]]:
 +
** Perl OpenGL Bindings
 +
** OpenGL Perl Module
 +
* [[:de:Pike (Programmiersprache)|Pike]]: Nativ
 +
* [[:Kategorie:Python|Python]]:
 +
** PyOpenGL
 +
** PyGlut
 +
* [[:de:Ada (Programmiersprache)|Ada]]: Ada OpenGL 1.1 bindings
 +
* [[:de:C-Sharp|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 [[:de:DirectX|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.
 +
*[[:de:Simple_DirectMedia_Layer|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 ==
 +
* [http://www.opengl.org/ www.OpenGL.org] - Offizielle Webseite (englisch)
 +
* [http://www.robsite.de/tutorials.php?tut=opengl www.robsite.de] – Linkpage mit vielen Tutorials
 +
* [http://nehe.gamedev.net/ nehe.gamedev.net] – Sehr umfangreiche Tutorialsammlung (englisch)
 +
* [http://www.codecolony.de/OpenGL/ www.codecolony.de/OpenGL] – OpenGL-Tutorials für Anfänger und Fortgeschrittene
 +
* [http://wiki.delphigl.com 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.
 +
 
 +
[[Kategorie:Programmierung]]
 +
[[Kategorie:Delphi]]
 +
 
 +
[[en:OpenGL]]
 +
[[de:OpenGL]]

Aktuelle Version vom 29. April 2009, 08:25 Uhr

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.

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:

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

Unterstützte Programmiersprachen

Für viele Sprachen stehen Implementierungen oder Wrapper zur Verfügung:

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.