Add basic ray casting

This commit is contained in:
Madeline Pace
2021-12-17 11:06:23 -05:00
parent f67fbd5151
commit fde5b22063
3 changed files with 135 additions and 139 deletions

207
Cargo.lock generated
View File

@@ -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"

View File

@@ -7,4 +7,4 @@ edition = "2021"
[dependencies]
bmp = "*"
nalgebra = "*"
nalgebra = "0.7.0"

View File

@@ -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<f64>,
dir: nalgebra::Vec3<f64>
}
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<f64>, dir: nalgebra::Vec3<f64>) -> Ray {
Ray {
pos: pos,
dir: dir
}
}
fn at(&self, t: f64) -> Pnt3<f64> {
self.pos + t * self.dir
}
}
struct OrthoCamera {
pos: nalgebra::Pnt3<f64>,
plane: bmp::Image
}
impl OrthoCamera {
fn new(x: f64, y: f64, z: f64) -> OrthoCamera {
fn new(pos: nalgebra::Pnt3<f64>) -> 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);
}