fbpx
维基百科

GLSL

GLSL - OpenGL Shading Language 也稱作 GLslang,是一個以C語言為基礎的高階著色語言。它是由 OpenGL ARB 所建立,提供開發者對繪圖管線更多的直接控制,而無需使用汇编语言或硬體規格語言。

GLSL基本框架

背景 编辑

隨著近年來繪圖卡的進步, 已在渲染管線中的頂點(vertex)和片段(fragment)層次中,加入更具彈性的新功能。 達到在這個層次中,使用片段和頂點著色器的可編程性。

最初這個功能是以組合語言撰寫著色器來達到的。組合語言對開發者的使用是不直觀而複雜的。OpenGL ARB 建立了 OpenGL 著色語言,為 GPU 的程式設計提供更加直觀的方法,當維護開放標準的時候,就有助於帶動 OpenGL 的歷史。

最初 OpenGL 1.5 是以擴充形式引入,後來 OpenGL ARB英语OpenGL Architecture Review BoardOpenGL 2.0 核心中正式納入 GLSL。自 1992 年建立的OpenGL 1.0 起,OpenGL 2.0 是第一個 OpenGL 的大修改版。

使用 GLSL 有如下好處:

  • 具有跨平台的相容性,包括 MacintoshWindowsLinux 等作業系統。
  • 所有支援 OpenGL 著色語言的繪圖卡,都可以用來編寫著色器。
  • 允許廠商為特定的繪圖卡產生最佳化的代碼。

詳細資料 编辑

資料類型 编辑

OpenGL 著色語言規格定義了 22 個基本資料類型,有些用法與 C 相同,其它的是繪圖處理器特有的。

  • void – 用於沒有返回值的函式
  • bool – 條件類型,其值可以是真或假
  • int – 帶負號整數
  • float – 浮點數
  • vec2 – 2 個浮點數組成的向量
  • vec3 – 3 個浮點數組成的向量
  • vec4 – 4 個浮點數組成的向量
  • bvec2 – 2 個布林組成的向量
  • bvec3 – 3 個布林組成的向量
  • bvec4 – 4 個布林組成的向量
  • ivec2 – 2 個整數組成的向量
  • ivec3 – 3 個整數組成的向量
  • ivec4 – 4 個整數組成的向量
  • mat2 – 浮點數的 2X2 矩陣
  • mat3 – 浮點數的 3X3 矩陣
  • mat4 – 浮點數的 4X4 矩陣
  • sampler1D – 用來存取一維紋理的句柄(handle)(或:操作,作名詞解。)
  • sampler2D – 用來存取二維紋理的句柄
  • sampler3D – 用來存取三維紋理的句柄
  • samplerCube – 用來存取立方映射紋理的句柄
  • sampler1Dshadow – 用來存取一維深度紋理的句柄
  • sampler2Dshadow – 用來存取二維深度紋理的句柄

運算子 编辑

OpenGL 著色語言提供類似於 C語言的運算子。給開發者編寫著色器的靈活性。GLSL 包含了 C和C++運算子,除了位元運算子和指標以外。

函式和控制結構 编辑

類似於 C語言,GLSL 支援迴圈和分支,包括 if、else、if/else、for、do-while、break、continue 等。

支援使用者定義函式,且各種常用的函式也已內建。這也就讓繪圖卡製造商,能夠在硬體層次上最佳化這些內建的函式。許多函式與 C 語言相同,如 exp() 以及 abs(),其它繪圖編程特有的,如 smoothstep() 以及 texture2D()。

編譯和執行 编辑

GLSL 著色器不是獨立的應用程式;其需要使用 OpenGL API 的應用程式。C、C++、C#、Delphi 和 Java 皆支援 OpenGL API,且支援 OpenGL 著色語言。

GLSL 著色器本身只是簡單的字串集,這些字串集會傳送到硬體廠商的驅動程式,並從程式內部的 OpenGL API 進入點編譯。著色器可從程式內部或讀入純文字檔來即時建立,但必須以字串形式傳送到驅動程式。

用以編譯、連結並傳送參數到 GLSL 程式的 API 集,已在三個 OpenGL 擴展中規定,且即將成為 OpenGL 2.0(页面存档备份,存于互联网档案馆) 核心的一部分。這些 API 可在以下擴展中找到:

