Frage

Ich habe eine einfache Würfelgeometrie mit legen ist auf Abschattung drehte sich immer korrekt angezeigt werden.

Dies ist c # -Code, aber die Werte werden durch SlimDX direkt an C ++ Code übergeben.

            pParams.BackBufferWidth = 0;
            pParams.BackBufferHeight = 0;
            pParams.BackBufferCount = 1;
            pParams.BackBufferFormat = Format::X8R8G8B8;
            pParams.Multisample = MultisampleType::None;
            pParams.MultisampleQuality = 0;
            pParams.DeviceWindowHandle = this.Handle;
            pParams.Windowed = true;
            pParams.AutoDepthStencilFormat = Format.D24X8;
            pParams.EnableAutoDepthStencil = true;
            pParams.PresentFlags = PresentFlags.None;
            pParams.FullScreenRefreshRateInHertz = 0;
            pParams.PresentationInterval = PresentInterval.Immediate;
            pParams.SwapEffect = SwapEffect.Discard;

... sind die Werte in dem PresentParameter verwendet struct mein Direct3D9Device Objekt einzurichten.

Während eine Rendering wird SetRenderState wie folgt aufgerufen:

        this.D3DDevice.Clear(ClearFlags.Target | ClearFlags.ZBuffer, this.BackColor, 10000.0f, 0);
        this.D3DDevice.SetRenderState(RenderState.Ambient, false);
        this.D3DDevice.SetRenderState(RenderState.ZEnable, ZBufferType.UseZBuffer);
        this.D3DDevice.SetRenderState(RenderState.ZWriteEnable, true);
        this.D3DDevice.SetRenderState(RenderState.ZFunc, Compare.LessEqual);
        this.D3DDevice.BeginScene();

Auch dies wird durchlaufen zu C ++ Code, der Marschälle der Werte in Anrufen eines C ++ Programmierer nicht zu fürchten.

Die Grundelemente sind diffus gefärbt Ecken (D3DFVF_XYZ | D3DFVF_DIFFUSE). Die Wireframe-Ansicht sieht wie folgt aus: Drahtmodell-Ansicht http://gallery.me.com/robert. perkins / 100045 / z-fightingwireframe / web.jpg

Je näher Paar größerer Dreiecken ist die Fläche in der Nähe eines Würfels.

Die gefüllten Blick sieht wie folgt aus: Großansicht 1 http://gallery.me.com/robert .perkins / 100045 / Z-Bekämpfung / web.jpg

oder diese, auf einen der folgenden Rendering-Aufruf: Großansicht 2 http://gallery.me.com/robert.perkins /100045/zfight2/web.jpg

Ich bin mir nicht sicher, wie dies zu beheben. Wo soll ich anfangen suchen?

Edit: Die Kameraprojektionsmatrix sieht etwa wie dies für einen der Rahmen:

{[[M11:0.6281456 M12:0.7659309 M13:0.1370506 M14:0] 
  [M21:0.7705086 M22:-0.5877584 M23:-0.2466911 M24:0] 
  [M31:-0.1083957 M32:0.2605566 M33:-0.9593542 M34:0] 
  [M41:-3.225646 M42:-1.096823 M43:20.91392 M44:1]]}

Und die Ansicht Matrix sieht wie folgt aus:

camera.ViewMatrix = {[[M11:0.6281456 M12:0.7659309 M13:0.1370506 M14:0] 
                      [M21:0.7705086 M22:-0.5877584 M23:-0.2466911 M24:0] 
                      [M31:-0.1083957 M32:0.2605566 M33:-0.9593542 M34:0] 
                      [M41:-3.225646 M42:-1.096823 M43:20.91392 M44:1]]}
War es hilfreich?

Lösung

Löschen des Z-Buffer zu 1.0f nicht 10000.0f.

Aus dem klaren docs im SDK:

[in] Clear the depth buffer to this new z value which ranges from 0 to 1.. 

Es kann auch nützlich sein, Ihre Projektion zu sehen Matrix und Darstellungseinstellungen ...

Edit: Wie baut man, dass die Projektionsmatrix? Sie haben festgelegt zNear auf 0 und zFar bis 1. Versuchen Sie Ihr zNear zu 0.001f und zFar zu 1000.0f Einstellung und sehen, ob das Sie überhaupt ...

hilft

Andere Tipps

Eine Ahnung. Versuchen Sie, den Z-Buffer ermöglicht, bevor Sie löschen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top