2009-08-21 13 views
6

Immaginate che hai uno di questi ragazzi:OpenGL glColorPointer ripetere i colori?

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

Aka GL_TRIANGLE_STRIP. Se volete il colore utilizzando colori diversi, è possibile utilizzare:

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

Dove ogni "voce" della matrice di colore corrisponde a un punto di vertice nella striscia. Ma cosa succede se i colori si alternano tra due colori diversi? Non è necessario definire un colore per ogni vertice, se ci sono solo due colori "reali" diversi. Quindi la mia domanda è se è possibile definire un colorArray con solo due colori al suo interno, e in qualche modo rendere opengl alternativo tra quei due quando è in loop sull'array dei vertici.

E sì io sono un noob completo a OpenGL così forse questa è una domanda stupida ...

risposta

3

È possibile farlo utilizzando OpenGL Color Index Mode. Tuttavia, tieni presente che, nella mia esperienza, questo in realtà è più lento nella maggior parte delle schede grafiche moderne rispetto alla semplice specifica di ciascun colore di vertice.

In modalità indice colore, si invia una matrice di colori separata, quindi ciascun vertice specifica un indice nell'array, anziché un rgb/rgba completo. È più efficiente in termini di memoria, ma non è ottimizzato nella maggior parte dei driver hardware.

3

È possibile utilizzare un vertex shader per fare ciò inviando un flag booleano per ogni vertice che descrive quale colore essere. In realtà, la cosa più semplice/più veloce è probabilmente solo per inviare il colore per ogni vertice.

Se opengl avesse la possibilità di avere più stream e indici di vertici che potrebbero funzionare (ma anche probabilmente non ne varrebbe la pena).