Расчет на вершину в тесселяции OpenGL

9

Я пытаюсь реализовать позиционное моделирование одежды с использованием аппаратного тесселяции. Это означает, что я хочу просто загрузить контрольный квад на графическую карту, а затем использовать тесселяцию и затенение геометрии для создания узлов в ткани.

Эта идея следует за бумагой:

Huynh, David, "Моделирование ткани с использованием аппаратной тесселяции" (2011). Тезис. Рочестерский технологический институт http://scholarworks.rit.edu/theses/265/

Я знаю, как использовать тесселяцию для создания смоделированных точек. Чего я не знаю, так это как хранить вычисленную информацию в кадровом буфере.

Геометрия, а также шейдеры оценки тесселяции имеют информацию, необходимую для вычислений на вершину. Но могут ли они напрямую писать в фрейм-буфер?

Я знаю, что фрагмент-шейдер может записывать в фрейм-буфер, но моя информация будет интерполирована, и я больше не буду знать, что писать в какой позиции.

Dragonseel
источник
преобразовать буферы обратной связи
трещотка урод
Звучит очень хорошо. Ограничения моделирования ткани делают необходимым, чтобы я мог получить доступ ко всем соседям частицы (чтобы вычислить силы пружины). Можно ли это сделать с такими буферами? Возможно, в геометрическом шейдере? чтобы создать буфер обратной связи для печати каждой вершины несколько раз, я хотел бы использовать GL_POINTS. После первого взгляда кажется, что это затрудняет вычисление пружин.
Dragonseel

Ответы:

3

Основываясь на комментарии «Ratchet Freak», я исследовал Transform Feedback Buffers и таким образом решил свою проблему.

Теперь я генерирую моделируемые точки на процессоре и помещаю их в объект VertexBufferObject. Я генерирую второй VBO для точек (наряду с некоторыми другими для скорости). Связность ткани дана как атрибут вершины в ivec4.

Используя буферы обратной связи преобразования и трюк с двойной буферизацией, используя два VBO, я всегда могу прочитать с последнего шага (используя информацию о подключении) и записать в другой буфер. Это для того, чтобы решить проблемы с параллелизмом.

Расчеты выполняются в вершинном шейдере как GL_POINTS. Привязав выходные данные первого шейдера к другому обычному шейдеру, используя дополнительный индекс-буфер для генерации треугольников, я могу без проблем визуализировать ткань любым удобным для меня способом.

Эта идея следует примеру буфера обратной связи преобразования, приведенному в книге «OpenGL Superbible» http://www.openglsuperbible.com/

Dragonseel
источник