- 締切済み
FPS的なカメラの回転
FPSのように、カメラの回転値を基準としての回転を行いたいです。 カメラが Z+ を向いていようと、Y+ を向いていようと右に回転させたいと思ったら Z+ なら Y軸回転を Y+ なら Z軸回転を 行うような処理を書きたいです。 ですが正直考え方がまとまりません。 ・カメラの現在のワールド回転値の取得 ・カメラをワールド回転させる これはできています。 自分が想定している流れとしては 1.カメラのワールド回転値を取得 (これが回転の基準となりローカル回転で言う X,Y,Z=0,0,0 ) >ローカルX軸回転をさせるとして 2.ローカルX軸の回転値をワールド回転値に変換 3.変換したワールドき転値を取得した回転値に加算する といった具合でできるのではないかと考えています。 ・・・違ったら教えてください。できれば正しい考え方も教えてください。 分からないのは回転のワールドとローカルの変換です。 ※注意 ローカルなどと言っていますが親子関係があるわけではありません。 適切な表現方法が分からんかったのでそう言っているだけです。 わかりにくくてすいません。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- qwertfk
- ベストアンサー率67% (55/81)
回転値というのはオイラー角のことでしょうか? その前提の回答になりますが、 やはり#1の方も行列について書かれていますが、行列計算が必要です。 カメラの視線方向をオイラー角で管理するというのであれば、計算にはオイラー角 と行列の相互変換が必要です。 ・オイラー角→回転行列 http://cflat-inc.hatenablog.com/entry/20130430/1367284977 のページにある R=RX(α)RY(β)RZ(γ) の計算で得られるRがオイラー角に相当する行列です。 ・回転行列→オイラー角 http://spphire9.wordpress.com/2012/07/05/%E5%9B%9E%E8%BB%A2%E8%A1%8C%E5%88%97%E3%81%8B%E3%82%89%E3%82%AA%E3%82%A4%E3%83%A9%E3%83%BC%E8%A7%92%E3%82%92%E4%B8%80%E6%84%8F%E3%81%AB%E6%B1%82%E3%82%81%E3%82%8B/ で、これを前提として、質問の内容を実現するには、下記の手順を行います 1. カメラの現在のオイラー角に対応する行列を求める(Rとする) 2. カメラに加算する回転に相当する行列を求める(Sとする) 3. 行列の積 R' = S・R を求める 4. R'をオイラー角に戻す これでカメラを回転できます。
- Tacosan
- ベストアンサー率23% (3656/15482)
そういうことをしようとすると行列を使うと便利だよって http://okwave.jp/qa/q8733385.html に書いてあるね.