fix: skip degenerate triangle for 3-corner Face3D
acadrust Face3D encodes triangles by setting fourth_corner == third_corner. The fill builder was emitting a zero-area second triangle for these cases. Now checks the p2==p3 distance and skips the second triangle. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
298098e764
commit
517af91245
1 changed files with 11 additions and 4 deletions
|
|
@ -69,14 +69,21 @@ impl Face3DGpu {
|
||||||
let p = &wire.key_vertices;
|
let p = &wire.key_vertices;
|
||||||
let v = |i: usize| Face3DVertex { position: p[i], color };
|
let v = |i: usize| Face3DVertex { position: p[i], color };
|
||||||
|
|
||||||
|
let dx = p[3][0] - p[2][0];
|
||||||
|
let dy = p[3][1] - p[2][1];
|
||||||
|
let dz = p[3][2] - p[2][2];
|
||||||
|
let is_triangle = dx * dx + dy * dy + dz * dz < 1e-10;
|
||||||
|
|
||||||
// Triangle 1: p0, p1, p2
|
// Triangle 1: p0, p1, p2
|
||||||
vertices.push(v(0));
|
vertices.push(v(0));
|
||||||
vertices.push(v(1));
|
vertices.push(v(1));
|
||||||
vertices.push(v(2));
|
vertices.push(v(2));
|
||||||
// Triangle 2: p0, p2, p3
|
// Triangle 2 only for quads (triangles have p3 == p2).
|
||||||
vertices.push(v(0));
|
if !is_triangle {
|
||||||
vertices.push(v(2));
|
vertices.push(v(0));
|
||||||
vertices.push(v(3));
|
vertices.push(v(2));
|
||||||
|
vertices.push(v(3));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
|
let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue