在頂點著色器程式中的每個屬性點為頂點緩衝區對象。創建頂點緩衝區對象之後,程式員必須將它們與頂點著色器程式的屬性相關聯。每個屬性點只有一個頂點緩衝對象,從它們中提取數據值,然後將這些屬性傳遞給著色器程式。
到了頂點緩衝對象的頂點著色器程式的屬性聯繫起來,必須按照下麵的步驟 -
-
獲取屬性的位置
-
點屬性頂點緩衝區對象
-
啟用屬性
獲取屬性的位置
WebGL提供一種方法 getAttribLocation(),它返回屬性的位置。它的語法如下-
ulong getAttribLocation(Object program, string name)
此方法接受頂點著色器的程式對象和頂點著色器程式的屬性值。
下麵的代碼片段展示了如何使用此方法。
var coordinatesVar = gl.getAttribLocation(shader_program, "coordinates");
這裏,shader_program是著色器程式對象和座標是頂點著色器程式的屬性。
指向屬性到VBO
要分配緩衝對象的屬性變數,WebGL提供了一個名為vertexAttribTutorialser()的方法。下麵是該方法的語法-
void vertexAttribTutorialser(location, int size, enum type, bool normalized, long stride, long offset)
此方法接受六個參數,它們討論下麵。
-
Location − 它指定一個屬性變數的存儲位置。根據這個方案,必須通過由getAttribLocation()方法返回的值
-
Size − 它指定在緩衝對象每頂點部件的數量
-
Type − 它指定數據的類型
-
Normalized − 這是一個布爾值。如果為真,非浮動數據被歸一化到[0,1]。否則,它被歸一化到[-1,1]。
-
Stride − 它指定不同頂點數據元素之間的位元組數,或默認為零步幅。
-
Offset − 它指定在緩衝器對象,以指示數據從頂點的哪個存儲位元組偏移(位元組)。如果數據是從開始(beginning)存儲的,偏移量(offset)為0。
下麵的片段展示了如何在程式中使用 vertexAttribTutorialser() -
gl.vertexAttribTutorialser(coordinatesVar, 3, gl.FLOAT, false, 0, 0);
啟用屬性
啟動頂點著色器屬性來訪問緩衝對象的頂點著色器。對於該操作,WebGL 提供 enableVertexAttribArray()方法。這個方法接受屬性作為參數位置。以下是如何在程式中使用此方法-
gl.enableVertexAttribArray(coordinatesVar);