Я думаю, это нормально способ получить xyplane (если это не так, или есть лучший способ, дайте мне знать):Найти координаты нижнего правого угла холста на плоскости ху данной камеры
xyplane = new THREE.Plane().setFromCoplanarPoints(
new THREE.Vector3(0, 0, 0),
new THREE.Vector3(10, 15, 0),
new THREE.Vector3(100, -90, 0),
);
У меня есть камера, которая находится на (0, 0, 1000)
, глядя на источник. Я могу найти координаты, является точным верхней левой частью моего смотровым:
projector = new THREE.Projector();
topleft = new THREE.Vector3(-1, 1, 0);
through = projector.unprojectVector(topleft, camera);
through
тогда THREE.Vector3 {x: -31.425217496422327, y: 22.169468302342334, z: 900.0000201165681}
который совершенно на нижнем правый угле холста. Тем не менее, я хочу найти эквивалентную точку, где z = 0. Я пытаюсь сделать это с помощью луча; но я терпеть неудачу.
ray = new THREE.Ray(camera.position, through);
point = ray.intersectPlane(xyplane);
point
тогда {x: 34.91690754890442, y: -24.632742007573448, z: 0}
, который не является даже близко. Я недопонимаю что-то основное. Я буду изучать Coordinates of intersection between Ray and Plane и другие, пока я пытаюсь понять это. Может быть, кто-то может объяснить простым языком.
Вы почти там. Второй аргумент 'THREE.Ray()' должен быть вектором направления единичной длины, который указывает от камеры к вашей целевой точке. – WestLangley
Спасибо @WestLangley, ваш комментарий дал понять. –