Простая система частиц на Android с использованием OpenGL ES 1.0 - PullRequest
4 голосов
/ 19 февраля 2011

Я пытаюсь собрать систему частиц в Android, используя OpenGL. Я хочу несколько тысяч частиц, большинство из которых, вероятно, будет вне экрана в любой момент времени. Они визуально довольно простые частицы, и мой мир 2D, но они будут двигаться, меняя цвет (не размер - они 2x2), и мне нужно иметь возможность добавлять и удалять.

В настоящее время у меня есть массив, который я перебираю, обрабатывая изменения скорости, управляя жизненным циклом (убивая старые, добавляя новые), и нанося их на график, используя glDrawArrays. На что указывает OpenGl, хотя для этого вызова это одна вершина; Я выполняю glTranslatex для соответствующих кодов для каждой частицы, которую я хочу построить, по одному, устанавливая цвет с помощью glColor4x, а затем glDrawArrays. Это работает, но это немного медленно и работает только для нескольких сотен частиц. Я сам занимаюсь стрижкой.

Я написал систему для поддержки статических частиц, которую я загрузил в вершину / цветовой массив и построил график с использованием glDrawArrays, но этот подход кажется подходящим только для частиц, которые никогда не изменят относительное местоположение (т.е. я перемещаю их все с помощью glTranslate ), цвет и где мне не нужно добавлять / удалять частицы. Несколько тестов на моем телефоне (HTC Desire) показывают, что попытки изменить содержимое этих массивов (которые являются ByteBuffers, на которые указывает OpenGL) чрезвычайно медленны.

Возможно, есть какой-то способ самостоятельно написать экран с помощью процессора. Если я просто рисую точки 1x1 / 2x2 на экране, и мне просто интересно писать, а не смешивать / сглаживать, это вариант? Будет ли это быстрее, чем то, что делает OpenGl?

(200 или около того частиц на 1-ГГц машине с мегабайтами оперативной памяти. Это намного медленнее, чем 20 лет назад на 7-МГц машине с <500 КБ оперативной памяти! Я ценю, что использую здесь Java, но наверняка должно быть лучшее решение. Должен ли я использовать NDK, чтобы получить мощь C ++, или это то, что мне нужно?) </p>

1 Ответ

0 голосов
/ 21 февраля 2011

Я надеялся, что кто-то может ответить на этот вопрос окончательно, поскольку мне самим понадобятся частицы на Android.(Я работаю в C ++, хотя - в настоящее время использую glDrawArrays (), но еще не довел частицы до предела.)

Я нашел этот поток на gamedev.stackexchange.com (не для Android), и никто не может согласиться с лучшим подходом, но вы можете попробовать несколько вещей и убедиться сами.

Я собирался предложить glDrawArrays (GL_POINTS, ...) с glPointSize (), но парень, задающий вопрос, кажется, недоволен этим.

Дайте нам знать, если вы найдете хорошее решение!

...