2013-01-07 114 views
0

我有一個呈現所需顏色三角形的函數。我正在嘗試渲染一個黃色的三角形,然後用模具測試啓用一個紅色的三角形。我正在使用一個圓圈作爲模板窗口。我的模板測試方程和操作應該如何得到下面的輸出。僅在DirectX09中進行所有渲染。 Desired output 請引導低於API的幾個很好的和簡單的例子....模板緩衝區測試設置DirectX9

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

我們如何使用聖DirectX09着色器效果文件中的encil操作(vs_3_0和ps_3_0)?

回答

1

renderstates的documentation應回答大部分相關問題。

對於創建stencilmask,你需要的方法

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

,因爲他們遞增模版緩衝,同時使你的圈子。然後你不使用模板緩衝器繪製你的黃色三角形。那youre繪製紅色三角形

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,其中的youre圈之前就已繪製(應該有更大stencilvalue 0)。如果之後沒有任何適當的繪製,你應該嘗試去激活Z-Test,也許你的三角形的順序是不正確的。

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

模板操作僅在您的主程序代碼中使用。着色器不能對模板測試產生任何影響。

+1

SetRenderState(D3DRS_STENCILFUNC,D3DCMP_LESS)代替SetRenderState(D3DRS_STENCILFUNC,D3DCMP_GREATER)爲我工作.Z-測試沒有任何區別,因爲所有渲染都在同一個z平面上完成。 – control

+0

我改變了我的答案,但它至少應該是LESSEQUAL,因爲值不能小於零。不知道它爲什麼有效,很奇怪;) – Gnietschow