forked from 1b-agent/fieldcraft-upstream
Camera::fit_in frames a box's corners in part of the view
The distance and the target follow from the eight corners' exact projections, for orthographic and perspective cameras and any direction of view, so a long beam seen side on fills the width instead of a sphere around it the height (#147). The free part is given as fractions of the view, so overlays can be left out (#76); a margin is kept on each side. Camera::fit is fit_in over the whole of a square view, and the headless renderer fits to the picture's aspect. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
This commit is contained in:
1 parent
696b64c30f
commit
29af2aef91
4 files changed
+158
-7
No files matched your search
@@ -236,7 +236,7 @@ pub fn render_png(s: &Session, at: &Orientation, w: usize, h: usize, p: &Palette
|
||||
let (mut scene, bounds, shown) = scene(s, p);
|
||||
let mut cam = Camera::default();
|
||||
cam.orient(&Orientation { distance: None, ..*at });
|
||||
cam.fit(&bounds);
|
||||
cam.fit_in(&bounds, w as f64 / h.max(1) as f64, fieldcraft_render::FULL_VIEW);
|
||||
cam.orient(at);
|
||||
scene.radius = if bounds.is_empty() { 1.0 } else { (cam.target.dist(bounds.center()) + bounds.diagonal() * 0.5).max(1e-3) };
|
||||
let png = fieldcraft_render::render_png(&scene, &cam, w, h).map_err(|e| EngineError::Params(format!("render: {e}")))?;
|
||||
|
||||
Reference in new issue
Block a user