51 WebGL切換著色器

2021-08-02 20:21:37 字數 988 閱讀 8664

到目前為止,以前的程式都是用了乙個著色器(頂點著色器和片元著色器),如果乙個著色器就能繪製出場景中所有的物體,那就沒有問題。然而事實是,對不同物體經常需要使用不同的著色器來繪製,每個著色器中可能有非常複雜的邏輯以實現各種不同的效果。我們可以準備多個著色器,然後根據需要來切換使用它們。

實現切換著色器

為了切換著色器,需要先建立多個著色器程式物件,然後再進行繪製前選擇使用的程式物件。以前在39 webgl著色器和著色器程式物件:initshader()函式的作用中介紹了如何建立程式物件。我們使用gl.useprogram()函式來進行切換。由於現在需要顯式地操作著色器和程式物件,所以不能再使用initshaders()函式。但是,可以使用定義在cuon-utils.js中的createprogram()函式,實際上initshaders()函式內部也是呼叫該函式來建立著色器物件的。

下面是示例程式的流程步驟,由於它建立了兩個程式物件,做了兩輪相同的操作,所以看上去有點長。關鍵的**實際上很簡單。

(1)準備用來繪製單色立方體的著色器。

(2)準備用來繪製紋理立方體的著色器。

(3)呼叫createprogram()函式,利用第一步建立出的著色器,建立著色器程式物件。

(4)呼叫createprogram()函式,利用第二步建立出的著色器,建立著色器程式物件。

(5)呼叫gl.useprogram()函式,指定使用第3步建立出的著色器程式物件。

(6)通過緩衝區物件向著色器中傳入attribute變數並開啟之。

(7)繪製單色立方體。

(8)呼叫gl.useprogram()函式,指定使用第4步建立出的著色器程式物件。

(9)通過緩衝區物件向著色器傳入attribute變數並開啟之。

(10)繪製紋理立方體。

示例**:

WebGL切換著色器方法與錯誤

webgl一種著色器,是無法滿足渲染需求的,需要使用不同的渲染器,這次測試了 一下渲染器的切換。切換渲染器的時候,上乙個著色器的東西肯定是要清除的。gl.deleteshader fsshader 刪除片元著色器 gl.deleteshader csshader 刪除頂點著色器 gl.deletep...

webgl學習 著色器

著色器是一段使用glsl語言 一種類c的高階語言 編寫的簡短程式,它定義了3d物件的畫素點實際繪製到螢幕上的方式,webgl要求開發者要為每個待繪製的物件提供乙個著色器,乙個著色器可以應用於多個物件,因此在實際的應用中,整個場景通常提供乙個統一的 著色器。乙個著色器,通常由兩個部分組成 頂點著色器 ...

建立WebGL著色器程式

既然是高階,我們就要先從基礎入手,那麼先看一下如何建立乙個webgl的著色器程式 初始化著色器程式外掛程式 initshaders.js function initshaders gl,vertexshaderid,fragmentshaderid else var fragelem documen...