4

私はOpenGLに本当に慣れていませんが、基本的な三角法をかなりよく理解しています(学校からかなり忘れられています!)が、これに問題があります。

Z軸を前後に移動するキャラクターがいます。ストレイフではなく、左右に動かすには、回転させて(それぞれ左矢印キーと右矢印キーを押したとき)、もう一度前後に押すと、向いている方向に動きます。

だから私がしたのは、左/右の関数に、キャラクターの回転を描くために使用される角度変数に少量を加算/減算させることでした。次に、順方向/逆方向関数は、x軸とz軸の変数に少量を加算/減算します。それらは次のとおりです(後方の場合):

z -= 0.005f * Math.cos(heading);
x -= 0.005f * Math.sin(heading)

見出し変数は、左右の矢印キーで操作される角度です。

プレイヤーがまっすぐ進むとき、見出しは0であるため、cos(0)= 1およびsin(0)= 0であるため、これは機能すると思いました。つまり、Xではどこにも移動せず、Zでは0.005の全量を転送します。私の基本的な三角法の知識は完全には正しくなかったと思います。少し回してから前方に移動するとその方向に移動しますが、もう少し移動してから前方に移動すると、90度回転すると同じ線に沿って移動し、続行します。その後、180度、270度などのようになります。

編集:私はそれをよりよく説明しようとします、基本的に私が左に曲がった後に前方に押すとそれは私が望む方向に進みます、しかし私が前方に手を離すと、もう少し回してからもう一度前方に押すと角度が本来あるべき方向に増加しましたが、方向は本来あるべき方向から約90度です。申し訳ありませんが、これをうまく説明することはできません。

編集:さて、私は奇妙な「90度」の問題を引き起こしていると思われるいくつかの奇妙な問題を抱えています。キャラクターを90度(ハードコーディングされた見出し= 90)で左/右に見えるようにすると、cos(見出し)0である必要がありますか?しかし、何らかの理由で-0.44として出力され、cos-1(-0.44)で116.1が得られた場合、それはラジアンなどの角度が必要なMath.cos()と関係がありますか?私はここで完全に迷子になっています。

これはこの問題を解決する正しい方法ですか?私は完全に試行錯誤してマイナス記号で立ち往生しています...

どんな返事でもありがたいです、

ありがとう

InfinitiFizz

(また、ハードコードされた0.005fではなく、文字の速度/回転値にdeltaTimeを使用する必要があることはわかっていますが、ソートする前に、まずこの問題を回避したいと思います)。

4

1 に答える 1

4

+ではなく*である必要があります

に基づく:

x = r cos (theta)
y = r sin (theta)

あなたが望むでしょう:

z -= 0.005f * Math.cos(heading);
x -= 0.005f * Math.sin(heading);

それがあなたが求めているものなら?私は認めなければなりません、私は実際に何が起こっているのかについてのあなたの説明を完全には理解していませんでした。

編集:座標系がどのように機能しているかにもよりますが、0.005よりも大きな「半径」を使用することをお勧めします。

于 2011-02-13T00:45:54.470 に答える