2D Games: pure Java oder OpenGL?

  • Antworten:14
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 5

10.06.2010 18:14:23 via Website

Hallo,

1) wenn man sagen wir mal ein einfaches 2D Jump&Run erstellen möchte, auf welche Technologie sollte man besser setzen? Nur Java oder OpenGL?

2) Wie sieht es bei den beiden in Bezug auf Akkuverbrauch/Performance aus?

3) Kann man an einem installierten Spiel erkennen ob es OpenGL verwendet (z.B. Gem Miner)?

Danke schonmal!

Antworten
Gelöschter Account
  • Forum-Beiträge: 573

10.06.2010 18:37:29 via App

zu 1
ich schreib gerade eins ohne OpenGL. 2d man kann damit eigentlich viel schõnes zusammenbringen..

Antworten
  • Forum-Beiträge: 5

10.06.2010 18:45:57 via Website

Leon Fruth
zu 1
ich schreib gerade eins ohne OpenGL. 2d man kann damit eigentlich viel schõnes zusammenbringen..

ah ok, also die Darstellung von vielen Animierten Objekten (20+) stellt kein Problem das?

Antworten
Gelöschter Account
  • Forum-Beiträge: 573

10.06.2010 19:06:40 via Website

also ich mach meine, in dem falle exlplsionen, mit bilder pro explosion 4...
aber es ist wirklich anstrengend aber trotzdem spaßig^^

Antworten
  • Forum-Beiträge: 1.727

10.06.2010 22:34:38 via Website

Schreibe einfach ein paar Tests die das ganze grob abbilden was du willst.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
  • Forum-Beiträge: 155

10.06.2010 22:39:58 via Website

Max Max
1) wenn man sagen wir mal ein einfaches 2D Jump&Run erstellen möchte, auf welche Technologie sollte man besser setzen? Nur Java oder OpenGL?

OpenGL bringt Dir meines Wissens für 2D nichts. Genauer kannst Du das hier nachlesen: http://developer.android.com/guide/topics/graphics/index.html

20 animierte Objekte hab ich noch nicht probiert. Denke aber das solte mit Verwendung einer SurfaceView kein Problem sein. Wobei die Performance natürlich vom jeweiligen Gerät und OS abhängt.

Antworten
  • Forum-Beiträge: 42

11.06.2010 14:29:21 via Website

Max Max
1) wenn man sagen wir mal ein einfaches 2D Jump&Run erstellen möchte, auf welche Technologie sollte man besser setzen? Nur Java oder OpenGL?

Die Frage muss lauten Canvas oder OpenGL ?
Für einfache 2d Spiele ist es für Anfänger besser einfach auf einen Canvas zu zeichnen.
Willst du viele Objekte mit ggf netten Effekten (z.B. Partikeleffekte) ist OpenGL sinnvoller.

Tobias E.

OpenGL bringt Dir meines Wissens für 2D nichts. Genauer kannst Du das hier nachlesen: http://developer.android.com/guide/topics/graphics/index.html


Stimmt nicht so ganz.
Wenn es um Performance geht, gibts einen breakeven. Gerade wenn man VBO benutzt hat man einen enormen PerformanceBoost.
http://code.google.com/events/io/2009/sessions/WritingRealTimeGamesAndroid.html

OpenGL

— geändert am 11.06.2010 14:30:00

Antworten
  • Forum-Beiträge: 15

17.02.2011 19:56:16 via Website

1) Das kommt auf das Speil an: OpenGL ist i.d.R. schneller und Akkuschonender (da in Hardware), aber nicht überall unterstützt.
Ein 2D-Spiel mit Texturen mit Alpha-Kanal (Transparenz) lässt sich sehr einfach erstellen. Beim User-Interface wird's schon schwerer, Text z.B. müsstest du über Buchstaben aus Texturen darstellen oder die Android-UI verwenden (z.B. einen View über das Spiel legen, Menüs als extra Activity etc.). Alternativ kannst du mit Canvas ohne OpenGL arbeiten, die sind wesentlich langsamer, aber die Sache mit dem Text gestaltet sich einfacher. Es gibt soweit ich weiß auch eine Funktion um Bilder zu zeichnen (also ähnlich Texturen, heist drawImage oder so), aber die Möglichkeit diese einfach zu bewegen, zu rotieren und zu skalieren geht dir verloren.

