2009-07-26 84 views
1

我有一個使用D3DFMT_A8格式的紋理。我想渲染它,就好像顏色是白色的(即RGB分量都是255)並使用紋理數據進行alpha混合。Direct3D9渲染一個D3DFMT_A8紋理

我想這樣做,而不必編寫像素着色器(如果可能的話,使用現有的着色器,以及固定功能管道)。

我能得到阿爾法混合位工作就像任何其他的質感,但是RGB分量都被視爲黑,而我需要他們爲白色處理...

回答

1

似乎顏色/ alpha操作將D3DFMT_A8紋理的顏色分量解釋爲rgb(0,0,0)。

所以,你必須選擇從材料/頂點顏色的顏色分量和從alpha貼圖的alpha分量:

_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) 

然後,你可以調節顏色質地:

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

當然,必須啓用alpha混合:

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