頂点アルファ (Direct3D 9)
アルファ データは頂点データに指定できます。 頂点アルファを有効にするには、Direct3D ランタイムがマテリアルではなく拡散色から拡散値を取得するように、D3DRS_DIFFUSEMATERIALSOURCEをD3DMCS_COLOR1に設定します。
m_pd3dDevice->SetRenderState( D3DRS_DIFFUSEMATERIALSOURCE,
D3DMCS_COLOR1 );
次に、拡散色でアルファ値を指定します。 AddAlphaToASphere 関数は、球の頂点にアルファを追加します。 関数にアルファ情報を提供する方法の例を次に示します。
AddAlphaToASphere( m_pObstacleVertices, 12,
D3DRGBA(light.dcvDiffuse.r, light.dcvDiffuse.g,
light.dcvDiffuse.b, vAlpha ));
これは関数の外観です。
void AddAlphaToASphere(D3DLVERTEX* pVertices, DWORD dwNumRings, D3DCOLOR lightcolor)
{
WORD x, y;
// rings around
for( y=0; y < dwNumRings; y++ )
for( x=0; x < (dwNumRings*2)+1; x++ )
(pVertices++)->color = lightcolor;
// top and bottom
(pVertices++)->color = lightcolor;
(pVertices++)->color = lightcolor;
}
AddAlphaToASphere は、アルファ情報を含むように、D3DLVERTEX 型の各頂点のカラー メンバーを変更するだけです。
D3DLVERTEX は次のようになります。
// Lit vertex
typedef struct {
D3DVALUE x, y, z;
DWORD dwReserved;
D3DCOLOR color, specular;
D3DVALUE tu, tv;
} D3DLVERTEX, *LPD3DLVERTEX;
球を描画する
#define D3DFVF_LVERTEX ( D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | \
D3DFVF_TEX0 )
//...
// Draw the lit sphere
m_pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, D3DFVF_LVERTEX,
m_pObstacleVertices, m_dwNumObstacleVertices,
m_pObstacleIndices, m_dwNumObstacleIndices, 0 );
は、頂点アルファを使用して透明な球になります。
関連トピック