From fde5b2206396085ee735f6b52e4b4cf561d43ad6 Mon Sep 17 00:00:00 2001 From: Madeline Pace Date: Fri, 17 Dec 2021 11:06:23 -0500 Subject: [PATCH] Add basic ray casting --- Cargo.lock | 207 ++++++++++++++++++++++++++-------------------------- Cargo.toml | 2 +- src/main.rs | 65 ++++++++--------- 3 files changed, 135 insertions(+), 139 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b7d8bbc..86c7cfc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,15 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "approx" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "072df7202e63b127ab55acfe16ce97013d5b97bf160489336d3f1840fd78e99e" -dependencies = [ - "num-traits", -] - [[package]] name = "autocfg" version = "1.0.1" @@ -26,12 +17,6 @@ dependencies = [ "byteorder", ] -[[package]] -name = "bytemuck" -version = "1.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439989e6b8c38d1b6570a384ef1e49c8848128f5a97f3914baef02920842712f" - [[package]] name = "byteorder" version = "1.4.3" @@ -39,48 +24,62 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] -name = "matrixmultiply" -version = "0.3.2" +name = "fuchsia-cprng" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84" -dependencies = [ - "rawpointer", -] +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + +[[package]] +name = "libc" +version = "0.2.112" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125" [[package]] name = "nalgebra" -version = "0.29.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d506eb7e08d6329505faa8a3a00a5dcc6de9f76e0c77e4b75763ae3c770831ff" +checksum = "09033019c2621b7ea55413a4726a0603c2848def98e9f5a03358bdb77ecc44ca" dependencies = [ - "approx", - "matrixmultiply", - "nalgebra-macros", - "num-complex", - "num-rational", - "num-traits", - "simba", - "typenum", + "num", + "rand 0.3.23", + "rustc-serialize", ] [[package]] -name = "nalgebra-macros" -version = "0.1.0" +name = "num" +version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218" +checksum = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e" dependencies = [ - "proc-macro2", - "quote", - "syn", + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1" +dependencies = [ + "num-integer", + "num-traits", + "rand 0.4.6", + "rustc-serialize", ] [[package]] name = "num-complex" -version = "0.4.0" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085" +checksum = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656" dependencies = [ "num-traits", + "rustc-serialize", ] [[package]] @@ -94,16 +93,28 @@ dependencies = [ ] [[package]] -name = "num-rational" -version = "0.4.0" +name = "num-iter" +version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" dependencies = [ "autocfg", "num-integer", "num-traits", ] +[[package]] +name = "num-rational" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", + "rustc-serialize", +] + [[package]] name = "num-traits" version = "0.2.14" @@ -114,34 +125,57 @@ dependencies = [ ] [[package]] -name = "paste" -version = "1.0.6" +name = "rand" +version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0744126afe1a6dd7f394cb50a716dbe086cb06e255e53d8d0185d82828358fb5" - -[[package]] -name = "proc-macro2" -version = "1.0.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f84e92c0f7c9d58328b85a78557813e4bd845130db68d7184635344399423b1" +checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" dependencies = [ - "unicode-xid", + "libc", + "rand 0.4.6", ] [[package]] -name = "quote" -version = "1.0.10" +name = "rand" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" dependencies = [ - "proc-macro2", + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi", ] [[package]] -name = "rawpointer" -version = "0.2.1" +name = "rand_core" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rustc-serialize" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" [[package]] name = "rustyrays" @@ -152,56 +186,23 @@ dependencies = [ ] [[package]] -name = "safe_arch" -version = "0.6.0" +name = "winapi" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "794821e4ccb0d9f979512f9c1973480123f9bd62a90d74ab0f9426fcf8f4a529" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ - "bytemuck", + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", ] [[package]] -name = "simba" -version = "0.6.0" +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0b7840f121a46d63066ee7a99fc81dcabbc6105e437cae43528cea199b5a05f" -dependencies = [ - "approx", - "num-complex", - "num-traits", - "paste", - "wide", -] +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] -name = "syn" -version = "1.0.82" +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8daf5dd0bb60cbd4137b1b587d2fc0ae729bc07cf01cd70b36a1ed5ade3b9d59" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "typenum" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec" - -[[package]] -name = "unicode-xid" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" - -[[package]] -name = "wide" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "476da2f1d225632b1fffe638ff979a4bc03907e29b0ab596efca7624014f8b62" -dependencies = [ - "bytemuck", - "safe_arch", -] +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/Cargo.toml b/Cargo.toml index c075a8c..145fb6d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,4 +7,4 @@ edition = "2021" [dependencies] bmp = "*" -nalgebra = "*" +nalgebra = "0.7.0" diff --git a/src/main.rs b/src/main.rs index f0357a8..15a86ea 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,44 +2,38 @@ extern crate bmp; extern crate nalgebra; +use nalgebra::Pnt3; +use nalgebra::Vec3; use bmp::Image; use bmp::Pixel; -struct Camera { - x: f64, - y: f64, - z: f64, - pitch: f64, - yaw: f64, - plane: bmp::Image +struct Ray { + pos: nalgebra::Pnt3, + dir: nalgebra::Vec3 } -struct OrthoCamera { - x: f64, - y: f64, - z: f64, - plane: bmp::Image -} - -impl Camera { - fn new(x: f64, y: f64, z: f64, pitch: f64, yaw: f64) -> Camera { - Camera { - x: x, - y: y, - z: z, - pitch: pitch, - yaw: yaw, - plane: Image::new(256,256) +impl Ray { + fn new(pos: nalgebra::Pnt3, dir: nalgebra::Vec3) -> Ray { + Ray { + pos: pos, + dir: dir } } + + fn at(&self, t: f64) -> Pnt3 { + self.pos + t * self.dir + } +} + +struct OrthoCamera { + pos: nalgebra::Pnt3, + plane: bmp::Image } impl OrthoCamera { - fn new(x: f64, y: f64, z: f64) -> OrthoCamera { + fn new(pos: nalgebra::Pnt3) -> OrthoCamera { OrthoCamera { - x: x, - y: y, - z: z, + pos: pos, plane: Image::new(256,256) } } @@ -53,7 +47,7 @@ struct Sphere { } fn main() { - let mut camera = OrthoCamera::new(0.0, 0.0, 0.0); + let mut camera = OrthoCamera::new(Pnt3::new(0.0, 0.0, 0.0)); let mut spheres = Vec::new(); spheres.push(Sphere { x: 0.0, @@ -67,11 +61,12 @@ fn main() { } let _ = camera.plane.save("img.bmp"); -// let mut img = Image::new(256,256); -// -// for (x, y) in img.coordinates() { -// img.set_pixel(x, y, px!(x, y, 20)); -// } -// -// let _ = img.save("img.bmp"); + + + // Testing rays + let ray = Ray::new(Pnt3::new(0.0, 0.0, 0.0), Vec3::new(0.0, 0.25, 0.8)); + + let result = ray.at(5.0); + + println!("Result: {}", result); }