Saya sedang mengerjakan perangkat lunak dan saya akan memindahkan API rendering dari SlimDX ke SharpDX. Saya telah melakukan itu tetapi saya perhatikan bahwa poligon padat tidak digambar dengan benar yaitu, bahkan jika poligon berada di sisi belakang poligon lain, sebagian terlihat, juga bagian dari poligon terletak di dalam medan yang juga terlihat. Di bawah ini adalah gambar dari implementasi SlimDX dan implementasi SharpDX untuk referensi:

enter image description here

enter image description here

Saya mencoba mengatur Stencil & ZBuffer tetapi tidak berfungsi seperti yang diharapkan. Saya sudah menerapkan DepthBias yang bekerja dengan baik dengan SlimDX tetapi tidak dengan SharpDX.

Tolong beri tahu saya jika, saya melewatkan sesuatu atau saya melakukan sesuatu yang salah.

Pembaruan 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);
1
Pankaj Sachdeva 10 Juli 2020, 13:44

1 menjawab

Jawaban Terbaik

Setelah banyak men-debug dan memahami kode, saya menemukan bahwa kode rendering sudah benar tetapi saat membuat Viewport perangkat saya lupa mengatur Kedalaman Min & Maksnya. Di SlimDX mereka diatur secara default tetapi di SharpDX Anda perlu mengaturnya secara eksplisit, ini menyelesaikan masalah saya.

0
Pankaj Sachdeva 12 Agustus 2020, 08:33