GLSL 頂點著色器的簡單範例 编辑

void main(void) {  gl_Position = ftransform(); } 

GLSL 片斷著色器的簡單範例 编辑

void main(void) {  gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); } 

工具 编辑

GLSL 著色器可以事先建立和測試,現有以下 GLSL 開發工具:

  • RenderMonkey(页面存档备份,存于互联网档案馆) - 這個軟體是由 ATI 製作的,提供界面用以建立、編譯和除錯 GLSL 著色器,和 DirectX 著色器一樣。僅能在 Windows 平台上執行。
  • GLSLEditorSample - 在 Mac OS X 上,它是目前唯一可用的程式,其提供著色器的建立和編譯,但不能除錯。它是 cocoa 應用程式,僅能在 Mac OS X 上執行。
  • Lumina(页面存档备份,存于互联网档案馆) - Lumina 是新的 GLSL 開發工具。其使用 QT 界面,可以跨平台。

參考文獻 编辑

  • Rost, Randi J. OpenGL Shading Language. 1st ed. Pearson Education, Inc, 2004. ISBN 0-321-19789-5
  • Kessenich, John, & Baldwin, David, & Rost, Randi. The OpenGL Shading Language. Version 1.10.59. 3Dlabs, Inc. Ltd.

外部連結 编辑

参见 编辑

