2016-01-07 4 views
1

J'ai eu un petit problème avec la conversion de coordonnées. J'ai un objet sur l'écran avec des coordonnées connues (x, y) et je veux le convertir en coordonnées du monde (x, y, z) comme il serait projeté sur le plan proche de la caméra.ThreeJS: Conversion de coordonnées 2D de l'écran en coordonnées 3D du monde sur le canera près du plan? R73

, je Jusqu'à présent, peut faire une projection sur plan Z comme ceci:

var vector = new THREE.Vector3(mouse.x, mouse.y, 1); 
vector.unproject(camera); 

Mais malheureusement je ne peux pas aller plus loin :(

Répondre

3

Si vous utilisez -1 pour le composant z, vous aurez être projetée sur le plan proche, à la place du plan loin:

var vector = new THREE.Vector3(mouse.x, mouse.y, -1).unproject(camera); 

en supposant mouse.x et mouse.y sont comprises entre -1 et 1.

trois.js r.73

+0

Merci! Cela a fonctionné parfaitement, bien sûr. Je me suis mis en désordre avec mes coordonnées dans une autre partie du code. Bien sûr, ma souris est dans la plage de coordonnées tronconique. –

1

J'ai trouvé une autre réponse, je ne sais pas si c'est bon pour vous.

var getSceneToWorld = function(dx, dy) { 
 
var projector = new THREE.Projector(); 
 
var mouse3D = new THREE.Vector3(dx/window.innerWidth * 2 - 1, -dy/window.innerHeight * 2 + 1, 0.5); 
 
projector.unprojectVector(mouse3D, camera); 
 
mouse3D.sub(camera.position); 
 
mouse3D.normalize(); 
 
var rayCaster = new THREE.Raycaster(camera.position, mouse3D); var scale = window.innerWidth * 2; 
 
var rayDir = new THREE.Vector3(rayCaster.ray.direction.x * scale, rayCaster.ray.direction.y * scale, rayCaster.ray.direction.z * scale); 
 
var rayVector = new THREE.Vector3(camera.position.x + rayDir.x, camera.position.y + rayDir.y, camera.position.z + rayDir.z); 
 
return rayVector; 
 
}

matériel de référence

: http://barkofthebyte.azurewebsites.net/post/2014/05/05/three-js-projecting-mouse-clicks-to-a-3d-scene-how-to-do-it-and-how-it-works