Я пытаюсь реализовать позиционное моделирование одежды с использованием аппаратного тесселяции. Это означает, что я хочу просто загрузить контрольный квад на графическую карту, а затем использовать тесселяцию и затенение геометрии для создания узлов в ткани.
Эта идея следует за бумагой:
Huynh, David, "Моделирование ткани с использованием аппаратной тесселяции" (2011). Тезис. Рочестерский технологический институт http://scholarworks.rit.edu/theses/265/
Я знаю, как использовать тесселяцию для создания смоделированных точек. Чего я не знаю, так это как хранить вычисленную информацию в кадровом буфере.
Геометрия, а также шейдеры оценки тесселяции имеют информацию, необходимую для вычислений на вершину. Но могут ли они напрямую писать в фрейм-буфер?
Я знаю, что фрагмент-шейдер может записывать в фрейм-буфер, но моя информация будет интерполирована, и я больше не буду знать, что писать в какой позиции.
источник
Ответы:
Основываясь на комментарии «Ratchet Freak», я исследовал Transform Feedback Buffers и таким образом решил свою проблему.
Теперь я генерирую моделируемые точки на процессоре и помещаю их в объект VertexBufferObject. Я генерирую второй VBO для точек (наряду с некоторыми другими для скорости). Связность ткани дана как атрибут вершины в ivec4.
Используя буферы обратной связи преобразования и трюк с двойной буферизацией, используя два VBO, я всегда могу прочитать с последнего шага (используя информацию о подключении) и записать в другой буфер. Это для того, чтобы решить проблемы с параллелизмом.
Расчеты выполняются в вершинном шейдере как GL_POINTS. Привязав выходные данные первого шейдера к другому обычному шейдеру, используя дополнительный индекс-буфер для генерации треугольников, я могу без проблем визуализировать ткань любым удобным для меня способом.
Эта идея следует примеру буфера обратной связи преобразования, приведенному в книге «OpenGL Superbible» http://www.openglsuperbible.com/
источник