スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

自作インポータの完成

アニメーションのインポータが完成した。
思ったより時間がかかって苦労した。

やられたのは「座標系の違い」である。憎い。憎いぜこのやろう。

苦労の原因は、何を隠そう座標系のことなんて微塵も考えてなかったことに起因する。
読み込んで動かしてみても常にグニャグニャとした得体の知れない生物が画面に映るのだ。

はっと我に返って思い返してみる

DirectX→左手系
Cinema4D→左手系
XNA→右手系


こ、こ、これじゃーん(涙)

分かったのはいいけど手直しも大変だった。

Quaternion.CreateFromRotationMatrixを使って行列をクォータニオンと移動Vectorに分解して扱っていた。
これは「ひけにXNA」様のサイトに載っていた方法なのだけれども、スケール情報があるとこの方法が使えないのである
直行系変換なら大丈夫だと思っていたのだけれど剛体系の変換でないといけないようだ。
Z軸方向を反転させるためにリフレクション行列を使っていたのでクォータニオンの位置が任意のもではなくなっていた。

結局Cinema4Dのエクスポータの方で右手用のデータを作成して吐き出すことにして解決。

左手系と右手系で困った人がこの記事を読んでいるとしたら以下に気をつけてくだされ
・ソフトの扱っている行列が列オーダーなのか行オーダーなのか?
・行列の基底ベクトルのZ軸要素(3行目)と平行移動のZ要素matrix.M43を反転させなければならない
・ポリゴンなどの情報に↑の行列を適用するとなるとポリゴンが反転する
・反転問題にはGraphicsDevice.RenderState.CullModeあたりでカリング順を弄るか頂点順番を123から132にかえる


アニメーションや数学のことも結構調べたので近いうちに記事にしたいと思う。

ねよっと。

コメントの投稿

非公開コメント

プロフィール

あしゅ

Author:あしゅ
ぷぃぷぃ日常。
いつのまにか雑記ブログに。

カテゴリ
最新記事
検索フォーム
最新コメント
リンク
このブログをリンクに追加する
ブロとも申請フォーム

この人とブロともになる

カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。