凹凸贴图(Bump Mappinig)固定光线实现方法

来源:互联网 发布:网络经典表情出处gif 编辑:程序博客网 时间:2024/05/18 01:30

本方法是凹凸贴图的实现方法之一,适用于任何图形卡,包括不支持硬件贴图的显卡。注:顶点格式和其他要点待补充。参考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);