0

我有一个函数可以呈现所需颜色的三角形。我正在尝试渲染一个黄色三角形,然后在其上渲染一个红色三角形,并启用模板测试。我使用一个圆圈作为我的模板窗口。我的模板测试方程和操作应该是什么以获得以下输出。仅在 DirectX09 中进行所有渲染。 期望的输出 请指导以下 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)中使用 Stencil 操作?

4

1 回答 1

1

渲染状态的文档应该回答您的大部分相关问题。

要创建模板蒙版,您需要方法

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)

所以你的 stenciltest 只返回 true,你的圆圈之前已经画过(应该有 stencilvalue 更大的 0)。如果在那之后没有正确绘制,您应该尝试停用 Z-Test,也许您的三角形顺序不正确。

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

模板操作仅在您的主程序代码中使用。着色器不能对模板测试产生任何影响。

于 2013-01-12T11:12:38.583 回答