2014-03-27 20 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