Wie entscheide ich mich für OpenGL ES 1.0 oder 2.0 für Android? [geschlossen]

7

Ich fing an, etwas Android-Entwicklung zu lernen, und eines der ersten Dinge, von denen ich dachte, ich könnte sie machen, ist ein einfaches Spiel. Ich stehe jedoch sofort vor einer schwierigen Frage. Soll ich OpenGL ES 1.0 oder 2.0 verwenden?

Das Spiel, das ich mir vorgestellt habe, wird grafisch ziemlich einfach sein und 2D- (gekachelte Top-Down-Grafiken) und isometrische Ansichten mit fester Kamera verwenden. Ich habe OpenGL noch nie in einer Desktop-Umgebung verwendet, daher weiß ich nicht, ob Shader etwas sind, das ich verwenden werde usw.

Laut dieser Seite sollte ich OpenGL ES 2.0 generell für Neuentwicklungen verwenden. Mein eigenes Handy hat jedoch erst kürzlich (letztes Jahr) ein Update erhalten, um es auf das erforderliche Android 2.2 zu bringen. (Ich weiß nicht einmal, ob es OpenGL ES 2.0 unterstützt)

Meine Frage ist also im Grunde, ob ich von den Funktionen von OpenGL ES 2.0 über 1.0 profitieren kann und / oder ob es sich im Hinblick auf die Kompatibilität lohnt.

Earlz
quelle
Oder nutzen Sie eine Open-Source - Grafikbibliothek die meiste Arbeit für Sie tun: Libgdx
ToolmakerSteve

Antworten:

7

Wenn Sie keine oder nur wenig Erfahrung mit OpenGL haben, würde ich 2.0 nicht empfehlen.

Mit OpenGL ES 2.x müssen Sie Ihre eigenen Routinen für die Matrixmanipulation schreiben und Ihre eigenen Shader schreiben. Dies ist eine Menge Arbeit, viel kann schief gehen, und das Debuggen vieler dieser Dinge ist sehr schmerzhaft.

Nur wenn Sie der Meinung sind, dass Sie einige der Funktionen von OpenGL ES 2.0 benötigen, sollten Sie diese verwenden.

Bearbeiten: Wenn das oben Genannte nicht ausreicht, um Sie abzuschrecken, empfehlen wir Ihnen, ein einfaches Beispiel in OpenGL ES 1.x zu erstellen und dann dasselbe Beispiel in OpenGL ES 2.x zu erstellen. Sie können beispielsweise einen rotierenden Würfel mit einer darauf angewendeten Textur zeichnen.

notlesh
quelle
Zuerst war es eine 0, aber -1 für die Bearbeitung, insbesondere der "Scare Away" -Teil, der nur kontraproduktiv ist.
Christian Rau
Ich werde dann mit dem einfacheren von beiden beginnen. Ich werde bereits Android lernen und mein Java
auffrischen
@ChristianRau - und doch ist "Abschrecken" genau das, was mir die Anforderung von 2.0, Shader zu schreiben, um grundlegende Dinge zu tun, angetan hat, als ich auf die Spezifikation stieß. Ich bin erstaunt, dass Android jeden Programmierer, der GLSurfaceView.Renderer implementiert, benötigt, um mit Shadern umzugehen, auch wenn seine Anforderungen einfach sind, es sei denn, man greift auf 1.0-APIs zurück. Ich hatte erwartet, so etwas wie eine Canvas-Klasse zu sehen, aber mit einem 3D-Fokus und einer großartigen Leistung neu geschrieben. Ich hatte erwartet, irgendwann Shader zu verwenden, aber selbst für die grundlegendsten Dinge? (Ich werde wahrscheinlich libgdx verwenden, war aber überrascht, dass es keine integrierte Lösung gab.)
ToolmakerSteve
@ToolmakerSteve Nun, wenn Ihre Anforderungen einfach sind, sind es auch Ihre Shader. Ein einfaches Shader-Paar, das z. B. ein vollständig transformiertes, beleuchtetes und strukturiertes Objekt zeigt, muss nicht mehr als beispielsweise etwa 10 Codezeilen für jeden vollständigen Vertex- und Fragment-Shader benötigen. Shader und Matrix-Handling (für die es sowieso viele gebrauchsfertige Bibliotheken gibt) sind wirklich einfach, es ist keine Raketenwissenschaft (aber es ist auch kein Javascript). Sobald Sie mehr als nur einen Würfel drehen möchten (dh nach dem ersten Tag des GL), möchten Sie Shader sowieso nicht vermeiden.
Christian Rau
1

Es hängt davon ab. Ich habe keine Erfahrung mit ES, aber die allgemeine Frage ist immer dieselbe: Alte und veraltete feste Funktion im Vergleich zu einem modernen Shader-zentrierten Ansatz.

