0

我正在使用 WebGL(使用 OpenGL 着色器)简单的模型加载器进行编程。我已经在片段着色器中实现了 phong 着色。但是,当我加载比简单的猴子/立方体更大的对象并将相机关闭光源时,网格看起来很奇怪(混叠?)。尽管它们应该被隐藏(黑色),但其中一些甚至变亮了。

减轻的一面是好的: 减轻的一面是好的

另一边是错误的: 对方错了

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

非常感谢您的提示。

4

2 回答 2

3

对我来说,这看起来像是单面双面照明问题。如果您的网格仅包含单个“层”面,则这些面将具有仅指向一个方向的法线。如果使用单面照明,那么背面,即如果光线位于法线指向的一侧,将看起来很奇怪。

有三种方法可以克服这个问题:

  • 使用两侧照明
  • 绘制对象两次并剔除背面,然后翻转法线并剔除正面
  • 给网格厚度,以便有两个边(然后你应该启用背面剔除)
于 2013-04-25T23:34:53.680 回答
0

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

谢谢你。

于 2013-04-26T12:46:09.210 回答