close


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                   

       0ec16458a293928f800a181b.jpg         779e5211dfe688c8a7ef3f38.jpg     =   


效果

20f465a23ad7cfa3cbefd012.jpg

 

 

 

arrow
arrow
    全站熱搜

    createps 發表在 痞客邦 留言(0) 人氣()