2013-04-25 39 views
0

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

减轻一边是OK: Lightened side is OK

另一边则是错误的: Other side is wrong

我计算法线的每个顶点同样的方式,所以法线应该是OK(当我打开相机对汽车的轻量化侧,一切顺利)。

非常感谢您的提示。

回答

2

这看起来像一个单面 vs 双面照明问题给我。如果你的网格只包含一个单独的“图层”面,那么这些将具有仅指向一个方向的法线。如果使用单面照明,那么背面,即如果光在正常指向的一侧,看起来会很奇怪。

有三种方式来克服这一:

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

+1:首先让我感到震惊的是“这是单面照明”。 – 2013-04-26 03:05:57

+0

感谢响应,我增加背面正常反转到我的片段着色器是这样的: '如果(gl_FrontFacing == FALSE)正常正常= * VEC3(-1.0,-1.0,-1.0);' 和它(这辆车的内部看起来更好),但黑色的网格/多边形仍然是黑色的,并且“锯齿状的虚线”仍然可见。是否可以轻松实现(或仅启用)OpenGL ES 2.0中的别名?它可能有帮助。 – lukyer 2013-04-26 11:49:21

0

我想我发现在我的Collada解析器中的错误,我不尊重导出的法线,但我calc使用新的。这导致不时发生倒置法线(例如,这辆车的这个门网)。无论如何,双面渲染也必须实现。

谢谢。