OpenGL照明具有明亮的表面

时间:2014-04-08 03:37:21

标签: c opengl textures lighting normals

如果你看这张照片:

enter image description here

您可以看到左右墙壁比其他墙壁更亮,还有椅子的面。 我想知道,这是法线问题吗?或者它可能只是照亮这些表面的光的位置?

在我的主要方法中,我只是这样做:

//enable lighting
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);

//setup lighting
float lightColor [] = {1.0f, 0.8f, 0.8f,1.0f};

glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, lightColor);
GLfloat lightpos[] = {2,2,4,4};
glLightfv(GL_LIGHT0,GL_POSITION, lightpos);

如果您需要查看法线,我可以上传,但我不确定它们是否有问题。

1 个答案:

答案 0 :(得分:1)

看起来你的法线不是应该计算的。注意不同对象的相同方向侧是如何以不同方式点亮的。

我猜是这样的:

  • 在转换对象时,你没有正确地改变法线;
  • 您的法线未标准化为单位长度(您的代码中是否有glEnable(GL_NORMALIZE)?)
  • 法线计算在某些其他方面是错误的(例如,在将值发送到渲染之前对值进行舍入)。

如果没有看到您的实际代码,很难提出更多可能的原因。