ページ 11

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

Posted: 2014年11月08日(土) 08:52
by cattail
いつも教えて頂いてありがとうございます。
またお聞きしたいことがあります。
よろしくお願いします。
「GAMECODING(鎌田茂雄著)」という本を見ながら勉強しています。

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

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

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

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

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

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

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

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

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

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

Posted: 2014年11月08日(土) 11:45
by softya(ソフト屋)
XZ平面限定のyの角度ならレイを飛ばさずとも、atanで角度を求めれば解決しますよ。
物陰に隠れて見えない状況があるのならレイを飛ばさないといけませんけど。

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

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

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

Posted: 2014年11月08日(土) 13:10
by softya(ソフト屋)
atan2で合っています。xとyはキャラ1とキャラ2の座標差分を渡します。
求めるのは原点からの角度ではなく、キャラ1からの角度ですので。

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

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