Comments 8
К сожелению, клиент под Android еще в процессе. В скором времени постараюсь выложить. Все примеры можно будет собирать в Android Studio и запускать на устройстве или на симуляторе.
Десктопных клиентов пока не планирую. Можно использовать Qt, вроде как она по умолчанию работает в режиме совместимости с OpenGL ES (что бы шейдеры не переписовать). Или воспользоваться каким-либо эмулятором, например, этим
OpenGL обрабатывает текстуры формата GL_RGBA8 с помощью того, что называется Normalized integer. Т.е. на самом деле у нас есть только целые числа, которые OpenGL автоматически преобразует в числа с плавающей точкой и обратно. Такие числа характеризуются наличием знака и количеством бит (bitdepth). В нашем случае, это 8-ми битные, беззнаковые целые.
Максимальное значение:
MAX = 2^8 - 1
OpenGL преобразования:
float = int / MAX
int = round(float * MAX).
Суть распаковки/запаковки
Запаковка:
- Мы умножаем наше число F от 0.0 до 1.0 на 255.0. Из полученного результата нам важен остаток B. Это то, что не влезло в 8 бит. Т.е. в один 8-ми битный компонент мы можем записать только F — B / 255.0.
- На втором шаге мы просто сохраняем (B, F — B / 255.0)
Распаковка:
- Складываем две компоненты, не забыв разделить первую на 255.0.
(B / 255.0) + (F - B / 255.0) -> F
наверно потому, что для хранения числа 255 надо 8 бит, а для 256 уже 9.
OpenGL ES 2.0. Один миллион частиц