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);