1 回答
TA贡献1798条经验 获得超7个赞
解决方案 1 - 平凡
如果四边形是凸的并且您知道顶点的顺序,请使用indices = new double[6]{0,1,2,0,2,3};
解决方案 2 - 手动三角测量
如果四边形是凸的,但您不确定顺序,请测试方向并调整索引。
edge1 = vertices3D[1] - vertices3D[0];
edge2 = vertices3D[2] - vertices3D[0];
edge3 = vertices3D[3] - vertices3D[0];
normal12 = Vector3.Cross(edge1, edge2);
normal23 = Vector3.Cross(edge2, edge3);
if (Vector3.Dot(normal12, normal23) > 0)
indices = new double[6]{0,1,2,0,2,3};
else
indices = new double[6]{0,1,3,0,3,2};
解决方案 3 - 使用三角测量仪
如果四边形不是凸的,或者您确实必须使用库 Triangulator,请变换所有顶点,使它们位于 XY 平面上,第一个顶点位于(0,0,0).
edge1 = vertices3D[1] - vertices3D[0];
edge2 = vertices3D[2] - vertices3D[0];
normal = Vector3.Cross(edge1, edge2).normalized;
rotation = Quaternion.FromToRotation(normal, new Vector3(0,0,1));
Vector2[] vertices2D = new Vector2[vertices3D.Length];
for (int i=0; i<vertices3D.Length; i++) {
rotatedVertex = rotation * (vertices3D[i]-vertices3D[0]);
vertices2D[i] = new Vector2(rotatedVertex.x, rotatedVertex.y);
}
我不建议仅将 4 个点用于形成墙的三角测量仪。但是,对于复杂的多边形和非凸形状,它应该会很方便。
- 1 回答
- 0 关注
- 109 浏览
添加回答
举报