關聯屬性與緩衝物件



頂點著色器程式中的每個屬性都指向一個頂點緩衝物件。建立頂點緩衝物件後,程式設計師必須將它們與頂點著色器程式的屬性關聯起來。每個屬性只指向一個頂點緩衝物件,從中提取資料值,然後這些屬性被傳遞到著色器程式。

要將頂點緩衝物件與頂點著色器程式的屬性關聯,您需要按照以下步驟操作:

  • 獲取屬性位置
  • 將屬性指向頂點緩衝物件
  • 啟用屬性

獲取屬性位置

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