OpenGL著色器教程
本文由碼農網 – 何秉東原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
你現在正在看的是一篇使用教程。這裡沒有一系列的步驟,你需要做的是達到一些簡單的效果。你將看到一個簡單直接的工程,且有大量的註解。
所以如果你想深入瞭解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
翻譯作者:碼農網 – 何秉東
[ 轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]
相關文章
- WebGL中的OpenGL著色器語言Web
- OpenGL/OpenGL ES入門: 渲染流程以及固定儲存著色器
- OpenGL深入探索——《OpenGL程式設計指南(原書第8版)》——計算著色器程式設計
- OpenGL入門第二課--常用的固定儲存著色器
- 第三個OpenGL程式,shaders _ 後續 之 封裝著色器類封裝
- Android OpenGL ES 2.0 手把手教學(4)- 片段著色器 fragment shaderAndroidFragment
- 【GLSL教程】(五)卡通著色
- OpenGL系列教程之一:OpenGL(轉)
- three.js 著色器材質之初識著色器JS
- webgl 系列 —— 著色器語言Web
- Android著色器——ShaderAndroid
- 在WPF中使用著色器
- 著色器初始化流程圖流程圖
- WebGL著色器渲染小遊戲實戰Web遊戲
- 【GLSL教程】(二)在OpenGL中使用GLSL
- visualstudio著色器設計器shadergraph使用
- WebGL 3D概念講解(著色器)Web3D
- WebGL:使用著色器進行幾何造型Web
- WPF網格型別畫素著色器型別
- opengl 教程(5) shader(2) uniform變數ORM變數
- NeHe的opengl教程delphi版(9)----星星 (轉)
- webgl入門(2)-初識webgl和著色器Web
- [ARKit]4-著色器Shader的應用
- OpenGL/OpenGL ES 初探
- NeHe的opengl教程delphi版(7)----濾波 (轉)
- 利用著色器在WPF中實現陰影特效特效
- CesiumJS PrimitiveAPI 高階著色入門 - 從引數化幾何與 Fabric 材質到著色器 - 下篇JSMITAPI
- CesiumJS PrimitiveAPI 高階著色入門 - 從引數化幾何與 Fabric 材質到著色器 - 上篇JSMITAPI
- 使用Unity著色器實現精靈(Sprite)塗鴉效果Unity
- 使用Unity製作起霧的窗戶效果著色器Unity
- [WebGL入門]十一,著色器的編譯和連線Web編譯
- [WebGL入門]八,著色器的說明和基礎Web
- 使用 OpenGL ES 實現全景播放器播放器
- 【GLSL教程】(三)在OpenGL中向shader傳遞資訊
- 遊戲製作詳解自----OpenGL入門教程(九)(轉)遊戲
- 遊戲製作詳解自----OpenGL入門教程(五)(轉)遊戲
- 遊戲製作詳解自----OpenGL入門教程(四)(轉)遊戲
- WebGL著色器32位浮點數精度損失問題Web