Я работаю над программным обеспечением, и мне бы хотелось перенести API рендеринга с SlimDX на SharpDX. Я сделал это, но заметил, что многоугольник solid отображается неправильно, т.е. даже если многоугольник находится на задней стороне другого многоугольника, его часть видна, а также часть многоугольника l ie внутри ландшафта. это тоже видно. Ниже для справки приведены изображения реализации 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);