0

さて、敵の位置ベクトルとプレイヤーの位置ベクトルの 2 つのベクトルがあります。ピッチを計算する必要があります (敵の位置からプレイヤーの Y 位置を指すように X 軸に沿って何かを回転させる必要がある角度)。

敵の位置とプレイヤーの位置の間のピッチを取得するにはどうすればよいですか?

これが私の最後の試みで、0 度付近で止まっているようです。

player_pos.normalise();
enemy_pos.normalise();

float dot = Vector3f.dot(player_pos, enemy_pos);


Vector3f rotationVector = new Vector3f(0,0,0);
rotationVector. x = (float) Math.toDegrees(Math.acos(dot));
4

3 に答える 3

1

違いの角度を探しているだけではありませんか?

double angle = Math.acos(Vector3f.dot(player_pos,enemy_pos) /
                         (player_pos.length() * enemy_pos.length()));
于 2012-07-01T18:24:53.683 に答える
0

最初の刺し傷で見逃しているのは、新しい方向を指そうとしているものの現在の向きです。何かを回転させる必要がある方向を把握したい場合は、これが必要になります。

あなたは絶対に位置を正規化したくありません。この操作は、このコンテキストでは意味がありません。2 つのベクトル間の内積は、それらの間の角度を示しますが、(正規化された) エンティティ位置間の内積は、原点の観点からこれら 2 つのアイテム間の角度を与えるため、これはおそらくあなたが望むものではありません。

あなたが持っている情報を一枚の紙に描き、どの情報が欲しいかを見てください。主に、この場合、何と何の間の角度が必要ですか? どのエンティティで何を変更しますか?

すべてを描き始めると、処理する必要があるデータと、その処理を行うために使用する必要がある操作が明らかになることに気付くかもしれません。

幸運を!

于 2012-07-02T00:22:34.170 に答える
0

わかりました、あなたが何を意味しているのかよくわかりません。銃が原点にあり、敵とプレイヤーの間の角度を指している場合、そこにあるように見えます。

敵の銃をプレイヤーに向けたいと思います。

最初に敵に対するプレイヤーの方向を取得します //ゼロをチェックすることを忘れないでください

dir = player_pos -enemy_pos
dir.normalize()

angle = asin(dir.y) or angle = acos(dir.z)
angle = Math.toDegrees(angle);

象限を調整する必要があります(asinの場合)

if (z < 0) {
    if (y < 0) {
        angle = -180 - angle;
    }
    else {
        angle = 180 - angle;
    }
}

私はあまりゲーム開発をしていないので、もっと効率的な方法があるかもしれません。

それは x 軸の周りでした。z 軸の周りを意味していたかもしれません。z を x に置き換えます。

于 2012-07-01T19:16:34.260 に答える