我正在构建一个太空游戏并想出如何投射二维点击到三维以获得子弹的方向。如果我从第一人称视角拍摄,一切顺利。但是,如果我从第三人称视角拍摄,将相机设置在较高的y位置,则子弹将一直向下移动。
正在使用的代码:
var mouse3D = new THREE.Vector3(
( event.clientX / window.innerWidth ) * 2 - 1,
-( event.clientY / window.innerHeight ) * 2 + 1,
0.5
);
projector.unprojectVector( mouse3D, camera );
mouse3D.sub( camera.position );
mouse3D.normalize();
相机位于0, 10, 20
如何补偿相机处于更高的y?
答案 0 :(得分:0)
我不确定它是最具逻辑性的解决方案,但一个简单的解决方案是丢弃(设置为0)方向向量的y
值。这样矢量将在XZ平面中。而且因为你将其标准化,所以不必担心y
的旧值。
mouse3D.sub( camera.position );
mouse3D.y = 0;
mouse3D.normalize();