鍍金池/ 教程/ HTML/ WebGL關(guān)聯(lián)屬性和緩沖區(qū)對象
WebGL Context上下文
WebGL圖形管線
WebGL示例程序
WebGL交互式立方體
WebGL繪制三角形
WebGL幾何體
WebGL繪制模型
WebGL基礎(chǔ)
WebGL平移
WebGL教程
WebGL繪圖的模式
WebGL縮放
WebGL繪制點(diǎn)
WebGL顏色
WebGL旋轉(zhuǎn)
WebGL繪制四邊形
WebGL著色器程序
WebGL基本圖形概念
WebGL立方體旋轉(zhuǎn)
WebGL關(guān)聯(lián)屬性和緩沖區(qū)對象
Html5 Canvas介紹
WebGL著色器

WebGL關(guān)聯(lián)屬性和緩沖區(qū)對象

在頂點(diǎn)著色器程序中的每個(gè)屬性點(diǎn)為頂點(diǎn)緩沖區(qū)對象。創(chuàng)建頂點(diǎn)緩沖區(qū)對象之后,程序員必須將它們與頂點(diǎn)著色器程序的屬性相關(guān)聯(lián)。每個(gè)屬性點(diǎn)只有一個(gè)頂點(diǎn)緩沖對象,從它們中提取數(shù)據(jù)值,然后將這些屬性傳遞給著色器程序。
到了頂點(diǎn)緩沖對象的頂點(diǎn)著色器程序的屬性聯(lián)系起來,必須按照下面的步驟 -
  • 獲取屬性的位置
  • 點(diǎn)屬性頂點(diǎn)緩沖區(qū)對象
  • 啟用屬性

獲取屬性的位置

WebGL提供一種方法 getAttribLocation(),它返回屬性的位置。它的語法如下-
ulong getAttribLocation(Object program, string name)
此方法接受頂點(diǎn)著色器的程序?qū)ο蠛晚旤c(diǎn)著色器程序的屬性值。
下面的代碼片段展示了如何使用此方法。
var coordinatesVar = gl.getAttribLocation(shader_program, "coordinates"); 
這里,shader_program是著色器程序?qū)ο蠛妥鴺?biāo)是頂點(diǎn)著色器程序的屬性。

指向?qū)傩缘絍BO

要分配緩沖對象的屬性變量,WebGL提供了一個(gè)名為vertexAttribTutorialser()的方法。下面是該方法的語法-
void vertexAttribTutorialser(location, int size, enum type, bool normalized, long stride, long offset)
此方法接受六個(gè)參數(shù),它們討論下面。
  • Location ? 它指定一個(gè)屬性變量的存儲(chǔ)位置。根據(jù)這個(gè)方案,必須通過由getAttribLocation()方法返回的值

  • Size ? 它指定在緩沖對象每頂點(diǎn)部件的數(shù)量

  • Type ? 它指定數(shù)據(jù)的類型

  • Normalized ? 這是一個(gè)布爾值。如果為真,非浮動(dòng)數(shù)據(jù)被歸一化到[0,1]。否則,它被歸一化到[-1,1]。

  • Stride ? 它指定不同頂點(diǎn)數(shù)據(jù)元素之間的字節(jié)數(shù),或默認(rèn)為零步幅。

  • Offset ? 它指定在緩沖器對象,以指示數(shù)據(jù)從頂點(diǎn)的哪個(gè)存儲(chǔ)字節(jié)偏移(字節(jié))。如果數(shù)據(jù)是從開始(beginning)存儲(chǔ)的,偏移量(offset)為0。

下面的片段展示了如何在程序中使用 vertexAttribTutorialser() -
gl.vertexAttribTutorialser(coordinatesVar, 3, gl.FLOAT, false, 0, 0);

啟用屬性

激活頂點(diǎn)著色器屬性來訪問緩沖對象的頂點(diǎn)著色器。對于該操作,WebGL 提供 enableVertexAttribArray()方法。這個(gè)方法接受屬性作為參數(shù)位置。以下是如何在程序中使用此方法-
gl.enableVertexAttribArray(coordinatesVar);