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();
下面是結果:
有非常明顯的缺陷是。但是,如果我將glShadeMode
設置爲GL_FLAT
,則此缺陷將消失。但我不想用GL_FLAT
。誰能告訴我如何解決這個問題?
它幫助了我很多。非常感謝!!!! – TonyLic
這種工件意味着深度緩衝區(Z緩衝區)沒有得到很好的使用(或者,因爲genpfault被發現,設置不正確)。您可以將近/遠值調整爲更接近實際深度範圍,以優化Z緩衝區範圍。 – Dithermaster