ページ 11

3Dでの三角関数の使い方

Posted: 2015年2月06日(金) 15:48
by c_jack
3Dのアクションゲームを作っているのですが、
キャラクタの移動方向やカメラの位置を求める際に利用する、
三角関数の使い方が理解できず質問させていただきます。

キャラクタを入力した方向に進める際に

player.px = 移動量 x sinf( ToRadian(y軸の角) );
player.pz = 移動量 x cosf( ToRadian(y軸の角) );

で求めているのですが、
なぜx座標をsinfで,y座標をcosfで求められるのかが理解できずに困っています。

2Dで考えるとx座標はcosf,z座標はsinfになると思うんです。

みなさんよろしくお願いします。

Re: 3Dでの三角関数の使い方

Posted: 2015年2月06日(金) 16:06
by usao
そういうことは,
あなたが用いている座標系や角度の定義次第なので,他人にはわかりません.

例えば,
>y軸の角
というのは何なのか.
これは何らかの方向(playerが移動する方向?)を決めているのだと思いますが
・この値が0のとき,「方向」の(x,y,z)はそれぞれどうなるべきなのか ( (0,0,1) になっているとかいう話かな? )
・この値が1[degree]のときはどうなるのか
等の仕様に依存します.

Re: 3Dでの三角関数の使い方

Posted: 2015年2月06日(金) 20:10
by softya(ソフト屋)
そうですね。
> 2Dで考えるとx座標はcosf,z座標はsinfになると思うんです。
それは思い込みですね。

例えば2Dの場合、画面右がXのプラス方向で、画面下がYのプラス方向とは限らないんです。
X方向は右がプラスが多いですが、Y方向は逆がありえます。数学的には、こちらの方が馴染み深いも知れません。
3Dの場合は、Zのプラス方向がOpenGLとDirectXでは逆になります。
なぜこうなのかというと、そう言う風にルールを定めたからとしか言えません。
なので、usaoさんの言われるように利用グラフィックAPIやフレームワークの仕様に依存するのです。

Re: 3Dでの三角関数の使い方

Posted: 2015年2月07日(土) 16:38
by c_jack
すみません、説明不足でした。
DirectXで学内ライブラリを用いてアクションゲームを製作しています。

PlayerのY軸を回転軸として
上、下キーでY軸の角度に前進、後退
左、右キーでY軸を左回転、右回転

ご指摘から少し考え直したところ、自己解決出来そうなので解決とさせて頂きます。
ありがとうございました。