Three.js ThreeJS:从屏幕二维坐标转换为摄像机平面附近的世界三维坐标?R73

Three.js ThreeJS:从屏幕二维坐标转换为摄像机平面附近的世界三维坐标?R73,three.js,Three.js,我在坐标转换方面有点麻烦。 我在屏幕上有一个具有已知坐标(x,y)的对象,我想将其转换为世界坐标(x,y,z),因为它将投影到相机的近平面上 到目前为止,我可以在Z平面上做如下投影: var vector = new THREE.Vector3( mouse.x, mouse.y, 1 ); vector.unproject( camera ); 但不幸的是,我无法继续:(如果对z分量使用-1,将投影到近平面,而不是远平面: var vector = new THREE.Vector3( mo

我在坐标转换方面有点麻烦。 我在屏幕上有一个具有已知坐标(x,y)的对象,我想将其转换为世界坐标(x,y,z),因为它将投影到相机的近平面上

到目前为止,我可以在Z平面上做如下投影:

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

但不幸的是,我无法继续:(

如果对z分量使用-1,将投影到近平面,而不是远平面:

var vector = new THREE.Vector3( mouse.x, mouse.y, -1 ).unproject( camera );
假设mouse.x和mouse.y介于-1和1之间


three.js r.73

我找到了另一个答案,不知道它是否适合你

var getSceneToWorld=函数(dx,dy){
var投影仪=新的三个投影仪();
var mouse3D=新的3.Vector3(dx/window.innerWidth*2-1,-dy/window.innerHeight*2+1,0.5);
投影仪。未投影向量(鼠标3d,摄像头);
鼠标3d.sub(摄像头位置);
mouse3D.normalize();
var rayCaster=new THREE.rayCaster(camera.position,mouse3D);var scale=window.innerWidth*2;
var rayDir=new THREE.Vector3(rayCaster.ray.direction.x*比例,rayCaster.ray.direction.y*比例,rayCaster.ray.direction.z*比例);
var rayVector=new THREE.Vector3(camera.position.x+rayDir.x,camera.position.y+rayDir.y,camera.position.z+rayDir.z);
返回射线矢量;

}
谢谢!这当然非常有效。我在代码的其他部分弄乱了坐标。当然,我的鼠标在平截头体坐标范围内。请注意,这个答案不再有效,因为threejs API自2017年4月以来发生了重大变化。