2012-04-05 16 views
2

Ich habe das eine Zeit lang nicht bemerkt, aber meine Tiefenkarte verhext sich. Für: schwarze Pixel = nahe Clipping-Ebene, und weiße Pixel = ferne Clipping-Ebene - Grundsätzlich, wenn ich auf ein 100x1x100 Quadrat auf dem Boden gehe und INTO gehe (erreiche Koordinaten von 99, 0 und 99), dreht sich die gesamte Tiefenkarte Weiß. Das zeigt an, dass jedes Pixel in der fernen Clipping-Ebene ist, was ich nicht will! exampleC#/XNA/HLSL - Tiefenkarte verschraubt

Dies ist der Code, der die Tiefenkarte Rendering Griffe:

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); 

Und die HLSL-Code (Vertex-Shader, Pixel-Shader):

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(); 
    } 
} 

Ist dies wegen einer 1/0 Fehler? Oder stimmt etwas nicht mit der Multiplikation mit Matrizen? Oder wir?

Antwort

0

Gelöst. Irgendwie hat die Multiplikation die W-Komponente auf einen sehr kleinen Wert gesetzt.

Anstelle der homogenen Teilung wurde ich durch 10 geteilt, was ein akzeptables Ergebnis ergab.

Verwandte Themen