From 8201c8e2a7ff85383ff7606513778253aae7e666 Mon Sep 17 00:00:00 2001 From: Sakarias Johansson Date: Fri, 14 Apr 2023 20:58:23 +0200 Subject: =?UTF-8?q?=E2=9C=A8=20Add=20support=20for=20camera=20rotation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before you could only move the position of the camera. - Add support for turning camera by holding down left mouse. - Add support for turning camera with arrow keys. - Add Mouse move callback for key_inputs. --- racer-tracer/src/main.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'racer-tracer/src/main.rs') diff --git a/racer-tracer/src/main.rs b/racer-tracer/src/main.rs index c31f09b..afdc919 100644 --- a/racer-tracer/src/main.rs +++ b/racer-tracer/src/main.rs @@ -53,6 +53,9 @@ fn run(config: Config, log: Logger, term: Terminal) -> Result<(), TracerError> { let image = image::Image::new(config.screen.width, config.screen.height); let look_from = Vec3::new(13.0, 2.0, 3.0); let look_at = Vec3::new(0.0, 0.0, 0.0); + // TODO: Make camera configurable. + // pos, look_at, fov, aperture, focus distance. + // Also ensure those can be changed during runtime. let camera = Camera::new( look_from, look_at, @@ -71,6 +74,7 @@ fn run(config: Config, log: Logger, term: Terminal) -> Result<(), TracerError> { match &config.scene_controller { config::ConfigSceneController::Interactive => { let camera_speed = 0.000002; + let camera_sensitivity = 0.001; InteractiveScene::new( SceneData { log: log.new(o!("scope" => "scene-controller")), @@ -81,13 +85,17 @@ fn run(config: Config, log: Logger, term: Terminal) -> Result<(), TracerError> { image: image.clone(), }, camera_speed, + camera_sensitivity, ) } } }; let mut inputs = KeyInputs::new(log.new(o!("scope" => "key-inputs"))); - inputs.register_inputs(scene_controller.get_inputs()); + inputs.register_inputs(scene_controller.key_inputs()); + if let Some(mouse_cb) = scene_controller.mouse_input() { + inputs.mouse_move(mouse_cb); + } rayon::scope(|s| { // Render @@ -126,7 +134,7 @@ fn run(config: Config, log: Logger, term: Terminal) -> Result<(), TracerError> { { let dt = t.elapsed().as_micros() as f64; t = Instant::now(); - inputs.update(&window, dt); + inputs.update(&mut window, dt); window_res = scene_controller -- cgit v1.2.3