Формат текстур для клеточных автоматов в OpenGL ES 2.0

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

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

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

EDIT: Вот что я думаю на данный момент...

На данный момент я думаю использовать либо обычный 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-битной ячейки.


person Rehno Lindeque    schedule 05.09.2010    source источник


Ответы (1)


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

person Ben Jackson    schedule 20.10.2010