用gluPerspective(60.0, aspect, 1.0, 20.0);这个函数定义了一个视景体,我的理解是在z轴1.0到20.0之间的一个对称视景体,象下面的代码能在屏幕上显示么?
glTranslatef(0.0, 0.0, -2.0);  /*  viewing transformation  */        //glScalef (1.0, 2.0, 1.0);   /*  modeling transformation */        // auxWireCube(1.0);   /*  draw the cube   */
//glClipPlane (GL_CLIP_PLANE0, eqn);     //glEnable (GL_CLIP_PLANE0);      glRotatef(60.0, 1.0, 0.0, 0.0);     auxWireSphere(1.0);
我的理解是:glTranslatef(0.0, 0.0, -2.0);  /*  viewing transformation  */这个函数把视点沿z轴移动了2个单位,
已经移动到视景体外面了,是不能显示的,但实际上是可以显示的,为什么?
还有在gluPerspective(60.0, aspect, 1.0, 20.0)这个函数中,为什么角度越大,离物体就越远-物体越小,角度小,
离物体越近-物体越大。

解决方案 »

  1.   

    我的理解是:glTranslatef(0.0, 0.0, -2.0);  /*  viewing transformation  */这个函数把视点沿z轴移动了2个单位,
    =======================
    你理解移动两个单位是正确的,但是它不是向屏幕外边移动两个单位,而是向屏幕里边移动了两个单位。就是说从0点移动到了-2.0点。
    而perspertive的参数里边的1 和20是从视点到裁减面的距离。可以详细看看MSDN关于该函数的参数解释
      

  2.   

    glTranslatef(0.0, 0.0, -2.0);
    可以理解为视点在Z轴的-2处,物体在0处,所以物体还在视景体内;因为角度越大,视场越大,相对的物体就变小了