OpenGL: Unterschied zwischen den Versionen
(→Was kann OpenGL nicht) |
|||
Zeile 1: | Zeile 1: | ||
= OpenGL = | = OpenGL = | ||
− | OpenGL ist die Grafik API um die sich hier alles dreht. | + | 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. | ||
Zeile 9: | Zeile 8: | ||
Mittlerweile liegt OpenGL in Version 2.0 vor und hat damit schon einige Neuerungen durchgemacht. | Mittlerweile liegt OpenGL in Version 2.0 vor und hat damit schon einige Neuerungen durchgemacht. | ||
− | OpenGL wurde so ausgelegt, dass es selbst dann effizient arbeitet, wenn der Computer, der | + | 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 |
− | die Graphik darstellt, nicht der ist welcher das Graphikprogramm ausführt. Dies kann zum | + | 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. |
− | 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. | ||
− | + | == Was OpenGL nicht kann == | |
− | |||
− | == Was | ||
OpenGL wurde als möglichst kompakte, betriebssystemunabhängige Schnittstelle konzipiert. | OpenGL wurde als möglichst kompakte, betriebssystemunabhängige Schnittstelle konzipiert. | ||
− | Deshalb enthält OpenGL keine Befehle welche Fensterereignisse oder Nutzereingaben | + | 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. |
− | behandeln. Möchte man soetwas realisieren, muss der Nutzer die vom Betriebssystem | + | 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> |
− | 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]]) | Es gibt allerdings Bibliotheken die diese Funktionen für OpenGL bereit stellen. (siehe [[GLU]]) | ||
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 : | 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 : | ||
− | |||
: '''Audio''' | : '''Audio''' | ||
Zeile 44: | Zeile 27: | ||
: [http://www.www.un4seen.com BASS] | : [http://www.www.un4seen.com BASS] | ||
: Ditto. | : Ditto. | ||
− | |||
: '''Multimedia''' | : '''Multimedia''' | ||
Zeile 51: | Zeile 33: | ||
: [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 59: | Zeile 40: | ||
: Ditto, allerdings schon länger am Start. | : Ditto, allerdings schon länger am Start. | ||
− | + | == Was OpenGL kann == | |
− | + | OpenGL kann beliebige komplexe 2D- und 3D-Objekte in verschiedenen Weisen rendern. | |
− | == Was kann | ||
− | 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 Drahtgittermodel, ü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 verfügt OpenGL sogar über Möglichkeiten die Grafikkarte direkt zu programmieren. Mehr dazu bei [[Shader]]. | Mittlerweile verfügt OpenGL sogar über Möglichkeiten die Grafikkarte direkt zu programmieren. Mehr dazu bei [[Shader]]. | ||
− | |||
== Unterschiede OpenGL <-> DirectX == | == Unterschiede OpenGL <-> DirectX == | ||
− | Der wichtigste Unterschied zuerst: | + | 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> | |
− | benutzen und, da sie ein Standard bei Grafikkarten ist funktioniert sie auf allen | + | 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 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. |
− | 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 er auch nur auf MS Betriebssystemen zu | ||
− | finden. Dort hingegen wird er, | ||
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) und in Direct3D werden Matrizen z.B. in einer anderen Form gespeichert (Reihenweise), und das Koordinatensystem unterscheidet sich in der Grundeinstellung von dem in OpenGL. | 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) und in Direct3D werden Matrizen z.B. in einer anderen Form gespeichert (Reihenweise), und das Koordinatensystem unterscheidet sich in der Grundeinstellung von dem in OpenGL. | ||
− | |||
− | |||
== Literatur == | == Literatur == |
Version vom 1. Dezember 2004, 17:00 Uhr
Inhaltsverzeichnis
OpenGL
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 2.0 vor und hat damit schon einige Neuerungen durchgemacht.
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.
Was OpenGL nicht kann
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.
Es gibt allerdings Bibliotheken die diese Funktionen für OpenGL bereit stellen. (siehe GLU)
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 :
- Audio
- 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.
- 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.
- 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 Drahtgittermodel, ü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. Mehr dazu bei Shader.
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 er auch nur auf MS-Betriebssystemen zu finden. Dort hingegen wird er, 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) und in Direct3D werden Matrizen z.B. in einer anderen Form gespeichert (Reihenweise), und das Koordinatensystem unterscheidet sich in der Grundeinstellung von dem in OpenGL.
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)