模板测试??
HR(gd3dDevice->SetRenderState(D3DRS_STENCILENABLE, true));
HR(gd3dDevice->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_ALWAYS)); //模板测试总是通过的
HR(gd3dDevice->SetRenderState(D3DRS_STENCILREF, 0x1)); //模板测试的参考值
HR(gd3dDevice->SetRenderState(D3DRS_STENCILMASK, 0xffffffff)); //掩码
HR(gd3dDevice->SetRenderState(D3DRS_STENCILWRITEMASK, 0xffffffff));
HR(gd3dDevice->SetRenderState(D3DRS_STENCILZFAIL, D3DSTENCILOP_KEEP));
HR(gd3dDevice->SetRenderState(D3DRS_STENCILFAIL, D3DSTENCILOP_KEEP));
HR(gd3dDevice->SetRenderState(D3DRS_STENCILPASS, D3DSTENCILOP_REPLACE)); //用模板参考值代替模板缓存的 也就是说将1写入模板缓存中
HR(gd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE, false));
HR(gd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, true));
HR(gd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ZERO));
HR(gd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE));
// Draw mirror to stencil only. 把镜子的部分写入模板缓冲区
drawMirror();
// Re-enable depth writes
HR(gd3dDevice->SetRenderState( D3DRS_ZWRITEENABLE, true ));
红色的那个部分的代码不懂
[解决办法]
SetRenderState 设置多重纹理
D3DRS_ZWRITEENABLE 默认值TRUE表示可以写深度缓存,这个参数可以保护深度缓存不被系统修改。深度比对规则是依照D3DRS_ZFUNC参数的,如果值为FALSE的话,假设深度缓存被修改,但是这个值却不能写进缓存。
D3DRS_ALPHABLENDENABLE允许使用alpha混合,默认是FALSE。而混合类型是由D3DRS_SRCBLEND 和 D3DRS_DESTBLEND决定的。
D3DRS_SRCBLEND 和 D3DRS_DESTBLEND 是用来设定支持的混合模式。
D3DRS_DESTBLEND 是用来设定支持的混合模式。
[解决办法]
红色的部分就是禁用z write,打开并设置alpha 混合, 这样渲染的反射图像可以和镜子混合起来。