OpenGLの座標系覚書き

OpenGL の五つの座標系

  1. ローカル座標系(オブジェクト座標系、ボディ座標系、モデリング座標系)
  2. ワールド座標系
  3. 視点座標系(ビュー座標系)
  4. 投影面座標系(クリップ座標系、表示範囲)
  5. ウィンドウ座標系(スクリーン座標系、ビューポート)

我々がコマンドで座標を触るのは、殆どがワールド座標系です。
視点座標系は我々は直接いじりません。

変換

  1. モデリング変換(ローカル座標系→ワールド座標系)
  2. 視野変換・視界変換・ビューイング変換(ワールド座標系→視点座標系)
  3. 投影変換(視点座標系→投影面座標系)
  4. ビューポート変換(投影面座標系→ウィンドウ座標系)

モデリング変換と視野変換をまとめて「モデルビュー変換」などと呼びます。モデルビュー変換には「平行移動」「回転」「スケーリング」があります。
視野変換は例えば gluLookAt() で制御します。これは視点変換です。
投影変換は OpenGL が勝手にやってくれますが、透視投影と直交投影の二通リが選べます。ふつうは透視投影を使うと思うので、以下はそれ用になっています。視体積内の物体が投影面に映ります。
ビューポート変換は glViewport() で指定します。この変換も我々は直接タッチしません。

glMatrixMode

  1. GL_MODELVIEW モデルビュー(変換)行列を選択。モデリング変換からさらに視野変換を行う。
  2. GL_PROJECTION 投影(変換)行列を選択。投影変換を行う。


後置乗算

例えば円錐を描くとして、

  1. glLoadIdentity
  2. giRotate*
  3. glTranslate*
  4. glWireCone

とあった場合、3→2→1 の順に変換される。つまり、平行移動が先、回転が後である。