
- WebGL 示例
- WebGL - 繪製點
- WebGL - 繪製三角形
- WebGL - 繪製模式
- WebGL - 繪製四邊形
- WebGL - 顏色
- WebGL - 平移
- WebGL - 縮放
- WebGL - 旋轉
- WebGL - 立方體旋轉
- WebGL - 互動式立方體
- WebGL 有用資源
- WebGL - 快速指南
- WebGL - 有用資源
- WebGL - 討論
關聯屬性與緩衝物件
頂點著色器程式中的每個屬性都指向一個頂點緩衝物件。建立頂點緩衝物件後,程式設計師必須將它們與頂點著色器程式的屬性關聯起來。每個屬性只指向一個頂點緩衝物件,從中提取資料值,然後這些屬性被傳遞到著色器程式。
要將頂點緩衝物件與頂點著色器程式的屬性關聯,您需要按照以下步驟操作:
- 獲取屬性位置
- 將屬性指向頂點緩衝物件
- 啟用屬性
獲取屬性位置
WebGL 提供了一個名為 getAttribLocation() 的方法,該方法返回屬性位置。其語法如下:
ulong getAttribLocation(Object program, string name)
此方法接受頂點著色器程式物件和頂點著色器程式的屬性值。
以下程式碼片段顯示瞭如何使用此方法。
var coordinatesVar = gl.getAttribLocation(shader_program, "coordinates");
這裡,shader_program 是著色器程式的物件,coordinates 是頂點著色器程式的屬性。
將屬性指向 VBO
要將緩衝物件分配給屬性變數,WebGL 提供了一個名為 vertexAttribPointer() 的方法。以下是此方法的語法:
void vertexAttribPointer(location, int size, enum type, bool normalized, long stride, long offset)
此方法接受六個引數,下面將對它們進行討論。
Location - 指定屬性變數的儲存位置。在此選項下,您必須傳遞 getAttribLocation() 方法返回的值。
Size - 指定緩衝物件中每個頂點的分量數。
Type - 指定資料型別。
Normalized - 這是一個布林值。如果為真,則非浮點資料被規範化到 [0, 1];否則,被規範化到 [-1, 1]。
Stride - 指定不同頂點資料元素之間的位元組數,或為預設步長指定零。
Offset - 指定緩衝物件中的偏移量(以位元組為單位),以指示從哪個位元組儲存頂點資料。如果資料從開頭儲存,則offset 為 0。
以下程式碼片段顯示瞭如何在程式中使用 vertexAttribPointer():
gl.vertexAttribPointer(coordinatesVar, 3, gl.FLOAT, false, 0, 0);
啟用屬性
啟用頂點著色器屬性以在頂點著色器中訪問緩衝物件。對於此操作,WebGL 提供了 enableVertexAttribArray() 方法。此方法接受屬性的位置作為引數。以下是在程式中使用此方法的方法:
gl.enableVertexAttribArray(coordinatesVar);