Pregunta

He tenido éxito en conseguir una geometría simple cubo con sombreado encendí para mostrar correctamente.

Este es el código c #, pero los valores se están pasando a través de SlimDX directamente a código 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;

... son los valores de la estructura PresentParameter utilizan para configurar mi objeto Direct3D9Device.

Durante una representación, SetRenderState se llama como sigue:

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

Una vez más, esto se pasa a través de código C ++, que calcula las referencias a los valores de las llamadas programador de C ++ no tendría miedo.

Las primitivas son vértices de colores difusos (D3DFVF_XYZ | D3DFVF_DIFFUSE). La vista de malla se ve así: alambre vista http://gallery.me.com/robert. Perkins / 100045 / z-fightingwireframe / web.jpg

La pareja más cerca de los triángulos más grandes es la cara cerca de un cubo.

La vista llena se ve así: vista completa 1 http://gallery.me.com/robert .perkins / 100045 / exceso de texturas / web.jpg

O esto, en una llamada posterior renderizado: completo 2 http://gallery.me.com/robert.perkins /100045/zfight2/web.jpg

No estoy seguro de cómo solucionar este problema. Dónde empezar a buscar?

Edit: La matriz de proyección de la cámara se ve más o menos así de uno de los marcos:

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

Y, la matriz de vista es el siguiente:

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]]}
¿Fue útil?

Solución

Borrar la Z-Buffer a 1.0f no 10000.0f.

A partir de los documentos claro en el SDK:

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

También puede ser útil para ver la configuración de su matriz de proyección y de ventana gráfica ...

Edit: ¿Cómo se construye esa matriz de proyección? Ha configurado zNear a 0 y 1. zFar a prueba a configurar su zNear a 0.001f y zFar a 1000.0f y ver si eso ayuda en absoluto ...

Otros consejos

Una corazonada: pruebe a activar el Z-Buffer antes de borrar

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top