Gibt es für 2D-Spiele einen Grund, KEINE 3D-API wie Direct3D oder OpenGL zu verwenden?


20

Ich bin jetzt schon eine ganze Weile nicht mehr in der Entwicklung von Hobbyspielen. Damals verwendeten die meisten Leute Direct Draw, um 2D-Spiele zu erstellen. Als ich damit aufhörte, sagten die Leute, OpenGL oder Direct3D mit einer orthogonalen Projektion sei der richtige Weg.

Ich denke darüber nach, wieder 2D-Spiele zu entwickeln, insbesondere für Mobiltelefone, aber vielleicht auch für die XNA-Plattform. Um mit OpenGL etwas zu machen, hätte ich eine (hoffentlich) kleine Lernkurve, um mich an die 3D-Entwicklung zu gewöhnen.

Gibt es einen Grund, dies zu überspringen und stattdessen mit einem 2D-Framework zu arbeiten, bei dem ich nur einen Framebuffer mit Breite x Höhe habe, den ich mit Pixeln füllen muss?


Diese Frage ist eigentlich falsch ... Ich meine: Direct3D und OpenGL sind wirklich keine 3D-APIs, oder? Sie bieten Hardwarebeschleunigung, aber sowohl in 2D als auch in 3D. Da gibt es einen kleinen Unterschied.
Jacmoe

Antworten:


20

Sie sollten auf jeden Fall etwas verwenden, das einen 3D-Renderer im Backend verwendet. In Ihrem übergeordneten Code sollten Sie jedoch nicht einmal die Z-Achse sehen. All dies sollte auf den unteren Ebenen abstrahiert werden. Wenn Sie Pixel direkt manipulieren, machen Sie wahrscheinlich etwas falsch.

Für meine eigenen Spiele habe ich eine Reihe von Klassen für den Umgang mit 2D-Objekten aufgebaut. Meine Spiellogik beschäftigte sich nur mit x- und y-Koordinaten. Meine Klassen behandelten auch Dinge wie Rotation, Skalierung, Mischmodi usw. usw.

Natürlich gibt es auch vorhandene 2D-Bibliotheken, die Sie ebenfalls verwenden können - Cocos2D ist eine beliebte auf dem iPhone. Die meisten, wenn nicht alle dieser Bibliotheken werden auf den 3D-APIs der niedrigeren Ebene aufbauen, damit sie von der verfügbaren Beschleunigung profitieren.


Es würde mich interessieren, wie xna hinter den Kulissen mit der 2D-API umgeht
Iain

5
Am Ende ist alles 3D. Spritebatch, das 2D-Rendering-Arbeitspferd, ist ein Shader-Effekt.
drxzcl

+1 zum Entkoppeln der Schnittstelle von der Implementierung.
Steve S

@Iain Hier ist eine XNA-Implementierung in DirectX11, die von den XNA-Autoren xnatoolkit.codeplex.com geschrieben wurde .
ClassicThunder

8

Es gibt einen Grund, keine 3D-API zu verwenden.

Nur Computer in NA, der Nordwest-EU und Japan unterstützen sie ...

Ich lebe zum Beispiel in Brasilien, mein Schwestercomputer ist neu, hat einen Multi-Core-Prozessor, mehrere GB RAM und läuft dennoch nicht mit OpenGL-Spielen.

Ich kann zum Beispiel Dwarf Fortress nur auf meinem eigenen Computer spielen (zum Rendern von ASCII-Grafiken OpenGL verwenden), auf jedem anderen Computer, auf dem es langsam kriecht.

Und das ist nicht nur für Brasilien ein Problem, habe ich die Leute befragt, und es ist an mehreren Orten der Welt üblich ... Die Bevölkerung, die tatsächlich OpenGL- oder Direct3D-kompatible Karten besitzt, ist eine Minderheit ...

Nur dass diese Minderheit mehr Aufmerksamkeit von Unternehmen bekommt ...

Aber wenn Sie nur auf diese "traditionellen" Märkte abzielen (NA, Nordwest-EU, JP), dann entscheiden Sie sich dafür!

BEARBEITEN für diejenigen, die Downvoting betreiben: Sie sind offensichtlich anderer Meinung. Haben Sie also den BEWEIS, dass NOONE mehr Computer mit beschissenen VIA- oder SIS-Chips (oder sogar anderen unbekannten oder schlechteren Herstellern) mit keiner oder nur OpenGL 1.0-Unterstützung liefert?

Ich habe ZWEI Maschinen wie diese in meinem Haus und sie sind neu (beide haben mehr als einen Kern, beide haben 2 GB RAM, beide haben eine Taktfrequenz über 2 GHz ...)

Meine Universität hat 200 solcher Maschinen, sogar einige von Dell.

Es ist ganz einfach, GPUs sind teuer (sogar beschissene von Intel), und in armen Märkten ist es ein Luxus, dass Leute, die Maschinen kaufen, um MS Word auszuführen und E-Mails zu lesen, keine Maschine mit einem anständigen Grafikchip kaufen, wenn Sie können einen kaufen, der 50 USD billiger ist, besonders wenn 50 USD das sind, was die meisten Leute für einen ganzen Monat kaufen müssen.

