Hoekpunt alfa (Direct3D 9)
Alfagegevens kunnen worden opgegeven in de hoekpuntgegevens. Als u hoekpunt alfa wilt inschakelen, stelt u de D3DRS_DIFFUSEMATERIALSOURCE in op D3DMCS_COLOR1 zodat de Direct3D-runtime de diffuse waarde uit de diffuse kleur in plaats van het materiaal haalt.
m_pd3dDevice->SetRenderState( D3DRS_DIFFUSEMATERIALSOURCE,
D3DMCS_COLOR1 );
Geef vervolgens alfawaarden op in de diffuse kleur. De functie AddAlphaToASphere voegt alfa toe aan de hoekpunten van een bol. Hier volgt een voorbeeld van het opgeven van de alfagegevens aan de functie.
AddAlphaToASphere( m_pObstacleVertices, 12,
D3DRGBA(light.dcvDiffuse.r, light.dcvDiffuse.g,
light.dcvDiffuse.b, vAlpha ));
Dit is hoe de functie eruitziet.
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 wijzigt eenvoudig het kleurlid van elk hoekpunt, dat van het type D3DLVERTEX is, om de alfagegevens op te nemen.
D3DLVERTEX ziet er als volgt uit.
// Lit vertex
typedef struct {
D3DVALUE x, y, z;
DWORD dwReserved;
D3DCOLOR color, specular;
D3DVALUE tu, tv;
} D3DLVERTEX, *LPD3DLVERTEX;
De bol tekenen,
#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 );
resulteert in een transparante bol met behulp van hoekpunt alfa.
Verwante onderwerpen