From bd85f595a993611a516b1a39fde916272dbf1413 Mon Sep 17 00:00:00 2001 From: Danny McGee Date: Wed, 21 Feb 2024 22:24:23 -0500 Subject: [PATCH] Debugging `frame_scene_in_view` system --- studio-frontend/src/app/app.element.ts | 2 -- studio/src/debug.rs | 2 +- studio/src/lib.rs | 2 +- studio/src/main-headless.rs | 10 +++++++++- studio/src/scene.rs | 20 ++++++++++++++++++++ 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/studio-frontend/src/app/app.element.ts b/studio-frontend/src/app/app.element.ts index 989d64f..e9ab85b 100644 --- a/studio-frontend/src/app/app.element.ts +++ b/studio-frontend/src/app/app.element.ts @@ -111,8 +111,6 @@ export class AppElement extends LitElement { } onSceneStateChange({ detail: state }: SceneStateEvent): void { - console.log("scene state change:", SceneState[state]); - this.loading = match (state, { [SceneState.Active]: () => false, _: () => true, diff --git a/studio/src/debug.rs b/studio/src/debug.rs index 117a1bd..553c407 100644 --- a/studio/src/debug.rs +++ b/studio/src/debug.rs @@ -20,7 +20,7 @@ use crate::{ }; #[derive(Resource, Deref, DerefMut)] -pub struct DebugMode(bool); +pub struct DebugMode(pub bool); #[derive(Component, Clone, Copy, Debug)] pub struct DebugPoint { diff --git a/studio/src/lib.rs b/studio/src/lib.rs index 62ee32d..6ed1e3c 100644 --- a/studio/src/lib.rs +++ b/studio/src/lib.rs @@ -39,7 +39,7 @@ pub use crate::{ anim::AnimPlugin, bvh::BvhPlugin, camera_controller::CameraControllerPlugin, - debug::DebugPlugin, + debug::{DebugMode, DebugPlugin}, input::StudioInputPlugin, inspector::InspectorPlugin, interaction::InteractionPlugin, diff --git a/studio/src/main-headless.rs b/studio/src/main-headless.rs index e8edcc0..60428ff 100644 --- a/studio/src/main-headless.rs +++ b/studio/src/main-headless.rs @@ -1,6 +1,6 @@ use bevy::render::render_resource::Extent3d; use clap::{Args, Parser, Subcommand}; -use studio::{start_headless, HeadlessMode}; +use studio::{start_headless, DebugMode, HeadlessMode}; #[derive(Parser)] #[command(name = "StorytellerStudioHeadless")] @@ -13,6 +13,9 @@ use studio::{start_headless, HeadlessMode}; struct StudioArgs { #[command(subcommand)] subcommand: Subcommands, + /// Render with debug visualizations enabled + #[arg(long, short)] + debug: bool, } #[derive(Subcommand)] @@ -104,6 +107,11 @@ fn main() { } }; + if args.debug { + println!("Starting in debug mode"); + app.insert_resource(DebugMode(true)); + } + app.run(); } diff --git a/studio/src/scene.rs b/studio/src/scene.rs index 6649c4d..edaa9c1 100644 --- a/studio/src/scene.rs +++ b/studio/src/scene.rs @@ -52,6 +52,10 @@ impl Plugin for ScenePlugin { ); app.add_systems(Update, tag_scene_elements); + app.add_systems( + Update, + log_scene_state.run_if(resource_changed::>()), + ); //Auto loading screen //Register handles on which we will look to show loading screen @@ -82,6 +86,10 @@ impl Plugin for ScenePlugin { } } +fn log_scene_state(st_scene: Res>) { + info!("SceneState::{:?}", **st_scene); +} + fn minimal_scene_setup(mut cmd: Commands) { cmd.spawn(DirectionalLightBundle { directional_light: DirectionalLight { @@ -331,6 +339,10 @@ fn frame_scene_in_view( q_aabbs: Query<(&Aabb, &GlobalTransform), With>, mut q_camera: Query<(&mut CameraController, &mut Transform, &Projection)>, ) { + info!("frame_scene_in_view"); + info!(" q_aabbs length: {}", q_aabbs.iter().count()); + info!(" q_camera length: {}", q_camera.iter().count()); + let Ok((mut cam, mut cam_xform, cam_proj)) = q_camera.get_single_mut() else { error!("Failed to get camera controller"); return; @@ -400,12 +412,15 @@ fn frame_scene_in_view( y: height, } = bounding_rect.size(); + info!(" bounding rect: {width:.2} x {height:.2}"); + let s = f32::max(width, height); let a = if s == height { pproj.fov } else { f32::atan(pproj.aspect_ratio * f32::tan(pproj.fov / 2.)) }; + info!(" FOV angle: {}°", a.to_degrees()); // TODO: // According to "I eat babies" at the Ars Technica forums @@ -427,6 +442,11 @@ fn frame_scene_in_view( cam.focus = aabb.center.into(); cam.radius = radius; cam_xform.translation = cam.focus + cam_xform.back() * radius; + + info!( + "Centering camera at ({:.3}, {:.3}, {:.3}) with a radius of {radius:.3}", + cam.focus.x, cam.focus.y, cam.focus.z, + ); } #[cfg(feature = "wasm")]