Microsoft DirectX 8.0 (Visual Basic)

頂点バッファの作成

5 つのパラメータを受け取る Direct3DDevice8.CreateVertexBuffer メソッドを呼び出して、頂点バッファ オブジェクトを作成する。第 1 パラメータは、頂点バッファの長さをバイト数で指定する。Microsoft Visual Basic® の Len 関数を使用して、頂点フォーマットのサイズをバイト数で指定する。次に、カスタム頂点フォーマットの例を示す。

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

' カスタム頂点構造体を記述するカスタム FVF。
Const D3DFVF_CUSTOMVERTEX = (D3DFVF_XYZRHW Or D3DFVF_DIFFUSE Or D3DFVF_TEX1)

4 つの CUSTOMVERTEX 構造体を保持する頂点バッファを作成するには、Length パラメータに [4*sizeof(CUSTOMVERTEX)] を指定する。

第 2 パラメータは、使用コントロール セットである。特に、この値は、頂点バッファが表示領域外の頂点のクリッピング情報を (クリップ フラグ形式で) 保持することができるかどうかを指定する。クリップ フラグを格納できない頂点バッファを作成するには、Usage パラメータに D3DUSAGE_DONOTCLIP フラグを含める。D3DUSAGE_DONOTCLIP フラグは、頂点バッファがトランスフォーム済みの頂点を保持するように指示した場合、つまり D3DFVF_XYZRHW フラグが FVF メンバに含まれる場合のみ適用される。未トランスフォームの頂点 (D3DFVF_XYZ フラグ) をバッファに含めるよう指示した場合、CreateVertexBuffer メソッドは D3DUSAGE_DONOTCLIP フラグを無視する。クリッピング フラグは追加メモリを占有するため、クリッピング可能な頂点バッファは、クリッピング フラグを含めない頂点バッファよりも若干大きくなる。リソースは頂点バッファが作成されるときに割り当てられるため、クリッピング可能な頂点バッファは先に要求しておかなければならない。

第 3 パラメータ FVF は、柔軟な頂点フォーマット フラグの組み合わせによって、頂点バッファの頂点フォーマットを記述する。このパラメータに 0 を指定した場合、頂点バッファは非 FVF 頂点バッファとなる。詳細については、「FVF 頂点バッファ」を参照すること。第 4 パラメータは、頂点バッファを格納するメモリ クラスを指定する。

CreateVertexBuffer が受け取る最後のパラメータは、呼び出しが成功したときに頂点バッファ オブジェクトの新しい Direct3DVertexBuffer8 インターフェイスへのポインタが格納される変数のアドレスである。

  クリップ フラグをサポートしないで作成された頂点バッファにクリップ フラグを生成することはできない。

次のコードは、Visual Basic で頂点バッファを作成する方法を示している。

'
' この例では、変数 m_d3dDevice は
' 有効な Direct3DDevice8 オブジェクトである。
'

' カスタムの頂点タイプ。
Private Type CUSTOMVERTEX
    x As Single
    y As Single
    z As Single
    rhw As Single
    color As Long
    tu As Single
    tv As Single
End Type

Const D3DFVF_CUSTOMVERTEX = (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1)

' クリッピング可能な頂点バッファを作成する。3 つの CUSTOMVERTEX 構造体を保持するのに十分なメモリを
' デフォルトのメモリ プールに割り当てる。
VB = m_d3dDevice.CreateVertexBuffer( 3*len(CUSTOMVERTEX), _
                                     0 ' 使用 , D3DFVF_CUSTOMVERTEX, _
                                     D3DPOOL_DEFAULT)