【问题标题】:THREE.js checking how close the camera is to a meshTHREE.js 检查相机与网格的接近程度
【发布时间】:2023-03-29 09:06:01
【问题描述】:

我在 THREE.js 中有一个摄像头指向下方的网格景观,我想与该网格保持一定距离(因此,如果地形中有山峰,摄像头会移动得更远)。

我认为光线投射将是开始解决此问题的正确方法(通过获取相交距离),但我发现的所有示例都与使用鼠标坐标有关;当我尝试将原点设置为相机位置时,方向坐标为相机位置,但 Y 轴上为 0(因此相机在空中朝下),相交结果为空。

例如,在我的渲染事件中:

t.o.ray.vector = new THREE.Vector3(t.o.camera.position.x, 0, t.o.camera.position.z );
t.o.ray.cast = new THREE.Raycaster(t.o.camera.position,t.o.ray.vector );
t.o.ray.intersect = t.o.ray.cast.intersectObject(object, true);
console.log(t.o.ray.intersect);

这会导致一个空数组,即使我正在移动相机,我似乎可以让它工作的唯一方法是使用依赖于鼠标事件的示例。

任何想法我错过了什么?

【问题讨论】:

    标签: three.js raycasting


    【解决方案1】:

    我意识到这是因为将 Y 属性设置为 0 是不够的。我曾假设矢量坐标只是帮助计算光线指向的方向,但情况似乎并非如此。即-:

    t.o.ray.vector = new THREE.Vector3(t.o.camera.position.x, -1000, t.o.camera.position.z );
    t.o.ray.vector.normalize();
    t.o.ray.cast = new THREE.Raycaster(t.o.camera.position,t.o.ray.vector );
    t.o.ray.intersect = t.o.ray.cast.intersectObject(t.Terrain.terrain, true);
    

    产生预期的结果。

    【讨论】:

      【解决方案2】:

      这种方法怎么样:

      console.log( t.o.camera.position.distanceTo(t.o.vector.position) );
      

      【讨论】:

      • 您好,感谢您的回复。这个函数只会检索到辅助向量的距离;在我的设置中,我需要查看相机与地形相交的位置(随着地形高度的变化)并获得该点,这就是需要光线投射路线的原因。不过干杯!
      猜你喜欢
      • 2021-09-29
      • 2017-06-20
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      相关资源
      最近更新 更多