澄清glFrustum,为什么我不能看到图像

澄清glFrustum,为什么我不能看到图像

问题描述:

目前,我有我的glFrustum设置为澄清glFrustum,为什么我不能看到图像

glFrustum(0, 100.0, 0, 100.0, -50, 50); 

而且我的形象是一个长方体,尺寸为: 为什么我不能看到图像,当形状的尺寸小于观看盒?

//top 
    glBegin(GL_POLYGON); 
     glVertex3f(25, 60, 25); 
     glVertex3f(75, 60, 25); 
     glVertex3f(75, 60, -25); 
     glVertex3f(25, 60, -25); 
    glEnd(); 

    //bottom 
    glBegin(GL_POLYGON); 
     glVertex3f(25, 55, 25); 
     glVertex3f(75, 55, 25); 
     glVertex3f(75, 55, -25); 
     glVertex3f(25, 55, -25); 
    glEnd(); 

    //front 
    glBegin(GL_POLYGON); 
     glVertex3f(25, 55, 25); 
     glVertex3f(75, 55, 25); 
     glVertex3f(75, 60, 25); 
     glVertex3f(25, 60, 25); 
    glEnd(); 

    //back 
    glBegin(GL_POLYGON); 
     glVertex3f(25, 60, -25); 
     glVertex3f(75, 60, -25); 
     glVertex3f(75, 55, -25); 
     glVertex3f(25, 55, -25); 
    glEnd(); 
+1

雷托科拉迪已经给了你一个很好的答案。如果你有问题想象如何截锥体的工作,你可能想看看这个:https://github.com/datenwolf/codesamples/blob/master/samples/OpenGL/frustum/frustum.c – datenwolf 2014-09-30 07:26:36

这个glFrustum()调用的参数无效:

glFrustum(0, 100.0, 0, 100.0, -50, 50); 

nearVal,这是第五个参数,必须是正数。从man page

nearVal,farVal:指定到近远深度剪切平面的距离。两个距离都必须是正值。

将这些图片视为距相机的距离,指向它的方向。值为-50.0会将近剪裁平面置于相机后面,这是无效的。

为了得到这个工作,同时保持相同的范围内,你可以将其更改为例如:

glFrustum(0.0, 100.0, 0.0, 100.0, 50.0, 150.0); 

无需任何额外的转换,从原点向下的负z轴相机百分点。由于我们将近距离和远距离与原始代码相比偏移了100.0,因此您需要相应地移动对象,这相当于在z方向上平移-100.0。要做到这一点,你可以修改你的坐标顶点,或应用转化为模型视图转换的一部分:

glPushMatrix(); 
glTranslatef(0.0f, 0.0f, -100.0f); 
// draw calls 
glPopMatrix(); 

另外请注意,您的通话glFrustum()的前4个参数是有点不合常规。它们指定了一个非对称的平截头体。结果将看起来像相机放置在您的窗口的角落上方。虽然这是完全合法的,但它可能看起来很奇怪。有一个对称的平截头体更常见,这意味着左/右和上/下每个都有相同的绝对值,符号相反。例如:

glFrustum(-50.0, 50.0, -50.0, 50.0, 50.0, 150.0); 

要与此匹配,您需要将几何图形的x/y坐标放置在原点周围。