Формат текстур для клеточных автоматов в OpenGL ES 2.0 - PullRequest
3 голосов
/ 06 сентября 2010

Мне нужен быстрый совет.

Я бы хотел смоделировать клеточный автомат (из Простой, эффективный метод реалистичной анимации облаков ) на графическом процессоре.Однако я ограничен шейдерами OpenGL ES 2.0 (в WebGL), которые не поддерживают побитовые операции.

Поскольку каждая ячейка в этом клеточном автомате представляет логическое значение, хранение 1 бита на ячейку было бы идеальным,Так какой же самый эффективный способ представления этих данных в форматах текстур OpenGL?Есть какие-нибудь хитрости или я должен просто придерживаться прямой RGBA-текстуры?

РЕДАКТИРОВАТЬ: Вот мои мысли до сих пор ...

В данный момент я 'Я думаю о том, чтобы использовать либо простой GL_RGBA8, GL_RGBA4 или GL_RGB5_A1:

  • Возможно, я мог бы выбрать GL_RGBA8 и попытаться извлечь исходные биты, используя операции с плавающей запятой.Например, x*255.0 дает приблизительное целочисленное значение.Тем не менее, извлечение отдельных битов немного затруднительно (т.е. деление на 2 и округление пару раз).Также я опасаюсь проблем с точностью.

  • Если я выберу GL_RGBA4, я мог бы хранить 1,0 или 0,0 для каждого компонента, но тогда я, вероятно, мог бы также попробовать тот же трюк, что и раньше с GL_RGBA8.В данном случае это всего лишь x*15.0.Не уверен, будет ли это быстрее или не будет видно, так как для извлечения битов должно быть меньше операций, но меньше информации на чтение текстуры.

  • Используя GL_RGB5_A1, я мог бы попытаться выяснить, могу ли я упаковатьмои ячейки вместе с некоторой дополнительной информацией, такой как цвет на воксел, где альфа-канал хранит состояние ячейки в 1 бит.

1 Ответ

1 голос
/ 20 октября 2010

Создайте вторую текстуру и используйте ее в качестве справочной таблицы. В каждом блоке текстуры 256x256 вы можете представить одну логическую операцию, в которой входные данные представлены строкой / столбцом, а выходные - значением текстуры. Фактически в каждой текстуре RGBA вы можете представить четыре логических операций на область 256x256. Остерегайтесь сжатия текстур и карт MIP, хотя!

...