summaryrefslogtreecommitdiff
path: root/racer-tracer/src/main.rs
diff options
context:
space:
mode:
authorSakarias Johansson <sakarias.johansson@goodbyekansas.com>2023-04-14 20:58:23 +0200
committerSakarias Johansson <sakariasjohansson@hotmail.com>2023-04-14 21:17:20 +0200
commit8201c8e2a7ff85383ff7606513778253aae7e666 (patch)
treead0175360dc19554c6f11b1a66af210d60418f99 /racer-tracer/src/main.rs
parent0ae6ca062f5936ae6f595f45ca0a78ed049452bc (diff)
downloadracer-tracer-8201c8e2a7ff85383ff7606513778253aae7e666.tar.gz
racer-tracer-8201c8e2a7ff85383ff7606513778253aae7e666.tar.xz
racer-tracer-8201c8e2a7ff85383ff7606513778253aae7e666.zip
✨ Add support for camera rotationHEADmain
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.
Diffstat (limited to 'racer-tracer/src/main.rs')
-rw-r--r--racer-tracer/src/main.rs12
1 files changed, 10 insertions, 2 deletions
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