我有一个带索引的数组。其中三个指数组成一个三角形。现在我拿一个三角形并搜索另一个带有共享边缘的三角形。这些三角形现在构成对角线分割的四边形。如何(在代码中)我可以翻转这个对角线边缘/三角形,以便它连接相反的对角线?我正在寻找的东西在Blender,Maya,3ds max等3D程序中经常被称为“翻边”。
我坚持这个。有任何想法吗?感谢。
答案 0 :(得分:4)
这取决于你如何实现你的结构。例如,如果您有这样的结构:
struct Vertex
{
double position[3];
};
struct Triangle
{
unsigned int vertices[3];
};
Vertex nodes[N_NODES];
Triangle triangles[N_TRIANGLES];
其中,vertices
是nodes
的索引,然后给出两个三角形:
Triangle t1, t2;
如果你有
t1.vertices[i1] = t2.vertices[j1];
t1.vertices[i2] = t2.vertices[j2];
表示t1.vertices[i1] --- t1.vertices[i2]
是t2.vertices[j1] --- t1.vertices[j2]
的共享边缘,假设i3
和j3
是t1
和t2
的第3个版本分别如图所示:
然后你可以改变一些索引来做翻转。最直接的方式是:
unsigned int t1_v[3], t2_v[3];
t1_v[0] = t1.vertices[i1]; // shared
t1_v[1] = t1.vertices[i2]; // shared
t1_v[2] = t1.vertices[i3]; // not shared
t2_v[0] = t2.vertices[j1]; // shared (unnecessary)
t2_v[1] = t2.vertices[j2]; // shared (unnecessary)
t2_v[2] = t2.vertices[j3]; // not shared
t1.vertices[0] = t1_v[0]; // previously shared
t1.vertices[1] = t1_v[2]; // previously not shared
t1.vertices[2] = t2_v[2]; // previously not shared
t2.vertices[0] = t2_v[0]; // previously shared
t2.vertices[1] = t2_v[2]; // previously not shared
t2.vertices[2] = t1_v[2]; // previously not shared
请注意,每个新三角形由2个非共享顶点和一个共享顶点组成。
答案 1 :(得分:0)
如果你的顶点在一个数组中,我假设你通过一些固定的行长识别不同的行,并根据某些模式制作三角形。我建议只更改此模式如何将三个顶点分配在一起。如果有任何
,你必须照顾不成对的三角形