Microsoft DirectX 8.0 (Visual Basic)

トランスフォーム済み ライティング済みの頂点

頂点フォーマット記述に D3DFVF_XYZRHW フラグを含めた場合、アプリケーションで「トランスフォーム済み ライティング済みの頂点」を使用することがシステムに通知される。これは、Microsoft® Direct3D® でワールド行列、ビュー行列、または射影行列を使用して頂点をトランスフォームせず、ライティング計算も実行しないことを意味している。つまり、Direct3D は、アプリケーションでこれらの処理が実行済みであると見なしている。これにより、既存の 3D アプリケーションを Direct3D に移植するとき、トランスフォーム済み ライティング済みの頂点がそのまま使える。要するに、Direct3D は、「トランスフォーム済み ライティング済みの頂点」をまったく変更しない。ドライバに直接渡してラスタ化を実行する。

未トランスフォームの頂点とライティングに関連付けられている頂点フォーマット フラグ (D3DFVF_XYZ と D3DFVF_NORMAL) は、D3DFVF_XYZRHW がある場合は使用できない。フラグの依存および排他関係の詳細については、「柔軟な頂点フォーマット フラグ」を参照すること。

頂点位置座標を指定するときは、トランスフォーム済みのものを指定しなければならない。x と y の値はスクリーン座標内に存在している必要があり、z は Z バッファで使用されるピクセルの深度値でなければならない。z 値は 0.0 〜 1.0 の値である。0.0 はユーザーに最も近い位置座標で、1.0 は可視領域内の最も遠い位置座標である。「トランスフォーム済み ライティング済みの頂点」は、位置座標のすぐ後に RHW 値 (同次 W の逆数) を含んでいなければならない。RHW は、射影空間内で頂点が存在する同次ポイント (x、y、z、w) からの W 座標の逆数である。この値は、z 軸に沿った、視点から頂点までの距離になることが多い。

位置座標と RHW の条件を除けば、この頂点フォーマットは、「未トランスフォーム ライティング済みの頂点」と同じである。これまでの説明を以下にまとめる。

Microsoft Visual Basic® アプリケーションでは、「トランスフォーム済み ライティング済みの頂点」に対して D3DTLVERTEX 型または D3DTLVERTEX2 型を使用できる。これらの型にアプリケーションで必要なすべてのフィールドが含まれていない場合は、別の型を定義することができる。新しい構造体を宣言するときは、必ず頂点の成分が正しい順序になるようにする。次のサンプル コードは、ディフューズ頂点カラー、スペキュラ頂点カラー、およびテクスチャ座標セットを 1 つだけ持つ、トランスフォーム済みでライティングのある有効な頂点を宣言する。

'
' この頂点の頂点フォーマット記述は、
' (D3DFVF_XYZRHW Or D3DFVF_DIFFUSE Or D3DFVF_SPECULAR Or D3DFVF_TEX1) になる。
'
Type TRANSLITVERTEX
    x As Single       ' スクリーン座標
    y As Single
    z As Single       ' Z バッファ深度
    rhw As Single     ' 同次 W の逆数
    Diffuse As Long   ' ディフューズ色
    Specular As Long  ' スペキュラ色
    tu1 As Single     ' テクスチャ座標
    tv1 As Single
End Type

この型の頂点記述は、柔軟な頂点フォーマット フラグ D3DFVF_XYZRHW、D3DFVF_DIFFUSE、D3DFVF_SPECULAR、および D3DFVF_TEX1 の組み合わせになる。

詳細については、「頂点フォーマットについて」および「トランスフォーム済み ライティング済みの頂点の機能」を参照すること。