Ist OpenGL für 2D-Spiele geeignet?

43

Ich unterrichte mich jetzt schon eine Weile in der OpenGL-Bibliothek und möchte anfangen, ein Spiel zu machen. Zur einfacheren Einführung möchte ich jedoch mit etwas 2D beginnen, beispielsweise einem Top-Down-Spiel im Pokemon-Stil.

Ist das ein guter Plan oder ist OpenGL speziell für 3D gemacht?

w4etwetewtwet
quelle
Ich denke, ein Vorteil von OpenGL für 2D ist, dass Sie die Vorteile von Shadern nutzen können. Diese können nützlich sein, um Spezialeffekte zu erzielen. Ein weiterer Vorteil ist, dass Sie mit der API bereits vertraut sind, wenn Sie OpenGL bereits kennen.
Lysol

Antworten:

43

OpenGL eignet sich sehr gut für 2D-Spiele. Obwohl es im Allgemeinen für 3D verwendet wird, kann dieselbe Funktionalität für 2D-Spiele verwendet werden. Das heißt, alles, was Sie mit 3D OpenGL tun können, ist mit "2D" OpenGL anwendbar.

Einige weitere Informationen finden Sie an dieser Stelle .

2D OpenGL wird auf die gleiche Weise erreicht wie 3D OpenGL. 2D OpenGL ist nur die Anwendung einer Technik, dh das Rendern der Szene auf einer flachen Ebene und dann die Verwendung einer orthografischen Projektion anstelle einer perspektivischen Projektion, die je nach Konfiguration die Szene verzerren kann.

Ein Beispiel:

Ortho gegen Perspektive

(a) ist eine Szene in einer orthographischen Projektion. (b) ist dieselbe Szene unter Verwendung einer perspektivischen Projektion. In einem 2D-Spiel kann dies zu einer falschen Positionierung von Sprites führen, wenn deren Tiefe geändert wird (was je nach Art der Entwicklung der Fall sein kann). Die Verwendung einer perspektivischen Projektion erschwert auch das Ausrichten von Objekten in Bildschirmkoordinaten.

Darüber hinaus bringt OpenGL viele, viele, viele Vorteile mit sich. In erster Linie ist die Hardwarebeschleunigung ein großes Plus. Außerdem können Sie viel genauer steuern, was die Grafikkarte leistet und wie sie funktioniert, und so fallspezifische Optimierungen vornehmen

Outurnate
quelle
Vielen Dank! Ich wollte nur die Bestätigung, dass es in Ordnung wäre, dies zu tun.
W4etwetewtwet
4
Wenn Sie die Fähigkeit und das Interesse haben, OpenGL für 2D zu verwenden, erhalten Sie viele Belohnungen, die nur OpenGL bieten kann. Überragende Leistung, plattformübergreifende Kompatibilität ... Stellen Sie sich das so vor. Fast alle anderen Optionen für 2D würden sowieso auf OpenGL aufbauen . Es ist eine großartige Gelegenheit, einige "Zwischenhändler" auszuschneiden
Steven Lu
2
@StevenLu und nicht zu vergessen, etwas mehr ein echter Programmierer
Outurnate
Großartig zu lesen! Danke, dass du das verlinkt hast. Ja, das Codieren von 2D mit direktem OpenGL ist viel schlimmer. Deshalb sollten Sie es auch tun.
Steven Lu
1
Sie sollten zu dieser Antwort mehr Informationen bereitstellen als nur einen Link. Erklären Sie vielleicht, warum GL für 2D funktioniert (orthografische Ansichten) und welche Vorteile es bringt (Hardwarebeschleunigung, Shader-Effekte).
Sean Middleditch
21

