Розрахунок за вершиною в тесселяції 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.