Platform SDK: DirectX

頂点のマニュアル トランスフォーム

Direct3D アプリケーションでは、3 種類の頂点を使用できる。頂点フォーマットの詳細については、「頂点フォーマット」を参照すること。

[C++]
未トランスフォーム 未ライティングの頂点
アプリケーションでライティングもトランスフォームも適用しない頂点。シーンをレンダリングする前に頂点にトランスフォーム & ライティングを適用しない C++ アプリケーションでは、D3DVERTEX 頂点 (または同等の柔軟な頂点フォーマット) を使用できる。ライティング パラメータやトランスフォーム行列を指定しても、計算は Direct3D が実行する。
未トランスフォーム ライティング済みの頂点
アプリケーションでライティングは適用するが、トランスフォームは適用しない頂点。カスタマイズしたライティング エフェクトを使用する C++ アプリケーションでは、D3DLVERTEX 頂点 (または同等の柔軟な頂点フォーマット) を使用できる。
トランスフォーム済み ライティング済みの頂点
アプリケーションでライティングとトランスフォームの両方を適用する頂点。頂点にライティングとトランスフォームを適用する C++ アプリケーションでは、D3DTLVERTEX 頂点 (または同等の柔軟な頂点フォーマット) を使用できる。これらの頂点はジオメトリ パイプラインでトランスフォームされないが、必要に応じてシステムでクリッピングすることができる。アプリケーション自体で頂点をクリッピングする場合に最も良い方法は、レンダリング メソッドを呼び出すときに D3DDP_DONOTCLIP フラグを指定することである。Direct3D で頂点をクリッピングする場合は、D3DDP_DONOTCLIP フラグは指定しない。ただし、トランスフォーム済みライティング済みの頂点のクリッピングを Direct3D で実行する場合、Direct3D はクリッピングのために頂点を射影空間に逆変換してからスクリーン空間に変換し直すため、処理オーバーヘッドが生じることに注意する。

DirectX 7.0 では、頂点バッファを使用して、単純な頂点タイプを複雑な頂点タイプに変えることができる (旧リリースの DirectX では、アプリケーションで IDirect3DViewport3 インターフェイスの TransformVertices メソッドを呼び出すことができた。DirectX 6.0 で頂点バッファが導入されたことにより、このメソッドは使用されなくなった)。頂点バッファとは、高速なレンダリングを実行するために頂点をまとめて格納してバッチ処理するためのオブジェクトで、プロセッサ固有の機能を利用するように最適化できる。頂点バッファには、自動的に頂点トランスフォームを実行する IDirect3DVertexBuffer7::ProcessVertices および IDirect3DVertexBuffer7::ProcessVerticesStrided メソッドがある。このメソッドは、通常 TransformVertices メソッドよりもはるかに処理が速い。ProcessVertices ファミリのメソッドは未トランスフォームの頂点のみ受け取るが、オプションとして頂点へのライティングの適用とクリッピングが可能である。ライティングは ProcessVertices を呼び出したときに適用されるが、クリッピングが実行されるのはレンダリングのときである。

頂点を処理した後、特別なレンダリング メソッドを使用して頂点をレンダリングしたり、頂点バッファ メモリをロックして頂点に直接アクセスすることができる。頂点バッファの使用の詳細については、「頂点バッファ」を参照すること。

[Visual Basic]
未トランスフォーム 未ライティングの頂点
アプリケーションでライティングとトランスフォームを適用しない頂点。シーンをレンダリングする前に頂点にトランスフォーム & ライティングを適用しない Visual Basic アプリケーションでは、D3DVERTEX 頂点 (または同等の柔軟な頂点フォーマット) を使用できる。ライティング パラメータやトランスフォーム行列を指定しても、計算は Direct3D が実行する。
未トランスフォーム ライティング済みの頂点
アプリケーションでライティングは適用するが、トランスフォームは適用しない頂点。カスタマイズしたライティング エフェクトを使用する Visual Basic アプリケーションでは、D3DLVERTEX 頂点 (または同等の柔軟な頂点フォーマット) を使用できる。
トランスフォーム済み ライティング済みの頂点
アプリケーションでライティングとトランスフォームの両方を適用する頂点。頂点にライティングとトランスフォームを適用する Visual Basic アプリケーションでは、D3DTLVERTEX 頂点 (または同等の柔軟な頂点フォーマット) を使用できる。これらの頂点はジオメトリ パイプラインでトランスフォームされないが、必要に応じてシステムでクリッピングすることができる。アプリケーション自体で頂点をクリッピングする場合に最も良い方法は、レンダリング メソッドを呼び出すときに D3DDP_DONOTCLIP フラグを指定することである。Direct3D で頂点をクリッピングする場合は、D3DDP_DONOTCLIP フラグは指定しない。ただし、トランスフォーム済みライティング済みの頂点のクリッピングを Direct3D で実行する場合、Direct3D はクリッピングのために頂点を射影空間に逆変換してからスクリーン空間に変換し直すため、処理オーバーヘッドが生じることに注意する。

頂点バッファを使用して、単純な頂点タイプを複雑な頂点タイプに変えることができる。頂点バッファとは、高速なレンダリングを実行するために頂点をまとめて格納してバッチ処理するためのオブジェクトで、プロセッサ固有の機能を利用するように最適化できる。頂点バッファには、自動的に頂点トランスフォームを実行する Direct3DVertexBuffer7.ProcessVertices メソッドがある。このメソッドは、通常 TransformVertices メソッドよりもはるかに処理が速い。ProcessVertices メソッドは未トランスフォームの頂点のみ受け取るが、オプションとして頂点へのライティングの適用とクリッピングが可能である。ライティングは ProcessVertices を呼び出したときに適用されるが、クリッピングが実行されるのはレンダリングのときである。

頂点を処理した後、特別なレンダリング メソッドを使用して頂点をレンダリングしたり、頂点バッファ メモリをロックして頂点に直接アクセスすることができる。頂点バッファの使用の詳細については、「頂点バッファ」を参照すること。