OpenGL: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
()
K (Ausserdem -> Außerdem)
 
(32 dazwischenliegende Versionen von 9 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
== OpenGL ==
+
= OpenGL =
OpenGL ist die Grafik API um die sich hier alles dreht.
+
[[Bild:Opengl_logo.png|right]]
 +
OpenGL ist die Grafik-API um die sich hier alles dreht.
  
=== Was ist OpenGL ===
+
== Was ist OpenGL ==
OpenGL ist eine Software Schnittstelle zur Grafikhardware.
+
OpenGL ist eine Software-Schnittstelle zur Grafikhardware.
 
Die Schnittstelle bestand ursprünglich aus 120 verschiedenen [[OpenGL-Funktionsübersicht|Befehlen]], welche man zum  
 
Die Schnittstelle bestand ursprünglich aus 120 verschiedenen [[OpenGL-Funktionsübersicht|Befehlen]], welche man zum  
erstellen der Objekte und Operationen benötigt um interaktive 3D Anwendungen zu  
+
Erstellen der Objekte und Operationen benötigt um interaktive 3D Anwendungen zu produzieren.  <br>
produzieren.  <br>
+
Mittlerweile liegt OpenGL in Version 3.0 vor und hat damit schon einige Neuerungen durchgemacht.
Mittlerweile liegt OpenGL in Version 2.0 vor und ist damit schon das dritte mal (Version 1.0 -> 1.2 -> 1.5 -> 2.0) um Funktionen erweitert worden.
 
  
OpenGL wurde so ausgelegt, dass es selbst dann effizient arbeitet, wenn der Computer, der
+
Die Weiterentwicklung von OpenGL wird durch das [http://www.opengl.org/about/arb/ OpenGL Architecture Review Board] kurz ARB kontrolliert.
die Graphik darstellt, nicht der ist welcher das Graphikprogramm ausführt. Dies kann zum
 
Beispiel dann der Fall sein, wenn sie in einem Netzwerk arbeiten in dem viele Computer so
 
mit einander verbunden wurden, dass sie Digitale Daten austauschen können. In dieser
 
Situation wird der Computer welcher das Programm ausführt und die OpenGL Befehle sendet
 
Klient und der Computer der selbige empfängt und das Zeichnen durchführt Server genannt.
 
Das Format zur Übertragung von OpenGL Befehlen (genannt protocol) vom Klienten zum Server
 
ist immer das gleiche. Damit können OpenGL Programme über Netze arbeiten, selbst wenn
 
Klient und Servercomputer unterschiedlichen Typs sind. Wenn ein OpenGL Programm nicht
 
über ein Netzwerk läuft dann läuft es auf einem einzelnen Computer welcher gleichzeitig
 
Server und Klient ist.
 
  
=== Was kann OpenGL nicht ===
+
OpenGL wurde so ausgelegt, dass es selbst dann effizient arbeitet, wenn der Computer, der die Graphik darstellt, nicht der ist welcher das Graphikprogramm ausführt. Dies kann zum Beispiel dann der Fall sein, wenn Sie in einem Netzwerk arbeiten in dem viele Computer so mit einander verbunden wurden, dass sie digitale Daten austauschen können. In dieser Situation wird der Computer, welcher das Programm ausführt und die OpenGL-Befehle sendet Client und der Computer, der selbige empfängt und das Zeichnen durchführt, Server genannt. Das Format zur Übertragung von OpenGL-Befehlen (genannt "Protokoll") vom Client zum Server ist immer das gleiche. Damit können OpenGL-Programme über Netze arbeiten, selbst wenn Client- und Servercomputer unterschiedlichen Typs sind. Wenn ein OpenGL-Programm nicht über ein Netzwerk läuft, dann läuft es auf einem einzelnen Computer, welcher gleichzeitig Server und Client ist.
OpenGL wurde als möglichst kompakte, Betriebssystemunabhängige Schnittstelle konzipiert.  
 
Deshalb enthält OpenGL keine Befehle welche Fensterereignisse oder Nutzereingaben
 
behandeln. Möchte man soetwas realisieren, muss der Nutzer die vom Betriebssystem
 
bereitgestellten Funktionen nutzen.
 
Weiterhin enthält OpenGL keine High-level Befehle zum zeichnen komplexer 3 dimensionaler
 
Objekte. OpenGL stellt nur Grundbausteine (die sogenannten [[Primitive]]) bereit. Diese
 
erlauben es dann dem Nutzer jedes denkbare Objekt daraus zusammenzusetzen. <br>
 
  
Es gibt allerdings Bibliotheken die diese Funktionen für openGL bereit stellen. (siehe [[GLU]])
+
OpenGL ist Plattformunabhängig. Wer z.B. 3D Ausgaben für ein Unixbetriebsystem schreiben will, kann dies mit OpenGL tun. Für portable Geräte wie z.B. PDAs existiert mit [[OpenGL ES]] eine spezielle verkleinerte Version von OpenGL.
  
Ausserdem (wie am GL = Graphics Library) zu erkennen kann man mit OpenGL nur das Grafik-Subsystem ansprechen, und muss für andere multimediale Peripherie bzw. Funktionalität auf externe Bibliotheken zurückgreifen. Hier einige davon  :
+
== Was OpenGL nicht kann ==
 +
OpenGL wurde als möglichst kompakte, vom Betriebssystem unabhängige Schnittstelle konzipiert.
 +
Deshalb enthält OpenGL keine Befehle, die Fensterereignisse oder Nutzereingaben behandeln. Möchte man so etwas realisieren, muss der Nutzer die vom Betriebssystem bereitgestellten Funktionen nutzen.
 +
Weiterhin enthält OpenGL keine High-level Befehle zum Zeichnen komplexer 3-dimensionaler Objekte. OpenGL stellt nur Grundbausteine (die sogenannten [[Primitive]]) bereit. Diese erlauben es allerdings dem Nutzer, jedes denkbare Objekt daraus zusammenzusetzen. <br>
  
 +
Es gibt allerdings Bibliotheken, die diese Funktionen für OpenGL bereit stellen. (siehe [[GLU]])
 +
 +
Außerdem (wie am GL = Graphics Library zu erkennen) kann man mit OpenGL nur das Grafik-Subsystem ansprechen, und muss für andere multimediale Peripherie bzw. Funktionalität auf externe Bibliotheken zurückgreifen. Hier einige davon:
  
 
: '''Audio'''
 
: '''Audio'''
 
: [http://www.openal.org OpenAL]  
 
: [http://www.openal.org OpenAL]  
: Soundequivalent zu OpenGL, wird von Creative Labs gepflegt. Wird inzwischen weit unterstützt (auch kommerzielle Titel nutzen es), ist komplett kostenlos und die API ist an OpenGL angelehnt.
+
: Soundäquivalent zu OpenGL, wird von Creative Labs gepflegt. Wird inzwischen weit unterstützt (auch kommerzielle Titel nutzen es), ist komplett kostenlos und die API ist an OpenGL angelehnt.
 
: [http://www.fmod.org FMOD]  
 
: [http://www.fmod.org FMOD]  
 
: Sound-API mit diversen Funktionen und Formaten, kostenlos für Freewareprojekte, sonst kommerzielle Lizenz.
 
: Sound-API mit diversen Funktionen und Formaten, kostenlos für Freewareprojekte, sonst kommerzielle Lizenz.
 
: [http://www.www.un4seen.com BASS]  
 
: [http://www.www.un4seen.com BASS]  
 
: Ditto.
 
: Ditto.
 
  
 
: '''Multimedia'''
 
: '''Multimedia'''
 
: [http://www.libsdl.org/index.php SDL]
 
: [http://www.libsdl.org/index.php SDL]
: Simple Directmedia Layer. Stark genutzte Cross-Plattform Multimedia-API für Sound, 2D/3D Grafik, Eingabegeräte, etc.
+
: Simple Directmedia Layer. Stark genutzte Cross-Plattform Multimedia-API für Sound, 2D/3D Grafik, Eingabegeräte, etc. (mehr zu [[SDL]])
 
: [http://www.khronos.org/openml OpenML]  
 
: [http://www.khronos.org/openml OpenML]  
 
: Open Media Library, Cross-Plattform Multimedia-API, Netzwerk, Sound, 2D/3D Grafik, etc., leider noch kein Delphi-Port da erst seit kurzem auf dem Markt.
 
: Open Media Library, Cross-Plattform Multimedia-API, Netzwerk, Sound, 2D/3D Grafik, etc., leider noch kein Delphi-Port da erst seit kurzem auf dem Markt.
 
  
 
: '''Physik'''
 
: '''Physik'''
Zeile 57: Zeile 44:
 
: Ditto, allerdings schon länger am Start.
 
: Ditto, allerdings schon länger am Start.
  
=== Was kann OpenGL ===
+
== Was OpenGL kann ==
OpenGL kann beliebige komplexe 2D und 3D Objekte in verschiedenen Weisen rendern.
+
OpenGL kann beliebige komplexe 2D- und 3D-Objekte in verschiedenen Weisen rendern.
Vom Drahtgittermodel, über texturierte und untexturierte Flächen bis hin zu beleuchteten  
+
Vom Drahtgittermodell, über texturierte und untexturierte Flächen bis hin zu beleuchteten  
 
Szenen bietet OpenGL alles, was das Computergrafikerherz begehrt.
 
Szenen bietet OpenGL alles, was das Computergrafikerherz begehrt.
Mittlerweile (ab OpenGL Version 2.0) verfügt OpenGL sogar über Möglichkeiten die  
+
Mittlerweile verfügt OpenGL sogar über Möglichkeiten die Grafikkarte direkt zu programmieren (siehe [[Shader]]).
Grafikkarte direkt zu programmieren. Mehr dazu bei [[Shader]].
+
 
 +
Bei all diesen Möglichkeiten ist OpenGL sehr schlank geblieben. OpenGL bietet aus diesem Grunde keine "höhere" Geometrie (wie z.B. Kugeln) an, sondern nur einfache [[Primitive]] (Linie, Dreieck, Viereck, Polygon). Es existieren aber verschiedene Zusatzbibiotheken (z.B. die [[GLU]] welche in der [[DGLOpenGL.pas]] enthalten ist) die diese Features bieten.
 +
 
 +
== Client-Server ==
 +
OpenGL ist nach dem Client-Server-Prinzip gestaltet. Das ermöglicht es OpenGL selbst komplexere Szenen auf leistungsschwachen Rechnern darzustellen. Die Szene wird auf einem starken Rechner (dem Server) vorberechnet und der Client stellt das Ergebnis nur noch dar. Dies ermöglicht es OpenGL prinzipiell auch die Ausgabe über das Netzwerk an einem anderen Rechner darzustellen.<br>
 +
Auf heutigen Systemen (der Client-Server-Ansatz war vorallem für Workstations gedacht) befinden sich Client und Server im selben Rechner.
 +
Bei einigen Befehlsspezifikationen findet man trotzdem den Hinweis auf die Client-Server-Struktur. Deshalb sei an dieser Stelle nocheinmal darauf hingewiesen.
 +
 
 +
== Unterschiede OpenGL <-> DirectX ==
 +
Der wichtigste Unterschied zuerst:
 +
 
 +
OpenGL ist, wie der Name schon sagt, ein offener Standard. Jeder kann sie kostenlos benutzen und, da sie ein Standard bei Grafikkarten ist funktioniert sie auf allen Betriebssystemen (sofern das Betriebssystem Wert auf eine grafische Oberfläche legt). DirectX hingegen ist eine von Microsoft entwickelte Schnittstelle, die aus mehreren Teilsystemen besteht. Man kann somit auch nur den Grafikteil direkt mit OpenGL vergleichen. Der Soundteil von DirectX wäre dann das Gegenstück zu OpenAL, dem offenen Audiostandard. <br>
 +
Da DirectX von Microsoft entwickelt wird, ist dies auch nur auf MS-Betriebssystemen zu finden. Dort hingegen wird es, Microsoft-typisch, OpenGL vorgezogen. Da aber OpenGL ein Industriestandard ist, und von daher nicht von Microsoft ignoriert werden kann, gibt es auch unter Windows (durch die Grafikkartenhersteller) immer die aktuellste OpenGL-Version.
  
=== Unterschiede OpenGL <-> DirektX ===
+
Im 3D-Teil sind DirectX und OpenGL ziemlich auf dem gleichen Stand, Unterschiede gibt es natürlich in der API (OpenGL = pures C, DirectX = COM). Außerdem werden z.B. Matrizen in Direct3D in einer anderen Form gespeichert (Reihenweise)  und das Koordinatensystem unterscheidet sich in der Grundeinstellung von dem in OpenGL (Z-Achse umgekehrt).
Der wichtigste Unterschied zuerst: <br>
 
  
OpenGl ist wie der Name schon sagt ein offener Standard. Jeder kann sie kostenlos
 
benutzen und, da sie der Standard bei Grafikkarten ist, sie funktioniert auf allen
 
Betriebssystemen. (sofern das Betriebssystem Wert auf eine Grafische Oberfläche legt.)
 
DirektX hingegen ist eine von Microsoft entwickelte Schnittstelle die aus mehreren
 
Teilsystemen besteht. Man kann somit auch nur den Grafikteil direkt mit OpenGL
 
vergleichen. Der Soundteil von DirektX wäre dann das Gegenstück zu OpenAL, dem offenen
 
Audiostandard. <br>
 
Da DirectX von Microsoft entwickelt wird, ist er auch nur auf MS Betriebssystemen zu
 
finden. Dort hingegen wird er, Microsoft typisch, OpenGL vorgezogen. Da aber OpenGl der
 
Standard ist und nicht DirectX, tauchen auch die neuesten OpenGL-Versionen (wenn auch
 
meist zeitversetzt) in den MS Betriebssystemen auf.
 
  
Weiterer Unterschied ist, dass das Koordinatensystem bei OpenGL und DirectX
+
Wieso man mit OpenGL arbeiten sollte und nicht mit irgend einer anderen API findet ihr im Artikel [[WhyOpenGL]].
unterschiedlich ist. (Die Z-Achse zeigt bei OpenGL auf den Betrachter)
 
  
=== Literatur ===
+
== Literatur ==
 
[[RedBook]] - Dokumentation zu OpenGL
 
[[RedBook]] - Dokumentation zu OpenGL
===Siehe===
+
<br>
 +
Jetzt lerne ich OpenGL - Der Einstieg in die OpenGL-Programmierung/Nutzung (Lorenz Burggraf, Markt und Technik 2003, ISBN 3-8272-6237-2)
 +
<br>
 +
 
 +
== Siehe auch ==
 
http://de.wikipedia.org/wiki/OpenGL
 
http://de.wikipedia.org/wiki/OpenGL

Aktuelle Version vom 21. März 2012, 15:41 Uhr

OpenGL

Opengl logo.png

OpenGL ist die Grafik-API um die sich hier alles dreht.

Was ist OpenGL

OpenGL ist eine Software-Schnittstelle zur Grafikhardware. Die Schnittstelle bestand ursprünglich aus 120 verschiedenen Befehlen, welche man zum Erstellen der Objekte und Operationen benötigt um interaktive 3D Anwendungen zu produzieren.
Mittlerweile liegt OpenGL in Version 3.0 vor und hat damit schon einige Neuerungen durchgemacht.

Die Weiterentwicklung von OpenGL wird durch das OpenGL Architecture Review Board kurz ARB kontrolliert.

OpenGL wurde so ausgelegt, dass es selbst dann effizient arbeitet, wenn der Computer, der die Graphik darstellt, nicht der ist welcher das Graphikprogramm ausführt. Dies kann zum Beispiel dann der Fall sein, wenn Sie in einem Netzwerk arbeiten in dem viele Computer so mit einander verbunden wurden, dass sie digitale Daten austauschen können. In dieser Situation wird der Computer, welcher das Programm ausführt und die OpenGL-Befehle sendet Client und der Computer, der selbige empfängt und das Zeichnen durchführt, Server genannt. Das Format zur Übertragung von OpenGL-Befehlen (genannt "Protokoll") vom Client zum Server ist immer das gleiche. Damit können OpenGL-Programme über Netze arbeiten, selbst wenn Client- und Servercomputer unterschiedlichen Typs sind. Wenn ein OpenGL-Programm nicht über ein Netzwerk läuft, dann läuft es auf einem einzelnen Computer, welcher gleichzeitig Server und Client ist.

OpenGL ist Plattformunabhängig. Wer z.B. 3D Ausgaben für ein Unixbetriebsystem schreiben will, kann dies mit OpenGL tun. Für portable Geräte wie z.B. PDAs existiert mit OpenGL ES eine spezielle verkleinerte Version von OpenGL.

Was OpenGL nicht kann

OpenGL wurde als möglichst kompakte, vom Betriebssystem unabhängige Schnittstelle konzipiert. Deshalb enthält OpenGL keine Befehle, die Fensterereignisse oder Nutzereingaben behandeln. Möchte man so etwas realisieren, muss der Nutzer die vom Betriebssystem bereitgestellten Funktionen nutzen. Weiterhin enthält OpenGL keine High-level Befehle zum Zeichnen komplexer 3-dimensionaler Objekte. OpenGL stellt nur Grundbausteine (die sogenannten Primitive) bereit. Diese erlauben es allerdings dem Nutzer, jedes denkbare Objekt daraus zusammenzusetzen.

Es gibt allerdings Bibliotheken, die diese Funktionen für OpenGL bereit stellen. (siehe GLU)

Außerdem (wie am GL = Graphics Library zu erkennen) kann man mit OpenGL nur das Grafik-Subsystem ansprechen, und muss für andere multimediale Peripherie bzw. Funktionalität auf externe Bibliotheken zurückgreifen. Hier einige davon:

Audio
OpenAL
Soundäquivalent zu OpenGL, wird von Creative Labs gepflegt. Wird inzwischen weit unterstützt (auch kommerzielle Titel nutzen es), ist komplett kostenlos und die API ist an OpenGL angelehnt.
FMOD
Sound-API mit diversen Funktionen und Formaten, kostenlos für Freewareprojekte, sonst kommerzielle Lizenz.
BASS
Ditto.
Multimedia
SDL
Simple Directmedia Layer. Stark genutzte Cross-Plattform Multimedia-API für Sound, 2D/3D Grafik, Eingabegeräte, etc. (mehr zu SDL)
OpenML
Open Media Library, Cross-Plattform Multimedia-API, Netzwerk, Sound, 2D/3D Grafik, etc., leider noch kein Delphi-Port da erst seit kurzem auf dem Markt.
Physik
Newton Game Dynamics
Physik-Engine für 3D-Echtzeitanwendungen.
Open Dynamics Engine
Ditto, allerdings schon länger am Start.

Was OpenGL kann

OpenGL kann beliebige komplexe 2D- und 3D-Objekte in verschiedenen Weisen rendern. Vom Drahtgittermodell, über texturierte und untexturierte Flächen bis hin zu beleuchteten Szenen bietet OpenGL alles, was das Computergrafikerherz begehrt. Mittlerweile verfügt OpenGL sogar über Möglichkeiten die Grafikkarte direkt zu programmieren (siehe Shader).

Bei all diesen Möglichkeiten ist OpenGL sehr schlank geblieben. OpenGL bietet aus diesem Grunde keine "höhere" Geometrie (wie z.B. Kugeln) an, sondern nur einfache Primitive (Linie, Dreieck, Viereck, Polygon). Es existieren aber verschiedene Zusatzbibiotheken (z.B. die GLU welche in der DGLOpenGL.pas enthalten ist) die diese Features bieten.

Client-Server

OpenGL ist nach dem Client-Server-Prinzip gestaltet. Das ermöglicht es OpenGL selbst komplexere Szenen auf leistungsschwachen Rechnern darzustellen. Die Szene wird auf einem starken Rechner (dem Server) vorberechnet und der Client stellt das Ergebnis nur noch dar. Dies ermöglicht es OpenGL prinzipiell auch die Ausgabe über das Netzwerk an einem anderen Rechner darzustellen.
Auf heutigen Systemen (der Client-Server-Ansatz war vorallem für Workstations gedacht) befinden sich Client und Server im selben Rechner. Bei einigen Befehlsspezifikationen findet man trotzdem den Hinweis auf die Client-Server-Struktur. Deshalb sei an dieser Stelle nocheinmal darauf hingewiesen.

Unterschiede OpenGL <-> DirectX

Der wichtigste Unterschied zuerst:

OpenGL ist, wie der Name schon sagt, ein offener Standard. Jeder kann sie kostenlos benutzen und, da sie ein Standard bei Grafikkarten ist funktioniert sie auf allen Betriebssystemen (sofern das Betriebssystem Wert auf eine grafische Oberfläche legt). DirectX hingegen ist eine von Microsoft entwickelte Schnittstelle, die aus mehreren Teilsystemen besteht. Man kann somit auch nur den Grafikteil direkt mit OpenGL vergleichen. Der Soundteil von DirectX wäre dann das Gegenstück zu OpenAL, dem offenen Audiostandard.
Da DirectX von Microsoft entwickelt wird, ist dies auch nur auf MS-Betriebssystemen zu finden. Dort hingegen wird es, Microsoft-typisch, OpenGL vorgezogen. Da aber OpenGL ein Industriestandard ist, und von daher nicht von Microsoft ignoriert werden kann, gibt es auch unter Windows (durch die Grafikkartenhersteller) immer die aktuellste OpenGL-Version.

Im 3D-Teil sind DirectX und OpenGL ziemlich auf dem gleichen Stand, Unterschiede gibt es natürlich in der API (OpenGL = pures C, DirectX = COM). Außerdem werden z.B. Matrizen in Direct3D in einer anderen Form gespeichert (Reihenweise) und das Koordinatensystem unterscheidet sich in der Grundeinstellung von dem in OpenGL (Z-Achse umgekehrt).


Wieso man mit OpenGL arbeiten sollte und nicht mit irgend einer anderen API findet ihr im Artikel WhyOpenGL.

Literatur

RedBook - Dokumentation zu OpenGL
Jetzt lerne ich OpenGL - Der Einstieg in die OpenGL-Programmierung/Nutzung (Lorenz Burggraf, Markt und Technik 2003, ISBN 3-8272-6237-2)

Siehe auch

http://de.wikipedia.org/wiki/OpenGL