3Dのアクションゲームを作っているのですが、
キャラクタの移動方向やカメラの位置を求める際に利用する、
三角関数の使い方が理解できず質問させていただきます。
キャラクタを入力した方向に進める際に
player.px = 移動量 x sinf( ToRadian(y軸の角) );
player.pz = 移動量 x cosf( ToRadian(y軸の角) );
で求めているのですが、
なぜx座標をsinfで,y座標をcosfで求められるのかが理解できずに困っています。
2Dで考えるとx座標はcosf,z座標はsinfになると思うんです。
みなさんよろしくお願いします。
3Dでの三角関数の使い方
Re: 3Dでの三角関数の使い方
そういうことは,
あなたが用いている座標系や角度の定義次第なので,他人にはわかりません.
例えば,
>y軸の角
というのは何なのか.
これは何らかの方向(playerが移動する方向?)を決めているのだと思いますが
・この値が0のとき,「方向」の(x,y,z)はそれぞれどうなるべきなのか ( (0,0,1) になっているとかいう話かな? )
・この値が1[degree]のときはどうなるのか
等の仕様に依存します.
あなたが用いている座標系や角度の定義次第なので,他人にはわかりません.
例えば,
>y軸の角
というのは何なのか.
これは何らかの方向(playerが移動する方向?)を決めているのだと思いますが
・この値が0のとき,「方向」の(x,y,z)はそれぞれどうなるべきなのか ( (0,0,1) になっているとかいう話かな? )
・この値が1[degree]のときはどうなるのか
等の仕様に依存します.
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 3Dでの三角関数の使い方
そうですね。
> 2Dで考えるとx座標はcosf,z座標はsinfになると思うんです。
それは思い込みですね。
例えば2Dの場合、画面右がXのプラス方向で、画面下がYのプラス方向とは限らないんです。
X方向は右がプラスが多いですが、Y方向は逆がありえます。数学的には、こちらの方が馴染み深いも知れません。
3Dの場合は、Zのプラス方向がOpenGLとDirectXでは逆になります。
なぜこうなのかというと、そう言う風にルールを定めたからとしか言えません。
なので、usaoさんの言われるように利用グラフィックAPIやフレームワークの仕様に依存するのです。
> 2Dで考えるとx座標はcosf,z座標はsinfになると思うんです。
それは思い込みですね。
例えば2Dの場合、画面右がXのプラス方向で、画面下がYのプラス方向とは限らないんです。
X方向は右がプラスが多いですが、Y方向は逆がありえます。数学的には、こちらの方が馴染み深いも知れません。
3Dの場合は、Zのプラス方向がOpenGLとDirectXでは逆になります。
なぜこうなのかというと、そう言う風にルールを定めたからとしか言えません。
なので、usaoさんの言われるように利用グラフィックAPIやフレームワークの仕様に依存するのです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 3Dでの三角関数の使い方
すみません、説明不足でした。
DirectXで学内ライブラリを用いてアクションゲームを製作しています。
PlayerのY軸を回転軸として
上、下キーでY軸の角度に前進、後退
左、右キーでY軸を左回転、右回転
ご指摘から少し考え直したところ、自己解決出来そうなので解決とさせて頂きます。
ありがとうございました。
DirectXで学内ライブラリを用いてアクションゲームを製作しています。
PlayerのY軸を回転軸として
上、下キーでY軸の角度に前進、後退
左、右キーでY軸を左回転、右回転
ご指摘から少し考え直したところ、自己解決出来そうなので解決とさせて頂きます。
ありがとうございました。