カメラパラメータを考慮した透視投影
実際のカメラパラメータで透視変換したくなったので調べてみた.

をそれぞれカメラ座標系, 正規化デバイス座標系での同次座標とする. また, 内部行列を

とする. ここで,

は焦点距離,

は1画素の物理的なサイズの逆数,

は画像中心である.
OpenGLの透視変換行列

はglFrustum()で設定でき, その内容は以下のとおり.

によりカメラ座標系から正規化デバイス座標系に変換される.
ここで,

はそれぞれNear平面の左上, 右下, Near平面までの距離, Far平面までの距離.
正規化デバイス空間は
![{\bf x} \in \left[-1,1\right]\times\left[-1,1\right]\times\left[-1,1\right]](http://chart.apis.google.com/chart?cht=tx&chf=bg,s,ffffff00&chco=000000ff&chs=25&chl=%7B%5Cbf%20x%7D%20%5Cin%20%5Cleft%5B-1%2C1%5Cright%5D%5Ctimes%5Cleft%5B-1%2C1%5Cright%5D%5Ctimes%5Cleft%5B-1%2C1%5Cright%5D)
で定義される.
カメラパラメータを考慮した場合, 以下の行列

でカメラ座標系から正規化デバイス座標系に変換できることがわかる.
なぜなら,

より,
となり, まとめると

は画像中心を原点とした場合の画像座標なので,

となる(クリッピングを考慮). よって,

となる. また,

であることから,

であることもわかる. よって,

でカメラ座標系から正規化デバイス座標系へ座標変換可能.
行列スタック
最終更新:2010年06月25日 17:33