模板缓冲区测试设置DirectX9

时间:2013-01-07 18:20:38

标签: hlsl directx-9 stencil-buffer

我有一个呈现所需颜色三角形的功能。我正在尝试使用模板测试启用渲染黄色三角形,然后在其上面呈现红色三角形。我正在使用一个圆圈作为我的模板窗口。什么应该是我的模板测试方程和操作,以获得以下输出。仅在DirectX09中进行所有渲染。 Desired output 请指导以下API的一些简单的例子......

SetRenderState(D3DRS_STENCILFUNC,
SetRenderState(D3DRS_STENCILREF,
SetRenderState(D3DRS_STENCILMASK,
SetRenderState(D3DRS_STENCILWRITEMASK,
SetRenderState(D3DRS_STENCILZFAIL,
SetRenderState(D3DRS_STENCILFAIL
SetRenderState(D3DRS_STENCILPASS,

我们如何在DirectX09着色器效果文件(vs_3_0和ps_3_0)中使用模板操作?

1 个答案:

答案 0 :(得分:1)

渲染的documentation应该回答您的大多数相关问题。

要创建模板掩码,需要方法

SetRenderState(D3DRS_STENCILZFAIL,D3DSTENCILOP_KEEP)
SetRenderState(D3DRS_STENCILFAIL,D3DSTENCILOP_INCRSAT)
SetRenderState(D3DRS_STENCILPASS,D3DSTENCILOP_INCRSAT)
SetRenderState(D3DRS_STENCILFUNC,D3DCMP_ALWAYS)

因为它们会增加模板缓冲区,同时渲染圆圈。然后在不使用模板缓冲器的情况下绘制黄色三角形。之后用

绘制红色三角形
SetRenderState(D3DRS_STENCILZFAIL,D3DSTENCILOP_KEEP)
SetRenderState(D3DRS_STENCILFAIL,D3DSTENCILOP_KEEP)
SetRenderState(D3DRS_STENCILPASS,D3DSTENCILOP_KEEP)
SetRenderState(D3DRS_STENCILFUNC,D3DCMP_LESS)    
SetRenderState(D3DRS_STENCILREF,0)

所以你的模板测试只返回true,你之前绘制了圆圈(模板值应该大于0)。如果之后没有正确绘制,你应该尝试停用Z-Test,三角形的顺序不正确。

  

我们如何在DirectX09着色器效果文件(vs_3_0和ps_3_0)中使用模板操作?

模板操作仅用于主程序代码。着色器不会对模板测试产生任何影响。