BITTE, kommen Sie nicht hierher und sagen Sie, dass ich BS sage, wenn Sie noch nie ein Land der Dritten Welt besucht haben, und sagen Sie auch nicht, dass die Menschen in der Dritten Welt keine Spiele spielen, sie spielen viel, Osmos Entwicklerbeitrag über den Start ihrer Linux-Version wies darauf hin, dass viel eingehender Datenverkehr (eigentlich der größte Teil davon) aus Russland stammte, einfach weil diese Leute normalerweise ignoriert werden.

Hier in Brasilien ist das beliebteste Spiel Counter-Strike, das im Softwaremodus ausgeführt wird. Einige Lan-Houses haben nur 10% der Computer mit einer GPU, sogar Big-Ass-Computer mit 200 oder sogar 300 Stationen.

Ich hätte nicht darüber posten sollen, ich wusste, dass es Abwärtsstimmen anziehen würde, ich bekam kostenlosen Punkteverlust für das Posten, jedes Mal wenn ich erkläre, warum mein anderes Spiel Allegro 4.4 anstelle von 5.0 verwendet, weil 5.0 Direct Draw oder nicht unterstützt Softwaremodus Viele Leute sagen mir, dass ich eine Art Lügner bin oder dass ich dumm bin, diese Wahrheit über die tatsächliche Verfügbarkeit der OpenGL-Beschleunigung zu sagen.

EDIT 2: Um OpenGL-fähige Spiele spielen und entwickeln zu können, musste ich meine Eltern und andere Leute bitten, mir eine GeForce 8600 zu kaufen (das war die billigste Karte, die ich für Mass Effect 1 und andere UT3-Versionen gefunden habe) -Maschinenspiele), kauften sie mir eines, aber jetzt bin ich mehrere Jahre ohne jemals wieder andere Geschenke zu bekommen, nicht einmal Geburtstagsgeschenke, weil es so teuer war, und ich hoffe, dass diese Karte für weitere 3 oder 4 Jahre funktioniert ...

EDIT 3:
Ein praktisches Beispiel: Eletronic Arts hat einen neuen Client für Ultima Online erstellt, der 3D-Beschleunigung für seine 2D-Grafiken verwendet ... Ergebnis: Viele Spieler beklagen sich über lächerlich niedrige Frameraten und EA weigern sich, die Verwendung von zu erzwingen der neue Client (jetzt darf der alte weiterhin verwendet werden)

EDIT 4 in 2015: Diese Antwort wird hier größtenteils als historisches Artefakt zurückgelassen, derzeit ist die Anzahl der Computer mit extrem beschissenen Chips selbst in Ländern der Dritten Welt gering, sie existieren noch immer, insbesondere in Computern mit Büroziel, aber das sind sie nicht Ich denke, es lohnt sich nicht mehr, mit Software-Modus-APIs zu arbeiten. OpenGL-basierte APIs sind der richtige Weg.


3
Es gibt keine Chips, die 3D heutzutage nicht unterstützen. Wahrscheinlich müssen Sie nur die Treiber aktualisieren, da die von Windows bereitgestellten Treiber keine OpenGL-Unterstützung bieten. Die am häufigsten verwendete GPU ist Intel GMA, und selbst das bietet grundlegende OpenGl-Unterstützung.
Axel Gneiting

1
Wiederholen Sie noch einmal: Chips sind hier SCHLECHTER als Intel GMA-Zeug. Und ja, einige modifizierte Treiber lösen das Problem, aber Sie können nicht erwarten, dass Benutzer davon erfahren.
Speeder

Ein praktisches Beispiel: Eletronic Arts hat für Ultima Online einen neuen Client erstellt, der 3D-Beschleunigung für seine 2D-Grafiken verwendet ... Ergebnis: Viele Spieler beklagen sich über lächerlich niedrige Frameraten und EA weigert sich, die Verwendung des neuen Clients durchzusetzen (jetzt darf der alte verwendet werden)
speeder

1
Der neue Client stammt aus dem Jahr 2008, und meine Geschichte lautet: Menschen mochten 2008 keinen OpenGL-Client und verwendeten wieder den 1997er.
Speeder

1
Nur weil die Benutzer ihre Treiber nicht aktualisieren, heißt das nicht, dass ihre Computer OpenGL und Direct3D nicht unterstützen. Das OP sollte nur auf OpenGL / Direct3D-Kompatibilität prüfen. Wenn es nicht vorhanden ist, sollte er den Benutzer auffordern, seine Treiber zu aktualisieren. Dies wird in 98,6% der Fälle funktionieren, wahrscheinlich sogar in der zweiten und dritten Welt. Im Ernst, können Sie eine Verbindung zu einem Computer herstellen, den Sie kaufen können und der keine OpenGL / Direct3D-Unterstützung bietet?
Avi

3

