2010-11-13 45 views
4

我認爲這是一個非常愚蠢和新手的問題,但後來我是一個圖形和OpenGL的新手。繪製了一個球體並在附近放置了一個光源,並且指定了環境光線後,我開始嘗試光線和材質值,並得出了一個令人驚訝的結論:啓用光照時,我們用glColor*指定的顏色完全不重要。相反,等價物是材料的環境成分。這個結論是否正確?謝謝基本的OpenGL燈光問題

回答

5

GL閃電式如果啓用了照明,然後,而不是頂點顏色,材質顏色(好吧,顏色 - 其中有幾種適用於不同類型的光線響應)使用。材料顏色由glMaterial*函數指定。

如果要重複使用代碼,可以使用glEnable(GL_COLOR_MATERIAL)glColorMaterial(GL_AMBIENT_AND_DIFFUSE)將舊的glColor*調用自動映射到材質顏色。

(並請儘可能快地切換到着色器 - 着色器的方法是雙方更容易和更強大)

+0

我聽到了很多關於這些着色器,但我不知道它們是什麼。我想我必須耐心等待,直到我到達紅皮書的相關章節爲止:)感謝您的回答 – 2010-11-13 13:38:20

+0

紅皮書與我們正在討論的整個固定功能渲染一樣過時。你可以閱讀它的一些理論,就是這樣。對於着色器教程,Google for Lighthouse3D。 :)也可以瀏覽一下opengl.org/documentation/specs/上的OpenGL 2.1或OpenGL 3參考文檔 - 它們有點大,但是略過會讓你知道OGL是如何工作的。 – Kos 2010-11-13 13:52:37

+0

@Kos:如果紅皮書已經過時,你會推薦哪本書?文檔不是一本書,它是一件好事,但初學者發現很難直接使用文檔 – 2010-11-13 15:49:15

3

我想你還沒有使用片段着色器。從glprogramming.com

vertex color = 
    the material emission at that vertex + 
    the global ambient light scaled by the materials ambient 
    property at that vertex + 
    the ambient, diffuse, and specular contributions from all the 
    light sources, properly attenuated 

所以,是的,沒有使用頂點顏色。

編輯:您還可以在GL規範(你有一個在附近,你^^?)