Question

J'ai échoué à obtenir une géométrie simple cube avec ombrage allumé pour afficher correctement.

est c # code, mais les valeurs sont transmises par SlimDX directement au code 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;

... sont les valeurs du PresentParameter struct utilisées pour configurer mon objet Direct3D9Device.

Lors d'un rendu, SetRenderState est appelé comme suit:

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

Encore une fois, cela passe par le code C ++ qui maréchaux les valeurs pour les appels d'un programmeur C ++ ne serait pas peur.

Les primitives sont des sommets colorés diffus (D3DFVF_XYZ | D3DFVF_DIFFUSE). La vue wireframe ressemble à ceci: wireframe vue http://gallery.me.com/robert. perkins / 100045 / z-fightingwireframe / web.jpg

La paire de triangles plus grands plus près de la face est à proximité d'un cube.

La vue remplie ressemble à ceci: pleine vue 1 http://gallery.me.com/robert .perkins / 100045 / Z-fighting / web.jpg

Ou cela, un appel de rendu ultérieur: pleine vue 2 http://gallery.me.com/robert.perkins /100045/zfight2/web.jpg

Je ne sais pas comment résoudre ce problème. Où dois-je commencer à regarder?

Edit: La matrice de projection de la caméra regarde autour comme celui-ci pour l'un des cadres:

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

Et, la matrice de vue ressemble à ceci:

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]]}
Était-ce utile?

La solution

Vider le Z-tampon à 1.0f pas 10000.0f.

A partir de la documentation claires dans le SDK:

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

Il peut également être utile pour voir vos paramètres de la matrice de projection et viewport ...

Edit: Comment construire cette matrice de projection? Vous avez mis zNear à 0 et zFar à 1. Essayez de régler votre zNear à 0.001f et zFar à 1000.0f et voir si cela vous aide à tous ...

Autres conseils

Une intuition: Essayez d'activer le Z-buffer avant d'effacer

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top