更新:此代码确实有效。我的错误是对glViewport
的流浪电话;这似乎是浏览器窗口锚定,而不是webGL中的画布相关,它正在推动屏幕上的一切。因此,此问题中的代码显示了如何为WebGL创建正确的正交投影:
webGL没有gluOrtho2D
。我已复制 - 并转换为OpenGL矩阵应该来自glOrtho
:
function createOrtho2D(left,right,bottom,top) {
var near = -1, far = 1, rl = right-left, tb = top-bottom, fn = far-near;
return [ 2/rl, 0, 0, 0,
0, 2/tb, 0, 0,
0, 0, -2/fn, 0,
-(right+left)/rl, -(top+bottom)/tb, -(far+near)/fn, 1];
}
然后我使用createOrtho2D(0,canvas.offsetWidth,canvas.offsetHeight,0)
设置我的投影制服。
例如,createOrtho2D(0,1024,768,0)
=
[ 0.001953125, 0, 0, 0,
0, -0.0026041666666666665, 0, 0,
0, 0, -1, 0,
-1, 1, 0, 1]
我使用gl.uniformMatrix4fv(this.program.mvp,false,mvp);
上传此内容,并在顶点着色器中将其应用于gl_Position = mvp * vec4(vertex,z,1.0);
。
然而,这不起作用:
我有什么问题?