Я пытаюсь реализовать систему сохранения состояний, сохраненную на iPhone, с использованием OpenGL ES 2.0. Сохраняя состояние, я имею в виду, что каждая частица интегрируется вперед во времени, имея уникальный вектор скорости и положения, который изменяется со временем и не может быть вычислен из начальных условий при каждом вызове рендеринга.Система сохранения состояний для OpenGL ES 2.0
Вот один из возможных способов, о котором я могу думать.
- Настройка начальных условий частиц в VBO.
- Интеграция частиц в вершинном шейдере, запись результата в текстуру в фрагментном шейдере. (1-й вызов рендеринга)
- Скопируйте данные из текстуры в VBO.
- Извлечь частицы из данных в VBO. (Второй вызов рендера)
- Повторите 2.-4.
Единственное, что я не умею делать эффективно, - это шаг 3. Должен ли я пройти через процессор? Интересно, возможно ли это сделать на GPU с OpenGL ES 2.0. Любые советы приветствуются!
Какие данные хранятся на шаге 2 и какие типы данных вы ожидаете передать на шаге 3? – Kimi
Для простоты, скажем, 4 числа с плавающей запятой на вершину. Я бы записал их в значения rgba текстуры в шейдере фрагмента (один пиксель на частицу/вершину/фрагмент). – hanno