C#/ XNA / HLSL - 深度图搞砸了

时间:2012-04-05 18:29:38

标签: c# xna hlsl

我有一段时间没有意识到这一点,但我的深度图正在弄乱。适用于:黑色像素=近剪裁平面,白色像素=远剪裁平面 - 基本上,如果我走向地面上的100x1x100方格,并向内走(达到99,0和99的坐标),整个深度图将变为白色。这表明每个像素都在远剪裁平面,我不想要! example

这是处理渲染深度图的代码:

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?

1 个答案:

答案 0 :(得分:0)

解决。不知何故,乘法是将W分量设置为一个非常小的值。

除了均匀分割,我除以10,得到了可接受的结果。