2012-03-29 68 views
1

由於某些原因,我不能在openGL中繪製任何過去z> 1的東西。 Z緩衝區工作正常,我暫時停留了一段時間。 我認爲問題是gluPerspective,但它仍然無法正常工作。 我可以看到0和1之間的任何東西,代碼apears剪切的三角形。 對不起,我英文很差。OpenGL剪輯Z> 1.0

#include <iostream> 
#include <GL/glut.h> 

using namespace std; 

void idle() { 
    glutPostRedisplay(); 
} 

void changeSize(int w, int h) { 

    // Prevent a divide by zero, when window is too short 
    // (you cant make a window of zero width). 
    if(h == 0) 
     h = 1; 
    float ratio = 1.0* w/h; 

    // Use the Projection Matrix 
    glMatrixMode(GL_PROJECTION); 

     // Reset Matrix 
    glLoadIdentity(); 

    // Set the viewport to be the entire window 
    glViewport(0, 0, w, h); 

    // Set the correct perspective. 
    gluPerspective(0, ratio, 0.1, 1000.0); 

    // Get Back to the Modelview 
    glMatrixMode(GL_MODELVIEW); 
} 

void renderScene(void) { 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glLoadIdentity(); 

    glBegin(GL_TRIANGLES); 
     glVertex3f(-0.5,-0.5,0.0); 
     glVertex3f(0.5,0.0,0.0); 
     glVertex3f(0.0,0.5,2.0); 
    glEnd(); 

    glutSwapBuffers(); 
} 

int main(int argc, char **argv) { 

    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); 
    glutInitWindowSize(800,600); 
    glutCreateWindow("OpenGL"); 

    glutDisplayFunc(renderScene); 
    glutReshapeFunc(changeSize); 
    glutIdleFunc(idle); 

    glEnable(GL_DEPTH_TEST); 

    glutMainLoop(); 

    return 0; 
} 

回答

4

首先,你gluPerspectivefovy值零,這是完全荒謬的。嘗試爲視野(可能是60)放置一個名義值。

其次,在固定的情況下,我認爲你的三個頂點都不應該是可見的。假設你沒有視圖矩陣(沒有顯示),前兩個頂點應該被近平面剪切。對於第三個頂點,您可能意味着它處於-2而不是2(默認眼睛沿着負z軸向下看)。所以這個頂點也在眼睛後面。

坦白說,我很驚訝你能夠看到任何東西,但看看糾正這些事情是否有幫助。嘗試使用z值爲-0.2,-0.2和-2.0繪製三角形。

+0

調用'gluPerspective'應該導致錯誤,什麼都不做?如果屬實,那麼根本沒有變換,連接到第三點的兩條線被剪切,最後顯示出一個奇怪的四邊形。 – 2012-03-29 20:23:29

+0

它活着,謝謝! – TheVTM 2012-03-29 20:23:35

+0

@Tim:OP確實看到了一些東西,因爲gluPerspective調用的0 FOV使它在不改變投影矩陣的情況下儘早返回,從而使其保持一致。因此,可見體積是框-1,-1,-1至+ 1,+ 1,+ 1,這也解釋了剪切。 – datenwolf 2012-03-29 21:15:38