From 517af9124529c66819902c744a2490578ed822e3 Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Tue, 28 Apr 2026 21:57:38 +0300 Subject: [PATCH] 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 --- src/scene/pipeline/face3d_gpu.rs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/scene/pipeline/face3d_gpu.rs b/src/scene/pipeline/face3d_gpu.rs index c39bd0cda..ec4c7c36f 100644 --- a/src/scene/pipeline/face3d_gpu.rs +++ b/src/scene/pipeline/face3d_gpu.rs @@ -69,14 +69,21 @@ impl Face3DGpu { let p = &wire.key_vertices; 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 vertices.push(v(0)); vertices.push(v(1)); vertices.push(v(2)); - // Triangle 2: p0, p2, p3 - vertices.push(v(0)); - vertices.push(v(2)); - vertices.push(v(3)); + // Triangle 2 only for quads (triangles have p3 == p2). + if !is_triangle { + vertices.push(v(0)); + vertices.push(v(2)); + vertices.push(v(3)); + } } let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {