Domanda

Sono stati infruttuosi a ottenere una geometria semplice cubo con ombreggiatura acceso per visualizzare correttamente.

Si tratta di codice C #, ma i valori vengono passati attraverso SlimDX direttamente al codice C ++.

            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;

... sono i valori nel PresentParameter struct utilizzati per impostare il mio oggetto Direct3D9Device.

Nel corso di un rendering, SetRenderState si chiama come segue:

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

Di nuovo, questo viene fatto passare attraverso il codice C ++, che marescialli i valori per chiamate un programmatore C ++ non temere.

Le primitive sono vertici colorati diffuse (D3DFVF_XYZ | D3DFVF_DIFFUSE). La vista wireframe si presenta così: wireframe vista http://gallery.me.com/robert. Perkins / 100045 / z-fightingwireframe / web.jpg

La coppia vicina di triangoli più grandi è il volto nei pressi di un cubo.

La vista pieno assomiglia a questo: pieno 1 http://gallery.me.com/robert .perkins / 100045 / Z-fighting / web.jpg

O questo, in una successiva chiamata di rendering: piena vista 2 http://gallery.me.com/robert.perkins /100045/zfight2/web.jpg

Non sono sicuro di come risolvere questo problema. Dove dovrei iniziare a cercare?

Modifica: La matrice di proiezione fotocamera guarda attorno come questo per una delle cornici:

{[[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]]}

E, la matrice di vista è simile al seguente:

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]]}
È stato utile?

Soluzione

Cancella la Z-Buffer 1.0f non 10000.0f.

Dalle Cancella documenti nel SDK:

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

Può anche essere utile per visualizzare le impostazioni tua matrice di proiezione e viewport ...

Modifica: Come si costruisce quella matrice di proiezione? Si è impostato a 0 e zNear zFar a 1. Prova impostare lo zNear per 0.001f e zFar a 1000.0f e vedere se questo aiuta te a tutti ...

Altri suggerimenti

Un'intuizione: Prova permettendo al Z-Buffer prima di cancellarne

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top