Nein, das gibt es nicht. Mit einem 3D-Renderer erzielen Sie bessere Effekte und ein schnelleres Rendern. Zum Beispiel ist hier ein 2D-Spiel, das ich vor ein paar Wochen (an einem Wochenende) gemacht habe - die Orb-Effekte lehnen sich stark an 3D-Shader an, obwohl es sich in vielerlei Hinsicht um 2D-Effekte handelt. In ähnlicher Weise habe ich die verfügbare Rendering-Technologie für dieses Spiel ausgiebig genutzt - dort finden drei oder vier verschiedene Pixel-Shader-Effekte statt, mit denen ich mich schneller entwickeln und schöner machen kann.

Umfassen Sie den 3D und lieben Sie ihn, aber lieben Sie ihn mit einer Achse weniger.


2

3D-APIs sind in der Regel der richtige Weg. Die heutigen GPUs sind für das Rendern von 3D-Grafiken konzipiert, sodass eine ziemlich solide Leistung garantiert ist. Und wie ZorbaTHut sagte, können Sie auf der 3D-Route Dinge wie Pixel-Shader nutzen.

Es gibt nicht mehr so ​​viele 2D-APIs. DirectDraw ist veraltet, und die meisten 2D / Vektor-basierten Bibliotheken verwenden OpenGL oder Direct3D, um das Rendering trotzdem durchzuführen. Selbst moderne UI-Toolkits nutzen 3D-APIs für das Rendern und Compositing. Nehmen Sie zum Beispiel WPF (das neueste UI-Framework von Microsoft): Es verwendet Direct3D zum Rendern.


2

Es gibt immer noch eine überraschende Anzahl von wirklich alten Maschinen mit beschissener / nicht vorhandener 3D-Beschleunigung und Treibern, die nie aktualisiert wurden, sodass DirectDraw immer noch viel schneller ist als OpenGL oder D3D. Ich habe dies erlebt, als ich an einem 2-D-Multiplayer-Spiel gearbeitet habe, das ungefähr 10 Jahre alt ist, als ich versuchte, ein neues Rendering-Backend in OpenGL zu schreiben, um andere Plattformen zu unterstützen. Viele Spieler berichteten, dass der OpenGL-Modus aufgrund niedriger Frameraten nicht spielbar war. Ich stimme auch dem brasilianischen Plakat zu, dass dies außerhalb der USA und Europas häufiger vorkommt, aber es gilt auch an diesen Orten.

Wenn Sie auf Mobiltelefone oder XNA abzielen, sollten Sie auf jeden Fall 3D verwenden. Wenn Sie jedoch ein Spiel erstellen möchten, das auf jedem PC und an jedem Ort ausgeführt werden kann, sollten Sie sich an DDraw halten.


1

Das einzige, was ich mir vorstellen kann, ist, dass die Verwendung einer 3D-API über eine 2D-API die Basiskomplexität erhöht. Zumindest in OpenGL müssen Sie Texturen laden und verwalten, und wenn Sie sie zeichnen, müssen Sie die richtige Geometrie erzielen. Eine Wrapper-Ebene löst diese Probleme.

Die Verwendung eines 3D-Grafik-Backends scheint jedoch mehr Vor- als Nachteile zu haben. Wenn Sie mich also fragen, ist es die Mühe wert.


1

Wenn Ihr Spiel einfach genug ist und Sie möchten, dass das Spiel auf Low-End-Computern, insbesondere auf Netbooks und älteren Laptops (ohne 3D-Beschleunigung oder mit nur sehr geringen Einschränkungen - ältere integrierte Intel-Grafiken usw.), gut läuft, sollten Sie dennoch ein reines Spiel in Betracht ziehen 2D-Framebuffer-Ansatz

Wenn Sie zufrieden sind, dass für das Spiel mindestens eine Low-End-ATi / NVidia-Karte / ein Low-End-ATi / NVidia-Chip erforderlich ist, können Sie mit einer 3D-API eine Menge cooler Dinge erledigen (Alpha-Blending, Skalierung / Rotation usw.) wäre schwierig, in einem reinen Software-Renderer gut / effizient zu machen.

Beachten Sie auch, dass einige Dinge, die in "reinem 2D" sehr einfach sind, interessanter werden, wenn es um 3D-Hardware (und bilineare Filterung / Alpha-Blending) geht. Verstehen Sie das Konzept des vormultiplizierten Alphas. Denken Sie beispielsweise auch darüber nach, wie Sie die Nähte zwischen Kacheln in einer 2D-Tilemap handhaben würden, wenn Sie eine zoombare / drehbare Ansicht wünschen.

Denken Sie auch daran, dass die Füllrate begrenzt ist. Und es ist überraschend einfach, diese Grenzen in 2D zu erreichen. Möglicherweise haben Sie nicht viele Polygone, aber wenn Sie viele Alpha-gemischte Parallaxe-Ebenen oder -Partikel oder Post-Effekte benötigen, können Sie ganz einfach so viele Pixel füllen wie ein 3D-Spiel der Spitzenklasse.

Aber im Allgemeinen ist 3D-Hardware großartig, und additive Mischung ist dein Freund :)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.