在透视投影时:
glMatrixMode(GL_PROJECTION);//通知OPENGL要进行透视投影了.
glLoadIdentity();
glFrustum(-1.0,1.0,-1.0,1.0,-1.0,7.0);//建立视景区
............画三维图形......
    上面的做法导致投影失败.
    诡异的是:把glFrustum()的第五个参数,即远剪切面置为3.0,再用glTranslatef(0.0,0.0,-4.0);竟然投影成功.为啥啊老大? 3.0+(-4.0)不是正好-1.0吗?

解决方案 »

  1.   

    glFrustum()是投影变换;
    glTranslatef()是坐标变换;
    glTranslatef()决定物体的位置,glFrustum()功能类似与摄像机的镜头,不管物体的位置在哪里,他总是以相同的规律将物体投影到胶片上(也就是显示屏),只不过不在他的图像拾取范围内的物体不可见而已。
      

  2.   

    照楼上这么说,要想投影成功,还非得glTranslate不可啰?
      

  3.   

    看看glFrustum的帮助,后两个参数必须为正;
    能否看见,还要跟你模型的坐标值有关,即你的模型只有在视锥体里才可见。
      

  4.   

    视锥体真的是一个锥体吧?
    以视点为顶点的四棱锥?
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity(); glFrustum(-1.0,1.0,-1.0,1.0,1.0,7.0);//近--远 切面为1--7.
    gluLookAt(0,0,-2.0,0,0,2.0,0,0,2.0);   //视点在Z=-2,物体在Z=2.0.
     你说这样能看得到吗,如果我没做其他坐标变换,而且所绘物体体积又很小的话. 脑子搞混乱了.