WhyOpenGL: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Orthogonale Grafik)
K (Allgemein)
Zeile 5: Zeile 5:
  
 
=== Allgemein ===
 
=== 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.
  
 
=== Bei 2D-Anwendungen? ===
 
=== Bei 2D-Anwendungen? ===

Version vom 2. Juli 2005, 23:13 Uhr

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.

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