DirectX9設置紋理渲染--SetTextureStageState()
函數原型 SetTextureStageState(
DWORD Stage, //當前設置的多級紋理的索引
D3DTEXTURESTAGESTATETYPE Type, //紋理渲染狀態的類型
DWORD Value //紋理渲染狀態的值,與類型相對應
) ;
//類型枚舉值如下
typedef enum D3DTEXTURESTAGESTATETYPE
{
D3DTSS_COLOROP = 1, //紋理的顏色混合方式
D3DTSS_COLORARG1 = 2, //顏色混合的第一個參數
D3DTSS_COLORARG2 = 3, //顏色混合的第二個參數
D3DTSS_ALPHAOP = 4, //指定紋理的Alpha(“阿拉法”) 透明
D3DTSS_ALPHAARG1 = 5, //Alpha混合的第一個參數
D3DTSS_ALPHAARG2 = 6, //Alpha混合的第二個參數
D3DTSS_BUMPENVMAT00 = 7, //繪製凹凸紋理
D3DTSS_BUMPENVMAT01 = 8,
D3DTSS_BUMPENVMAT10 = 9,
D3DTSS_BUMPENVMAT11 = 10,
D3DTSS_TEXCOORDINDEX = 11, //該紋理使用紋理坐標的索引
D3DTSS_BUMPENVLSCALE = 22,
D3DTSS_BUMPENVLOFFSET = 23,
D3DTSS_TEXTURETRANSFORMFLAGS = 24,
D3DTSS_COLORARG0 = 26,
D3DTSS_ALPHAARG0 = 27,
D3DTSS_RESULTARG = 28,
D3DTSS_CONSTANT = 32,
D3DTSS_FORCE_DWORD = 0x7fffffff,
} D3DTEXTURESTAGESTATETYPE, *LPD3DTEXTURESTAGESTATETYPE;
在使用該函數之前應該設置當前要渲染的紋理用SetTexture();
函數原型為 :
HRESULT SetTexture(
DWORD Stage, //多級紋 理的索引,從0-7 ,單層紋理取0
IDirect3DBaseTexture9 *pTexture //紋理指針
);
下面是今天老師留的作業,用兩張圖片混合來渲染一個 Box ,主要用到的就是上面兩個函數具體實現如下:
void CBox::Render(LPDIRECT3DDEVICE9 pDD9)
{
//設置剪裁方式
pDD9->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);
//設置紋理貼圖渲染狀態
if ( m_pTexture1 != NULL && m_pTexture2 != NULL)
{
pDD9->SetTexture(0, m_pTexture1);
pDD9->SetTextureStageState(0, D3DTSS_COLOROP ,D3DTA_TEXTURE);
pDD9->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX ,D3DFVF_TEX1);
pDD9->SetTexture(1, m_pTexture2);
//D3DTOP_ADDSIGNED ARG1+ARG2-0.5
pDD9->SetTextureStageState(1, D3DTSS_COLOROP,D3DTOP_ADDSIGNED);
//ARG1為 當前的紋理
pDD9->SetTextureStageState(1, D3DTSS_COLORARG1 ,D3DTA_CURRENT )
//ARG2 為當前選用的紋理
pDD9->SetTextureStageState(0, D3DTSS_COLORARG2 ,D3DTA_TEXTURE);
//選擇第2層紋理坐標
pDD9->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX ,D3DFVF_TEX2);
}
m_pTexture1 + m_pTexture2
=
效果