Я рендерил сцену в WPF 3D, создав MeshGeometry3D и добавив к ней вершины и нормали. Все выглядит хорошо в визуализированной сцене (источники света есть, материал выглядит хорошо), но там, где сетчатые треугольники перекрываются, треугольник, расположенный ближе к камере, не обязательно отображается сверху. Похоже, они нарисованы в случайном порядке. Можно ли каким-то образом убедиться, что треугольники сетки отображаются в «правильном» порядке?
На всякий случай, вот мой 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-сортировкой треугольников как предположил Рэй Бернс.
Другое поведение, которое я заметил, заключается в том, что порядок рендеринга треугольников, кажется, не меняется при перемещении по сцене. То есть если я смотрю на проблемную область с другой стороны, треугольники отображаются в том же, теперь "правильном" порядке.