2D-Plan-Qualität: Türschwenk-Bögen adaptiv rund tessellieren (nativer wgpu-Renderer)

Bögen (Türschwenke) wurden bisher einmalig in JS in eine feste Facettenzahl
zerlegt; beim Hineinzoomen wurden die Facetten sichtbar. Die Zerlegung
(`tessellate_arc`) wandert nach Rust und läuft jetzt zoomabhängig anhand einer
Sehnenabweichungs-Toleranz (Sagitta ≤0.3 Geräte-px), Segmentzahl auf 8..512
geklemmt. Die native GPU-Szene bekommt dafür einen eigenen `Arc`-Primitiv-Typ
(unvortessellliert); der Renderer merkt sich die zuletzt hochgeladene Szene und
tessellliert Bögen automatisch neu, sobald sich der Zoom seit dem letzten
Upload um mehr als Faktor 1.3 verändert hat.
This commit is contained in:
2026-07-02 21:43:55 +02:00
parent 919bc67bfa
commit cd0f976b4f
8 changed files with 276 additions and 54 deletions
+4 -2
View File
@@ -14,7 +14,7 @@ use std::sync::Arc;
use render2d::gpu::Renderer;
use render2d::types::ViewBox;
use render2d::{demo_scene, initial_view_box};
use render2d::{demo_scene, initial_view_box, meet_scale, PX_PER_M};
use winit::application::ApplicationHandler;
use winit::event::{ElementState, MouseButton, MouseScrollDelta, WindowEvent};
@@ -74,7 +74,9 @@ impl GpuState {
surface.configure(&device, &config);
let mut renderer = Renderer::new(&device, format);
renderer.upload_scene(&device, &demo_scene());
let view_box = initial_view_box();
let px_per_m = PX_PER_M * meet_scale(view_box, config.width as f32, config.height as f32);
renderer.upload_scene(&device, &demo_scene(), px_per_m);
Self {
surface,