我找不到任何有关深度缓冲区及其工作原理的有用信息。我知道你可以打开和关闭它,但是否可以在着色器运行时,在 PiexelShaderFunction 中做到这一点?何时发生削波?在像素着色器开始之前?如果我想在 PiexelShaderFunction 中跟踪剪切事件并在它发生时做些什么呢?
理想情况下,我需要以下系统:
PixelShaderFunction
{
//... some code.
if (clipping)
return (0,0,value1,value2);
else
return(value1,value2,0,0);
}
我从头顶想到的是:
PixelShaderFunction
{
//... some code.
if (value1%2 == 0)
return (0,0,value1,value2);
else
return(value1,value2,0,0);
}
这给了我 50% 的精度并且是一个不错的选择,但是我不得不绘制我的场景两次,因为我需要先关闭深度模板然后再打开模板来绘制它。如果我至少可以在运行时在 PiexelShaderFunction 上打开和关闭它,那将有很大帮助,并不是说我仍然需要知道是否发生了剪切。
编辑:我刚刚读到“写入掩码控制将哪些数据写入渲染目标。输出写入掩码控制按渲染目标、按组件级别将哪些数据写入渲染目标。” 这是否意味着我可以指定我拥有的几个渲染目标中的哪些可以使用深度缓冲区,哪些不能?如果是,我该如何在 XNA 中做到这一点?
更多: Stencil Buffer 究竟是如何填充的,你又如何控制它?它如何影响深度缓冲区?如果有人有示例链接,请给我!MSDN 太少了!