1. 首页
  2. three.js

three.js自定义地形交叉问题

three.jsn在我的游戏中,我使用了一种自定义地形(由heightmap生成)相交方法,这种方法性能非常好。与地形几何体相交的速度非常慢,因此我将其作为一种替代方法进行构建。n基本上,我要做的是确定对象所在的地形“面索引”,从地形几何体中获取相关顶点,并构建一个THREE.Plane对象,该对象通过参考的共面点设置并与之相交。n在大多数情况下,该方法非常有效,但在更极端的斜坡上,它会像下面演示的那样崩溃:nhttps://jsfiddle.net/titansoftime/bh9d5g6t/23n这是两个游戏内屏幕,显示了这种效果。斜坡上的三角形图案向我表明我可能犯了错误。只有一半的“脸”在工作。n我做错什么了吗?n我一直在寻找基于X旋转角度的斜坡地形滑动功能。如果能举个简单的例子就好了。非常感谢,祝你复活节快乐!n为了一个简单(可能)的解决方案,我对你的小提琴进行了一些重构:https://jsfiddle.net/683wL4qe/31n这个想法是计算网格位置到平面的距离,然后从ball.position的y分量中减去该值。但在执行此操作之前,将距离乘以小于1的值(例如*0.2),以便平滑过渡。n注意:开始时,球从*(0, 0, 0)移动到平面上。如果在将网格添加到场景时直接指定有效的开始位置,则可以避免这种情况。n我不确定我是否理解intersectTerrain()中的光线投射代码,因此我仅通过Plane.distanceToPoint()计算到平面的距离,这应该是一个很好的近似值。它也比光线投射快。这种方法不是一个完美的解决方案,但对于某些用例来说可能已经足够了。n非常好!完美的平滑和更高的性能!n我肯定会使用它来处理一些用例。n不幸的是,对于我的草地定位,我真的需要这样的精度(这太糟糕了,因为加载时间比你的方法好得多)。n三角形模式线索检查出来,最终揭示了我犯下的极其明显的错误。我只是检查了一半的脸,完全忽略了另一个三角形可能(而且很可能)有一个非常不同的方向这一事实。现在,我确保用于设置相交平面的索引来自对象实际所在的三角形。nhttps://jsfiddle.net/titansoftime/qw13oe8r/23n我将再次尝试实施您的解决方案,但这次也是三角形检查。n非常感谢您帮助我>n@titansoftime你能添加一个由按键控制的相机的小例子吗?如果坡度太陡,它可以从斜坡上滑下来?n如果您尝试制作小提琴,我将非常乐意查看。n好的,酷!我会的n Custom Terrain Intersection Questionn

three.js自定义地形交叉问题 为WP2原创文章,链接:https://www.wp2.cn/three-js/three-js%e8%87%aa%e5%ae%9a%e4%b9%89%e5%9c%b0%e5%bd%a2%e4%ba%a4%e5%8f%89%e9%97%ae%e9%a2%98/