3Dシーン内のカメラは魔法ではありません。カメラは、点の表し方を繰り返し変えているだけです。最も単純なカメラ座標系の場合、点 `(x, y, z)` は画面上で `(x/z, y/z)` になります。`y` が上、`z` が奥方向を表すなら、`z` を大きくすると画面座標の両方が小さくなるため、オブジェクトは消失点に近づいて見えます。たとえば、`(2, 1, 2)` は `(1, 0.5)` に投影され、`(2, 1, 8)` は `(0.25, 0.125)` に投影されます。これが、Gabriel Ocの記事にあるインタラクティブな例の背後にある「深度で割る」近道です。

3D投影における焦点距離と撮影距離を説明する、家とカメラのアニメーション図
カメラ距離と焦点距離は、3Dシーンが2Dビューにどのように写るかを変えます。en.wikipedia.org

このアニメーションは、カメラの深度を増やすと、投影された画面位置が共通の消失点へ向かって移動するという冒頭の説明を補強します。

この近道は、透視投影行列の特殊な場合でもあります。完全なパイプラインではまず、点を共有ワールド空間からカメラ中心のビュー空間へ移動し、次に4×4行列を掛けることでクリップ空間座標を生成します。これらの座標を `w` 成分で割ると、正規化デバイス座標(NDC)が得られます。これは、ピクセルへマッピングする前に、カメラの表示範囲内での位置を表します。焦点スケールとアスペクト比がどちらも `1` の場合、行列の `x` と `y` の式は正確に `x/z` と `y/z` に簡約されます。

3D座標を2つの画面軸へ直交投影する行列方程式
投影行列は、カメラ成像の背後にある座標変換を表します。en.wikipedia.org

この方程式は、投影行列、クリップ空間座標、正規化デバイス座標に関する説明を視覚的に補完します。

追加の座標には、実用的な疑問への答えがあります。3Dの点を表すのに、なぜ4つの数を使うのでしょうか。情報源では、`(x, y, z, 1)` は元の点を保ちながら、4×4行列がその点に作用できるようにすると説明されています。また、点と、`w = 0` で表される方向も区別します。方向は平行移動の影響を受けません。より広いパイプラインが重要なのは、実際のカメラには向き、位置、視野角、アスペクト比、近クリップ面と遠クリップ面も必要だからです。単純な深度除算は、それらの要素を扱っていません。

回転行列と3D点の平行移動を組み合わせたカメラビュー方程式
回転と平行移動により、ワールド空間の点をカメラ中心のビューへ移します。en.wikipedia.org

この式は、投影とクリッピングの前にカメラ位置と向きを考慮する、より完全なカメラパイプラインを示しています。

これは教育用のデモであり、完全なレンダリングシステムではありません。著者は、これらの例が制約付きで素朴なものだと呼び、実際の3D制作では通常、より完全な投影機構が必要になると述べています。提供されたWikipediaのページは、3D投影を、3Dオブジェクトを2D平面上に表示する技術として独立して説明しています。一方、Phosphor3Dリポジトリは、クリッピング、カリング、慎重な深度処理を省略すると、歪みが生じたり、描画順序が誤ったりする理由を示しています。中心的な教訓は、より限定されていますが有用です。深度除算は透視投影の段階を明らかにします。一方、カメラは、その段階を信頼できるものにするために必要な周囲の変換を追加します。