2014-03-27 22 views
-1

我想渲染一個對象(說立方體)與OpenGL 1.1(我知道現在沒有意義,但我必須使用這個)。一切工作正常,直到我嘗試一些照明。壞的照明行爲(固定管道)

這裏的問題:

Screenshot

全局變量集合是:

static GLfloat light_position[] = {1.0, 1.0, 2*cZ.x , 0.0}; 
// cZ.x is the minimum z of the mesh. I know 
// this is at infinity, but don't work also with w=1.0 

在主函數:

... 
    glMatrixMode(GL_MODELVIEW);  // Select The Modelview Matrix 
    glLoadIdentity();    // Reset The Modelview Matrix 
    glEnable(GL_LIGHT0); 
    glEnable(GL_LIGHTING); 
    glShadeModel(GL_SMOOTH);  // Enable Smooth Shading 

.... 

繪製的網眼ķ

//在繪製網格ķ

 GLfloat light_ambient[] = {COLOUR[k][0], COLOUR[k][1], COLOUR[k][2], 1.0}; 
     GLfloat light_diffuse[] = {COLOUR[k][0], COLOUR[k][1], COLOUR[k][2], 1.0}; 
     glLightfv(GL_LIGHT0, GL_POSITION, light_position); 
       glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); 
     glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); 


.... 
     //This is a mesh, so will be drawn using triangles 
     glBegin(GL_TRIANGLES); 
     //Triangles will be defined by vertex indices in faces 
     for (unsigned int i = 0; i<mesh->faces.size(); i++){ 

      int index1 = mesh->faces.at(i).x; 
      int index2 = mesh->faces.at(i).y; 
      int index3 = mesh->faces.at(i).z; 
      glNormal3f(mesh->normals.at(i).x,mesh->normals.at(i).y,mesh->normals.at(i).z); 
      glVertex3f(mesh->vertices.at(index1).x, mesh->vertices.at(index1).y, mesh->vertices.at(index1).z); 
      glVertex3f(mesh->vertices.at(index2).x, mesh->vertices.at(index2).y, mesh->vertices.at(index2).z); 
      glVertex3f(mesh->vertices.at(index3).x, mesh->vertices.at(index3).y, mesh->vertices.at(index3).z); 
     } 
     glEnd(); 

.... 

而正常的計算爲:

glm::vec3 currFace = m->faces.at(faceIndex); 
    glm::vec3 vert1 = m->vertices.at(currFace.x); 
    glm::vec3 vert2 = m->vertices.at(currFace.y); 
    glm::vec3 vert3 = m->vertices.at(currFace.z); 

    glm::vec3 side1 = (vert2 - vert1); 
    glm::vec3 side2 = (vert3 - vert1); 

    glm::vec3 normal = glm::cross(side1, side2); 

    normal = glm::normalize(normal); 

我真的很努力理解什麼是錯的,你可以點我在正確的方向?

編輯:這同樣將發生在斯坦福兔子(從斯坦福回購拍攝,所以它很好地形成)

http://imgur.com/Z6225QG

+0

最有可能你的正常的計算是錯誤的 –

+0

@AbhishekBansal我包括我的正常計算。他們錯了嗎? – JTulip

+0

另外,密謀他們似乎沒事 – JTulip

回答

1

在您的法線真實的畫面看起來更比沒有陰影,一些你的對象面是透明的。

我以前在學習OpenGL時遇到類似的問題,在我的情況下我忘了啓用DEPTH_TEST。你可以這樣做只是添加此行到您的GL初始化函數功能:

glEnable(GL_DEPTH_TEST); 

試試看

+0

哦!實際上是這個!謝謝! – JTulip