ワールド座標変換→各種変換行列への分離

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

ワールド座標変換→各種変換行列への分離

#1

投稿記事 by ぬっち » 13年前

いつもお世話になっております。

現在私は、XファイルをDirectXのヘルパー関数無しで読み込みを行っていて、それをOpenGLで表示することを試みています。
今日やっとのことで、FrameとAnimation部分の読み込みを完成して、表示することが出来るようになりました。
しかし、親のFrameと子のFrameの相対的な関係の情報をもつ変換行列(FrameTransformMatrix)の扱いに困っています。
DirectXではSetTransformでワールド変換行列を直接指定することが出来るので、ファイルに書かれている行列をそのまま入れてしまえばよいのですが、OpenGLではglTranslateとglRotate、glScaleという風に、変換の種類を分離しなくてはなりません。

私は、このワールド変換行列をそれぞれの回転行列、拡大縮小行列、並進移動行列に分離する方法を知りたいです。
ちなみに、並進移動行列は行列の(4,1)、(4,2)、(4,3)成分から取得できることがわかっていますので、回転行列と拡大縮小行列が得られれば良いと思っています。
特に、回転行列に関してはx、y、z軸でどのくらいの角度分回転させたかを取得できればよりよいかなと思っています。

よろしくお願いします。

ぬっち
記事: 105
登録日時: 13年前
連絡を取る:

Re: ワールド座標変換→各種変換行列への分離

#2

投稿記事 by ぬっち » 13年前

すいません、半分自己解決してしまいました。
もう少し調べて書けばよかったものを、待ちきれずに書き込んでしまって申し訳ありませんでした^^;

以下解決法です。
glMultMatrixfというのがあるらしく、それにモデルビュー変換の行列変換モードとして呼び出せばよいということがわかりました。
引数は、xファイルから読み込んだ行列要素をGLfloatの16要素を持つの配列に代入していって、その配列のポインタをglMultMatrixfに代入すればよいというものです。
つまり、DirectXにあるようなSetTransformと同様のことがこれで出来るわけです。

ですが、半分解決していません。
それは、質問させてもらったように、行列の分離の方法です。
一応、満足の行く結果となったため解決としておきますが、もしこの分離の方法を教えていただける方がいらっしゃったら教えていただけると助かります^^

お騒がせしてしまってすいませんでしたm(--)m

閉鎖

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