2) Siehe 1, OpenGL schneller + akkuschonender, wenn mit Hardwareunterstützung

3) Entwickler fragen

Optimallösung: Grafik mit OpenGL, UI mit Canvas (außer sie ist nahtlos integriert)

— geändert am 17.02.2011 19:58:28

Antworten
  • Forum-Beiträge: 467

17.02.2011 20:32:10 via App

MaMe82
Es gibt soweit ich weiß auch eine Funktion um Bilder zu zeichnen (also ähnlich Texturen, heist drawImage oder so), aber die Möglichkeit diese einfach zu bewegen, zu rotieren und zu skalieren geht dir verloren.
Unsinn :)
siehe Matrix!
das mit opengl ist so eine Sache...
Die Anzahl der 2d Tutorials ist in etwa ein 100stel der tutorials in 3d! das stört mich.
oder gibt es im web irgendetwas mit 2d wo es so richtig erklärt wird mit Bitmap zeichnen? da würde ich mich freuen! ;)

— geändert am 17.02.2011 20:34:04

"Hard work beats talent, when talent fails to work hard"

Antworten
  • Forum-Beiträge: 2.230

18.02.2011 08:25:42 via Website

Warum das Rad neu erfinden?
Es gibt doch schon eine wirklich gute und ausgereifte OpenGL Engine für 2D unter Android.

Jede Menge Beispiele gibt es auch.
Das Teil kann auch Physikberechnung und noch vieles vieles mehr und ist wirklich EXTREM einfach zu benutzen.

http://code.google.com/p/andengineexamples/

Antworten
  • Forum-Beiträge: 15

18.02.2011 21:48:05 via Website

Oh, stimmt das mit den Canvas Paint-Matritzen hatte ich schon verdrängt, aber die OpenGL Performance bleibt trotzdem unangetastet - da hier alle Matritzenberechnungen parallel auf der GPU laufen.

OpenGL in 2D unterscheidet sich nicht von OpenGL in 3D. Es werden i.d.R. Texturen auf ein Quad aufgebracht und mehrere dieser Quads übereinander gelegt. Die welche "räumlich" weiter vorn sind überdecken die weiter hinten (DepthTesting mit ZBuffer). Zwischen ihnen kann auf verschiedene Arten überblendet werden. Nicht viereckige Texturen werden über den Alphakanal der Bilder realisiert. Der einzige Unterschied zu "echtem" 3D ist, dass man eine Orthogonale Projektionsmatrix verwendet (was weiter hinten liegt wird also nicht kleiner). So kann man es sich vereinfacht vorstellen.

D.h. für 2D mit OpenGL:

+ Scroller oder Tile basierte Games sind hier gut zu realisieren
+ schnelle und akkuschonende Berechnung bei Hardwareunterstützung
+ Keine Berücksichtigung der Displayauflösung notwendig, nur anpassen des Viewports und der Projektionsmatrix - Resultat Auflösungsunabhängig
+ sehr schnelle Transformationen der Bilder (Translation, Rotation, Skalierung)

- Pixelgenaues zeichnen so gut wie unmöglich, Ausnahme: OpenGL ES 2.0 mit Fragmentshader auf ein Fullscreenquad oder readPixel, bzw writePixel
d.h. es müssen immer die Texturen oder die Bitmaps aus denen sie erstellt werden verändert werden - vor dem Anzeigen
- Zeichnen von Primitiven Formen wie bei Canvas (ausgefüllte Kreise usw.) kaum möglich (außer GLUtils)
- Text muss entweder über Texturen (also auf Bitmap-Basis) oder 3D erstellt werden
- unterschiedliche Implementationen auf unterschiedlichen Geräten (z.B. Extensions wie drawTexture zum schnellen, pixelgenauen Zeichnen von Texturen nur auf wenigen GPUs)

Beispiele für 2D-Dinge die gut mit OpenGL realisiert werden können siehst Du in meinen Apps

Retrofire (OpenGL ES 1.0):
Sehr simpler Effekt, bei dem direkt in eine Textur gezeichnet wird. Achtung bei voller Bildschirmauflösung ist so etwas kaum noch schnell realisierbar

