以下代码适用于我,使用ThreeJS ArrowHelper将当前鼠标位置绘制为画布上的箭头。我对鼠标方向的处理在这里并不那么重要。
function mouseDir () {
var bbox = canvas.getBoundingClientRect();
var mouse3D = new THREE.Vector3 (
((currentMouseX - bbox.left) / bbox.width) * 2 - 1,
-((currnetMouseY - bbox.top) / bbox.height) * 2 + 1,
0.5
);
// perspective camera
var dir = mouse3D.unproject(camera).sub(camera.position).normalize();
scene.add(new THREE.ArrowHelper(dir, camera.position)); // draws arrow helper showing mouse direction
}
绘制的箭头指向正前方,所以我只能看到箭头,这是完全正常的(1。)。
一旦我改变相机位置并设置lookAt,它就会变得怪异(2.)。从鼠标开始不再绘制箭头了。以下是我如何更改位置并设置lookAt位置:
// DONT WORK
camera.position.set(500,50,150);
camera.lookAt(new THREE.Vector3(0,0,0));
camera.updateMatrixWorld(true);
mouseDir();
render();
仅设置相机位置才能正常工作:
// WORKS
camera.position.set(500,50,150);
camera.updateMatrixWorld(true);
mouseDir();
render();
仅设置lookAt位置也可以正常工作:
// WORKS
camera.lookAt(new THREE.Vector3(0,0,0));
camera.updateMatrixWorld(true);
mouseDir();
render();
我也尝试在渲染位置和lookAt调用后绘制鼠标方向,也不起作用。
我在r74。我试着整天想出来,希望有人能告诉我搜索的方向。
答案 0 :(得分:0)
dir应该是相机位置:
var dir = camera.position;
scene.add(new THREE.ArrowHelper(dir, origin));