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.
źródło
Odpowiedzi:
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/
źródło