Unity3d 按顺时针顺序对点数组进行排序

Unity3d 按顺时针顺序对点数组进行排序,unity3d,mesh,Unity3d,Mesh,是否有这样的算法按顺时针顺序对三维点阵列排序? 在我的例子中,我专门处理直角三角形,所以只有3分。(对于构建网格)排序算法并不困难。问题是,这些点位于哪个平面上。它面向哪一边 只有一组点本身不能顺时针或逆时针。你需要一个平面和一个侧面来参照这些点 编辑:实际上我以前说的有点不准确。你真正需要的是一个参考的位置和方向,而不是一个平面,假设你有两条边连接你的三个顶点 E1 = V2 - V1 E2 = V1 - V3 它们横跨一个三角形。您可以这样计算三角形的法线N: N = cross(E1,

是否有这样的算法按顺时针顺序对三维点阵列排序?
在我的例子中,我专门处理直角三角形,所以只有3分。(对于构建网格)

排序算法并不困难。问题是,这些点位于哪个平面上。它面向哪一边

只有一组点本身不能顺时针或逆时针。你需要一个平面和一个侧面来参照这些点


编辑:实际上我以前说的有点不准确。你真正需要的是一个参考的位置和方向,而不是一个平面,假设你有两条边连接你的三个顶点

E1 = V2 - V1
E2 = V1 - V3
它们横跨一个三角形。您可以这样计算三角形的法线
N

N = cross(E1, E2)
这将告诉您三角形朝向哪个方向。通过将
N
投影到三角形与
P
之间的距离,可以计算三角形是否朝向或远离某个视点
P

D = V1 - P
d = dot(N, D)
如果
d
为正,则三角形从
p
看去,如果为负,则三角形面向
p

D = V1 - P
d = dot(N, D)
现在,您可以判断每组(V1、V2、V3)是否正确排序。如果没有,只需交换V2和V3,它们就可以了


不过有一个陷阱。如果尝试构建闭合网格的外壳,则要求所有三角形都朝向外部。这不能通过尝试使所有三角形面向某个点来建模,因为每个三角形的该点必须不同。如果网格是凸面网格,则可以通过要求所有三角形朝向凸面网格内部某个点的距离来建模。

为了对数组进行排序,您需要定义一个默认向量,然后获得该向量与(位置-向量.原点)之间的角度。这将得到介于0和180之间的浮点值。如果位置在默认向量的左侧,则为180。最后,根据角度的结果进行排序。如果其中任何一个答案对你有效,那么如果你接受这个答案,对其他人也会有帮助。如果没有,请随意评论给出的答案,或更新您的问题。