三个 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),
}
当我朝某些方向而不是其他方向看时,这会起作用。我觉得我很接近,但我的理解有差距!
非常感谢任何指示和解决方案。
谢谢。
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);
我有一个透视相机,向下看 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),
}
当我朝某些方向而不是其他方向看时,这会起作用。我觉得我很接近,但我的理解有差距!
非常感谢任何指示和解决方案。
谢谢。
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);