2011-10-04 59 views
1

我已經在OpenGL中編寫了許多在線教程中的級別渲染器。我實際上使用頂點數組和範圍繪製命令進行渲染。現在因爲我想讓每個像素點亮的點亮,所以我認識到着色器是一個很大的部分,如果不是這個時候OpenGL的主要部分。着色器在OpenGL中適合使用舊的渲染方法嗎?

所以,我在這裏用我的「傳統」方法渲染無着色器,我想知道着色器如何適應事物的宏偉情況。如果我重新使用OpenGL的最新功能,我的主渲染函數是否會用着色器完成?我可以將代碼保留在代碼中,只需使用着色器進行照明?

我想正確地做到這一點,但速度並不快,所以我將繼續閱讀OpenGL Superbible並學習。

任何人都可以教我如何適應一切,如果這些像Nehe和gametutorials在線這些舊的教程實際上仍然適用。

+2

在我看來,你的問題是,你真的不明白着色器是什麼或做什麼。我會建議[閱讀這些教程](http://www.arcsynthesis.org/gltut/)來理解這個想法。但是,我再一次寫下了它們,所以拿一點鹽來吧。 –

回答

1

使用的固定功能的OpenGL粗如下這些步驟:

  • 設置投影矩陣
  • 設置模型視圖矩陣
  • 設置照明參數
  • 綁定紋理紋理單元
  • 定義紋理環境操作
  • 設置幾何形狀(頂點數組/頂點緩存對象)
  • 發行繪製命令

它是第5層的步驟,不同的,使用着色器時。着色器替換固定功能管道,由此處的設置進行控制。首先,formost必須提供實現頂點轉換和片段生成的着色器。那些着色器將其參數稱爲制服

您仍然在使用矩陣,只有在這次通過制服而不是矩陣堆棧(在OpengGL-2和OpenGL-3兼容性配置文件中矩陣堆棧仍然存在並且矩陣放入內置制服)將它們交付給OpenGL時。

紋理仍然綁定到紋理單元。使用採樣器制服紋理單元被傳遞到片段生成中。整個紋理環境已被碎片着色器所取代。坦率地說:設置一個片段着色器要比調用glTexEnvi十多次要容易得多。

照明通過着色器發生,因此您將照明參數作爲制服傳遞並在着色器中進行計算。

雖然繪圖命令保持不變。

請問我的主要繪製函數實際上着色器

如果你的意思做,如果着色器將進行繪製來電:不!實際上,將不使用顯示列表,選擇模式和立即模式的舊版OpenGL-1.1渲染器提升到OpenGL-3內核並不難。 (如果顯示列表,選擇模式和立即模式參與,雖然...)