Meshbuilder AddPolygon方法异常行为的原因是什么?

问题描述

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

        var points = new[]
        {
            new Point3D(-2,-4,8),//a
            new Point3D(6,-1,//b
            new Point3D(6,5,//c
            new Point3D(0,8,//d
            new Point3D(1,3,//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坐标,并得到它们: default list

这是不对的,所以d:(0,8)正在连接到a:(-2,-4)。并且背面材质(蓝色)显示在面部材质(红色)的顶部。

更改列表顺序虽然可以解决以下问题:ordered list

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

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

P.S。我认为这应该与到原点的距离(0,0)有关,从最接近原点的点开始以某种方式完成这项工作。是一个错误还是我在这里缺少什么?

P.S.#2这个问题似乎仅在凹面多边形的情况下才会发生,而对凸面多边形没有影响。

解决方法

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

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

它沿顺时针方向旋转,然后背面的材料在相机的前面。这是预期的行为。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...