OpenGL ist, wie der Name schon sagt, eine Grafikbibliothek. Obwohl es unter Berücksichtigung von 3D entwickelt wurde, gibt es in der Bibliothek keine fest codierten Annahmen, dass Sie 3D verwenden werden. Darüber hinaus sind dank der 3D-Funktionen einige Dinge, die in einem strengen 2D-Ansatz nur schwer zu tun sind, trivial. Beispiele:

  • Die Z-Sortierung wird durch die Verwendung von 3D-Koordinaten im Tiefenpuffer vereinfacht (auf Transparenz achten)
  • Die Drehung und Skalierung von Sprites ist grundsätzlich kostenlos, da Sie strukturierte Quads verwenden, die von der Auflösung unabhängig sind
  • Wenn Sie sich auf OpenGL 2.0-fähige Grafikkarten beschränken möchten, können Sie Shader verwenden, die das Schreiben von Spezialeffekten (Unschärfen, Partikeleffekte, Bildmanipulation, Farbersetzung) erheblich vereinfachen - ganz zu schweigen davon viel schneller als CPU-seitig erledigt

Dies sind nur ein paar Vorteile, die sich aus meinem Kopf ergeben, ich glaube, es gibt mehrere andere.

Kornel Kisielewicz
quelle
3
Bitte beschränken Sie sich auf OpenGL 2.0 (oder höher) fähige Grafikkarten. OpenGL 2.0 wurde im Jahr 2004 veröffentlicht, auch wenn es ziemlich veraltet ist.
Aufschnitt
@Slicedpan, leider werden einige Laptops / Netbooks immer noch mit Intel-Karten geliefert, die GL 1.4 max unterstützen. Ich persönlich habe beschlossen, sie nicht mehr zu verwenden, aber einige Leute (insbesondere, wenn sie einfache Spiele machen) möchten sie möglicherweise unterstützen.
Kornel Kisielewicz
16

OpenGL ist zwar eine 3D-API, Sie können sie jedoch weiterhin zum Erstellen von 2D-Spielen verwenden. Sie können eine 2D-Umgebung mithilfe verschiedener Techniken in 3D vortäuschen, z. B. indem Sie Daten in einer Ebene festhalten.

Die tatsächliche API bietet jedoch nur eingeschränkte Unterstützung, um dies auf offensichtliche Weise zu tun (es gibt beispielsweise keine Funktion zum Aktivieren des 2D-Modus). Die Art und Weise, wie Sie es simulieren (was Sie in vielen Online-Tutorials finden), ist möglicherweise schwer zu verstehen, ohne die 3D-Pipeline zu kennen, die tatsächlich unter der Haube verwendet wird.

Es hört sich so an, als ob Sie OpenGL schon eine Weile angeschaut haben und daher wahrscheinlich ein gutes Verständnis für diese Grundlagen haben. Wenn Sie sich jedoch wackelig fühlen, können Sie mit Ihrem Spiel beginnen, indem Sie eine 2D-Bibliothek verwenden, die auf OpenGL aufbaut , z. B. cocos2d . Sie erfahren, wie 2D-APIs im Allgemeinen aussehen sollten, und können dennoch die Vorteile eines hardwarebeschleunigten 3D-Back-Ends nutzen, wenn Sie das Gefühl haben, noch nicht bereit zu sein, das Ganze selbst in Angriff zu nehmen.

Josh
quelle
4

Viele 2D-Grafikbibliotheken wie SDL oder SFML nutzen die OpenGL-Hardwarebeschleunigung. Dies gibt Ihnen den Leistungsvorteil von OpenGL, abstrahiert jedoch die fiesen Details auf niedriger Ebene hinter einer viel einfacheren API.

Philipp
quelle
0

