Microsoft DirectX 8.0 (Visual Basic)

柔軟な頂点フォーマットと頂点シェーダ

Microsoft® Direct3D® for Microsoft DirectX® 8.0 は、単一入力ストリームの固定機能頂点処理パイプラインを使用するためのプログラミング モデルを簡素化し、これまでの DirectX リリースと同様の機能を提供する。この場合、頂点シェーダは、現在の頂点シェーダを設定するときに頂点シェーダ ハンドルの代わりとして渡された柔軟な頂点フォーマット (FVF) コードから成る。頂点シェーダのハンドル空間はランタイム ライブラリによって管理され、この用途のために、有効な FVF コードのハンドルが予約されている。

FVF コードを現在の頂点シェーダとして設定すると、頂点処理はストリーム ゼロからのみロードされ、頂点要素は FVF コードの定義に従って変換される。

次のサンプル コードは、Microsoft Visual Basic® アプリケーションにおける FVF コードの頂点シェーダとしての使用方法を示している。

まず最初に、カスタム頂点タイプの構造体を定義し、頂点を初期化する。この例では、三角形をレンダリングするため、3 つの頂点が初期化される。

' このコードで、d3dDevice は、Direct3DDevice8 オブジェクトへの
' 有効な参照であると仮定している。 

Private Type CUSTOMVERTEX
    x As Single         ' スクリーン空間 x 座標。
    y As Single         ' スクリーン空間 y 座標。
    z  As Single        ' 正規化された z 座標。
    rhw As Single       ' 正規化された z rhw 座標。
    color As Long       ' 頂点カラー。
End Type

Const D3DFVF_CUSTOMVERTEX = (D3DFVF_XYZRHW Or D3DFVF_DIFFUSE)

Dim Vertices(2) As CUSTOMVERTEX
Dim VertexSizeInBytes As Long

VertexSizeInBytes = Len(Vertices(0))
    
With Vertices(0): .x = 150: .y =  50: .z = 0.5: .rhw = 1: .color = &HFFFF0000: End With
With Vertices(1): .x = 250: .y = 250: .z = 0.5: .rhw = 1: .color = &HFF00FF00: End With
With Vertices(2): .x =  50: .y = 250: .z = 0.5: .rhw = 1: .color = &HFF00FFFF: End With

次に、ストリーム ゼロを使用してプリミティブをレンダリングする。

sizeOfVertex = Len(v)
d3dDevice.SetStreamSource 0, g_VB, sizeOfVertex
d3dDevice.SetVertexShader D3DFVF_CUSTOMVERTEX
d3dDevice.DrawPrimitive D3DPT_TRIANGLELIST, 0, 1

詳細については、「頂点シェーダ」を参照すること。