Fix emitting duplicate edges for convex hulls
Identical to https://github.com/godotengine/godot/pull/52059
This commit is contained in:
parent
c334989e00
commit
75dd294732
1 changed files with 14 additions and 3 deletions
|
@ -2260,10 +2260,21 @@ Error ConvexHullComputer::convex_hull(const Vector<Vector3> &p_points, Geometry3
|
||||||
|
|
||||||
r_mesh.vertices = ch.vertices;
|
r_mesh.vertices = ch.vertices;
|
||||||
|
|
||||||
r_mesh.edges.resize(ch.edges.size());
|
// Copy the edges over. There's two "half-edges" for every edge, so we pick only one of them.
|
||||||
|
r_mesh.edges.resize(ch.edges.size() / 2);
|
||||||
|
uint32_t edges_copied = 0;
|
||||||
for (uint32_t i = 0; i < ch.edges.size(); i++) {
|
for (uint32_t i = 0; i < ch.edges.size(); i++) {
|
||||||
r_mesh.edges.write[i].a = (&ch.edges[i])->get_source_vertex();
|
uint32_t a = (&ch.edges[i])->get_source_vertex();
|
||||||
r_mesh.edges.write[i].b = (&ch.edges[i])->get_target_vertex();
|
uint32_t b = (&ch.edges[i])->get_target_vertex();
|
||||||
|
if (a < b) { // Copy only the "canonical" edge. For the reverse edge, this will be false.
|
||||||
|
ERR_BREAK(edges_copied >= (uint32_t)r_mesh.edges.size());
|
||||||
|
r_mesh.edges.write[edges_copied].a = a;
|
||||||
|
r_mesh.edges.write[edges_copied].b = b;
|
||||||
|
edges_copied++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (edges_copied != (uint32_t)r_mesh.edges.size()) {
|
||||||
|
ERR_PRINT("Invalid edge count.");
|
||||||
}
|
}
|
||||||
|
|
||||||
r_mesh.faces.resize(ch.faces.size());
|
r_mesh.faces.resize(ch.faces.size());
|
||||||
|
|
Loading…
Reference in a new issue