2010-09-05 4 views
3

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

Я хотел бы моделировать клеточные автоматы (от A Simple, Efficient Method for Realistic Animation of Clouds) на графическом процессоре. Однако я ограничен шейдерами 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 бит.

ответ

1

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

+0

Это звучит как умная идея, спасибо. Я попробую! –

Смежные вопросы