我正在尝试在 ThreeJS 中创建地形解决方案,但在生成法线时遇到了一些麻烦。我通过使用 THREE.PlaneGeometry 类创建许多网格对象来解决这个问题。一旦创建了所有瓷砖,我将遍历每个瓷砖并设置 UV,以便每个瓷砖代表整体的一部分。我还生成了顶点 Y 位置的高度值以创建一些山丘。然后我调用几何函数
geometry.computeFaceNormals();
geometry.computeVertexNormals();
这只是为了让每个图块都有一些默认的面和顶点法线。
然后我遍历每个图块并尝试平均每个角上的法线。
问题是(我认为)法线,但我真的不知道该怎么称呼这个问题。创建时,平面角上的每个法线都指向与面相同的方向。这使得地形看起来像一个平坦的阴影对象。为了防止这种情况,我想也许我需要做的是确保每个顶点法线(每个角)具有与其直接邻居法线相同的平均法线。即每个图块的每个角与相邻平面的所有直接法线具有相同的法线。
图A
在这里,我正在可视化网格上的 4 个法线中的每一个。您可以看到在每个角落的法线是相同的(在彼此之上)
图B
编辑图 C
编辑图 D
除非所有顶点共享相同的法线,它仍然会出现所有块状 <:/
我不知道该怎么做...我认为我对需要做什么的理解不正确...?
任何帮助将不胜感激。