在给定 2D 方向矢量的情况下,如何计算沿 y 轴的旋转



我正在制作一个3D游戏,我需要玩家网格体始终面向摄像机的背面。我已经想出了如何获得 2D 速度矢量(沿 x-z 平面的方向),但现在我需要沿速度矢量的方向旋转网格......

基本上,每个网格都有一个.rotation属性,该属性是 3D 矢量。我只对 y 轴上的旋转感兴趣,即垂直于表面 (x-z) 平面的旋转。

旋转不使用度,而是使用弧度,所以我认为它会是这样的:

mesh.rotation.y = (mesh.direction.x - mesh.direction.z)*Math.PI*2;

但这似乎并没有削减它...

方向/速度是一个,如前所述,2D向量,它由-1和1之间的实数组成。在任何时候sqrt(x*x + y*y) == 1,所以它形成一个"圆",这是因为速度显然需要在各个方向上相等。

只有当我在屏幕上拖动鼠标时,速度矢量才会改变,旋转也应该改变,它的计算方式如下:

var c = Math.sqrt(cameraPos.x*cameraPos.x + cameraPos.z*cameraPos.z); //This is the distance from the camera to the mesh, which is at (0, 0) for simplicity of this presentation.
var rat = 1/c;
mesh.direction.x = cameraPos.x*rat; //Direction vector = the speed vector
mesh.direction.z = cameraPos.z*rat;
如果我

理解正确,atan2会做到这一点:

mesh.rotation.y = Math.atan2(mesh.direction.z, mesh.direction.x)

结果以弧度为单位。它基本上计算矢量和 X 轴之间的角度。您可能需要在此处或那里切换参数或使用减号运算符。

最新更新