displacements

This commit is contained in:
Robin Appelman 2022-02-20 20:07:07 +01:00
commit 421836fccf
3 changed files with 26 additions and 3 deletions

17
Cargo.lock generated
View file

@ -608,6 +608,12 @@ dependencies = [
"epaint", "epaint",
] ]
[[package]]
name = "either"
version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
[[package]] [[package]]
name = "emath" name = "emath"
version = "0.13.0" version = "0.13.0"
@ -1071,6 +1077,15 @@ version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "616cde7c720bb2bb5824a224687d8f77bfd38922027f01d825cd7453be5099fb" checksum = "616cde7c720bb2bb5824a224687d8f77bfd38922027f01d825cd7453be5099fb"
[[package]]
name = "itertools"
version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
dependencies = [
"either",
]
[[package]] [[package]]
name = "itoa" name = "itoa"
version = "1.0.1" version = "1.0.1"
@ -2307,6 +2322,7 @@ dependencies = [
"bv", "bv",
"lzma-rs", "lzma-rs",
"miette", "miette",
"num_enum",
"static_assertions", "static_assertions",
"thiserror", "thiserror",
] ]
@ -2316,6 +2332,7 @@ name = "vbspview"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"delaunator", "delaunator",
"itertools",
"miette", "miette",
"thiserror", "thiserror",
"three-d", "three-d",

View file

@ -11,6 +11,7 @@ vbsp = { version = "0.1.0", path = "../bsp" }
miette = { version = "3.2.0", features = ["fancy"] } miette = { version = "3.2.0", features = ["fancy"] }
thiserror = "1.0.30" thiserror = "1.0.30"
delaunator = "1.0.1" delaunator = "1.0.1"
itertools = "0.10.3"
[profile.dev.package."*"] [profile.dev.package."*"]
opt-level = 2 opt-level = 2

View file

@ -1,6 +1,7 @@
mod camera; mod camera;
use camera::FirstPerson; use camera::FirstPerson;
use itertools::Either;
use miette::Diagnostic; use miette::Diagnostic;
use std::env::args; use std::env::args;
use std::fs; use std::fs;
@ -42,7 +43,7 @@ fn main() -> Result<(), Error> {
let window = Window::new(WindowSettings { let window = Window::new(WindowSettings {
title: file.clone(), title: file.clone(),
max_size: Some((1280, 720)), max_size: Some((1920, 1080)),
..Default::default() ..Default::default()
})?; })?;
@ -287,8 +288,12 @@ fn model_to_mesh(model: Handle<vbsp::data::Model>) -> CPUMesh {
let positions: Vec<f32> = model let positions: Vec<f32> = model
.faces() .faces()
.filter(|face| face.is_visible()) .filter(|face| face.is_visible())
.flat_map(|face| face.triangulate()) .flat_map(|face| {
.flat_map(|triangle| triangle.into_iter()) face.displacement()
.and_then(|displacement| displacement.triangulated_displaced_vertices())
.map(|verts| Either::Left(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 / size)
.collect(); .collect();