我正在使用 WebGL(使用 OpenGL 着色器)简单的模型加载器进行编程。我已经在片段着色器中实现了 phong 着色。但是,当我加载比简单的猴子/立方体更大的对象并将相机关闭光源时,网格看起来很奇怪(混叠?)。尽管它们应该被隐藏(黑色),但其中一些甚至变亮了。
减轻的一面是好的:
另一边是错误的:
我以相同的方式计算每个顶点的法线,所以法线应该没问题(当我在汽车的轻质侧转动相机时,一切正常)。
非常感谢您的提示。
对我来说,这看起来像是单面与双面照明问题。如果您的网格仅包含单个“层”面,则这些面将具有仅指向一个方向的法线。如果使用单面照明,那么背面,即如果光线位于法线指向的一侧,将看起来很奇怪。
有三种方法可以克服这个问题:
我想我在我的 Collada Parser 中发现了错误,我不尊重导出的法线,但我正在计算新的法线。这会不时导致法线倒置(例如这辆车的门网)。无论如何,也必须实现双面渲染。
谢谢你。