本方法是凹凸貼圖的實現方法之一,適用於任何圖形卡,包括不支持硬件貼圖的顯卡。注:頂點格式和其他要點待補充。參考DXSDK 例子BumpSelfShadow.
具體代碼如下:
LPDIRECT3DTEXTURE9 m_ctex;//貼圖紋理
LPDIRECT3DTEXTURE9 m_mtex;//高度圖原始圖像
LPDIRECT3DTEXTURE9 m_ntex;//生成的凹凸信息紋理
1。生成兩個紋理
D3DXCreateTextureFromFile(m_pDev,"skybox_back.JPG",&m_ctex);
D3DXCreateTextureFromFile(m_pDev,"earthbump.bmp",&m_mtex);
D3DXCreateTexture(m_pDev,iWidth,iHeight,0,0,D3DFMT_A8R8G8B8,D3DPOOL_MANAGED,&m_ntex);
D3DXComputeNormalMap(m_ntex,m_mtex,NULL,0,D3DX_CHANNEL_BLUE,10);
2。渲染部分
m_pDev->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_DOTPRODUCT3);
m_pDev->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
m_pDev->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
m_pDev->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
m_pDev->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
m_pDev->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_MODULATE);
m_pDev->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
m_pDev->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT);
m_pDev->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
m_pDev->SetTextureStageState( 1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
m_pDev->SetTexture(1,m_ctex);
m_pDev->SetTexture(0,m_ntex);