非常に基本的な質問があります。私はwebglが初めてで、単純な正方形を描こうとしています。行列操作に gl 行列ライブラリを使用しています。
Javascript コード:
squareVertexPositionBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);
vertices = [
0.9, 0.9, 0.0,1.0,
-0.9, 0.9, 0.0,1.0,
0.9, -0.9, 0.0,1.0,
-0.9, -0.9, 0.0,1.0
];
squareVertexPositionBuffer.itemSize = 4;
squareVertexPositionBuffer.numItems = 4;
mat4.identity(pMatrix);
mat4.perspective(45, gl.viewportWidth / gl.viewportHeight, 0.1, 100.0, pMatrix);
mat4.identity(mvMatrix);
mat4.translate(mvMatrix, [-1.5, 0.0, -7.0]);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, squareVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);
setMatrixUniforms();
gl.drawArrays(gl.TRIANGLE_STRIP, 0, squareVertexPositionBuffer.numItems);
シェーダー:
attribute vec3 aVertexPosition;
uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
varying vec3 debug;
void main(void) {
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition.xyz, 1.0);
debug = aVertexPosition;
}
これはうまくいくようです。ここでは、モデル ビューとパースペクティブ マトリックスをユニフォームとしてシェーダー プログラムに渡し、そこに頂点座標を掛けています。しかし、JavaScript でモデル ビューとパースペクティブ マトリックスを乗算し、変更された頂点をシェーダーに渡すと、うまくいかないようです。
私は間違いを見つけることができません。大変助かります!