光源另一边的网格看起来很奇怪

时间:2013-04-25 22:48:39

标签: graphics 3d webgl shader

我在WebGL中编程(使用OpenGL着色器)简单的模型加载器。我在片段着色器中实现了phong着色。然而,当我加载比简单的猴子/立方体更大的对象并将相机从光源中转出时,网格看起来很奇怪(别名?)。虽然它们应该被隐藏(黑色),但它们中的一些甚至会变亮。

减轻的一面是好的: Lightened side is OK

另一方面错了: Other side is wrong

我以相同的方式计算每个顶点的法线,所以法线应该没问题(当我在汽车的照亮侧转动相机时,一切正常)。

非常感谢您的提示。

2 个答案:

答案 0 :(得分:2)

这看起来像单面 vs 双面照明问题。如果你的网格只包含一个面“单层”,那么它们的法线只会指向一个方向。如果使用单面照明,那么背面,即如果光线位于法线指向的一侧,则看起来很奇怪。

有三种方法可以解决这个问题:

  • 使用双面照明
  • 将背面剔除两次绘制对象,然后翻转法线并剔除正面
  • 给出网格厚度,以便有两面(你应该启用背面剔除)

答案 1 :(得分:0)

我想我在Collada Parser中发现了一些错误,我不尊重导出的法线,但我正在计算新的法线。这会不时导致倒转法线(例如,这辆车的这种门网)。无论如何还必须实现双面渲染。

谢谢。