使用MeshPhongMaterial displacementMap后,Three.js错误的法线和面

时间:2017-11-28 12:14:45

标签: three.js terrain vertices heightmap

我使用MeshPhongMaterial中的displacementMap属性和一个加载的灰度纹理。挤出/位移工作正常,但受影响的mesh.geometry的法线和面不会更新。

我用过

geometry.computeFaceNormals() 

geometry.computeVertexNormals(). 

我希望通过向下光线投射并接收交叉面偏移操作的相交面/顶点的高度(y)值,在地形上制作一个可行走的角色。

使用VertexNormalsHelper(红线)和FaceNormalsHelper(绿线)封装当前移位几何体的img。

有人知道如何正确更新它们吗?

enter image description here

1 个答案:

答案 0 :(得分:2)

置换贴图仅应用于顶点着色器,这意味着基本几何体实际上没有被改变,基本几何体是助手所显示的。

您必须迭代并更改几何缓冲区本身的实际顶点才能更改它们。

同样适用于使用基本顶点/面的raycaster交叉测试。

  

我想通过光线投射和接收高度(y)在地形上制作一个可步行的角色

避免更改几何图形的可能解决方法是首先获取角色在平面上的UV位置,然后将其映射到置换贴图上的2D位置。最后选择该点的值,缩放并将其用于相对于网格的高度。

这甚至可能比使用光线投射更有效,但您可能必须对不在顶点上的位置进行插值。