Direct3D学习(三):光影贴图

刚看完了DXUT,拿来练练手
这个框架却实方便啊,终于不用写那些令人恶心的API函数了
光影贴图,说白了就是在纹理上表现出来光影效果,并不是实时计算的,所以适用于固定的场影平面,如地面,墙壁等
原理嘛,就是多层纹理的叠加,除了模型本身的纹理外,还需要光纹理

效果如图

关键代码如下:

                pd3dDevice -> SetTexture(  0 , pTexture0 );         /// 在0号纹理层固定纹理(壁面)
        pd3dDevice -> SetTexture(  1 , pTexture1 );         /// 在1号纹理层固定纹理(光影贴图)

        pd3dDevice
-> SetTextureStageState(  0 , D3DTSS_TEXCOORDINDEX,  0  );     /// 0号纹理:使用0号纹理索引
        pd3dDevice -> SetTextureStageState(  1 , D3DTSS_TEXCOORDINDEX,  0  );     /// 1号纹理:使用0号纹理索引
        pd3dDevice -> SetSamplerState(  0 , D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );     /// 0号纹理层的放大滤镜
        pd3dDevice -> SetSamplerState(  1 , D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );     /// 1号纹理层的放大滤镜
        pd3dDevice -> SetTextureStageState(  0 , D3DTSS_COLOROP,   D3DTOP_SELECTARG1 );
        pd3dDevice
-> SetTextureStageState(  0 , D3DTSS_COLORARG1, D3DTA_TEXTURE );
        pd3dDevice
-> SetTextureStageState(  0 , D3DTSS_ALPHAOP,   D3DTOP_SELECTARG1 );
        pd3dDevice
-> SetTextureStageState(  0 , D3DTSS_ALPHAARG1, D3DTA_TEXTURE );

        pd3dDevice
-> SetTextureStageState(  1 , D3DTSS_COLOROP,   D3DTOP_MODULATE );     /// 运用MODULATE运算进行颜色混合
        pd3dDevice -> SetTextureStageState(  1 , D3DTSS_COLORARG1, D3DTA_TEXTURE );
        pd3dDevice
-> SetTextureStageState(  1 , D3DTSS_COLORARG2, D3DTA_CURRENT );
        pd3dDevice
-> SetTextureStageState(  1 , D3DTSS_ALPHAOP,   D3DTOP_DISABLE );

        pd3dDevice
-> SetTextureStageState(  2 , D3DTSS_COLOROP,   D3DTOP_DISABLE );
        pd3dDevice
-> SetTextureStageState(  2 , D3DTSS_ALPHAOP,   D3DTOP_DISABLE );

你可能感兴趣的:(框架,api,Direct3D)