座標変換と行列
ゲームや3Dグラフィックスでは、頂点の位置を順番に座標変換していきます。
ローカル座標 → ワールド座標 → ビュー座標 → プロジェクション座標 → スクリーン座標
📍各変換の行列
ローカル座標 → (ワールド行列) → ワールド座標 → (ビュー行列) → ビュー座標 → (プロジェクション行列) → プロジェクション座標 → (ビューポート変換) → スクリーン座標
◆1. ローカル座標 → ワールド座標
- 使う行列:ワールド行列(World Matrix)
- モデルを「世界」に配置するための行列。
- 平行移動(位置)
- 回転(向き)
- 拡大縮小(スケール)
例:キャラクターを原点からフィールド上の (10, 0, 5) に移動する。
◆2. ワールド座標 → ビュー座標
- 使う行列:ビュー行列(View Matrix)
- カメラの位置と向きを基準にして座標を変換。
- カメラを原点にし、カメラの向きをZ軸方向にそろえる。
例:ワールド上で (10, 0, 5) にいるキャラも、カメラが動けば見える位置は変わる。
◆3. ビュー座標 → プロジェクション座標
- 使う行列:プロジェクション行列(Projection Matrix)
- 3Dを2Dに投影するための行列。
- 種類:
- 透視投影(Perspective)… 遠くの物は小さく見える
- 平行投影(Orthographic)… 距離に関係なく大きさ一定
例:奥の敵は小さく、近くの敵は大きく見える。
◆4. プロジェクション座標 → スクリーン座標
- 使うもの:ビューポート変換(Viewport Transform)
- 正規化デバイス座標 ( -1 ~ +1 ) を、実際の画面ピクセルに変換。
例:
- (-1, -1) → (0,0)(画面左下)
- ( 1, 1) → (1920,1080)(画面右上)
◆まとめ(式で表すと)
スクリーン座標 = ローカル座標 × ワールド行列 × ビュー行列 × プロジェクション行列 × ビューポート変換