Während Stephelton insofern richtig ist, als die alte ES 1-API für Anfänger leichter zu verstehen ist und es einfacher ist, einfache Dinge zu erreichen, ohne die gesamte API zu verstehen (und es verhindert, dass Sie einer dieser Typen werden, die Shader verwenden, ohne zu verstehen, was sie tun ) Würde ich Ihnen dennoch raten, sofort mit der modernen Art der Erstellung von Echtzeitgrafiken zu beginnen. Obwohl Sie zunächst möglicherweise nicht die Flexibilität von Shadern benötigen, ist diese äußerst wertvoll, sobald Sie die Grundlagen verwaltet haben. Und so können heute (und morgen) hardwarebeschleunigte Echtzeitgrafiken erstellt werden.

Während Kompatibilität ein Problem sein kann (und ich keinen Überblick über den aktuellen Stand von ES-Geräten habe), würden Sie sich bei Verwendung von Desktop-GL nicht künstlich auf GL 1.1-Funktionen beschränken, nur um 15 zu unterstützen bis 20 Jahre alte Grafikkarten. Das heißt, Fortschritt muss irgendwo beginnen.

Christian Rau
quelle
1
Ich bin damit überhaupt nicht einverstanden. Der Arbeitsaufwand, der erforderlich ist, um eine einfache App mit ES zum Laufen zu bringen (möglicherweise einen strukturierten Würfel, der sich dreht), ist erschöpfend und es gibt so viele Dinge, die schief gehen können. Verstehen Sie, dass Sie in ES 2 keine der Matrixfunktionen (Push / Pop, Übersetzen, Drehen, Skalieren ...) haben und alle Ihre Shader von Grund auf neu schreiben müssen. Wenn eine Person diesen Konzepten noch nie ausgesetzt war, wird sie sie sicherlich nicht gleich beim ersten Mal richtig machen.
Notlesh
1
Im Gegensatz zu normalem OpenGL (<= 3.0) sind diese Dinge nicht nur veraltet, sie existieren nicht. Sie können sie also nicht als Krücken verwenden, während Sie um sie herum bauen. Sie müssen alles von Grund auf neu aufbauen. Für einen Anfänger wäre OpenGL ES 2.x wie der Versuch, ein Bürogebäude von Grund auf zu bauen, ohne etwas über Architektur zu wissen.
Notlesh
1
@stephelton Aber du musst diese Dinge (Matrix-Zeug) trotzdem verstehen. Und das Entfernen aus OpenGL führt Sie nicht in die Irre, zu glauben, dass sie nicht mehr in Hardware implementiert sind. Jemand muss das Matrix-Zeug implementieren, und es ist eigentlich nicht wirklich OpenGLs Aufgabe, dies zu tun, da es nichts mit der Grafikhardware zu tun hat. Holen Sie sich eine Bibliothek dafür, wenn Sie sich noch nicht damit anlegen möchten. Verwenden Sie einfach gute Lernressourcen und versuchen Sie nicht, die Welt von Anfang an zu erobern. Dann sollte es kein Problem sein, mit nur Shader ES 2 zu beginnen.
Christian Rau
1
@stephelton Und nun, Grafik ist nicht einfach und die Verwendung eines alten Ansatzes mit festen Funktionen, um Transformation, Beleuchtung und Texturierung für Sie durchzuführen, nur damit Sie nicht verstehen müssen, was es wirklich tut, ist keine echte Alternative (und tut es auch nicht). es sowieso nicht viel einfacher machen). Sobald Sie etwas tun, das komplizierter ist als ein rotierender Würfel (obwohl dies sicherlich zuerst ein Anfänger tun wird), verschwindet der zusätzliche Aufwand. Darüber hinaus führt dies zu einem geringeren Aufwand, da Sie Ihre Ideen einfacher umsetzen können, als sie irgendwie zu zerkleinern in die Funktionen mit festen Funktionen.
Christian Rau
1
@ChristianRau, ich denke du polarisierst die beiden OpenGL Versionen ein bisschen. Er fragt nicht, ob er seine Karriere auf das eine oder andere konzentrieren soll; Er fragt, ob ES 2.x für sein einfaches Spiel geeignet und notwendig ist. Obwohl ich der Meinung bin, dass ES 2.x sicherlich besser als 1.x ist und dass das Erlernen von 2.x eine gute Sache ist, kann ich nicht empfehlen, dass jemand, der OpenGL noch nicht kennt, mit ES 2.x beginnt. Lerne zu kriechen, bevor du gehst. ES 2.x ist nicht nur weitaus komplizierter (mehr Lernen, mehr Arbeit, mehr Debugging ...), sondern wird ihn auch von einem wesentlichen Teil des Android-Marktes ausschließen.
Notlesh