我想用鼠标沿着与投影平面平行的平面移动对象。这意味着在移动过程中,任何拾取的对象与相机投影平面(不是相机位置)之间的距离必须保持不变。有人问了一个类似的问题:Mouse / Canvas X, Y to Three.js World X, Y, Z,但与那里不同的是,我需要一个解决方案,不仅适用于 z=0 的平面,还适用于任意相机角度和相机/物体位置. 它还必须适用于正交投影。现在我创造了一个小提琴
mousemove 事件处理程序中的代码:
var v = new THREE.Vector3(
(event.clientX/window.innerWidth)*2-1,
-(event.clientY/window.innerHeight)*2+1,
1
);
projector.unprojectVector(v,camera);
var dist = circle.position.sub(camera.position,circle.position),
pos = camera.position.clone();
pos = pos.add(pos,
v.sub(v,camera.position).normalize().multiplyScalar(dist.length())
);
圆圈跟随鼠标位置,但它与相机位置的距离是恒定的,因此它实际上是在执行球面运动。当切换到正交相机(点击)时,它也不会像预期的那样跟随鼠标位置。