我没有成功获得一个简单的立方体几何体,并打开了阴影以正确显示。
这是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;
...是用于设置Direct3D9Device对象的PresentParameter结构中的值。
在渲染过程中,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 ++代码将值汇集到C ++程序员不会担心的调用中。
基元是漫彩色顶点(D3DFVF_XYZ | D3DFVF_DIFFUSE)。线框视图如下所示: wireframe view http://gallery.me.com/robert.perkins/100045/z-fightingwireframe/web.jpg
较近的一对较大的三角形是立方体的近面。
填充的视图如下所示: full view 1 http://gallery.me.com/robert.perkins/100045/Z-fighting/web.jpg
或者,在随后的渲染调用中: full view 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]]}
答案 0 :(得分:2)
将Z-Buffer清除为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并查看是否对您有帮助...
答案 1 :(得分:0)
预感:在清除之前尝试启用Z缓冲区。