CirculateGL Free (OpenGL ES 1.1):
Eigentlich 3D, aber wenn man genau hinsieht, erkennt man das ich darauf verzichtet habe die Partikel welche weiter hinten liegen kleiner werden zu lassen. Jeder Partikel wird durch eine Bitmap repräsentiert, welche mit den dahinterliegenden überblendet wird. Läuft bei 120 Partikel trotz komplexen Blending noch flüssig - ohne weitere Optimierungen. Also genau das was man in einem 2D Spiel nutzen würde

3D ABC Free oder Relief 3D Free (OpenGL ES 2.0):
Hier sieht man was möglich ist wenn man mit Shadern arbeitet, mehr als Pixelgenau (oberhalb der Bildschirmauflösung) und mehr oder weniger 2D (nur ein Basisbild, welches sich räumlich nicht verschiebt, außer mit dem Homescreen ;-) )

Sehr zu empfehlen ist die von Rafael angesprochene AndEngine, zu der es auch eine DemoApp gibt.

Tutorials zu OpenGL: gut sind die NeHe Tutorials für Einsteiger, aber ursprünglich nicht für OpenGL ES

Interessant für 2D Zeichnen (Vektorbasiert, ähnlich Canvas): OpenVG - auf Adreno 205 sogar hardwarebeschleunigt

Antworten
  • Forum-Beiträge: 4

06.05.2012 15:30:57 via Website

Hallo,

diese frage richtet siche eigentlich an : MaMe82

du hast geschrieben :

... 3D ABC Free oder Relief 3D Free (OpenGL ES 2.0):
Hier sieht man was möglich ist wenn man mit Shadern arbeitet, mehr als Pixelgenau (oberhalb der Bildschirmauflösung) und mehr oder weniger 2D (nur ein Basisbild, welches sich räumlich nicht verschiebt, außer mit dem Homescreen ;-) ) ...

ich überlege, wie es möglich ist, pixelgenau in opengl zu arbeiten( also einen bereich aus einer bitmap ausschneiden und in eine textur zu schreiben )

hast du da einen tip für mich?
deine anwendungen sehen aus, als wenn du direkt die pixel programmiert ( also position und farben )

Antworten
Gelöschter Account
  • Forum-Beiträge: 7

09.08.2012 19:50:54 via Website

Opengl es kann ohne unsere Hilfe nur dreiecke zeichnen.
Für 3d games ist Opengl es super.
Wenn du 2d Spiele mach wilst dann würde ich dir die SurfaceView empfehlen.
Mit opengl würdest du nur verzweifeln. Mit dem Canvas hast du Methoden zum zeichnen von Bilder etc. schon dabei, bei Opengl es nicht.

Antworten
  • Forum-Beiträge: 77

10.08.2012 10:10:40 via Website

Der letzte Beitrag in dem Thread war übrigens ein halbes Jahr alt.

Paul
Mit opengl würdest du nur verzweifeln. Mit dem Canvas hast du Methoden zum zeichnen von Bilder etc. schon dabei, bei Opengl es nicht.

Öhm... ja ne is klar. Wenn man für das Zeichnen eines Bildes zwei (OpenGL) statt einem (Canvas) Befehl braucht, muss man daran verzweifeln.

1gl.glBindTexture(GL10.GL_TEXTURE_2D,txName);
2((GL11Ext)gl).glDrawTexiOES(x,screenY-y-txHeight,0,txWidth,txHeight);

Tatsächlich ist beides quasi genau gleich von der Umsetzung, nur das angesprochene Zeichnen von Texten ist mit Canvas einfacher. Dafür hat OpenGL deutliche Performance Vorteile (bzw. weniger Akku-Verbrauch) ab einer gewissen Anzahl von Sprites.
Für die Anwendungslogik sollte das ganze sowieso transparent sein, so kann man dann auch den Benutzer auswählen lassen, ob er Canvas oder OpenGL nutzen möchte. Einfach ein kleines Interface schreiben, das die Grafikroutinen kapselt.

— geändert am 10.08.2012 10:12:52

Antworten
Gelöschter Account
  • Forum-Beiträge: 7

10.08.2012 12:34:09 via Website

Die Methode kannte ich gar nicht.:blink: .Ich finde das Canvas zum zeichnen aber einfach übersichtlicher.

— geändert am 10.08.2012 12:40:26

Antworten