Hay varias preguntas de pila excelente (1, 2) sobre desproyecto en Three.js, que es cómo convertir (x, y) las coordenadas del mouse en el navegador al (x, y, z) las coordenadas en el espacio del lienzo Three.js. La mayoría de ellos siguen este patrón:Conversión de Coordenadas mundiales a Coordenadas de pantalla en Three.js utilizando Proyección
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);
he estado tratando de hacer lo contrario - en lugar de pasar de "pantalla para el mundo" espacio, para pasar de "mundo a la pantalla" espacio. Si conozco la posición del objeto en Three.js, ¿cómo determino su posición en la pantalla?
No parece haber ninguna solución publicada para este problema. Another question about this just showed up on Stack, pero el autor afirma haber resuelto el problema con una función que no funciona para mí. Su solución no usa un Rayo proyectado, y estoy bastante seguro de que, dado que 2D a 3D usa unprojectVector(), que la solución 3D a 2D requerirá projectVector().
También hay this issue abierto en Github.
Cualquier ayuda es apreciada.
Muchas gracias por el patrón de traducción "pantalla-mundo". Fue un dolor durante muchas horas ... – LePhleg