udpate sick

This commit is contained in:
Dongho Kim
2025-12-22 04:33:54 +09:00
parent 136723ca24
commit 3885ddd977
16 changed files with 689 additions and 190 deletions

View File

@@ -158,12 +158,18 @@ impl MeshGenerationService {
}
fn generate_road_mesh(points: &[[f32; 2]], lanes: f32, road_type: f32) -> Vec<RoadVertex> {
let debug_mesh = std::env::var("DEBUG_MESH").is_ok();
if points.len() < 2 {
if debug_mesh {
println!("DEBUG MESH: Too few points ({})", points.len());
}
return Vec::new();
}
// Compute normals for each segment
let mut segment_normals = Vec::with_capacity(points.len() - 1);
let mut degenerate_count = 0;
for i in 0..points.len() - 1 {
let p1 = points[i];
let p2 = points[i + 1];
@@ -172,10 +178,15 @@ impl MeshGenerationService {
let len = (dx * dx + dy * dy).sqrt();
if len < 0.000001 {
segment_normals.push([0.0, 0.0]);
degenerate_count += 1;
} else {
segment_normals.push([-dy / len, dx / len]);
}
}
if debug_mesh && degenerate_count > 0 {
println!("DEBUG MESH: {}/{} segments degenerate", degenerate_count, segment_normals.len());
}
// Generate vertex pairs with miter joins
let mut point_pairs = Vec::with_capacity(points.len() * 2);
@@ -233,8 +244,10 @@ impl MeshGenerationService {
// Triangulate
let mut triangle_vertices = Vec::with_capacity((points.len() - 1) * 6);
let mut skipped = 0;
for i in 0..points.len() - 1 {
if Self::dot(segment_normals[i], segment_normals[i]) == 0.0 {
skipped += 1;
continue;
}
@@ -255,6 +268,11 @@ impl MeshGenerationService {
triangle_vertices.push(v3);
}
if debug_mesh {
println!("DEBUG MESH: Generated {} vertices from {} points (skipped {} segments)",
triangle_vertices.len(), points.len(), skipped);
}
triangle_vertices
}