属性とバッファオブジェクトの関連付け

頂点シェーダープログラムの各属性は、頂点バッファオブジェクトを指します。頂点バッファオブジェクトを作成した後、プログラマはそれらを頂点シェーダープログラムの属性に関連付ける必要があります。各属性は、データ値を抽出する1つの頂点バッファーオブジェクトのみを指し、これらの属性はシェーダープログラムに渡されます。

頂点バッファオブジェクトを頂点シェーダープログラムの属性に関連付けるには、以下の手順に従う必要があります。

  • 属性の場所を取得する
  • 属性を頂点バッファオブジェクトにポイントします
  • 属性を有効にする

属性の場所を取得する

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)

このメソッドは6つのパラメーターを受け入れ、それらについて以下で説明します。

  • Location−属性変数の保存場所を指定します。このオプションでは、によって返される値を渡す必要がありますgetAttribLocation() 方法。

  • Size −バッファオブジェクトの頂点ごとのコンポーネント数を指定します。

  • Type −データの種類を指定します。

  • Normalized−これはブール値です。trueの場合、非浮動データは[0、1]に正規化されます。それ以外の場合は、[-1、1]に正規化されます。

  • Stride −異なる頂点データ要素間のバイト数を指定するか、デフォルトのストライドの場合はゼロを指定します。

  • Offset−頂点データの保存元のバイトを示すために、バッファオブジェクトのオフセット(バイト単位)を指定します。データが最初から保存されている場合、オフセットは0です。

次のスニペットは、使用方法を示しています vertexAttribPointer() プログラム内-

gl.vertexAttribPointer(coordinatesVar, 3, gl.FLOAT, false, 0, 0);

属性の有効化

頂点シェーダー属性をアクティブにして、頂点シェーダーのバッファーオブジェクトにアクセスします。この操作のために、WebGLはenableVertexAttribArray()方法。このメソッドは、属性の場所をパラメーターとして受け入れます。プログラムでこのメソッドを使用する方法は次のとおりです-

gl.enableVertexAttribArray(coordinatesVar);