2014-04-15 55 views
1

mat4.lookAt()下面是给我意想不到的结果。 请参阅与3个测试示例相关的图像。第一个例子是“正确”,其他人似乎被裁剪,但我不明白为什么。从相机的角度和距离似乎是正确的,但除了第一个,我没有得到我想要的整个视图。你能建议我需要做些什么调整吗?mat4.lookat webgl视图

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(modelview, [0,0,6], [0,0,0], [0,1,0])

mat4.lookAt(模型观察,[ 0,0,8],[0,0,0],[0,1,0]) mat4.lookAt(modelview, [0,0,8], [0,0,0], [0,1,0])

mat4.lookAt(modelview,[0,0,4],[0,0,0] ,[0,1,0]) mat4.lookAt(modelview, [0,0,4], [0,0,0], [0,1,0])

+0

将'mat4.Ortho'中的远距离剪辑距离作为第一步增加。对于第三张图片,一见钟情......奇怪...... –

回答

2

的问题来自于由mat4.Ortho设置剪辑距离:

enter image description here

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])

这将在设置你的眼睛POS近平面的极限,当完全相等时给出不可预知的结果。

因此,解决办法是调整你的近及远夹闭mat4.Ortho:

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

其中x可能是一个最小的位移。

+1

是的,那是对的。就我而言,我认为这是mat4.perspective,也需要进行调整。谢谢 – zerowords