WebGL關聯屬性和緩衝區對象
在頂點着色器程序中的每個屬性點爲頂點緩衝區對象。創建頂點緩衝區對象之後,程序員必須將它們與頂點着色器程序的屬性相關聯。每個屬性點只有一個頂點緩衝對象,從它們中提取數據值,然後將這些屬性傳遞給着色器程序。
到了頂點緩衝對象的頂點着色器程序的屬性聯繫起來,必須按照下面的步驟 -
獲取屬性的位置
點屬性頂點緩衝區對象
啓用屬性
獲取屬性的位置
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);