WebGL初始化著色器(筆記4)

2021-08-29 20:22:26 字數 1828 閱讀 9510

初始化著色器函式initshaders()被定義在了cuon.util.js中

使用:initshaders(gl, vshader, fshader);

引數:gl  指定渲染的上下文

vshader  指定頂點著色器程式**(字串)

fshader  指定片元著色器程式**(字串)

返回值:

true  初始化著色器成功

false  初始化著色器失敗

頂點著色器

var

vshader_source=""

+"void main()\n"

;

首先用js宣告了乙個變數將書寫的glsl es著色器語言**字串賦值變數。

類似於c語言,必須包含乙個main()函式,  void**這個函式不會有返回值,而且你不能為main()指定引數。

函式內部的兩行**

gl_position  型別:vec4 表示頂點的位置 必須設定

gl_pointsize  型別:float  表示點的尺寸(畫素數) 如果不設定,預設為1.0

glsl es資料型別

float 表示是浮點數

vec4表示由四個浮點數組成的向量

由4個分量組成的向量被稱為齊次座標,它能夠提高處理三維資料的效率,所以被大量使用

齊次座標:(x,y,z,w)。齊次座標(x,y,z,w)等價於三維座標(x/w,y/w,z/w)。所以如果齊次座標的第四個分量是1,你就可以將它當做單位座標來使用。w的值必須大於等於0的。如果w趨近於0,那麼它所表示的點將趨近於無窮遠,所以在齊次座標系中可以有無窮的概念。齊次座標的存在,似的用矩陣乘法來描述頂點變換成為可能,三維圖形系統在計算過程中,通常使用齊次座標來表示頂點的三維座標。

片元著色器

// 片元著色器程式

varfshader_source=""

+"void main()\n"

;

頂點著色器控制點的位置和大小,片元著色器控制點的顏色。片元就是顯示在螢幕上的畫素(嚴格意義上來說,片元包括這個畫素的位置、顏色和其他資訊)。

片元著色器的作用就是處理片元,使其顯示在螢幕上。

片元著色器將點的顏色賦值給gl_fragcolor變數,該變數是片元著色器唯一的內建變數,它控制著畫素在螢幕上的最終顏色。

gl_fragcolor 型別:vec4  描述:指定片元顏色(rgba格式)。

對這個內建變數賦值後,相應的畫素就會以這個顏色值顯示。型別和頂點著色器中的頂點位置一樣,也是vce4型別。四個浮點分量,分別代表rgba值。

繪製操作

// 繪製乙個點

gl.drawarrays

(gl.

points,0

,1);

gl.drawarrays(mode, first, count);執行頂點著色器,安裝mode的引數指定的方式繪製圖形。

引數:mode  指定繪製的方式,可接收一下常量符號:gl.points,gl.lines, gl.line_strip, gl.line_loop, gl.********s, gl.********_strip, gl.********_fan

first 指定從哪個頂點開始繪製(整數型)

count  指定繪製需要用到多少個頂點(整數型)

返回值:無

錯誤  invalid_enum  傳入的mode引數不是前述引數之一

invalid_value  引數first或count是負數

示例當中由於我們只繪製了單獨的點,所以第乙個值是gl.points,第二個引數表示從第1個頂點開始畫起,第三個引數表示僅繪製的乙個點。

webgl學習 著色器

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

建立WebGL著色器程式

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

一 WebGL 著色器和繪製

var vshader source void main 型別和變數名字 var fshader source void main param mode 繪製模式 gl.points,gl.lines,gl.line strip,gl.line loop param first 從哪個點開始繪製 p...