1

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

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

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

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

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

如前所述,方向/速度是一个二维向量,它由-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;
4

1 回答 1

1

如果我理解正确,atan2就会成功:

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

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

于 2012-05-27T12:14:24.693 回答