今のところ、3 つの個別の頂点バッファーがあります。 1. XYZ バッファー 2. NX、NY、NZ バッファー 3. UV バッファー
したがって、これは合計 8 つのフロートです。将来的には接線と従接線の情報も追加する予定なので、浮動小数点数は +6 です。
シェーダー用に宣言する方法は次のとおりです。
shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition");
gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);
shaderProgram.vertexNormalAttribute = gl.getAttribLocation(shaderProgram, "aVertexNormal");
gl.enableVertexAttribArray(shaderProgram.vertexNormalAttribute);
shaderProgram.textureCoordAttribute = gl.getAttribLocation(shaderProgram, "aTextureCoord");
gl.enableVertexAttribArray(shaderProgram.textureCoordAttribute);
ここでは、それらをシェーダー プログラムに渡します。
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexCoordBuffer);
gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 3, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexNormalBuffer);
gl.vertexAttribPointer(shaderProgram.vertexNormalAttribute, 3, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexTextureCoordBuffer);
gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0);
バッファーは別なので、シェーダーで vec3 と vec2 として定義できます。
attribute vec3 aVertexPosition;
attribute vec3 aVertexNormal;
attribute vec2 aTextureCoord;
しかし、頂点ごとに 8 つの float を持つ単一のバッファーにそれらを結合するとどうなるでしょうか? したがって、アイテムのサイズは 8 になります。
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexCoordBuffer);
gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 8, gl.FLOAT, false, 0, 0);
しかし、シェーダーでそれらにアクセスするにはどうすればよいでしょうか? vec8 ? 最大のvec4があります!では、どうすればいいですか?