微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。