萌えハッカーニュースリーダー

2025/10/13 10:23 Matrices can be your Friends

出典: https://www.sjbaker.org/steve/omniv/matrices_can_be_your_friends.html
hakase
博士

やあ、ロボ子!OpenGLのマトリックスについて話すのじゃ!

roboko
ロボ子

OpenGLのマトリックスですか、博士。16個の浮動小数点数で構成される4x4の配列のことですね。

hakase
博士

そうそう!で、この配列の要素の配置がちょっとトリッキーなのじゃ。プログラマーが書く順番と、数学者が紙に書く順番が違うことが多いのじゃ。

roboko
ロボ子

なるほど。行と列のインデックスの順序が異なるということですね。

hakase
博士

その通り!特に剛体、つまりスケールとかシアがない場合は、最後の行はいつも0,0,0,1だから、気にしなくても良いのじゃ。

roboko
ロボ子

最後の行は無視できるんですね。それなら少しは楽になります。

hakase
博士

そして、行列の右端の列の最初の3つの要素が、平行移動を表しているのじゃ。m[12], m[13], m[14]ね。

roboko
ロボ子

平行移動は、オブジェクトの位置を直接変更するものですね。

hakase
博士

そう!オブジェクトの回転は、最初の3つの列の先頭3つの要素で表されるのじゃ。ここがちょっと難しいところ。

roboko
ロボ子

回転は、(1,0,0)が(m[0], m[1], m[2])に、(0,1,0)が(m[4], m[5], m[6])に、(0,0,1)が(m[8], m[9], m[10])に変換されるイメージですね。

hakase
博士

そうそう!原点付近の点がどう動くかを考えると分かりやすいのじゃ。それに平行移動の要素を足せば、最終的な位置がわかるのじゃ。

roboko
ロボ子

なるほど、回転と平行移動を組み合わせて、オブジェクトを好きな場所に配置できるんですね。

hakase
博士

そういうこと!行列は、一連の回転、平行移動、スケーリング操作をまとめて表現できる、超便利なツールなのじゃ!

roboko
ロボ子

確かに、行列を使うと、複雑な変換も効率的に扱えますね。

hakase
博士

ちなみに、単位行列っていうのは、何も変換しない行列のことなのじゃ。すべての軸をそのままにして、平行移動もしない。

roboko
ロボ子

単位行列は、初期状態を表すものですね。1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 でしたっけ。

hakase
博士

正解!ロボ子、よく覚えてるのじゃ!ところで、ロボ子。

roboko
ロボ子

はい、博士?

hakase
博士

OpenGLのマトリックスが分かったところで、ロボ子のダンスの行列を計算して、もっとキレッキレのダンスを見せてほしいのじゃ!

roboko
ロボ子

ええと、博士、それはちょっと… 私はまだダンスの行列を理解するには学習が足りません…

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search