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?
Antworten:
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:
(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
quelle
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:
Dies sind nur ein paar Vorteile, die sich aus meinem Kopf ergeben, ich glaube, es gibt mehrere andere.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle