Three JS - получить наземное положение прямо перед камерой - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть перспективная камера, смотрящая вниз по оси Z.Я хочу найти положение X, Z пола на заданном расстоянии (скажем, 100) перед камерой (по оси Y).

Порядок поворота камеры - «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 голосов
/ 05 ноября 2018

У меня была похожая проблема, когда я хотел получить объект пола , который находился под моей камерой, и моя камера смотрела что-то еще.

См. Схему ниже:

enter image description here

Чтобы извлечь объект, я просто определил вектор для направления (0, -1, 0), указывающего на землю (ось Y)и я использовал raycaster, используя положение камеры следующим образом:

var vect = new THREE.Vector3(0, -1, 0);    
raycaster.set(camera.position, vect);
0 голосов
/ 25 апреля 2018

Использование Raycaster и 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 );
...