2012-11-03 35 views
0

爲了製作體素遊戲的照明系統,我需要指定每個頂點的黑度值。我使用的是GL_COLOR_MATERIAL並指定每個頂點的顏色,這樣的:使頂點變暗的快速方法?

glEnable(GL_COLOR_MATERIAL); 

glBegin(GL_QUADS); 

glColor3f(0.6f, 0.6f, 0.6f); 
glTexCoord2f(...); 
glVertex3f(...); 

glColor3f(0.3f, 0.3f, 0.3f);  
glTexCoord2f(...); 
glVertex3f(...); 

glColor3f(0.7f, 0.7f, 0.7f);   
glTexCoord2f(...); 
glVertex3f(...); 

glColor3f(0.9f, 0.9f, 0.9f); 
glTexCoord2f(...); 
glVertex3f(...); 

glEnd(); 

這是工作,但有許多四邊形這是非常緩慢的。我也使用顯示列表。如何使頂點更黑暗的任何好主意?

+0

降低顏色值?我不明白你想要做什麼 –

+0

我只需要一種快速的方法來指定每個頂點的黑度(顏色)值,因爲我目前正在做的事情非常緩慢。 –

回答

1

您正在使用即時模式(glBegin,glEnd和其間的所有內容)。如果性能是你所需要的,那麼我建議你不要再做

你可能在之後是一個通用的頂點屬性。瞧,現代的OpenGL其實就是這樣的:通用屬性。他們甚至走得這麼遠,做了正確的事情,並取消了預定義的屬性(位置,顏色,常規,texcoords等),並且在OpenGL-3核心和以後只有通用屬性。

函數glVertexAttrib(大多數時間一個統一更好地工作)和glVertexAttribPointer是你的朋友。指定如何使用適當的頂點着色器處理頂點屬性。

+0

謝謝,那麼VBO呢? –

+0

@LuisCruz:他們是蛋糕上的錦上添花。並且在更高版本的OpenGL中強制性(與VAO一起)。 (我必須說,隨着VAO的推出,將API從指向偏移量的位置改爲按順序)。 – datenwolf