THREE.js检查摄像机与网格的距离

时间:2014-06-04 11:07:17

标签: three.js raycasting

我在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);

这会产生一个空数组,即使我正在移动相机,我唯一可以通过使用依赖于鼠标事件的示例来实现这一点。

我缺少什么想法?

2 个答案:

答案 0 :(得分:1)

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

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);

产生预期结果。

答案 1 :(得分:0)

这种方法怎么样:

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