如何解决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();
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 举报,一经查实,本站将立刻删除。