Реализация ScreenToWorldPoint ThreeJS

#three.js

#three.js

Вопрос:

Я пытаюсь реализовать ScreenToWorldPoint из Unity3D в ThreeJS. По сути, он преобразует a screen point в a world point на заданном расстоянии.

https://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html

В Unity задана перспективная камера с этими настройками.

 //fov,ratio,near,far
const camera = new THREE.PerspectiveCamera(60, 411 / 731, 0.3, 1000)
 

И эти параметры

 Camera.main.ScreenToWorldPoint(new Vector3(0, 0, -16))
 

В Unity3D я получаю этот вектор, который ожидается (5.2, 9.2, -32.0)

Но в моей реализации мне не удается получить тот же вектор. Это моя реализация.

 function screenToWorldPoint(screenSpaceCoord, target = new THREE.Vector3()) {

  const ndc = new THREE.Vector2();
  ndc.x = (2 * screenSpaceCoord.x) / 411 - 1;
  ndc.y = 1 - (2 * screenSpaceCoord.y) / 731;

  const raycaster = new THREE.Raycaster();
  raycaster.setFromCamera(ndc, camera);

  return raycaster.ray.at(screenSpaceCoord.z, new THREE.Vector3());
}
 

Комментарии:

1. Какое положение и поворот вашей камеры?

2. Вы также хотите использовать Vector3.unproject() .