diff options
author | eug-vs <eugene@eug-vs.xyz> | 2021-10-27 11:58:40 +0300 |
---|---|---|
committer | eug-vs <eugene@eug-vs.xyz> | 2021-10-27 11:58:40 +0300 |
commit | a63a5fd647a2117885e70954181ea7164e470bb3 (patch) | |
tree | 15e36facc1a0e5a7092a2ece1ca1afbe1e06c996 | |
parent | 8391a35aaa35da3018744f89b296e57549b29255 (diff) | |
download | pistol-a63a5fd647a2117885e70954181ea7164e470bb3.tar.gz |
feat: add camera rotation
-rw-r--r-- | src/camera.rs | 13 | ||||
-rw-r--r-- | src/main.rs | 2 |
2 files changed, 11 insertions, 4 deletions
diff --git a/src/camera.rs b/src/camera.rs index eb7cea2..d87abe2 100644 --- a/src/camera.rs +++ b/src/camera.rs @@ -54,17 +54,17 @@ impl Camera { let floor_dist = point.z + 1.0; // Sphere - let center = Vector { x: 3.0, y: 0.0, z: 0.0 }; + let center = Vector { x: 4.0, y: 0.0, z: 0.0 }; let radius = 1.0 + 0.5 * self.time.sin(); let sphere_dist = (point - center).magnitude() - radius; // Small sphere - let center2 = Vector { x: 2.5, y: 0.5, z: 0.0 }; + let center2 = Vector { x: 3.5, y: 0.5, z: 0.0 }; let radius2 = 0.7; let sphere2_dist = (point - center2).magnitude() - radius2; // Second sphere - let center3 = Vector { x: 3.0 + self.time.sin() * 1.6, y: -2.5, z: 0.0 - self.time.sin() * 0.8 }; + let center3 = Vector { x: 4.0 + self.time.sin() * 1.6, y: -2.5, z: 0.0 - self.time.sin() * 0.8 }; let radius3 = 1.0; let sphere3_dist = (point - center3).magnitude() - radius3; @@ -79,6 +79,11 @@ impl Camera { ) } + pub fn rorate_around_point(& mut self, point: Vector) { + self.position = rotate_z(self.position - point, 2.0 * PI / 60.0) + point; + self.direction = (point - self.position).normalize(); + } + pub fn screen(&self) -> (f32, f32) { let width = self.distance * 2.0 * (self.angle / 2.0).tan(); let height = width * self.aspect_ratio; @@ -86,6 +91,8 @@ impl Camera { (width, height) } pub fn render(& mut self) { + self.rorate_around_point(Vector { x: 4.0, y: 0.0, z: 0.0 }); + let palette = "$@B%8&WM#oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\"^`'."; let (screen_width, screen_height) = self.screen(); diff --git a/src/main.rs b/src/main.rs index b14ef5b..d5c8278 100644 --- a/src/main.rs +++ b/src/main.rs @@ -17,7 +17,7 @@ fn main() { time: 0.0, }; - for _round in 0..1 { + for _round in 0..20 { for i in 0..60 { // 1 sin round cam.time = (i as f32 / 60.0) * 2.0 * PI; |