我有一个非常基本的问题。我是 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 中的模型视图和透视矩阵相乘,然后将修改后的顶点传递给着色器,它似乎不起作用。
我无法发现错误。帮助高度赞赏!