Obliczenia według wierzchołków w tesselacji OpenGL


9

Próbuję zaimplementować symulację tkaniny w oparciu o pozycję za pomocą teselacji sprzętowej. Oznacza to, że chcę po prostu załadować kontrolny quad na kartę graficzną, a następnie użyć mozaiki i cieniowania geometrii, aby utworzyć węzły w tkaninie.

Ten pomysł jest zgodny z dokumentem:

Huynh, David, „Symulacja tkaniny za pomocą teselacji sprzętowej” (2011). Praca dyplomowa. Rochester Institute of Technology http://scholarworks.rit.edu/theses/265/

Wiem, jak używać mozaiki do tworzenia symulowanych punktów. Nie wiem, jak przechowywać obliczone informacje w buforze ramek.

Geometria, a także moduły cieniujące oceny teselacji zawierają informacje potrzebne do obliczeń dla wierzchołków. Ale czy mogą pisać bezpośrednio w buforze ramki?

Moduł cieniujący fragmenty, który znam, może zapisywać w buforze ramki, ale moje informacje byłyby interpolowane i nie wiedziałbym już, co napisać w jakiej pozycji.


transformuj bufory sprzężenia zwrotnego
maniak zapadkowy

Brzmi bardzo dobrze. Ograniczenia symulacji tkaniny powodują, że muszę uzyskać dostęp do wszystkich sąsiadów cząstki (w celu obliczenia sił sprężyny). Czy można tego dokonać za pomocą takich buforów? Może w module cieniującym geometrię? aby obejść bufor zwrotny i wydrukować każdy wierzchołek wiele razy, chciałbym użyć GL_POINTS. Po pierwszym spojrzeniu wydaje się, że utrudnia to obliczenie sprężyn.
Dragonseel

Odpowiedzi:


3

Na podstawie komentarza „maniaka zapadkowego” zbadałem Bufory sprzężenia zwrotnego i tak rozwiązałem mój problem.

Teraz generuję symulowane punkty na CPU i umieszczam je w VertexBufferObject. Generuję drugie VBO dla punktów (wraz z kilkoma innymi dla prędkości). Łączność tkaniny jest podana jako atrybut wierzchołka w ivec4.

Używając buforów sprzężenia zwrotnego transformacji i sztuczki podwójnego buforowania przy użyciu dwóch VBO, zawsze mogę odczytać ostatni krok (używając informacji o łączności) i zapisać w innym buforze. Ma to na celu rozwiązanie problemów ze współbieżnością.

Obliczenia są wykonywane w module cieniującym wierzchołki jako GL_POINTS. Wiązanie wyjścia pierwszego modułu cieniującego z innym zwykłym modułem cieniującym za pomocą dodatkowego bufora indeksu do generowania trójkątów, mogę bez problemu renderować teksturę w dowolny sposób.

Pomysł ten jest zgodny z przykładem bufora sprzężenia zwrotnego transformacji zamieszczonym w książce „OpenGL Superbible” http://www.openglsuperbible.com/

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.