2014-09-30 51 views
0

目前,我有我的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

回答

5

這個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座標放置在原點周圍。

相關問題