地図/基礎/3Dと射影

奥行きは割り算 — z で縮める

遠くのものは小さく見える。式にすると割り算になる。点に奥行き z を持たせ、画面上の大きさを 1 / z で縮める。z が二倍なら半分の大きさ。これだけで遠近がつく。

透視投影は奥行きで割る。視点から焦点距離 focal だけ離れた平面(スクリーン)に点を写すと、画面座標は x' = focal · x / zy' = focal · y / z になる。z が分母に来るので、遠い点ほど中心へ寄り小さくなる。線遠近法は 1400 年代のルネサンス(Brunelleschi・Alberti)で絵画の技法として確立し、後に射影幾何として数学になった。コンピュータグラフィックスでは、この割り算を行列一発で扱うために同次座標(x, y, z, w の四成分で点を持ち、最後に w で割る)を使う。同次座標だと割り算を最後にまとめて一度にできる。

床を一点透視で描く。床の格子点 (x, z)focal / z で縮めて画面に置くと、奥(z が大きい)ほど横線の間隔が詰まり、すべての縦線が一点(消失点)へ収束する。

proj(x * focal) / z(eye * focal) / z が全部で、どちらも z で割っている。横線は z を固定して x を端から端へ引いた線で、z が大きいほど 1/z が小さく地平線 horizon に貼りつく。縦線は x を固定して z を手前から奥へ伸ばした線で、奥で一点に集まる。eye を上げると視点が高くなって床を見下ろし、focal を上げると望遠レンズのように遠近が圧縮される。