三个JS - 直接在相机前获取地面位置

时间:2018-04-25 10:36:48

标签: 3d three.js rotation trigonometry

我有一个透视相机,俯视Z轴。我想在相机前面(Y轴)的给定距离(比方说100)找到地板的X,Z位置。

相机旋转顺序为'YXZ',因此Y描述偏航。

camera = new THREE.PerspectiveCamera(45, window.app.width / window.app.height, 1, 10000);
camera.rotation.order = "YXZ";
camera.position.z = 0;
camera.position.y = 50;

我正试图直接在摄像机所在的位置前面计算区域的XZ:

const inFrontOfCamera = {
    x: camera.position.x + (Math.cos(camera.rotation.y) * 100),
    z: camera.position.z + (Math.sin(camera.rotation.y) * 100),
}

当我在某些方向看时,这是有效的,而不是其他方向。我觉得我非常接近,但我的理解有差距!

非常感谢任何指针和解决方案。

感谢。

2 个答案:

答案 0 :(得分:1)

使用RaycasterRay

var raycaster = new Raycaster();
raycaster.setFromCamera( new Vector2(), camera );
var inFrontOfCamera = new Vector3();
raycaster.ray.at( 100, inFrontOfCamera );

如果你在地平面上寻找一个点:

var ground = new Plane() //defaults to horizontal plane at y=0
raycaster.ray.at( raycaster.ray.distanceToPlane( ground ), inFrontOfCamera );

答案 1 :(得分:0)

我遇到了类似的问题,我想拿起地板下的物体,它位于我的相机下面,而我的相机在看其他东西。

请参见以下架构:

enter image description here

要检索该对象,我只需为指向地面(y轴)的方向(0,-1,0)定义一个矢量,然后使用光线投射器,将相机的位置设置如下:

var vect = new THREE.Vector3(0, -1, 0);    
raycaster.set(camera.position, vect);