glsl, opengl, shading, language, 也稱作, glslang, 是一個以c語言為基礎的高階著色語言, 它是由, opengl, 所建立, 提供開發者對繪圖管線更多的直接控制, 而無需使用汇编语言或硬體規格語言, 基本框架, 目录, 背景, 詳細資料, 資料類型, 運算子, 函式和控制結構, 編譯和執行, 頂點著色器的簡單範例, 片斷著色器的簡單範例, 工具, 參考文獻, 外部連結, 参见背景, 编辑隨著近年來繪圖卡的進步, 已在渲染管線中的頂點, vertex, 和片段, fragme. GLSL OpenGL Shading Language 也稱作 GLslang 是一個以C語言為基礎的高階著色語言 它是由 OpenGL ARB 所建立 提供開發者對繪圖管線更多的直接控制 而無需使用汇编语言或硬體規格語言 GLSL基本框架 目录 1 背景 2 詳細資料 2 1 資料類型 2 2 運算子 2 3 函式和控制結構 2 4 編譯和執行 2 5 GLSL 頂點著色器的簡單範例 2 6 GLSL 片斷著色器的簡單範例 2 7 工具 3 參考文獻 4 外部連結 5 参见背景 编辑隨著近年來繪圖卡的進步 已在渲染管線中的頂點 vertex 和片段 fragment 層次中 加入更具彈性的新功能 達到在這個層次中 使用片段和頂點著色器的可編程性 最初這個功能是以組合語言撰寫著色器來達到的 組合語言對開發者的使用是不直觀而複雜的 OpenGL ARB 建立了 OpenGL 著色語言 為 GPU 的程式設計提供更加直觀的方法 當維護開放標準的時候 就有助於帶動 OpenGL 的歷史 最初 OpenGL 1 5 是以擴充形式引入 後來 OpenGL ARB 英语 OpenGL Architecture Review Board 在 OpenGL 2 0 核心中正式納入 GLSL 自 1992 年建立的OpenGL 1 0 起 OpenGL 2 0 是第一個 OpenGL 的大修改版 使用 GLSL 有如下好處 具有跨平台的相容性 包括 Macintosh Windows 和 Linux 等作業系統 所有支援 OpenGL 著色語言的繪圖卡 都可以用來編寫著色器 允許廠商為特定的繪圖卡產生最佳化的代碼 詳細資料 编辑資料類型 编辑 OpenGL 著色語言規格定義了 22 個基本資料類型 有些用法與 C 相同 其它的是繪圖處理器特有的 void 用於沒有返回值的函式 bool 條件類型 其值可以是真或假 int 帶負號整數 float 浮點數 vec2 2 個浮點數組成的向量 vec3 3 個浮點數組成的向量 vec4 4 個浮點數組成的向量 bvec2 2 個布林組成的向量 bvec3 3 個布林組成的向量 bvec4 4 個布林組成的向量 ivec2 2 個整數組成的向量 ivec3 3 個整數組成的向量 ivec4 4 個整數組成的向量 mat2 浮點數的 2X2 矩陣 mat3 浮點數的 3X3 矩陣 mat4 浮點數的 4X4 矩陣 sampler1D 用來存取一維紋理的句柄 handle 或 操作 作名詞解 sampler2D 用來存取二維紋理的句柄 sampler3D 用來存取三維紋理的句柄 samplerCube 用來存取立方映射紋理的句柄 sampler1Dshadow 用來存取一維深度紋理的句柄 sampler2Dshadow 用來存取二維深度紋理的句柄運算子 编辑 OpenGL 著色語言提供類似於 C語言的運算子 給開發者編寫著色器的靈活性 GLSL 包含了 C和C 運算子 除了位元運算子和指標以外 函式和控制結構 编辑 類似於 C語言 GLSL 支援迴圈和分支 包括 if else if else for do while break continue 等 支援使用者定義函式 且各種常用的函式也已內建 這也就讓繪圖卡製造商 能夠在硬體層次上最佳化這些內建的函式 許多函式與 C 語言相同 如 exp 以及 abs 其它繪圖編程特有的 如 smoothstep 以及 texture2D 編譯和執行 编辑 GLSL 著色器不是獨立的應用程式 其需要使用 OpenGL API 的應用程式 C C C Delphi 和 Java 皆支援 OpenGL API 且支援 OpenGL 著色語言 GLSL 著色器本身只是簡單的字串集 這些字串集會傳送到硬體廠商的驅動程式 並從程式內部的 OpenGL API 進入點編譯 著色器可從程式內部或讀入純文字檔來即時建立 但必須以字串形式傳送到驅動程式 用以編譯 連結並傳送參數到 GLSL 程式的 API 集 已在三個 OpenGL 擴展中規定 且即將成為 OpenGL 2 0 页面存档备份 存于互联网档案馆 核心的一部分 這些 API 可在以下擴展中找到 ARB 頂點著色器 ARB 片斷著色器 ARB 著色器物件GLSL 頂點著色器的簡單範例 编辑 void main void gl Position ftransform GLSL 片斷著色器的簡單範例 编辑 void main void gl FragColor vec4 1 0 0 0 0 0 1 0 工具 编辑 GLSL 著色器可以事先建立和測試 現有以下 GLSL 開發工具 RenderMonkey 页面存档备份 存于互联网档案馆 這個軟體是由 ATI 製作的 提供界面用以建立 編譯和除錯 GLSL 著色器 和 DirectX 著色器一樣 僅能在 Windows 平台上執行 GLSLEditorSample 在 Mac OS X 上 它是目前唯一可用的程式 其提供著色器的建立和編譯 但不能除錯 它是 cocoa 應用程式 僅能在 Mac OS X 上執行 Lumina 页面存档备份 存于互联网档案馆 Lumina 是新的 GLSL 開發工具 其使用 QT 界面 可以跨平台 參考文獻 编辑Rost Randi J OpenGL Shading Language 1st ed Pearson Education Inc 2004 ISBN 0 321 19789 5 Kessenich John amp Baldwin David amp Rost Randi The OpenGL Shading Language Version 1 10 59 3Dlabs Inc Ltd https web archive org web 20070404171317 http developer 3dlabs com documents index htm外部連結 编辑GLSL 語言規格 版本 1 20 页面存档备份 存于互联网档案馆 GLSL 參考表 页面存档备份 存于互联网档案馆 OpenGL 片斷著色器規格 OpenGL 頂點著色器規格 OpenGL 程式規格 永久失效連結 官方 OpenGL 網站 页面存档备份 存于互联网档案馆 來自 Lighthouse3D 的教學和範例 页面存档备份 存于互联网档案馆 來自 NeHe Productions 的教學和範例 GLSL 開發環境 页面存档备份 存于互联网档案馆 RenderMonkey 著色器開發環境 页面存档备份 存于互联网档案馆 Geist3D 繪圖引擎 內含 GLSL 編輯器 Lumina 跨平台 GLSL IDE 页面存档备份 存于互联网档案馆 参见 编辑著色語言 HLSL 高階著色語言 Cg nVIDIA 的著色語言 程式設計 计算机图形学 OpenGL 著色器 取自 https zh wikipedia org w index php title GLSL amp oldid 78034958, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。