meshbuilder AddPolygon()方法出现奇怪行为的原因是什么



对于这样的逆时针顺序点列表:

var points = new[]
{
new Point3D(-2, -4, 8), //a
new Point3D(6,  -1, 8), //b
new Point3D(6,  5,  8), //c
new Point3D(0,  8,  8), //d
new Point3D(1,  3,  8), //e
}.ToList();

我想在HelixViewPort3D视图中添加一个多边形:

var meshBuilder = new MeshBuilder(false, false, false);
meshBuilder.AddPolygon(points);
var geometryModel = new GeometryModel3D
{
Material = Materials.Red,
BackMaterial = Materials.Blue,
Geometry = meshBuilder.ToMesh()
};
var modelVisual = new ModelVisual3D { Content = geometryModel };
view.Children.Add(modelVisual);
int index = 0;
foreach (var point in points)
{
view.Children.Add(new BillboardTextVisual3D
{
DepthOffset = 1e-3,
Position = point,
Text = string.Format("[{0}] : {1}, {2}", index++, point.X, point.Y)
});
}
view.ZoomExtents();

使用BillboardTextVisual3D显示每个点的x和y坐标,我得到了:默认列表

这是不对的,不知何故,d:(0,8(被连接到a:(-2,-4(。背面材料(蓝色(显示在表面材料(红色(的顶部。

更改列表的顺序解决了问题:有序列表

var points = new[]
{
new Point3D(1,  3,  8), //e
new Point3D(-2, -4, 8), //a
new Point3D(6,  -1, 8), //b
new Point3D(6,  5,  8), //c
new Point3D(0,  8,  8), //d
}.ToList();

第二个列表仍然是逆时针排序的,唯一的区别是起点(现在是e:(1,3((。有什么理由会影响结果吗?

附言:我认为这应该与点到原点的距离有关(0,0,0(,从离原点最近的点开始,以某种方式完成任务。是虫子还是我遗漏了什么?

p.S.#2这个问题似乎只发生在凹多边形的情况下,对凸多边形没有影响。

AddPolygon()在位置计数大于4时使用三角形扇形,因此最后一个三角形为:

-2, -4, 8
0, 8, 8
1, 3, 8

它按顺时针方向转动,背面的材料就在相机的前面。这是预期的行为。

相关内容

  • 没有找到相关文章

最新更新