我已经不成功在得到一个简单的立方体的几何形状以阴影导通,以正确显示。

这是C#代码,但值正在通过SlimDX直接传递到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;

...都在PresentParameter值数据结构,用于设置我Direct3D9Device对象。

在呈现,SetRenderState被称为如下:

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

再次,这是通过以C ++代码,其中在编组到呼叫的C ++程序员将不怕值通过。

的原语是漫着色顶点(D3DFVF_XYZ | D3DFVF_DIFFUSE)。线框图如下所示: 线框视图http://gallery.me.com/robert。珀金斯/ 100045 / Z-fightingwireframe / web.jpg

在靠近一对较大的三角形是立方体的近面。

填充的视图看起来像这样: 全视图1 http://gallery.me.com/robert .perkins / 100045 / Z-战斗/ web.jpg

或者此,在随后的渲染调用: 全视图2 http://gallery.me.com/robert.perkins /100045/zfight2/web.jpg

我不知道如何解决这个问题。我应该在哪里开始寻找?

编辑:相机投影矩阵看起来关于像这样的帧中的一个:

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

和,视图矩阵是这样的:

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]]}
有帮助吗?

解决方案

清除Z-缓冲到1.0F不10000.0f。

从SDK中清除文档:

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

这也可能是有用的,看你的投影矩阵和视口设置...

编辑:你是如何构建的投影矩阵?您已设置zNear为0,zFar为1尝试设置你的zNear到0.001f和zFar到1000.0f,看看是否可以帮助你在所有...

其他提示

一个预感:尝试你之前使Z-缓冲清楚

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top