Platform SDK: DirectX

ストライド頂点のレンダリング

[Visual Basic]

 :  ここでは、C++ でのアプリケーション開発について説明する。DirectX for Visual Basic では、ストライド頂点のレンダリングはサポートしていない。

[C++]

ストライド頂点は間接的な技法なので、アプリケーションで頂点を適切に設定するには注意が必要がある。詳細については、「ストライド頂点フォーマット」セクションを参照すること。開発者は、頂点成分を D3DDRAWPRIMITIVESTRIDEDDATA 構造体に格納していないことが多い。このような場合でも、レンダリング メソッドが必ずしも失敗するわけではないが、ジオメトリが「失われる」可能性があり、トラブルシューティングが困難になる。

次のコードは、ストライド頂点を設定してレンダリングする方法を示す。

//---------------------------------------------
// XYZ、ディフューズ色、および 2 組のテクスチャ座標を含む
// カスタム頂点フォーマット。
//---------------------------------------------
struct MTVERTEX
{
    FLOAT x, y, z;
    DWORD dwColor;
    FLOAT tuBase, tvBase;
    FLOAT tuLightMap, tvLightMap;
};
 
// カスタム頂点の配列を作成する。
MTVERTEX g_avVertices[36];
// 配列に頂点を格納する。
//  (インデックス 0 の頂点)
//  .
//  .
//  .
//  (インデックス 35 の頂点)
 
// 定義済みカスタム頂点の配列を使用して、
// ストライド頂点を構築する。
D3DDRAWPRIMITIVESTRIDEDDATA g_StridedData;
 
// 交互に配置した各種コンポーネントのアドレスを
// 対応するストライド メンバに割り当てる。
g_StridedData.position.lpvData          = &g_avWallVertices[24].x;
g_StridedData.diffuse.lpvData           = &g_avWallVertices[24].dwColor;
g_StridedData.textureCoords[0].lpvData  = &g_avWallVertices[24].tuBase;
g_StridedData.textureCoords[1].lpvData  = &g_avWallVertices[24].tuLightMap;
g_StridedData.position.dwStride         = sizeof(MTVERTEX);
g_StridedData.diffuse.dwStride          = sizeof(MTVERTEX);
g_StridedData.textureCoords[0].dwStride = sizeof(MTVERTEX);
g_StridedData.textureCoords[1].dwStride = sizeof(MTVERTEX);
 
// 複数のテクスチャ ブレンディング (調整) で頂点をレンダリングする。
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_MODULATE );
g_pd3dDevice->SetTexture( 0, g_BaseTextureMap);
g_pd3dDevice->SetTexture( 1, g_LightMap);
g_pd3dDevice->DrawPrimitiveStrided( D3DPT_TRIANGLELIST,
                        D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX2,
                        &g_StridedData, 12, NULL );