我在坐标转换方面遇到了一些麻烦。 我有一个在屏幕上已知坐标(x,y)的对象,并且我想将其转换为世界坐标(x,y,z),就像它在相机近平面上投影出来的那样。
到目前为止,我可以像这样在Z平面上进行投影:
var vector = new THREE.Vector3( mouse.x, mouse.y, 1 );
vector.unproject( camera );
但是不幸的是,我无法进一步进行 :(
我在坐标转换方面遇到了一些麻烦。 我有一个在屏幕上已知坐标(x,y)的对象,并且我想将其转换为世界坐标(x,y,z),就像它在相机近平面上投影出来的那样。
到目前为止,我可以像这样在Z平面上进行投影:
var vector = new THREE.Vector3( mouse.x, mouse.y, 1 );
vector.unproject( camera );
但是不幸的是,我无法进一步进行 :(
var vector = new THREE.Vector3( mouse.x, mouse.y, -1 ).unproject( camera );
假设mouse.x和mouse.y的值在-1和1之间。
three.js版本为r.73。
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;
}