1

3Dゲームを作成していますが、プレーヤーメッシュが常にカメラの背面を向いている必要があります。2D速度ベクトル(xz平面に沿った方向)を取得する方法はすでに理解しましたが、メッシュを速度ベクトルの方向に回転させる必要があります...

基本的に、すべてのメッシュには.rotationプロパティがあり、そのプロパティは3Dベクトルです。表面(xz)平面に垂直なy軸を中心とした回転にのみ関心があります。

回転は度ではなくラジアンを使用するので、次のようになると思いました。

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;
4

1 に答える 1

1

私が正しく理解していればatan2、トリックを行います:

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

結果はラジアンです。基本的に、ベクトルと X 軸の間の角度を計算します。パラメータを切り替えるか、マイナス演算子をあちこちで使用する必要がある場合があります。

于 2012-05-27T12:14:24.693 に答える