Opengl es mat4.lookat webgl剪辑视图

Opengl es mat4.lookat webgl剪辑视图,opengl-es,3d,webgl,Opengl Es,3d,Webgl,下面的mat4.lookAt()给了我意想不到的结果。 请参阅与3个测试示例相关的图像。第一个例子是“正确的”,其他的例子似乎被删掉了,但我不明白为什么。从相机上看,透视图和距离似乎都是正确的,但除了第一个,我没有得到我想要的全部视图。你能建议我需要做什么来调整这个吗 function draw() { gl.clearColor(bgcolor[0],bgcolor[1],bgcolor[2],1); gl.clear(gl.COLOR_BUFFER_BIT | gl.DE

下面的
mat4.lookAt()
给了我意想不到的结果。 请参阅与3个测试示例相关的图像。第一个例子是“正确的”,其他的例子似乎被删掉了,但我不明白为什么。从相机上看,透视图和距离似乎都是正确的,但除了第一个,我没有得到我想要的全部视图。你能建议我需要做什么来调整这个吗

function draw() { 

    gl.clearColor(bgcolor[0],bgcolor[1],bgcolor[2],1);
    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);

    if (document.getElementById("persproj").checked) {
    mat4.perspective(projection, Math.PI/4, 1, 4, 8);
    }
    else {
    mat4.ortho(projection,-2.5, 2.5, -2.5, 2.5, 4, 8);
    }
    gl.uniformMatrix4fv(uProjection, false, projection );

    mat4.lookAt(modelview, [0,0,6], [0,0,0], [0,1,0]); // This is the key line
    mat4.rotateX(modelview, modelview, rotateX);
    mat4.rotateY(modelview, modelview, rotateY);
    gl.uniformMatrix4fv(uModelview, false, modelview );

    mat3.normalFromMat4(normalMatrix, modelview);
    gl.uniformMatrix3fv(uNormalMatrix, false, normalMatrix);

    gl.uniform1i( uLit, 0 );  // The lines representing the coordinate axes are not lit.

    gl.lineWidth(4);
    drawPrimitive( gl.LINES, [1,0,0,1], [ -2,0,0, 2,0,0] );
    drawPrimitive( gl.LINES, [0,1,0,1], [ 0,-2,0, 0,2,0] );
    drawPrimitive( gl.LINES, [0,0,1,1], [ 0,0,-2, 0,0,2] );
    gl.lineWidth(1);
    if (leftColors.length>0){
    drawTurtles(linecolors,moves,leftColors,rightColors,backColors,bottoms,lefts,rights,backs,bottomNs,leftNs,rightNs,backNs);
    }
}
mat4.lookAt(模型视图[0,0,6],[0,0,0],[0,1,0])

mat4.lookAt(模型视图[0,0,8],[0,0,0],[0,1,0])

mat4.lookAt(模型视图[0,0,4],[0,0,0],[0,1,0])
问题来自
mat4.Ortho设置的剪裁距离:

mat4.lookAt(模型视图[0,0,8],[0,0,0],[0,1,0])

这将设置您的眼睛位置,例如远平面将通过(0,0,0),将您的可视内容限制为(0,0,0)上的视图平面

mat4.lookAt(模型视图[0,0,4],[0,0,0],[0,1,0])

这会将你的眼睛位置设置在近平面的极限,当精确相等时会产生不可预测的结果

因此,解决方案是在mat4中调整近剪裁和远剪裁。正交:

mat4.ortho(projection,-2.5, 2.5, -2.5, 2.5, 4 - x, 8 + x);

其中x可以是最小位移。

第一步,在
mat4.Ortho中增加远剪裁距离。对于第三张图片,乍一看…奇怪…是的,这是正确的。在我的情况下,我认为这是mat4.1的观点,也需要调整。谢谢