我通過製作MeshGeometry3D並向其添加頂點和法線來渲染WPF 3D場景。渲染場景中的所有東西都看起來不錯(材質看起來很好),但在網格三角形重疊的位置,靠近相機的三角形不一定呈現在頂部。它看起來像是以隨機順序繪製的。有什麼辦法可以確保網格三角形以「正確」順序呈現?WPF三角形重疊問題
萬一有幫助,這是我的XAML:
<Viewport3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<AmbientLight Color="#FF5A5A5A" />
<GeometryModel3D x:Name="geometryModel">
<GeometryModel3D.Material>
<DiffuseMaterial Brush="DarkRed"/>
</GeometryModel3D.Material>
</GeometryModel3D>
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
,並在代碼中,我生成網格是這樣的:
var mesh = new MeshGeometry3D();
foreach (var item in objectsToTriangulate) {
var triangles = item.Triangulate();
foreach (var triangle in triangles) {
mesh.Positions.Add(triangle.Vertices[0]);
mesh.Positions.Add(triangle.Vertices[1]);
mesh.Positions.Add(triangle.Vertices[2]);
mesh.Normals.Add(triangle.Normal);
mesh.Normals.Add(triangle.Normal);
mesh.Normals.Add(triangle.Normal);
}
}
geometryModel.Geometry = mesh;
編輯:三角形沒有相交(除了在邊緣處),有時在頂部出現的三角形實際上是在另一個後面,所以我不認爲這是三角形的3D排序的模棱兩可的問題,正如Ray Burns所建議的那樣。
我注意到的其他行爲是,當我在場景中移動時,三角形渲染的順序似乎沒有改變。即如果我從另一面查看問題區域,則三角形將呈現相同的現在「正確」順序。
感謝您的幫助。我不認爲這是問題,正如我在對問題的編輯中解釋的那樣。還有什麼想法? 關於你的一面:我意識到能夠指定獨特的頂點,然後調用'TriangleIndices.Add(...)',但我沒有這樣做,因爲我希望我所有的網格面都有它們的自己的法線(通常我使用平坦的表面渲染項目,而我不想要光滑的網格)。考慮到我對不同法線的渴望,是否有重複的頂點是不好的,或者沒有什麼可做的事情? – 2010-01-26 02:05:46
我拿出了關於共享頂點的評論,因爲如果你想控制法線,你需要單獨的頂點。我還添加了我的其他幾個想法。希望別人也會在這裏發出噓聲。 – 2010-01-26 08:42:51
那麼,#3是它!我把我的NearPlaneDistance設置爲0,我想這使得WPF對深度緩衝區更加隨意。將其設置爲0.5會使所有內容看起來不錯。非常感謝所有的幫助! – 2010-01-26 14:08:56