Direct3D学习(三):光影贴图

2018-05-21 15:24:07 浏览数 (1)

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

效果如图

关键代码如下:

代码语言:javascript复制
        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 );

0 人点赞