2011-10-10 37 views

回答

40

這主要與舊立即模式(glBegin/glEnd)一起使用,其中不使用頂點數組,它已棄用(並且已在OpenGL ES 2.0和桌面OpenGL 3+核心中刪除)。

但是這個函數仍然與數組一起使用(這就是爲什麼它仍然存在於現代版本中)。你的假設是,這個調用之後的所有頂點對這個屬性具有相同的值(當然,只有當你不啓用這個屬性的數組時)。或者,更確切地說,每個使用的着色器屬性都沒有啓用其對應的陣列,它將從單個狀態值獲取其值,並且可以使用glVertexAttrib來更改此值。

這是有用的,如果你有一個通用的着色器與例如一個顏色屬性和一個位置屬性,並且你有一個顏色不變的對象。因此,通過使用glVertexAttrib,您不必爲每個頂點提交顏色,也不必使用顏色更改爲統一顏色的特殊着色器。

+2

使用單色就是一個很好的例子。謝謝! –

+0

真棒回答:-)我總是問自己,爲什麼會用一個常數屬性而不是制服;但你的榜樣對我來說很有意義。 – Mecki