用WebGL繪製一個正方形

如果你對用程式碼繪圖感興趣,WebGL是最容易入手的一個切入口。一個瀏覽器、一個編輯器,再略懂一些前端開發的知識,就可以開始繪圖了。

使用WebGL把圖形渲染到頁面中,需要執行如下步驟:

建立一個畫布元素;

獲取畫布的上下文;

初始化視口;

建立一個或多個包含渲染資料的陣列(通常是頂點陣列);

建立一個或多個矩陣,將頂點陣列變換到螢幕空間中;

建立一個或多個著色器來實現繪製演算法;

使用引數初始化著色器

繪製

畫布元素與繪製上下文

首先要建立一個canvas元素,獲取到canvas的DOM物件後,在使用WebGL的

getContext()

獲取上下文。

用WebGL繪製一個正方形

建立canvas元素、獲取上下文

初始化視口

設定視口,需要將WebGL的上下文和canvas物件作為引數傳入,

viewport(x,y,width,heigt)

方法有四個引數,分別表示:

x:視口的左下角水平座標。預設值:0。

y:視口的左下角垂直座標。預設值:0。

width:設定視口的寬度。預設值:canvas的寬度。

height:設定視口的高度。預設值:canvas的高度。

用WebGL繪製一個正方形

初始化視口

Buffer、ArrayBuffer和型別化陣列

WebGL的繪製是由圖元組成的,圖元的型別包括三角形(三角形陣列)、三角形帶、點和線。圖元使用的資料組稱為Buffer,它定義了頂點的位置。每個頂點的位置都包含x、y、z值。

三角形帶是一種基本的渲染圖元,它先使用前三個頂點畫出第一個三角形,再使用後兩個頂點與下一個頂點結合繪製一個三角形,以此類推。

用WebGL繪製一個正方形

建立頂點陣列

建立矩陣

在繪製正方形之前,先要建立兩個矩陣。首先,我們需要一個矩陣來定義正方形在3D座標系中相對於相機的位置。這個矩陣也被稱為模型檢視矩陣,它綜合了模型的變換和相機之間的關係。

第二個矩陣是投影矩陣,這個矩陣將被用於在著色器中將相機空間模型的3D座標轉換為繪製視口的2D座標。投影矩陣難以想象,幾乎沒有人會手動編寫計算投影矩陣的程式碼,而都是由框架來自動完成的。

用WebGL繪製一個正方形

模型檢視矩陣、投影矩陣

建立著色器

著色球定義瞭如何將3D物體的畫素切實地繪製在螢幕上,一個著色器可以同時應用在多個物體上。

著色器由兩個部分組成:頂點著色器和片元著色器。頂點著色器負責將物體的座標轉換到2D空間,片元著色器負責生成最後的顏色輸出到每個轉換後的頂點元素,而顏色的輸入則可以是純色、紋理、光源、材質。

用WebGL繪製一個正方形

建立著色器

用WebGL繪製一個正方形

頂點著色、片元著色器執行程式碼段

用WebGL繪製一個正方形

初始化著色程式

繪製圖元

接下來編寫繪製函式。首先,函式會先清理一下畫布並用黑色作為背景色。然後將頂點陣列和矩陣作為輸入傳遞給著色器。最後呼叫

drawArrays()

方法繪製正方形。

用WebGL繪製一個正方形

繪製圖元

函式呼叫

用WebGL繪製一個正方形

函式呼叫

用WebGL繪製一個正方形

圖片呈現