2014-01-29 38 views
2

這是我的渲染代碼。我使用Qt和OpenGL。爲什麼glutSolidTorus會產生一些缺陷

static bool firsttime = true; 
if(firsttime) 
{ 
    glClearColor(0, 0, 0, 0); 
    glCullFace(GL_BACK); 
    glFrontFace(GL_CCW); 
    glEnable(GL_CULL_FACE); 
    glEnable(GL_DEPTH_TEST); 
    glShadeModel(GL_SMOOTH); 
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, fNoLight); 
    glLightfv(GL_LIGHT0, GL_AMBIENT, fLowLight); 
    glLightfv(GL_LIGHT0, GL_DIFFUSE, fBrightLight); 
    glLightfv(GL_LIGHT0, GL_SPECULAR, fBrightLight); 
    glEnable(GL_LIGHTING); 
    glEnable(GL_LIGHT0); 

    glEnable(GL_COLOR_MATERIAL); 
    glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); 
    glMateriali(GL_FRONT, GL_SHININESS, 128); 
} 

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluPerspective(60, 1, 4000, 1); 

gluLookAt(fLightPos[0] , fLightPos[1] , fLightPos[2] , 0.0f , 0.0f , 0.0f , 0.0f , 1.0f , 0.0f); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

glLightfv(GL_LIGHT0, GL_POSITION, fLightPos); 
glColor3f(1,1,0); 
glutSolidTorus(5, 15, 8, 128); 
glFlush(); 

下面是結果: Torus

有非常明顯的缺陷是。但是,如果我將glShadeMode設置爲GL_FLAT,則此缺陷將消失。但我不想用GL_FLAT。誰能告訴我如何解決這個問題?

回答

2
gluPerspective(60, 1, 4000, 1); 
          ^zFar 
         ^^^^ zNear 

zNear必須小於zFar

也許你的意思是這樣的:

gluPerspective(60, 1, 1, 4000); 
+0

它幫助了我很多。非常感謝!!!! – TonyLic

+0

這種工件意味着深度緩衝區(Z緩衝區)沒有得到很好的使用(或者,因爲genpfault被發現,設置不正確)。您可以將近/遠值調整爲更接近實際深度範圍,以優化Z緩衝區範圍。 – Dithermaster

相關問題