いつも教えて頂いてありがとうございます。
またお聞きしたいことがあります。
よろしくお願いします。
「GAMECODING(鎌田茂雄著)」という本を見ながら勉強しています。
キャラ1とキャラ2を表示して、キーを押したらキャラ1がキャラ2の方向を向く、
というプログラムです。
キャラはどちらも任意のキーで回転させられるようにしました。
D3DXMatrixRotationY(&pThing->matRotation,pThing->fHeading);
fHeadingの値を変化させて回転させられています。
別の任意のキーが押され続けているときに、キャラ1がキャラ2の方向を向くように、
D3DXMatrixLookAtLH( &Thing[0].matWorld, &vcharPt, &vLookatPt2, &vUpVec );
としたら、向かせることが出来たのですが、
キーを離すと元の方向に戻ってしまいます。
fHeadingに向かせた方向を入れなければならないと思うのですが方法がわかりません。
向かせた方向を維持するにはどうしたら良いでしょうか?
よろしくお願い致します。
キャラに向かせた方向を維持させたい
Re: キャラに向かせた方向を維持させたい
色々調べているのですが、
もしかするとワールド行列から回転ベクトルを取り出すことは
できないのでしょうか?
そうすると、D3DXMatrixLookAtLHを使わず、
例えば、360度にレイを発射して衝突したらその角度をfHeadingに入れればいいのでしょうか?
試してみようと思います。
キャラに幅がある分少しずれてしまうかな?
もしかするとワールド行列から回転ベクトルを取り出すことは
できないのでしょうか?
そうすると、D3DXMatrixLookAtLHを使わず、
例えば、360度にレイを発射して衝突したらその角度をfHeadingに入れればいいのでしょうか?
試してみようと思います。
キャラに幅がある分少しずれてしまうかな?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: キャラに向かせた方向を維持させたい
XZ平面限定のyの角度ならレイを飛ばさずとも、atanで角度を求めれば解決しますよ。
物陰に隠れて見えない状況があるのならレイを飛ばさないといけませんけど。
物陰に隠れて見えない状況があるのならレイを飛ばさないといけませんけど。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: キャラに向かせた方向を維持させたい
softya(ソフト屋)さん、ご返事ありがとうございます。
atanという関数があるなんて知りませんでした。
XZ平面限定ですので試してみたいと思います。
でも数学が苦手なので先に三角関数を調べてみます。
atan2でXとYを渡せばいいのでしょうか?
atanという関数があるなんて知りませんでした。
XZ平面限定ですので試してみたいと思います。
でも数学が苦手なので先に三角関数を調べてみます。
atan2でXとYを渡せばいいのでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: キャラに向かせた方向を維持させたい
atan2で合っています。xとyはキャラ1とキャラ2の座標差分を渡します。
求めるのは原点からの角度ではなく、キャラ1からの角度ですので。
求めるのは原点からの角度ではなく、キャラ1からの角度ですので。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: キャラに向かせた方向を維持させたい
softya(ソフト屋)さん、ありがとうございます。
座標差分でなんとかうまくいきました!
fHeadingがfloatだったので、atan2fというのを使いました。
atan2f(y,x)ということだったのでatan2f(z,x)かなと思ってやっていましたが、
向きがおかしくて、atan2f(x,z)としたらうまくいきました!
ここに気付くまで少し時間が掛かってしまいましたが、
やったーという感じです!
ありがとうございました!
この方法だと、キャラが一気にくるっと回らずに違和感無くゆっくり回すこともできるので
これから挑戦してみたいと思います。
また分からないことがあったら教えて下さい!
本当にありがとうございました!
座標差分でなんとかうまくいきました!
fHeadingがfloatだったので、atan2fというのを使いました。
atan2f(y,x)ということだったのでatan2f(z,x)かなと思ってやっていましたが、
向きがおかしくて、atan2f(x,z)としたらうまくいきました!
ここに気付くまで少し時間が掛かってしまいましたが、
やったーという感じです!
ありがとうございました!
この方法だと、キャラが一気にくるっと回らずに違和感無くゆっくり回すこともできるので
これから挑戦してみたいと思います。
また分からないことがあったら教えて下さい!
本当にありがとうございました!