多边形绘制顺序问题

Polygon draw order issue

我正在开发一个软件,我想将渲染 API 从 SlimDX 移动到 SharpDX。我已经这样做了,但我注意到实心多边形没有正确绘制,即,即使多边形位于另一个多边形的背面,它的一部分是可见的,多边形的一部分也位于同样可见的地形内部。以下是 SlimDX 实现和 SharpDX 实现的图片供参考:

我尝试设置 Stencil 和 ZBuffer,但没有按预期工作。我已经对其应用了 DepthBias,它在 SlimDX 上运行良好,但在 SharpDX 上运行良好。

如果我遗漏了什么或做错了什么,请告诉我。

更新 1:

// set the render state to device
device.SetRenderState(RenderState.AlphaTestEnable,
                      true);
device.SetRenderState(RenderState.AlphaBlendEnable,
                      true);
device.SetRenderState(RenderState.SourceBlend,
                      Blend.SourceAlpha);
device.SetRenderState(RenderState.SeparateAlphaBlendEnable,
                      true);
device.SetRenderState(RenderState.DestinationBlendAlpha,
                      Blend.One);
device.SetRenderState(RenderState.SourceBlendAlpha,
                      Blend.InverseDestinationAlpha);

// set the render state to the device
device.SetRenderState(RenderState.DepthBias,
                      -1E-06f);

this.effectVectoring.Begin(FX.None);

// binds the vertex buffer to device data stream
device.SetStreamSource(0,
                       this.vertexBuffer,
                       dataGeometry.FillVertexOffset,
                       stride);
// pass 1 to shader as a pass if it is 3D mode else 0
this.effectVectoring.BeginPass(is3D ? 1 : 0);
// renders the non-index geometric primitives using the data from current input stream
device.DrawPrimitives(SharpDX.Direct3D9.PrimitiveType.TriangleList,
                      0,
                      primitiveCount);
// end the pass
this.effectVectoring.EndPass();

this.effectVectoring.End();
device.SetRenderState(RenderState.AlphaBlendEnable,
                    false);
device.SetRenderState(RenderState.AlphaTestEnable,
                    false);
device.SetRenderState(RenderState.DepthBias,
                    0);
device.SetRenderState(RenderState.FillMode,
                    FillMode.Solid);
device.SetRenderState(RenderState.SeparateAlphaBlendEnable,
                    false);

经过多次调试和理解代码后,我发现渲染代码是正确的,但是在创建设备的视口时我忘记设置它的最小和最大深度。在 SlimDX 中,它们是默认设置的,但在 SharpDX 中,您需要明确设置它们,这解决了我的问题。