最近 OpenGL の勉強をしているんだけど、別名がいろいろ出てきて混乱してくるのでまとめみる。
オブジェクト空間
- 別名: モデリング空間、ローカル空間
- 次数: 3
- 原点: どこでもかまわないが、通常は原点を中心に回転させたときに妥当な振る舞いになるよう中心を原点にとる。
- 各モデルに固有空間。モデルを作成するときにはこの座標系で作業する。
ワールド空間
- 次数: 3
- 原点: どこでもかまわない。
- 全てのオブジェクトを配置するためのグローバルな絶対座標をを提供するための空間。ライティング、物理計算はこの座標で行われることが多い。
カメラ空間
- 別名: 視野空間 (view space)、視点空間 (eye space)
- 次数: 3
- 原点: カメラの位置
- 原点だけでなく、向きも大事。右手座標系ではカメラが向いている方向を \( -z \) 方向(手前ほど大きな値で奥ほど小さな値)、カメラマンにとっての上と右をそれぞれ \( +y, +x \) 方向にとる。
クリップ空間
- 別名: 正準視体積空間
- 次数: 4 (同次座標の \( w \) 成分が \( 1 \) ではなく、意味のある値を持つという意味で)
- 原点: 中心
- 最終的に見えるオブジェクトを決定するための空間。OpenGL の場合、この座標空間に変換後 \( -w \le x \le w, -w \le y \le w, -w \le z \le w \) になっている点が最終的に映し出される空間に含まれるとして処理される。つまり視錐台の 6 面が \( x = \pm w, y = \pm w, z = \pm w \) の 6 面になる。
正規化デバイス座標空間
- 別名: NDC (Normalized Device Coordinate) space
- 次数: 3 (同次座標の \( w \) 成分は \( 1 \) で、もう意味はない)
- クリップ空間の各点について \( x, y, z, w \) 成分をそれぞれ \( w \) 成分で割って正規化した点が入っている空間。したがって視錐台の 6 面は \( x = \pm 1, y = \pm 1, z = \pm 1 \) の 6 面になる。
ウィンドウ空間
- 次数: 3 (2ではない。 \( z \) 成分は深度テストで使うため意味のある値を持っている)
- 正規化デバイス空間の各点の \( x, y \) 成分を最終的な画像を表示するウィンドウのピクセル単位のサイズに合わせてスケールしたもの。正規化デバイス空間では視錐台に含まれる各点の \( x, y \) 成分は \[ -1 \le x \le 1, \\ -1 \le y \le 1 \] に含まれたがこれが \[ -window\_width / 2 \le x \le window\_width / 2, \\ -window\_height /2 \le y \le window\_height / 2 \] になるようにスケールする。
0 件のコメント:
コメントを投稿