Platform SDK: DirectX

パイプラインの概要

ジオメトリのジオメトリ パイプラインを実行するのは、Direct3D のトランスフォーム エンジンである。これは、ワールド内のモデルとビューアを検出し、スクリーン上に表示できるように頂点を射影し、頂点をビューポートに切り取る (トランスフォーム エンジンは、また、ライティング計算を実行して各頂点のディフューズおよびスペキュラ成分を決定する。詳細については、「ライティングとマテリアル」を参照すること)。

ジオメトリ パイプラインは、頂点を入力として受け取る。トランスフォーム エンジンは、頂点に 3 つのトランスフォーム (ワールド トランスフォーム、ビュー トランスフォーム、および射影トランスフォーム) を適用し、結果をクリップし、そのすべてをラスタライザに渡す。この一連の処理は次のようになる。

パイプラインの最初の段階ではトランスフォームは適用されず、モデルの頂点はすべてローカル座標系 (これはローカル原点とローカル座標軸である) に対して宣言される。この座標空間を一般にモデル空間と呼び、個々のローカル座標はモデル座標と呼ぶ。

ジオメトリ パイプラインでは、最初にローカル座標系のモデルの頂点が、シーンのすべてのオブジェクトで使用する座標系にトランスフォームされる。頂点をワールド座標系で再度定義し直すことを、ワールド トランスフォームと呼ぶ。この新しい方向は、通常はワールド空間と呼ばれ、ワールド空間の各頂点は、ワールド座標を使用して宣言される。このトランスフォームについては、「ワールド トランスフォーム」で説明する。

次に、3D ワールドを記述する頂点をカメラに対する相対位置座標で定義し直す。つまり、アプリケーションはシーンの視点 (カメラの位置) を選択し、ワールド空間は視点の位置と向きに合わせて再定義される。すなわち、ワールド空間がカメラ空間にトランスフォームされる。これがビュー トランスフォームである。詳細については、「ビュー トランスフォーム」を参照すること。

次の段階では、射影トランスフォームが行われる。パイプラインにおけるこの段階では、通常、遠くのオブジェクトよりも近くのオブジェクトの方が大きく見えるようにするなど、ビューアからの距離を基準にオブジェクトがスケーリングされて、シーンに奥行きが生まれる。このトランスフォームについては、「射影トランスフォーム」で説明する。分かりやすくするために、このドキュメントでは、射影トランスフォーム後の頂点が存在する空間を、射影空間と呼ぶことにする (グラフィックス関連の書籍では、射影空間のことを、遠近補正後同次空間と呼ぶ場合もある)。すべての射影トランスフォームによってシーンのオブジェクトのサイズがスケーリングされるとは限らない。このような射影は、アフィン射影または正射影と呼ばれることもある。

パイプラインの最後の段階では、スクリーン上で見えない頂点がすべて削除される。これにより、ラスタライザは、見えないオブジェクトに関して色とシェーディングの計算を実行する必要がなくなる。この処理はクリッピングと呼ばれ、これについては「ビューポートとクリッピング」で説明する。クリッピングが完了すると、残りの頂点はビューポート パラメータに従ってスケーリングされ、スクリーン座標系にトランスフォームされる。その結果、これらの頂点は、シーンがラスタ化されたときにスクリーンに表示され、スクリーン空間に存在するようになる。