2014-01-22 259 views
1

我一直在研究一個對象模型,但似乎有什麼不對。這是我所得到的,當我畫一個茶壺:OpenGL茶壺繪圖錯誤

Teapot

正如你可以看到,背景物體出現在像頂部的環前景。我一直在努力改變一切,比如剪輯平面和深度緩衝區,但我似乎無法讓模型看起來很穩固。我已啓用深度與剔除面,我正在清除深度緩衝區和顏色緩衝區。我不知道有什麼問題。

這裏是我的代碼:

void displayLighting() { 
    if (specular) 
     glLightfv(GL_LIGHT0, GL_SPECULAR, specularLight); 
    else 
     glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight); 

    glLightfv(GL_FRONT, GL_SHININESS, shininess); 

    lightPos[0] = lightDist*sinf(lightAngle); 
    lightPos[1] = lightDist; 
    lightPos[2] = lightDist*cosf(lightAngle); 
    glLightfv(GL_LIGHT0, GL_POSITION, lightPos); 
} 

void drawTeapot() { 
    float diffuseMaterial[] = { 1.f, 1.f, 1.f }; 
    glTranslatef(0.f, -0.f, -0.f); 

    glShadeModel(GL_SMOOTH); 

    glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuseMaterial); 
    glutSolidTeapot(20.0f); 
} 

void renderScene(void) { 
    glClearColor(0.f,0.f,0.f,1.f); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glLoadIdentity(); 
    gluLookAt(zDist*(sinf(yAngle)),zDist*(sinf(xAngle)),zDist*(cosf(xAngle))*(cosf(yAngle)),0,0,0,0,1,0); 

    displayLighting(); 

    drawTeapot(); 

    glutSwapBuffers(); 
} 

void changeSize(int width, int height) { 
    float ratio; 

    ratio = w * 1.0f/h; 

    glMatrixMode(GL_PROJECTION); 
    glViewport(0, 0, w, h); 
    glLoadIdentity(); 
    gluPerspective(45.0f, ratio, 100.0f, 1000.0f); 
    glMatrixMode(GL_MODELVIEW); 
} 

int main(int argc, char **argv) { 
// init GLUT and create window 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); 
    glutInitWindowPosition(0,0); 
    glutInitWindowSize(800,600); 
    glutCreateWindow("Teapot"); 

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

    glEnable(GL_DEPTH_TEST); 
    glEnable(GL_CULL_FACE); 
    glutMainLoop(); 
} 

我敢肯定這是一個簡單的修復,但我希望你們可以幫忙。

+0

乍一看這段代碼看起來沒問題。你可以添加'displayLighting()'和'drawTeapot()'的代碼嗎? – user1781290

+0

它看起來像沒有深度測試 –

+0

請看看編輯,謝謝你留意,我仍然感到困惑... –

回答

3

根據glutSolidTeapot的manpage,生成的法線方向與預期方向相反。如建議,使用glFrontFace(GL_CW)/glFrontFace(GL_CCW)臨時更改面的默認前向方向。

+0

非常感謝你!我已經在這件事上好幾個小時了!奇蹟般有效 –