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

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

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

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

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

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

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

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

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

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

回転は、(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])に変換されるイメージですね。

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

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

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

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

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

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

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

はい、博士?

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

ええと、博士、それはちょっと… 私はまだダンスの行列を理解するには学習が足りません…
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。