Il existe plusieurs excellentes questions de pile (1, 2) sur unprojecting dans Three.js, c'est comment convertir (x, y) les coordonnées de la souris dans le navigateur pour le (x, y, z) coordonnées dans l'espace de toile Three.js. La plupart du temps, ils suivent ce modèle:Convertir les coordonnées du monde en coordonnées écran dans Three.js en utilisant la projection
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);
je tente de faire l'inverse - au lieu d'aller de « écran monde » espace, d'aller de l'espace « monde à l'écran ». Si je connais la position de l'objet dans Three.js, comment puis-je déterminer sa position sur l'écran?
Il ne semble pas y avoir de solution publiée à ce problème. Another question about this just showed up on Stack, mais l'auteur prétend avoir résolu le problème avec une fonction qui ne fonctionne pas pour moi. Leur solution n'utilise pas de Ray projeté, et je suis à peu près sûr que 2D à 3D utilise unprojectVector(), que la solution 3D vers 2D nécessitera projectVector(). Il y a aussi this issue ouvert sur Github.
Toute aide est appréciée.
Merci beaucoup pour le modèle de traduction "écran vers monde". Ce fut une douleur pendant de nombreuses heures .. – LePhleg