2012-04-05 4 views
2

私はこれをしばらく理解していませんでしたが、奥行きマップが台無しです。私は地面で100x1x100の正方形に向かって歩き、その中を歩いて(99、0、および99の座標に達する)、深度マップ全体が変わります白。これは、各ピクセルがfar clipping planeにあることを示しています。これは私が望むものではありません!C#/ XNA/HLSL - 奥行きマップが壊れています

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コード(頂点シェーダ、ピクセルシェーダ):example

この は、深度マップレンダリング処理するコードである

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?

答えて

0

解決済み。何とかして、乗算はW成分を非常に小さな値に設定していました。

均質除算の代わりに、10を除算して、許容できる結果が得られました。