2013-04-17 35 views
0

它應該是rect,這將需要整個窗口的寬度。我期待這一點,因爲平截頭體的寬度是-5到5,矩形的大小是10x10,並且rect位於相同的z軸位置,就像接近圓錐體的平面。結果非常小,看起來不像一個矩形,我不知道爲什麼?意外的投影

void GLWidget::initializeGL() { 

    glClearColor(1.0f, 1.0f, 1.0f, 0.0f); 
} 

void GLWidget::resizeGL(int w, int h) { 

    glViewport(0,0, w, h); 
    glMatrixMode(GL_PROJECTION); 
    double ratio = (double)w/(double)h; 
    double size = ((10.0/ratio)/2.0); 
    glFrustum(-5.0, 5.0, -size, size, 10.0, 50.0); 

} 

void GLWidget::paintGL() { 

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    glTranslatef(0.0f, 0.0f, -10.0f); 

    glColor3f(0.0f, 0.0f, 0.0f); 
    glBegin(GL_QUADS); 
    glVertex3f(5.0f, -5.0f, 0.0f); 
    glVertex3f(5.0f, 5.0f, 0.0f); 
    glVertex3f(-5.0f, 5.0f, 0.0f); 
    glVertex3f(-5.0f, -5.0f, 0.0f); 
    glEnd(); 

    glFlush(); 


} 
+0

試着寫你的程序接受鍵盤輸入,改變你傳遞給像截方法的參數,並在屏幕上顯示當前正在使用的值。然後你可以實時改變這些值,直到你知道你在做什麼錯誤:) – Patashu

回答

1

它應該是矩形,這將花費窗口的整個寬度。

那麼,在繪製矩形時,將投影轉換爲更適合任何正投影的任務。您還必須在應用平截頭體或正視圖之前將投影矩陣重置爲標識。

提示:您的resizeGL中的所有代碼都應該寫入paintGL方法。我看到你正在使用Qt,所以你可以使用widthheight getter函數方便地獲得widget的寬度和高度。此外glClearColor進入painGL還有:

void GLWidget::initializeGL() { 
} 

void GLWidget::resizeGL(int w, int h) { 


} 

void GLWidget::paintGL() 
{ 
    double const ratio = (double)width()/(double)height(); 
    double const size = ((10.0/ratio)/2.0); 

    glClearColor(1.0f, 1.0f, 1.0f, 0.0f); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glViewport(0,0, width(), height()); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glFrustum(-5.0, 5.0, -size, size, 10.0, 50.0); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    glTranslatef(0.0f, 0.0f, -10.0f); 

    draw_perspective_stuff(); 

    glViewport(0,0, width(), height()); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

    // using identity projection, this fills the viewport 
    glColor3f(0.0f, 0.0f, 0.0f); 
    glBegin(GL_QUADS); 
    glVertex3f(-1.f, -1.f, 0.0f); 
    glVertex3f(1.f, -1.f, 0.0f); 
    glVertex3f(1.f, 1.f, 0.0f); 
    glVertex3f(-1.f, 1.f, 0.0f); 
    glEnd(); 

    glFlush(); 
} 
+0

是的,這是因爲我沒有重置投影矩陣,thx – Krab