我想用鼠标沿平行于投影平面的平面移动物体。这意味着在移动过程中,任何拾取物体和相机投影平面(不是相机位置)之间的距离必须保持不变。一个类似的问题已被问到:Mouse/Canvas X, Y to Three.js World X, Y, Z,但不像那里,我需要一个解决方案,适用于任意摄像机角度和相机/物体位置,不仅适用于z = 0的平面。它也必须用于正射投影。现在,我创建了一个小提琴在three.js中移动平行于投影平面的物体
在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())
);
跟随鼠标的位置,但到摄像机位置的距离圆是恒定的,因此在实际执行一个球形运动。当切换到直接摄像机(单击)时,它也不像预期的那样跟随鼠标位置。