首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

模板测试?解决方法

2012-03-02 
模板测试??HR(gd3dDevice-SetRenderState(D3DRS_STENCILENABLE,true))HR(gd3dDevice-SetRenderState(D3

模板测试??
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 混合, 这样渲染的反射图像可以和镜子混合起来。

热点排行