0

我对 GLU.gLookAt(eyeX,eyeY,eyeZ,Xpos,Ypos,Zpos,upX,upY,upZ) 方法的使用感到非常困惑。我想要的只是缩放 3d 立方体。当我增加/减少 eyeZ 的值时,相机向前/向后移动到立方体。它在 eyeZ 的某个限制范围内都很好,但是当我将 eyeZ 值增加到超过该限制时,它开始恢复效果,即它不是放大而是开始缩小。

我可能不擅长 openGL 来理解上述方法,但谁能告诉我这背后的基本原因是什么。我提到了这个链接 http://jerome.jouvie.free.fr/opengl-tutorials/Tutorial8.php

如果你愿意,我可以在这里发布我的代码..

public void onDrawFrame(GL10 gl) 
{

    gl.glClear(GL10.GL_COLOR_BUFFER_BIT  | GL10.GL_DEPTH_BUFFER_BIT);
    gl.glMatrixMode(GL10.GL_MODELVIEW);
    gl.glLoadIdentity();


    //gl.glTranslatef(xPos, yPos, -zoomFactor);
    GLU.gluLookAt(gl, eyeX, eyeZ, eyeZ, 0f, 0f, 0f  , 0f, 1f, 0f);

    gl.glRotatef(mAngleX, 0, 1, 0);
    gl.glRotatef(mAngleY, -1, 0, 0);

    // Draw the model
    cube.draw(gl);
}

这是我使用 gLookAt 方法的方法..

4

1 回答 1

1

GLU.gluLookAt(gl, eyeX, eyeZ, eyeZ, 0f, 0f, 0f , 0f, 1f, 0f);是一个让你的相机看着一个特定点的函数,在这种情况下它是 (0,0,0) (我想,不记得参数是哪个方向的,但我假设最后 3 个是你的向上向量)。因此,如果您将相机移向您正在看的东西,最终它会穿过它并从另一侧向外移动,并且由于您正在使用GLU.gluLookAt它,它会转向面对它后面的物体,从而给您一种缩小的印象当你继续朝同一个方向移动时。

于 2013-02-26T07:26:01.033 回答