マトリクスの掛け違えで、トホホな結果に

OpenGLベースのライブラリで組んでいたプログラムを、DirectXに持って行ったときの話です。

数学関数で、回転や拡縮をかけると、画面に意図した絵が出ません。

何でだろう?と思いつつ調べてみたところ、マトリクスのかけ算の結果が違うのが原因でした。

そういえば以前、マトリクスの掛ける順番逆じゃ無いの?とか思っていたりはしたのですが、掛ける順番を入れ替えてみたら動いたので、そのときは深く考えていませんでした。

で、今になって本格的に調べてみたところ、回転の順番が逆になってるということに気付いたというわけです。

どうやら、ベクトルが行優先か列優先かの違いのようで、OpenGLでは列ベクトルが使われ、DirectXでは行ベクトルが使われているため、かけ算の結果が逆になっていたのです。

つまり、A→Bという順番で回転していたものが、B→Aという順番に回転してしまったために、意図した結果が得られなかったのです。

というわけで、AxB としていたところを BxA にしてあげたところ、意図した絵が表示されるようになりました。

マトリクスのかけ算なんか数学関数にお任せっきりで、どういう風に計算するのかなんて、すっかり忘れてました。

現場のプログラマーなんて意外といい加減で、理屈は2の次で、とりあえず動いちゃえばいいや、みたいなところがあったりします。

もちろん、理屈をきちんと理解していた方がいいんですけどね。

カテゴリー: 独り言   パーマリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>