【问题标题】:OpenGL lighting has bright surfacesOpenGL 光照具有明亮的表面
【发布时间】:2014-04-08 03:37:20
【问题描述】:

如果你看这张照片:

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

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

//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);

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

【问题讨论】:

  • 为什么lightpos的最后一个组件是4?对于定向光,它应该为 0,对于点光源,它应该为 1。此外,使用仅计算顶点照明的固定管道,通常不会获得具有大表面(相对于与灯光的距离)的非常好的照明。您可以尝试将几何体拆分为较小的三角形。

标签: c opengl textures lighting normals


【解决方案1】:

您的法线似乎没有按应有的方式计算。请注意不同对象的相同方向侧的照明方式是如何不同的。

我猜:

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

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

【讨论】:

  • 感谢您的回复。我稍微弄乱了法线,让它们稍微好一点。但是作业到期了,所以我必须按原样提交。我会在第二个任务中更多地研究它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-31
  • 2020-07-24
  • 1970-01-01
  • 2012-01-06
相关资源
最近更新 更多