2009-07-26 5 views
1

J'ai une texture utilisant le format D3DFMT_A8. Je veux rendre ceci comme si la couleur est blanche (c'est-à-dire que les composants RVB sont tous 255) et utiliser les données de texture pour le mélange alpha.Direct3D9 Rendu d'une texture D3DFMT_A8

Je voudrais le faire sans avoir à écrire un pixel shader si possible (pour travailler avec les shaders existants sans changements, et aussi le pipeline de fonction fixe).

je peux obtenir le bit alpha blending, pour travailler comme tout autre texture, mais les composantes RVB sont tous traités comme noir, alors que je en ai besoin d'être traités comme blanc ...

Répondre

1

Il semble que la couleur/alpha opérations interprète le composant couleur des textures D3DFMT_A8 comme rgb (0,0,0).

Vous devez sélectionner la composante de couleur de la couleur du matériau/sommet et la composante alpha du alphamap:

_d3d9Device.SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1) 
_d3d9Device.SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_CURRENT) 
_d3d9Device.SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1) 
_d3d9Device.SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE) 

Ensuite, vous pouvez moduler la texture de couleur:

_d3d9Device.SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE ) 
_d3d9Device.SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_CURRENT) 
_d3d9Device.SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_TEXTURE) 

Bien sûr , le mélange alpha doit être activé:

_d3d9Device.SetRenderState(D3DRS_ALPHATESTENABLE, False) 
_d3d9Device.SetRenderState(D3DRS_ALPHABLENDENABLE, True) 
_d3d9Device.SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA) 
_d3d9Device.SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA) 
Questions connexes