three.js鼠标在相机的共面距离处绘制

时间:2016-02-09 23:01:56

标签: three.js drawing line mouse controls

我正在创建一个开源的3d“涂鸦者”。它在自由手绘图和前面线段交叉处绘制之间切换(由面向摄像机/轨道控制投影的平面表示)。

如果摄像机位于世界位置5,0,5并且平面位于2,0,2,我如何告诉鼠标在绘图(鼠标向下)的任何点,它应该沿着飞机绘制自己?我没有正确地进行偏移处理,并希望得到一些指导。谢谢!

1 个答案:

答案 0 :(得分:0)

啊!经过这么多试验和错误后终于来了!我回答我自己的问题b / c我认为它可以帮助别人......

//subtract the unprojected mouse vector from the camera position (world coords),
//normalize it and then multiply it by the square root of the x and y diffs (distanceTo) the world coords of the plane 
//and thusly draw coplanarly(sp?) to the camera view plane

var projectedMouse = new THREE.Vector3();
projectedMouse.set(mouse.x, mouse.y, 0.5 );             
var unprojectedMouse = projectedMouse.clone().unproject( camera );                      

var pos= camera.position.clone(); 
var camPos = camera.position.clone(); 

var dir = unprojectedMouse.sub( camPos ).normalize();
pos.add(dir.multiplyScalar(currentIntersectedPoint.distanceTo(camPos)));

以上与Wes Langleys&#39;之间的差异。在下面Mouse / Canvas X, Y to Three.js World X, Y, Z的另一篇文章中提出的建议是计算z之间的距离对我来说没有用,但是distanceTo()方法做了.... distanceTo评估平方根相应的x和y平方差异,你会认为它实际上是z,但在我的实例中显然不对,而且我不确切地知道它背后的数学...随意添加正确的解释... < / p>

var dir = unprojectedMouse.sub( this.camera.position ).normalize();
var distance = (targetZ - camera.position.z) / dir.z;

var pos = this.camera.position.clone().add( dir.multiplyScalar( distance ) );