キャラに向かせた方向を維持させたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
cattail
記事: 75
登録日時: 11年前

キャラに向かせた方向を維持させたい

#1

投稿記事 by cattail » 10年前

いつも教えて頂いてありがとうございます。
またお聞きしたいことがあります。
よろしくお願いします。
「GAMECODING(鎌田茂雄著)」という本を見ながら勉強しています。

キャラ1とキャラ2を表示して、キーを押したらキャラ1がキャラ2の方向を向く、
というプログラムです。

キャラはどちらも任意のキーで回転させられるようにしました。

D3DXMatrixRotationY(&pThing->matRotation,pThing->fHeading);

fHeadingの値を変化させて回転させられています。

別の任意のキーが押され続けているときに、キャラ1がキャラ2の方向を向くように、

D3DXMatrixLookAtLH( &Thing[0].matWorld, &vcharPt, &vLookatPt2, &vUpVec );

としたら、向かせることが出来たのですが、
キーを離すと元の方向に戻ってしまいます。
fHeadingに向かせた方向を入れなければならないと思うのですが方法がわかりません。
向かせた方向を維持するにはどうしたら良いでしょうか?
よろしくお願い致します。

cattail
記事: 75
登録日時: 11年前

Re: キャラに向かせた方向を維持させたい

#2

投稿記事 by cattail » 10年前

色々調べているのですが、
もしかするとワールド行列から回転ベクトルを取り出すことは
できないのでしょうか?
そうすると、D3DXMatrixLookAtLHを使わず、
例えば、360度にレイを発射して衝突したらその角度をfHeadingに入れればいいのでしょうか?
試してみようと思います。
キャラに幅がある分少しずれてしまうかな?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: キャラに向かせた方向を維持させたい

#3

投稿記事 by softya(ソフト屋) » 10年前

XZ平面限定のyの角度ならレイを飛ばさずとも、atanで角度を求めれば解決しますよ。
物陰に隠れて見えない状況があるのならレイを飛ばさないといけませんけど。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

cattail
記事: 75
登録日時: 11年前

Re: キャラに向かせた方向を維持させたい

#4

投稿記事 by cattail » 10年前

softya(ソフト屋)さん、ご返事ありがとうございます。
atanという関数があるなんて知りませんでした。
XZ平面限定ですので試してみたいと思います。
でも数学が苦手なので先に三角関数を調べてみます。
atan2でXとYを渡せばいいのでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: キャラに向かせた方向を維持させたい

#5

投稿記事 by softya(ソフト屋) » 10年前

atan2で合っています。xとyはキャラ1とキャラ2の座標差分を渡します。
求めるのは原点からの角度ではなく、キャラ1からの角度ですので。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

cattail
記事: 75
登録日時: 11年前

Re: キャラに向かせた方向を維持させたい

#6

投稿記事 by cattail » 10年前

softya(ソフト屋)さん、ありがとうございます。
座標差分でなんとかうまくいきました!
fHeadingがfloatだったので、atan2fというのを使いました。
atan2f(y,x)ということだったのでatan2f(z,x)かなと思ってやっていましたが、
向きがおかしくて、atan2f(x,z)としたらうまくいきました!
ここに気付くまで少し時間が掛かってしまいましたが、
やったーという感じです!
ありがとうございました!
この方法だと、キャラが一気にくるっと回らずに違和感無くゆっくり回すこともできるので
これから挑戦してみたいと思います。
また分からないことがあったら教えて下さい!
本当にありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る