OpenGL著色器教程

2016-01-11    分類:其他、程式設計開發、首頁精華1人評論發表於2016-01-11

本文由碼農網 – 何秉東原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃

你現在正在看的是一篇使用教程。這裡沒有一系列的步驟,你需要做的是達到一些簡單的效果。你將看到一個簡單直接的工程,且有大量的註解。

所以如果你想深入瞭解OpenGL的著色器,並且你有一些很棒的點子,像是路徑追蹤,螢幕空間環境光遮蔽或者其他的什麼——你將可以在這篇教程中獲得你需要的所有的原始碼和一些基礎知識。

如果這樣的例項專案很多年前就有,它一定可以幫我省下很多很多的時間。我本來是給大學編寫這份教程,但我想更多像你一樣的讀者可能會喜歡它。

先導知識

如果你是剛開始接觸OpenGL或者剛開始接觸程式設計,那麼這個教程並不適合你!你需要的是對OpenGL和渲染管道的基本瞭解。同時,你還需要懂得初始化快取,分配記憶體,以及大體上處理甚至自己寫C程式。

如果你已經用OpenGL搭建過一些小的場景並且想用一些很棒的著色器來使你製作的遊戲更上一層樓——這個教程非常適合你!

以下是你將學到的

你可以在這五種模式中自由切換,每種模式都有簡短的介紹。

1、簡單的區域著色。片段著色器是用來給你繪製的物體進行單一著色的。這是最簡單的一種著色器。(圖中區域是純色的)

2、以座標形式呈現顏色。片段著色器可以把以插值座標形式輸入的資訊當做RGB色彩(一種色彩模式)的值,並用其對應的色彩為你的物體上色。(按照三元組格式輸入的數值被片段著色器以0~1之間的RGB色彩值的形式呈現。它基本上以座標的三元組格式來顯示顏色。)

3、紋理。一個紋理被載入並且繪製在物體上。(一張圖片被作為紋理載入,並繪製在目標區域。)

4、幀快取紋理。場景被渲染成與一個紋理物件相關聯的幀快取物件。然後紋理會被繪製到物體上。(有影像紋理的場景被渲染成一個新的幀快取物件。這個幀快取物件是與紋理物件相關聯的。所以我們做的事情基本上就是渲染紋理,再將紋理渲染到當前場景的目標區域。)

5、深度快取紋理。場景被渲染成一個與深度快取紋理相關聯的幀快取物件。紋理資料會被線性化,然後繪製到物體上。並顯示出與場景深度相對應的灰度值。(有影像紋理的場景被渲染成一個新的幀快取物件。在這種情況下,影像並不是被渲染成一個顏色紋理,而是一個攝像機視角的深度紋理。然後深度紋理的值被標準化(在片段著色器中完成),並被當作色彩值使用。這樣我們便可以通過灰度值看到場景中的物體離我們有多遠。)

安裝&&執行

我只在基於debian的unix OS(Ubuntu,Mint…)中測試並執行過這個模擬程式。它應該能在任何其他機器上正常執行,雖然我沒有測試過。

配置要求

執行這個模擬程式需要以下的系統配置:

  • 一張支援OpenGL3.3的顯示卡(以便使用著色器)
  • Unix庫:xorg-dev,freeglut3-dev和mesa-common-dev

執行

編譯和執行非常簡單直接。

  • ./compile.sh
  • ./shaderDemo

當模擬程式執行時,你可以到處移動(但要一直注意螢幕中央!)你的滑鼠(點選左鍵和移動)。

按下‘s’可以切換不同的模式。

隨時按下‘h’可以為你提供幫助並顯示所有可能的滑鼠和鍵盤的功能。

祝你好運!

原始碼下載地址:https://github.com/MauriceGit/Simple_GLSL_Shader_Example

譯文連結:http://www.codeceo.com/article/opengl-shader-tutorial.html
英文原文:OpenGL Shader-Tutorial Project
翻譯作者:碼農網 – 何秉東
轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]

相關文章