Есть несколько замечательных вопросов о стеке (1, 2) о непроектировании в Three.js, то есть как преобразовать (x, y) координаты мыши в браузере в координаты (x, y, z) в пространстве холста Three.js. В основном они следуют этой схеме:
var elem = renderer.domElement,
boundingRect = elem.getBoundingClientRect(),
x = (event.clientX - boundingRect.left) * (elem.width / boundingRect.width),
y = (event.clientY - boundingRect.top) * (elem.height / boundingRect.height);
var vector = new THREE.Vector3(
( x / WIDTH ) * 2 - 1,
- ( y / HEIGHT ) * 2 + 1,
0.5
);
projector.unprojectVector( vector, camera );
var ray = new THREE.Ray( camera.position, vector.subSelf( camera.position ).normalize() );
var intersects = ray.intersectObjects( scene.children );
Я пытаюсь сделать обратное - вместо перехода от "экрана к миру", чтобы перейти от "мира к экрану". Если я знаю положение объекта в Three.js, как определить его положение на экране?
Кажется, что не было опубликованного решения этой проблемы. Еще один вопрос об этом только что появился в Stack, но автор утверждает, что решил проблему с функцией, которая не работает для меня. Их решение не использует прогнозируемый Ray, и я уверен, что, поскольку 2D-3D использует unprojectVector(), для решения 3D-2D потребуется projectVector().
Существует также эта проблема открыта в Github.
Любая помощь приветствуется.