WhyOpenGL

Aus DGL Wiki
Wechseln zu: Navigation, Suche
Hinweis: Dieser Artikel ist noch unvollständig.
(Mehr Informationen/weitere Artikel)

{{{1}}}

Incomplete.jpg

Phobeus: Dies soll nur ein Stub sein und zur Ideensammlung dienen / Wir haben sehr viele Leute im Netz rumlaufen, die noch denken, dass DelphiX das absolute Non-Plus-Ultra ist. Ich würde gerne einen Artikel haben um einige gänige Fragen zu beantworten.

Warum OpenGL...

Allgemein

OpenGL läuft auf einer Vielzahl von Platformen. Während DelphiX auf Microsoft Windows beschränkt ist, wird OpenGL u.a. auch von Linux und Macintosh unterstützt, was evtl. Portierungen erleichtert. OpenGL ist auch nicht nur auf PC sondern auch auf PDAs, Apple und einigen Consolen nutzbar. So ist die OpenGL Libary bei Windows, MacOS X und Linux(gängige Distrubitionen) schon bei der installation dabei und braucht nicht erst installiert werden.

OpenGL besteht aus einer Libary und soll nur ein Ziel erreichen, unzwar eine gute und performante API für das ansprechen der Grafikkarte und ihren Komponenten. Die Implementierung ist dem entsprechen einfach, da nur eine Libary existiert entgegen der Libarysamlung von DirectX. Die Benahmung der einzelnen Funktionen ist leicht herleitbar und übersichtlich. So fängt eine OpenGL Funktion immer mit GL_... an und beschreibt dann die Funktionsart, wie z.B. Begin, End, BindTexture_2D und weitere.

Hinter OpenGL steckt eine Firma namens SGI, die diese API 1992 veröffentlichte, doch arbeiten an OpenGL eine ganze Industrie wie Nvidia, ATI, IBM, HP und andere große und kleinunternehmen aus allen Branchen.

Im gegensatz zu DirectX ist es den Grafikkartenherstellern mit OpenGL möglich, eigene Funktionen, die an die eigene Hardware angepasst ist, zu vorhandenen Befehlen mit in die Libary einzulagern. Dies ermöglicht bei Anwendung erhebliche Performancesteigerungen und kann mit unter sogar Features die sonnst brach liegen zur verfügung stellen. So kann man mit OpenGL die TrueForm Technik gut ausnutzen und ungewollte aufwertung unterbinden.

Bei 2D-Anwendungen?

In den letzten Jahren sind 2D-Anwendungen mitunter sehr aus der Mode gekommen. Wer sich heutzutage ein Spielemagazin kauft und die Seiten durchblättert wird unter den Top-Titeln nahezu ausschließlich 3D-Titel finden. Doch nicht immer ist 3D auch wirklich notwendig bzw. bei einem Projekt sinnvoll. Bewußt möchten manche Autoren ein 2D-Spiel machen und greifen dabei schon fast aus Protest zu einer alten Schnittstelle. Aus diesem Grund geistern vermutlich noch soviele Leute durchs Netz und wenden DelphiX an, dass bereits auf eine DirectX-Version basiert, die seit graumer Zeit veraltet ist. Solange man nur wenige Bilder versucht auf dem Bildschirm zu zeichnen, scheint dies auch noch ausreichend zu sein. Allerdings kommt auf kurz oder lang dann doch die Frage auf, wie man die Performance verbessern kann. Gerade wenn es darum geht viele Objekte transparent zu zeichnen, kommt sehr schnell Frust auf, wenn die FPS-Rate in den Keller sinkt. Der Grund hierfür liegt dabei auf der Hand. Alte Schnittstellen verwenden nicht die neue Hardware und so kommt es dazu, dass die neue Grafikkarte nicht genutzt wird, sondern die Grafiken über die CPU geschleift werden. Wer also eine 2D-Anwendung erstellen möchte, sollte sich folgende Szenarien einmal zu herzen nehmen.

Pseudo-3D

Früher wurde versucht mit Hilfe einer isometrischen Engine eine 2D-Grafik so ausehen zu lassen als sei diese eigentlich dreidimensional. Ich denke jeder von Euch hat bereits einmal SimCity oder Jagged Alliance gesehen und kann sich in etwa vorstellen, was unter einer ISO-Engine verstanden wird. Eine solche Technik in der heutigen Zeit einzusetzen ist meistens eher hinderlich als produtkiv. Man stelle sich nur einmal eine Figur darauf vor, die sich in mehre Richtungen bewegen kann. Für jede Bewegungsrichtung müßte man bei reinem 2D eine Grafik bereit halten (und sei es nur im Speicher). In einem 3D-Raum könnte man einfach ein Modell nehmen und dieses wirklich von mehren Seiten betrachten. Würde man nun auf die Idee kommen die Kameraeinstellung um nur wenige Grad zu drehen, würde dies einer kompletten Neuerstellung aller Grafiken zur Folge haben. Verwendet man statt dessen einen 3D-Raum mit einer Kamera, die nur nach oben, unten, links und rechts verschoben wird und ansonsten immer in einem festen Winkel auf das Spielfeld blickt, so erhält man einen ähnlichen Effekt wie bei einer isometrische Engine. Der Vorteil, dass zahlreiche mathematische Operationen nur im 2D-Raum berechnet werden müssen, bleibt ebenfalls weiterhin erhalten. Dafür werden die Grafiken allerdings weitesgehend von der GPU berechnet, und es werden zahlreiche transparente Effekte zugelassen.

Orthogonale Grafik

Doch selbst wenn man nur eine reine 2D-Grafik wünscht wie sie vor 15 Jahren noch üblich war, bietet es sich an eine moderne 3D-Schnittstelle wie OpenGL zu verwenden. Dies mag auf den ersten Blick nicht logisch erscheinen. Allerdings macht dies Sinn, wenn man sich bewußt wird, dass die Grafiken bei OpenGL über die GPU der Grafikkarte geschickt werden, die meistens um ein vielfaches leistungsfähiger als die CPU ist (und diese ja auch mit anderen Berechnungen wie z.B. der KI beschäftigt ist). Zeichnet man statt dessen ein Quadrat und klebt eine Textur in Form der gewünschten Grafik darauf, erhält man ebenfalls den gewünschten Effekt. Es mag nun kompliziert klingen in einem 3D-Raum Quadrate zu plazieren und zu texturieren. Man sollte allerdings wissen, dass es einen sogenannten orthogonalen Modus gibt in dem man bei einem 3D-Raum die Tiefe entfernt und somit wieder einen 2D-Raum erhält. Mit Hilfe des Tiefenbuffers kann man nun sogar noch die Z-Werte verwenden um die Zeichenreihenfolge der Quadrate zu bestimmen. Ein Tutorial zu Verwendung dieser Technik findet Ihr hier. Außerdem sind alle nötigen Befehle hier in diesem Wiki (auf Deutsch) oder in euerer Delphihilfe (Englisch) bzw. im Netz (Englisch) dokumentiert.

Alternativen