我有一个呈现所需颜色三角形的功能。我正在尝试使用模板测试启用渲染黄色三角形,然后在其上面呈现红色三角形。我正在使用一个圆圈作为我的模板窗口。什么应该是我的模板测试方程和操作,以获得以下输出。仅在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)中使用模板操作?
答案 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)中使用模板操作?
模板操作仅用于主程序代码。着色器不会对模板测试产生任何影响。