我的背景:幾個月前我開始嘗試使用OpenGL,沒有什麼特別的目的,只是好玩而已。我開始閱讀OpenGL紅皮書,並且製作了一個具有許多不同光照的行星系統。持續了一個月,我對openGL的興趣消失了。它在一個星期前再次醒來,而且從我的一些SO帖子收集來的,紅皮書已經過時了,OpenGL Superbible是一個更好的學習來源。所以我開始閱讀它。我喜歡着色器的概念,但是由於從固定管道的舊記憶和着色器的新概念的轉變,我腦中出現了一場真正的混亂。固定功能比。着色器 - 幫助理解概念差異
問題:我想寫一些我認爲是真實的陳述,我要求OpenGL專家驗證它們(即我是否正確理解,不太正確或絕對不正確)。所以......
1)如果我們不這樣做使用任何着色器程序,沒有什麼變化。我們有當前的顏色,當前正常的,當前的變換矩陣,當前的一切,並且只要我們調用glVertex**(...)
這些當前值被採用並且頂點被饋送到......我不知道是什麼。事實是,它與當前的矩陣,當前顏色變換和正常被只要我們使用着色器程序,所有的上述停止工作施加到其等
2)。也就是說,glColor
,glRotate
等沒有意義(他們?)。我的意思是,glColor
仍然設置當前顏色,glRotate
仍然將當前矩陣乘以旋轉矩陣,但這些根本沒有使用。相反,我們通過glVertexAttrib
提供頂點屬性。哪個屬性意味着什麼完全依賴於我們的頂點着色器和變量綁定。我們還發現ans設置了制服的值,然後調用glVertex
並着色器被執行(我不知道是立即還是在調用glEnd()之後)。實際的頂點和片段處理完全是在着色器程序中手動完成的。
3)着色器不向深度測試添加任何東西。也就是說,我不需要在着色器中處理它。我只是撥打glEnable(GL_DEPTH_TEST)
。面部撲殺也不受影響。
4)Alpha着色和抗鋸齒不需要在着色器中處理。 glEnable
調用就足夠了。
5)是否使用gluPerspective,glRotate,glPushMatrix和其他矩陣函數是一個好主意,然後檢索當前矩陣並將其作爲統一信息提供給着色器?因此,不需要使用第三方矩陣庫。
我不能直接回答這些問題,但我會說,不學習和使用着色器會導致近10年的GPU技術進步失敗。爲什麼從OpenGL 2.0開始,添加了着色器是一個很好的理由。你自己幫忙,並熟悉它們。一旦你開始使用它們,你會想知道你是如何得到我的,沒有它們。 –
@邁克爾:正如你所看到的,我致力於學習它們,這就是我困惑的原因。我確實想要使用它們,只是我不明白關於它們的一些基本信息,這些信息在固定管道中更加清晰 –