我有一段时间没有意识到这一点,但我的深度图搞砸了。对于:黑色像素 = 近剪裁平面,白色像素 = 远剪裁平面 - 基本上,如果我走向地面上 100x1x100 的正方形,然后走进它(到达 99、0 和 99 的坐标),整个深度图就会转动白色的。这表明每个像素都在远裁剪平面上,这是我不想要的! 例子
这是处理渲染深度图的代码:
GraphicsDevice.Clear(Color.White);
effect.MainEffect.CurrentTechnique = effect.MainEffect.Techniques["DepthProcess"];
GraphicsDevice.SetVertexBuffer(line);
effect.MainEffect.CurrentTechnique.Passes[0].Apply();
GraphicsDevice.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);
以及 HLSL 代码(顶点着色器、像素着色器):
DVOut DVShader(VIn _in)
{
DVOut o;
o.position = mul(_in.position, WorldViewProjection);
float a = o.position.z/o.position.w;
o.color = float4(a,a,a,1);
return o;
}
float4 DPShader(DVOut _in) : COLOR
{
return _in.color;
}
technique DepthProcess
{
pass Pass0
{
ZEnable = TRUE;
ZWriteEnable = TRUE;
AlphaBlendEnable = FALSE;
VertexShader = compile vs_2_0 DVShader();
PixelShader = compile ps_2_0 DPShader();
}
}
这是因为 1/0 错误吗?或者矩阵乘法有什么问题?还是w/e?