Ich habe jetzt viel Erfahrung in der OpenGl-Programmierung, und ich kann Ihnen sagen, dass es ein Schmerz ist. In der Vergangenheit, als ich anfing zu programmieren, war ich in einfachen Umgebungen wie BlitzBasic sehr produktiv. Dann begann ich mit dem Erlernen von C ++ und OpenGl. Und wenn Sie keinen guten Lehrer oder keine guten Leute zum Fragen haben, werden Sie permanent auf den schwarzen Bildschirm stoßen. Das größte Problem ist die staatliche Hölle von OpenGl. Es gibt Unmengen von Schaltern, die Sie austauschen können, um den Status von opengl zu ändern. Und einige Schalter hängen von anderen Schaltern ab. Zum Beispiel hängt glGet (GL_TEXTURE_BINDING_2D) von glGet (GL_ACTIVE_TEXTURE) ab. Und die Dokumentation, welcher Zustand von welchem ​​anderen Zustand abhängt, ist nicht der beste. Viele Operationen wie das Laden von Texturen erfordern, dass Sie diesen Status ändern, was sehr oft dazu führt, dass anderer Code beschädigt wird, für den der alte Status erforderlich ist. Und dann gibt es dieses Problem, dass OpenGl als implementierungsabhängiges Verhalten, so dass Ihr Programm auf Ihrem Rechner läuft, aber auf dem anderen Rechner alles, was Sie sehen, schwarz ist. Sie können hier nur raten, was in Ihren 10000 Codezeilen nicht stimmt. Also, wenn Sie Frust mögen, dann verwenden Sie OpenGl für 2D-Dinge. Tun Sie es nicht, wenn Sie es nicht brauchen. Sie können in OpenGl produktiv werden, aber es kostet Sie viel Zeit und Nerven. Wahrscheinlich mehr, als Sie ausgeben möchten. Sie können in OpenGl produktiv werden, aber es kostet Sie viel Zeit und Nerven. Wahrscheinlich mehr, als Sie ausgeben möchten. Sie können in OpenGl produktiv werden, aber es kostet Sie viel Zeit und Nerven. Wahrscheinlich mehr, als Sie ausgeben möchten.

Arne
quelle
-2

Unity3D verwendet OpenGL und ich verwende es für 2D- und 2.5D-Plattformer. Unity3D ist im Wesentlichen eine 3D Gaming Engine, wird aber auch für 2D- und 2.5D-Spiele verwendet. Sie können über x-, y- und z-Ebenen verfügen und die Bewegung oder Drehung nur auf zwei dieser Ebenen beschränken, wodurch eine 2D-Atmosphäre in einer im Wesentlichen 3D-Welt entsteht.

Apollo-SOFTWARE
quelle
Großartig, meine erste Ablehnung. Froh zu sehen, dass Gamedev auch Hasser hat.
Apollo SOFTWARE
1
Ich denke, dass es verpönt ist, einen Punkt anhand von Beispielen aus der realen Welt zu veranschaulichen. Sehr professionell.
Apollo SOFTWARE
7
Amit, Downvotes zeigen keine "Hasser" an. Downvotes sind einfach eine Möglichkeit für die Community, ihre Meinung zu Fragen und Antworten zu äußern. Es ist nicht persönlich für dich, also versuche es nicht so zu sehen. Ich bin damit einverstanden, dass der Downvoter den Grund für die Downvote kommentieren sollte, da Sie nicht wissen, wie Sie die Antwort ohne Feedback verbessern können. Ich sage dir, warum ich denke, dass es abgelehnt wurde. Nur weil eine Person OpenGL für 2D-Spiele verwendet, heißt das noch lange nicht, dass es angemessen ist. Sie müssen auch Gründe angeben, warum dies angemessen ist.
MichaelHouse
2
Ja, ich bin mir nicht sicher, warum die Leute abstimmen. Das "used OpenGL" -Bit sollte geklärt werden mit "used OpenGL on platform, die es erfordern" (es verwendet überall Direct3D oder konsolenspezifische APIs, außer iOS / Anrdoid / OSX / Linux), aber das ist eher eine Klärung als eine Korrektur.
Sean Middleditch
1
Ich habe mich selbst nicht abgelehnt, aber ein weiterer Grund, warum diese Antwort unangemessen ist, ist, dass Sie eine OpenGL-basierte Engine verwenden, nicht Raw OpenGL, was die Dinge ziemlich verändert.
w4etwetewtwet