2011-12-27 79 views
1

我正在學習OpenGL,並且正在讀一本書來幫助我很久。我已經完成了一半的工作,並決定在我熟悉基礎知識的基礎上走自己的路。我已經開始開發一個應用程序,目的是顯示一個網格。OpenGL切斷屏幕的一部分

我已經釘了它,但是當我運行我的應用程序時,網格的一部分被切斷。我附上了一個精簡版的代碼(它有相同的結果) - 有誰知道我做錯了什麼使它切斷了屏幕的一部分?我已經做了很多修改,並且我已經完成了一些值,但我無法將這個東西排序。任何幫助或在正確的方向微調非常讚賞。

代碼:

#include <Windows.h> 
#include <GL/gl.h> 
#include <GL/glu.h> 
#include "deps\glut\glut.h" 

void display(); 

int main(int argc, char **argv) { 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); 
    glutInitWindowSize(800, 600); 
    glutCreateWindow(""); 
    glutDisplayFunc(display); 
    glClearColor(1.0, 1.0, 1.0, 1.0); 
    glColor3f(0.0, 0.0, 0.0); 

    // Init 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(-8.0, 8.0, -8.0, 8.0, -8.0, 8.0); 

    glutMainLoop(); 
    return 0; 
} 

void display() { 
    float f; 

    // Clear the screen 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    gluLookAt(1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0); 

    // This next bit of code just creates the grid 
    glColor3f(0.0f, 0.0f, 0.0f); 
    glPointSize(1.0); 
    for(f=-10.0f;f<10.0f;f++) { 
     glBegin(GL_LINES); 
      glVertex3f(f, 0.0f, -10.0f); 
      glVertex3f(f, 0.0f, 10.0f); 
     glEnd(); 
    } 
    glRotatef(90, 0.0, 1.0, 0.0); 
    for(f=-10.0f;f<10.0f;f++) { 
     glBegin(GL_LINES); 
      glVertex3f(f, 0.0f, -10.0f); 
      glVertex3f(f, 0.0f, 10.0f); 
     glEnd(); 
    } 

    // Swap the buffers 
    glutSwapBuffers(); 
} 

回答

1

由於單位立方體的對角線比邊長要長sqrt(3),所以你正在達到Z極限。所以我建議你使用-14 ... 14(= ± round(8*sqrt(3)))作爲近平面和遠平面的限制。

3

不能在單位立方體外畫。

glOrtho呼叫縮放座標,以便您可以使用範圍爲-8...8 X,Y和Z座標,但你的for循環,然後嘗試使用-10...10,這超出了範圍,將被裁剪。