地図/幾何/立体を回す

頂点を回して投影する

立体は頂点の集まり。立方体なら八隅の (±1, ±1, ±1)。これを回転行列で回し、透視投影で画面へ落とす。回して投影する一手を project という関数にまとめておくと、辺を引くのも面を塗るのも、この関数の上に乗る。

立体のデータは頂点(座標の配列)と、それをどう繋ぐかの位相情報(辺や面のインデックス配列)に分かれる。座標を変換しても繋ぎ方は変わらないので、頂点だけを回して投影し、辺・面はインデックスで参照する。頂点バッファとインデックスバッファに対応し、GPU も同じ持ち方をする。頂点を一度変換すれば、その結果を複数の面が共有できる。

立方体の八頂点を回して投影し、点で打つ。各頂点を一度だけ project に通し、画面座標と奥行きを返す。

project の中身は透視投影そのもの。ca に回転の cos / sin をまとめて渡し、y 軸・x 軸の二段回転をかけてから s = focal / (camZ + z2) で縮める。返り値の三つ目に奥行き z2 を持たせると、後で面を奥から並べるのに使える。いまは八つの点が宙で回っているだけで、どれが手前でどれが奥か分からない。