点光源照明在我的模型中有三个奇怪的文物

时间:2013-08-24 23:13:16

标签: three.js webgl vertex lighting

考虑这个简单的房子3D模型。它有一个简单的Cube展开,应用了一些平铺纹理。

enter image description here

当我在它前面添加一个点光源时,房子看起来很正常,但是周围的地面(它是大地形网格的一部分)没有亮起。

enter image description here

在房屋网格内部,照明应用有趣,以某种方式与顶点相关,而不是正确地计算和添加颜色。注意照明是如何均匀分布的,但实际上你可以在那里看到一个多边形:

enter image description here enter image description here

我认为这就是为什么巨大的地形网格忽略了光线的原因,因为多边形非常庞大并且只有几个顶点。看来光线需要一个顶点才能显示出来。

以下是没有光线的巨大地形网格的一部分: enter image description here

我添加一个灯: enter image description here

注意灯光放置不是直接在顶点旁边: enter image description here

当我将灯光靠近顶点时,效果突然变得非常强烈 enter image description here

当我将灯放在中间时几乎没有效果 enter image description here

无论模型的大小和顶点的数量如何,我怎样才能使我的模型在任何地方都有光照?

2 个答案:

答案 0 :(得分:2)

您必须停止按顶点照明并开始执行每片段照明。您需要一个片段着色器,它获取点的位置和法线,以及光的位置/方向,并执行各种光照计算。

答案 1 :(得分:2)

最终感谢@WestLangley

之前我正在使用MeshLambertMaterial,现在我切换到PhongMaterial并将material.perPixel设置为true。

如果要动态添加灯光,也不要忘记将material.needsUpdate设置为true! (和我一样)