Розрахунок за вершиною в тесселяції OpenGL


9

Я намагаюся реалізувати моделювання полотен на основі положень, використовуючи апаратну tesselation. Це означає, що я хочу просто завантажити контрольний диск на відеокарту, а потім використовувати tesselation та геометрію, щоб створити вузли в тканині.

Ця ідея випливає з документа:

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

Я знаю, як використовувати tesselation для створення змодельованих точок. Я не знаю, як зберігати обчислювану інформацію у фреймбуфер.

Геометрія, а також шейдери для оцінювання тесселяції мають інформацію, необхідну для розрахунків за вершиною. Але чи можуть вони безпосередньо записатись у фреймбуфер?

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


трансформувати зворотній зв'язок буфери
— храповик урод

Звучить дуже добре. Обмеження моделювання полотна обумовлюють необхідність доступу до всіх сусідів частинки (для обчислення сил пружини). Чи можна це зробити за допомогою таких буферів? У шейдері геометрії, можливо? щоб запобігти буферу зворотного зв'язку, щоб надрукувати кожну вершину кілька разів, я хотів би використовувати GL_POINTS. Після першого погляду здається, що це ускладнює обчислення пружин.
— Dragonseel

Відповіді:


3

На основі коментаря "щурячого виродка" я досліджував буфери зворотного зв'язку і таким чином вирішив свою проблему.

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

Використовуючи буфери зворотного зв’язку трансформації та трюк подвійної буферизації за допомогою двох VBO, я завжди можу прочитати з останнього кроку (використовуючи інформацію про підключення) та записати в інший буфер. Це для того, щоб вирішити проблеми з одночасністю.

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

Ця ідея слідує прикладу буфера зворотного зв’язку перетворення, зробленого в книзі "OpenGL Superbible" http://www.openglsuperbible.com/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.