udpate sick
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user