1
我有一個使用D3DFMT_A8格式的紋理。我想渲染它,就好像顏色是白色的(即RGB分量都是255)並使用紋理數據進行alpha混合。Direct3D9渲染一個D3DFMT_A8紋理
我想這樣做,而不必編寫像素着色器(如果可能的話,使用現有的着色器,以及固定功能管道)。
我能得到阿爾法混合位工作就像任何其他的質感,但是RGB分量都被視爲黑,而我需要他們爲白色處理...
我有一個使用D3DFMT_A8格式的紋理。我想渲染它,就好像顏色是白色的(即RGB分量都是255)並使用紋理數據進行alpha混合。Direct3D9渲染一個D3DFMT_A8紋理
我想這樣做,而不必編寫像素着色器(如果可能的話,使用現有的着色器,以及固定功能管道)。
我能得到阿爾法混合位工作就像任何其他的質感,但是RGB分量都被視爲黑,而我需要他們爲白色處理...
似乎顏色/ 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)