【问题标题】:OpenGL lighting questionOpenGL光照问题
【发布时间】:2010-11-08 05:07:14
【问题描述】:

我的所有 OpenGL 光照都正常工作,包括法线、材质等...

我的问题是当光线在面部后面时 OpenGL 渲染面部的方式。如果灯光在一张脸后面,它应该渲染一个黑色的脸,但它会渲染脸的背面的样子。我该如何阻止这种奇怪的行为。我发现很难描述正在发生的事情,但希望你知道如何解决这个问题。

提前致谢。

编辑:好的,假设我有一个扁平的方形多边形来代表一堵墙。无论我打开哪一侧的灯,即使只有一侧应该被点亮而另一侧应该是黑色的(或者由于其他/环境光而非常暗),两者都会被点亮。看到问题了吗?它就像纸一样,因为光线刚刚穿过并出现在脸部的错误一侧。

【问题讨论】:

  • 你的顶点有法线吗?
  • 是的,法线没有问题。
  • 您还没有将GL_LIGHT_MODEL_AMBIENT 设置为明亮?
  • 好吧,就是灯光的氛围……

标签: c++ opengl


【解决方案1】:

出现您看到的问题是因为多边形的两侧在照明计算中使用相同的法线。

解决方法是设置:

float modelTwoside[] = {GL_TRUE};
glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, modelTwoside);

这会导致 OpenGL 在渲染背面之前反转法线。 OpenGL 也会使用背面材质。

【讨论】:

  • 这并不能解决问题。
  • 那我不知道是什么问题,也许你可以做一个最小的测试用例来演示问题并展示给我们。
猜你喜欢
  • 2012-01-06
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 2015-01-31
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
相关资源
最近更新 更多