2010-12-10 5 views
1

Ich versuche, einige Partikeleffekte in Android mit OpenGL zu rendern. Jedes Partikel wird ein mit Billboards versehenes texturiertes Quad sein und jedes Partikel wird mit einer Drehung (d. H. Um die z-Achse) gerendert. Ich bin auf die Verwendung von OpenGL ES 1.1 beschränkt, sodass Punkt-Sprites und Pixel-Shader keine Option sind. Was ist ein schneller Weg zum Rendern und Aktualisieren der Positionen vieler Partikel (z. B. 100 bis 5000)?Viele strukturierte Partikel in OpenGL ES 1.1 schnell zeichnen

Ich weiß, dass die Verwendung eines OpenGL Draw Aufrufs für jedes Partikel wird sehr langsam sein, aber ich bin verwirrt bei der Verwendung von Dingen wie VBOs, wenn ich meine Partikelpositionen jeden Frame aktualisieren muss.

+0

Vorsicht mit VBO - viele Telefone, auch die ursprüngliche Droid, nicht unbedingt unterstützen Sie. – EboMike

+0

Wirklich? Ich verwende gerade VBOs auf einem Meilenstein. Ich dachte, VBOs wären für die Unterstützung von OpenGL 1.1 erforderlich? Ist es nicht wirklich unmöglich, schnelle OpenGL-Performance zu bekommen, wenn Sie viele dynamische Objekte und keine VBOs haben? – RichardNewton

+0

Überprüfen Sie diese Frage: http://StackOverflow.com/Questions/2093594/Opengl-Extensions-available-on-different-android-devices. Der Droide listet GL_ARB_vertex_buffer_object nicht auf. Das Lustige ist Lance Naneks Antwort, in der er darauf hinweist, dass dies ein Problem in der Fähigkeitsberichterstattung zu sein scheint, da der Droid VBO haben sollte (was Sie gerade bestätigt haben). – EboMike

Antwort

1

Random Idee. Kann oder kann nicht gut funktionieren. Verwenden Sie einen Zeichnungsaufruf, oder gruppieren Sie Partikel mindestens in Gruppen (z. B. 32 pro Gruppe). Sie können jede Gruppe pro Frame auf der CPU erstellen und dann senden. Konstruiere einfach ein großes Array mit GL_TRIANGLE_FAN (IIRC du ein "terminieren" -Fan, indem du den gleichen Eckpunkt zweimal hinzufügst).

Eine der Herausforderungen, glaube ich, besteht darin, diesen Puffer zu erstellen. Ist das Java oder JNI? Verwenden Sie einen java.nio-Puffer? Nach dem, was ich in den Foren gelesen habe, kann das Ändern dieser Puffer in Java furchtbar langsam sein. (Btw - Ich bin nicht so vertraut mit der internen Puffer-Behandlung auf Android, müssen Sie oder müssen nicht doppelt gepuffert werden.)

Verwandte Themen