2

しばらく気付きませんでしたが、深度マップがおかしくなっています。黒のピクセル = ニア クリッピング プレーン、白のピクセル = ファー クリッピング プレーン - 基本的に、地面の 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 エラーのためですか? または、行列との乗算に何か問題がありますか? それとも私たち?

4

1 に答える 1

0

解決しました。どういうわけか、乗算はW成分を非常に小さな値に設定していました。

同種分割の代わりに、10で除算すると、許容できる結果が得られました。

于 2012-04-06T03:57:22.903 に答える