属性とバッファオブジェクトの関連付け
頂点シェーダープログラムの各属性は、頂点バッファオブジェクトを指します。頂点バッファオブジェクトを作成した後、プログラマはそれらを頂点シェーダープログラムの属性に関連付ける必要があります。各属性は、データ値を抽出する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);