2009-08-21 20 views
6

Wyobraź sobie, że masz jeden z tych facetów:Powtórz kolory OpenGL glColorPointer?

alt text http://www.codesampler.com/d3dbook/chapter_05/chapter_05_files/image007.jpg

Aka GL_TRIANGLE_STRIP. Jeśli chcesz pokolorować go przy użyciu różnych kolorów, można użyć:

glColorPointer(4, GL_UNSIGNED_BYTE, 0, colorArray); 
glEnableClientState(GL_COLOR_ARRAY); 

Gdzie każdy „pozycja” w tablicy kolorów odpowiada punkt wierzchołek w pasie. Ale co, jeśli kolory zmieniają się między dwoma różnymi kolorami? Niepotrzebne jest definiowanie koloru dla każdego wierzchołka, jeśli istnieją tylko dwa "rzeczywiste" różne kolory. Tak więc moje pytanie brzmi, czy możliwe jest zdefiniowanie colorArray z tylko dwoma kolorami, i jakoś zrobić opengl na przemian między tymi dwoma, gdy jest to pętla nad tablicą vertex.

I tak jestem kompletnym noobem w OpenGL, więc może to głupie pytanie ...

Odpowiedz

3

Można to zrobić za pomocą OpenGL Color Index Mode. Należy jednak pamiętać, że z mojego doświadczenia wynika, że ​​jest to wolniejsze w przypadku większości nowoczesnych kart graficznych niż po określeniu każdego koloru wierzchołków.

W trybie indeksu kolorów, wysyła się osobną tablicę kolorów, a następnie każdy wierzchołek określa indeks w tablicy, zamiast pełnego rgb/rgba. Jest bardziej wydajna pod względem pamięci, ale nie jest zoptymalizowana w większości sterowników sprzętowych.

3

Możesz użyć vertex shader, aby to zrobić, wysyłając flagę boolean dla każdego wierzchołka opisującego, jaki kolor ma być. Naprawdę najprostszą/najszybszą rzeczą jest prawdopodobnie podanie koloru każdego wierzchołka.

Jeśli opengl miał możliwość posiadania wielu strumieni wierzchołków i indeksów, które mogą działać (ale również prawdopodobnie nie byłyby tego warte).