2013-03-18 14 views
6

Wiem, że można użyć glVertexAttribDivisor do modyfikowania szybkości, z jaką generyczne atrybuty wierzchołków pojawiają się podczas renderowania instancyjnego, ale zastanawiałem się, czy istnieje jakiś sposób na zwiększenie atrybutów z określoną szybkością BEZ instancji.Dzielnik atrybutów bez instancji?

Oto przykład tego, co mam na myśli:

Powiedzmy definiowania listy pozycji wierzchołków, które tworzą serię linii, a także z każdej linii chcesz skojarzyć identyfikator. Tworzysz więc dwa vbos, z których każdy zawiera dane związane z jednym z tych atrybutów (albo wszystkie pozycje wierzchołków, albo wszystkie identyfikatory wierzchołków). Tradycyjnie oznacza to, że każde vbo musi być wielkością (w elementach) liczby linii X 2 (ponieważ każdy punkt zawiera dwie linie). To oczywiście oznacza, że ​​powielam tę samą wartość ID dla każdego punktu w linii.

Zamiast tego chciałbym określić, że ID przesuwa o 1 element na każde 2 elementy, które przesuwa bufor pozycji wierzchołkowej. Wiem, że to wymaga, aby mój bufor pozycji wierzchołków był zadeklarowany jako pierwszy (tak, żebym mógł odwołać się do niego, aby powiedzieć OpenGL, jak często przesuwać bufor identyfikatora), ale nadal wydaje się, że jest to możliwe. Jednak nie mogę znaleźć żadnych funkcji w specyfikacji OpenGL, które umożliwiają taki manewr.

Odpowiedz

2

To czego chcesz, nie jest ogólnie możliwe w OpenGL. Jest to skutecznie powściągliwa forma multi-indexed rendering, więc aby ją uzyskać, musisz użyć jednej z tych technik.

+0

Czy można użyć 'glMultiDrawArraysIndirect()' w tym przypadku, aby narysować linię po jednym segmencie na raz, użyć dzielnika atrybutów 1 nad identyfikatorem VBO i użyć części "baseIndex" pośredniej struktury poleceń do zwiększenia indeksu na narysować ID VBO? Prawdopodobnie spowoduje to zapełnienie większej ilości danych w pamięci GPU, ale teoretycznie byłoby to możliwe? – Samik

+0

Będzie działać w tym konkretnym przypadku, ale nie w * ogólnym *. –