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

Three JS — Get ground position directly in front of Camera

我有一个透视相机,向下看 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),
}

当我朝某些方向而不是其他方向看时,这会起作用。我觉得我很接近,但我的理解有差距!

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

谢谢。

使用Raycaster and Ray.

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

我遇到了类似的问题,我想获取相机下方的 floor 对象,而我的相机正在观看其他东西。

请参阅以下架构:

为了检索对象,我简单地为方向 (0, -1, 0) 定义了一个指向地面(y 轴)的向量,并且我使用了一个使用相机位置的光线投射器,如下所示:

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