hammer scale

This commit is contained in:
Robin Appelman 2022-02-27 21:51:07 +01:00
commit 76081413c8
3 changed files with 56 additions and 39 deletions

73
Cargo.lock generated
View file

@ -4,12 +4,12 @@ version = 3
[[package]] [[package]]
name = "ab_glyph" name = "ab_glyph"
version = "0.2.13" version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61caed9aec6daeee1ea38ccf5fb225e4f96c1eeead1b4a5c267324a63cf02326" checksum = "d54a65e0d4f66f8536c98cb3ca81ca33b7e2ca43442465507a3a62291ec0d9e4"
dependencies = [ dependencies = [
"ab_glyph_rasterizer", "ab_glyph_rasterizer",
"owned_ttf_parser 0.14.0", "owned_ttf_parser 0.15.0",
] ]
[[package]] [[package]]
@ -551,9 +551,9 @@ dependencies = [
[[package]] [[package]]
name = "dirs" name = "dirs"
version = "3.0.2" version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30baa043103c9d0c2a57cf537cc2f35623889dc0d405e6c3cccfadbc81c71309" checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
dependencies = [ dependencies = [
"dirs-sys", "dirs-sys",
] ]
@ -738,9 +738,9 @@ dependencies = [
[[package]] [[package]]
name = "getrandom" name = "getrandom"
version = "0.2.4" version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c" checksum = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if 1.0.0",
"libc", "libc",
@ -1150,9 +1150,9 @@ dependencies = [
[[package]] [[package]]
name = "libc" name = "libc"
version = "0.2.118" version = "0.2.119"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06e509672465a0504304aa87f9f176f2b2b716ed8fb105ebe5c02dc6dce96a94" checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4"
[[package]] [[package]]
name = "libloading" name = "libloading"
@ -1243,9 +1243,9 @@ dependencies = [
[[package]] [[package]]
name = "miette" name = "miette"
version = "3.3.0" version = "4.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd2adcfcced5d625bf90a958a82ae5b93231f57f3df1383fee28c9b5096d35ed" checksum = "e7ea7314b2a8dd373c2f2d2322e866ddea5d62ffd3d6cd7f2bb8c1467e56529f"
dependencies = [ dependencies = [
"atty", "atty",
"backtrace", "backtrace",
@ -1258,13 +1258,14 @@ dependencies = [
"terminal_size", "terminal_size",
"textwrap", "textwrap",
"thiserror", "thiserror",
"unicode-width",
] ]
[[package]] [[package]]
name = "miette-derive" name = "miette-derive"
version = "3.3.0" version = "4.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c01a8b61312d367ce87956bb686731f87e4c6dd5dbc550e8f06e3c24fb1f67f" checksum = "c547b28d4f52cae473fb5a30ca087ed7fc5d1bac150bd6dfd9ec0a4562303aa3"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -1522,7 +1523,7 @@ version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d992b768490d7fe0d8586d9b5745f6c49f557da6d81dc982b1d167ad4edbb21" checksum = "0d992b768490d7fe0d8586d9b5745f6c49f557da6d81dc982b1d167ad4edbb21"
dependencies = [ dependencies = [
"proc-macro-crate 1.1.2", "proc-macro-crate 1.1.3",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn", "syn",
@ -1614,11 +1615,11 @@ dependencies = [
[[package]] [[package]]
name = "owned_ttf_parser" name = "owned_ttf_parser"
version = "0.14.0" version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ef05f2882a8b3e7acc10c153ade2631f7bfc8ce00d2bf3fb8f4e9d2ae6ea5c3" checksum = "4fb1e509cfe7a12db2a90bfa057dfcdbc55a347f5da677c506b53dd099cfec9d"
dependencies = [ dependencies = [
"ttf-parser 0.14.0", "ttf-parser 0.15.0",
] ]
[[package]] [[package]]
@ -1699,9 +1700,9 @@ dependencies = [
[[package]] [[package]]
name = "proc-macro-crate" name = "proc-macro-crate"
version = "1.1.2" version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9dada8c9981fcf32929c3c0f0cd796a9284aca335565227ed88c83babb1d43dc" checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a"
dependencies = [ dependencies = [
"thiserror", "thiserror",
"toml", "toml",
@ -2064,6 +2065,17 @@ dependencies = [
"unicode-xid", "unicode-xid",
] ]
[[package]]
name = "syn_util"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6754c4559b79657554e9d8a0d56e65e490c76d382b9c23108364ec4125dea23c"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "tempfile" name = "tempfile"
version = "3.3.0" version = "3.3.0"
@ -2228,9 +2240,9 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
[[package]] [[package]]
name = "tracing" name = "tracing"
version = "0.1.30" version = "0.1.31"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2d8d93354fe2a8e50d5953f5ae2e47a3fc2ef03292e7ea46e3cc38f549525fb9" checksum = "f6c650a8ef0cd2dd93736f033d21cbd1224c5a967aa0c258d00fcf7dafef9b9f"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if 1.0.0",
"pin-project-lite", "pin-project-lite",
@ -2260,9 +2272,9 @@ checksum = "3e5d7cd7ab3e47dda6e56542f4bbf3824c15234958c6e1bd6aaa347e93499fdc"
[[package]] [[package]]
name = "ttf-parser" name = "ttf-parser"
version = "0.14.0" version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ccbe8381883510b6a2d8f1e32905bddd178c11caef8083086d0c0c9ab0ac281" checksum = "c74c96594835e10fa545e2a51e8709f30b173a092bfd6036ef2cec53376244f3"
[[package]] [[package]]
name = "unicode-bidi" name = "unicode-bidi"
@ -2324,6 +2336,17 @@ dependencies = [
"num_enum", "num_enum",
"static_assertions", "static_assertions",
"thiserror", "thiserror",
"vbsp-derive",
]
[[package]]
name = "vbsp-derive"
version = "0.1.0"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn_util",
] ]
[[package]] [[package]]
@ -2647,9 +2670,9 @@ dependencies = [
[[package]] [[package]]
name = "xdg" name = "xdg"
version = "2.4.0" version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a23fe958c70412687039c86f578938b4a0bb50ec788e96bce4d6ab00ddd5803" checksum = "0c4583db5cbd4c4c0303df2d15af80f0539db703fa1c68802d4cbbd2dd0f88f6"
dependencies = [ dependencies = [
"dirs", "dirs",
] ]

View file

@ -8,7 +8,7 @@ license = "MIT"
[dependencies] [dependencies]
three-d = "0.10.2" three-d = "0.10.2"
vbsp = { version = "0.1.0", path = "../bsp" } vbsp = { version = "0.1.0", path = "../bsp" }
miette = { version = "3.2.0", features = ["fancy"] } miette = { version = "4.2.1", features = ["fancy"] }
thiserror = "1.0.30" thiserror = "1.0.30"
delaunator = "1.0.1" delaunator = "1.0.1"
itertools = "0.10.3" itertools = "0.10.3"

View file

@ -51,7 +51,7 @@ fn main() -> Result<(), Error> {
let mut camera = Camera::new_perspective( let mut camera = Camera::new_perspective(
&context, &context,
window.viewport().unwrap(), window.viewport().unwrap(),
vec3(2.0, 2.0, 5.0), vec3(4.0, 4.0, 11.0),
vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0),
vec3(0.0, 1.0, 0.0), vec3(0.0, 1.0, 0.0),
degrees(90.0), degrees(90.0),
@ -59,7 +59,7 @@ fn main() -> Result<(), Error> {
30.0, 30.0,
) )
.unwrap(); .unwrap();
let mut control = FirstPerson::new(0.05); let mut control = FirstPerson::new(0.1);
let mut gui = three_d::GUI::new(&context).unwrap(); let mut gui = three_d::GUI::new(&context).unwrap();
let material = PhysicalMaterial { let material = PhysicalMaterial {
@ -156,7 +156,7 @@ fn main() -> Result<(), Error> {
// Draw // Draw
{ {
camera camera
.set_perspective_projection(degrees(fov), 0.1, 30.0) .set_perspective_projection(degrees(fov), camera.z_near(), camera.z_far())
.unwrap(); .unwrap();
if shadows_enabled { if shadows_enabled {
lights.directional[0] lights.directional[0]
@ -220,16 +220,10 @@ fn main() -> Result<(), Error> {
Ok(()) Ok(())
} }
// 1 hammer unit is ~1.905cm
const UNIT_SCALE: f32 = 1.0 / (1.905 * 100.0);
fn model_to_mesh(model: Handle<vbsp::data::Model>) -> CPUMesh { fn model_to_mesh(model: Handle<vbsp::data::Model>) -> CPUMesh {
let size = [
model.maxs.z - model.mins.z,
model.maxs.y - model.mins.y,
model.maxs.x - model.mins.x,
]
.into_iter()
.max_by(|a, b| a.partial_cmp(b).unwrap())
.unwrap()
/ 50.0;
let positions: Vec<f32> = model let positions: Vec<f32> = model
.faces() .faces()
.filter(|face| face.is_visible()) .filter(|face| face.is_visible())
@ -240,7 +234,7 @@ fn model_to_mesh(model: Handle<vbsp::data::Model>) -> CPUMesh {
.unwrap_or_else(|| Either::Right(face.triangulate().flat_map(|verts| verts))) .unwrap_or_else(|| Either::Right(face.triangulate().flat_map(|verts| verts)))
}) })
.flat_map(|vertex| [-vertex.x, vertex.z, vertex.y]) .flat_map(|vertex| [-vertex.x, vertex.z, vertex.y])
.map(|c| c / size) .map(|c| c * UNIT_SCALE)
.collect(); .collect();
CPUMesh { CPUMesh {