Platform SDK: DirectX |
注 : ここでは、C++ でのアプリケーション開発について説明する。DirectX for Visual Basic では、ストライド頂点のレンダリングはサポートしていない。
ストライド頂点は間接的な技法なので、アプリケーションで頂点を適切に設定するには注意が必要がある。詳細については、「ストライド頂点フォーマット」セクションを参照すること。開発者は、頂点成分を 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 );