rtiow: stub triangles shape created from STLs.
This commit is contained in:
parent
54e72cd81d
commit
39eeb79409
97
rtiow/Cargo.lock
generated
97
rtiow/Cargo.lock
generated
@ -223,6 +223,12 @@ dependencies = [
|
|||||||
"winapi 0.3.9",
|
"winapi 0.3.9",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anyhow"
|
||||||
|
version = "1.0.68"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "askama"
|
name = "askama"
|
||||||
version = "0.7.2"
|
version = "0.7.2"
|
||||||
@ -1670,7 +1676,7 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
"stderrlog",
|
"stderrlog",
|
||||||
"structopt",
|
"structopt 0.2.18",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -1685,7 +1691,7 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
"stderrlog",
|
"stderrlog",
|
||||||
"structopt",
|
"structopt 0.2.18",
|
||||||
"warp",
|
"warp",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -1932,6 +1938,30 @@ version = "0.2.16"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
|
checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro-error"
|
||||||
|
version = "1.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro-error-attr",
|
||||||
|
"proc-macro2 1.0.49",
|
||||||
|
"quote 1.0.21",
|
||||||
|
"syn 1.0.107",
|
||||||
|
"version_check 0.9.4",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro-error-attr"
|
||||||
|
version = "1.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2 1.0.49",
|
||||||
|
"quote 1.0.21",
|
||||||
|
"version_check 0.9.4",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "0.4.30"
|
version = "0.4.30"
|
||||||
@ -2288,7 +2318,8 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"structopt",
|
"stl",
|
||||||
|
"structopt 0.2.18",
|
||||||
"vec3",
|
"vec3",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -2550,6 +2581,18 @@ dependencies = [
|
|||||||
"thread_local",
|
"thread_local",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "stl"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"ansi_term",
|
||||||
|
"anyhow",
|
||||||
|
"byteorder",
|
||||||
|
"structopt 0.3.26",
|
||||||
|
"thiserror",
|
||||||
|
"vec3",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "string"
|
name = "string"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
@ -2572,7 +2615,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "16c2cdbf9cc375f15d1b4141bc48aeef444806655cd0e904207edc8d68d86ed7"
|
checksum = "16c2cdbf9cc375f15d1b4141bc48aeef444806655cd0e904207edc8d68d86ed7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
"structopt-derive",
|
"structopt-derive 0.2.18",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "structopt"
|
||||||
|
version = "0.3.26"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
|
||||||
|
dependencies = [
|
||||||
|
"clap",
|
||||||
|
"lazy_static 1.4.0",
|
||||||
|
"structopt-derive 0.4.18",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -2587,6 +2641,19 @@ dependencies = [
|
|||||||
"syn 0.15.44",
|
"syn 0.15.44",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "structopt-derive"
|
||||||
|
version = "0.4.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
|
||||||
|
dependencies = [
|
||||||
|
"heck",
|
||||||
|
"proc-macro-error",
|
||||||
|
"proc-macro2 1.0.49",
|
||||||
|
"quote 1.0.21",
|
||||||
|
"syn 1.0.107",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subtle"
|
name = "subtle"
|
||||||
version = "2.4.1"
|
version = "2.4.1"
|
||||||
@ -2671,6 +2738,26 @@ dependencies = [
|
|||||||
"unicode-width",
|
"unicode-width",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thiserror"
|
||||||
|
version = "1.0.38"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0"
|
||||||
|
dependencies = [
|
||||||
|
"thiserror-impl",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thiserror-impl"
|
||||||
|
version = "1.0.38"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2 1.0.49",
|
||||||
|
"quote 1.0.21",
|
||||||
|
"syn 1.0.107",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thread_local"
|
name = "thread_local"
|
||||||
version = "0.3.4"
|
version = "0.3.4"
|
||||||
@ -2964,7 +3051,7 @@ dependencies = [
|
|||||||
"log 0.4.17",
|
"log 0.4.17",
|
||||||
"renderer",
|
"renderer",
|
||||||
"stderrlog",
|
"stderrlog",
|
||||||
"structopt",
|
"structopt 0.2.18",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|||||||
@ -23,6 +23,8 @@ serde_derive = "1.0.79"
|
|||||||
serde_json = "1.0.41"
|
serde_json = "1.0.41"
|
||||||
structopt = "0.2.10"
|
structopt = "0.2.10"
|
||||||
vec3 = {path = "../vec3"}
|
vec3 = {path = "../vec3"}
|
||||||
|
stl = {path = "../../../stl"}
|
||||||
|
#stl = {git = "https://git-private.z.xinu.tv/wathiede/stl"}
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
criterion = "0.2"
|
criterion = "0.2"
|
||||||
|
|||||||
@ -2,7 +2,7 @@ use std::fmt;
|
|||||||
|
|
||||||
use crate::{ray::Ray, vec3::Vec3};
|
use crate::{ray::Ray, vec3::Vec3};
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq)]
|
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||||
pub struct AABB {
|
pub struct AABB {
|
||||||
bounds: [Vec3; 2],
|
bounds: [Vec3; 2],
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,4 +21,5 @@ pub mod scenes;
|
|||||||
pub mod sphere;
|
pub mod sphere;
|
||||||
pub mod texture;
|
pub mod texture;
|
||||||
pub mod translate;
|
pub mod translate;
|
||||||
|
pub mod triangles;
|
||||||
pub mod vec3;
|
pub mod vec3;
|
||||||
|
|||||||
76
rtiow/renderer/src/triangles.rs
Normal file
76
rtiow/renderer/src/triangles.rs
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
use stl::STL;
|
||||||
|
|
||||||
|
use crate::{
|
||||||
|
aabb::AABB,
|
||||||
|
hitable::{Hit, HitRecord},
|
||||||
|
material::Material,
|
||||||
|
ray::Ray,
|
||||||
|
vec3::{dot, Vec3},
|
||||||
|
};
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Triangle {
|
||||||
|
pub normal: Vec3,
|
||||||
|
pub verts: [Vec3; 3],
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Triangles<M>
|
||||||
|
where
|
||||||
|
M: Material,
|
||||||
|
{
|
||||||
|
triangles: Vec<Triangle>,
|
||||||
|
bbox: Option<AABB>,
|
||||||
|
material: M,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<M> Triangles<M>
|
||||||
|
where
|
||||||
|
M: Material,
|
||||||
|
{
|
||||||
|
pub fn new<V>(stl: &STL, material: M) -> Triangles<M> {
|
||||||
|
let triangles: Vec<_> = stl
|
||||||
|
.triangles
|
||||||
|
.iter()
|
||||||
|
.map(|t| Triangle {
|
||||||
|
normal: t.normal,
|
||||||
|
verts: t.verts,
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
let (min, max) = triangles.iter().fold(
|
||||||
|
(Vec3::from(f32::MAX), Vec3::from(f32::MIN)),
|
||||||
|
|(min, max), t| {
|
||||||
|
let t_min_x = t.verts[0].x.min(t.verts[1].x.min(t.verts[2].x));
|
||||||
|
let t_min_y = t.verts[0].y.min(t.verts[1].y.min(t.verts[2].y));
|
||||||
|
let t_min_z = t.verts[0].z.min(t.verts[1].z.min(t.verts[2].z));
|
||||||
|
let t_max_x = t.verts[0].x.max(t.verts[1].x.max(t.verts[2].x));
|
||||||
|
let t_max_y = t.verts[0].y.max(t.verts[1].y.max(t.verts[2].y));
|
||||||
|
let t_max_z = t.verts[0].z.max(t.verts[1].z.max(t.verts[2].z));
|
||||||
|
|
||||||
|
(
|
||||||
|
Vec3::from([min.x.min(t_min_x), min.y.min(t_min_y), min.z.min(t_min_z)]),
|
||||||
|
Vec3::from([max.x.max(t_max_x), max.y.max(t_max_y), max.z.max(t_max_z)]),
|
||||||
|
)
|
||||||
|
},
|
||||||
|
);
|
||||||
|
let bbox = Some(AABB::new(min, max));
|
||||||
|
Triangles {
|
||||||
|
triangles,
|
||||||
|
bbox,
|
||||||
|
material,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<M> Hit for Triangles<M>
|
||||||
|
where
|
||||||
|
M: Material,
|
||||||
|
{
|
||||||
|
fn hit(&self, r: Ray, t_min: f32, t_max: f32) -> Option<HitRecord> {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn bounding_box(&self, _t_min: f32, _t_max: f32) -> Option<AABB> {
|
||||||
|
self.bbox
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user