概要
モデル座標系(3次元)の点が様々な変換を通じて最終的にはデバイス座標系(2次元)に変換されます。
その過程をレンダリングパイプラインと言います。
その概要は以下です。
モデル座標系(ローカル座標系、オブジェクト座標系) - 3次元
↓
モデル変換
↓
ワールド座標系 - 3次元(右手座標系)
↓
ビュー変換
↓
ビュー座標系(カメラ座標系) - 3次元(右手座標系)
↓
投影変換(平行投影、透視投影)
↓
クリッピング座標系 - 4次元
↓
透視分割
↓
正規化デバイス座標系 - 3次元(左手座標系)
↓
ビューポート変換
↓
デバイス座標系 - 2次元(canvasの左下隅が原点で、x+が右側、y+が上側)
モデル変換とビュー変換の合成変換をモデルビュー変換といいます。
OpenGLやWebGLの頂点シェーダーで計算するのは、クリッピング座標系における点の座標です。
よって、頂点シェーダーには少なくともモデル座標系の点の座標とモデル変換、ビュー変換、投影変換を表す行列を渡す必要があります。
透視分割は同次座標系から標準座標系への変換であり、 となります。
投影変換と透視分割を併せて、投影変換と呼ぶ場合もあります。
また、その場合正規化デバイス座標系をクリッピング座標系と呼んでいることもあります。
本記事はOpenGL/WebGLを意識して書いています。
ちなみにhtmlの要素(例canvas)のマウスカーソル位置をイベントハンドラを通じて取得すると、
左上隅が原点で、x+が右側、y+が下側であり、デバイス座標系とスケールは同じですが、yの方向が逆であることに注意しましょう。
最後に
CGの用語ってややあいまいな気がします。
なので、本記事は修正していく予定です。
この記事に図を挿入する予定です。