From d0440f3da34fe3d48b79180cf4f19e6a2495203a Mon Sep 17 00:00:00 2001 From: reo Date: Thu, 17 Jul 2025 23:19:46 +0300 Subject: [PATCH] Major Refactor: separate project into multiple crates --- .gitignore | 1 + Cargo.lock | 152 +- Cargo.toml | 29 +- justfile | 2 - opengl.png | Bin 44866 -> 0 bytes raidillon_core/Cargo.toml | 4 + raidillon_core/src/lib.rs | 3 + {src => raidillon_core/src}/time.rs | 2 +- raidillon_ecs/Cargo.toml | 8 + raidillon_ecs/src/lib.rs | 17 + raidillon_game/Cargo.toml | 16 + {src => raidillon_game/src}/main.rs | 25 +- raidillon_render/Cargo.toml | 14 + {src => raidillon_render/src}/camera.rs | 0 .../src/ecs_renderer.rs | 18 +- {src => raidillon_render/src}/gltf_loader.rs | 2 +- raidillon_render/src/lib.rs | 9 + {src => raidillon_render/src}/model.rs | 0 {src => raidillon_render/src}/render.rs | 10 +- raidillon_ui/Cargo.toml | 12 + raidillon_ui/src/lib.rs | 3 + {src => raidillon_ui/src}/ui.rs | 2 +- readme.md | 2 +- src/teapot.rs | 2110 ----------------- 24 files changed, 209 insertions(+), 2232 deletions(-) delete mode 100644 opengl.png create mode 100644 raidillon_core/Cargo.toml create mode 100644 raidillon_core/src/lib.rs rename {src => raidillon_core/src}/time.rs (99%) create mode 100644 raidillon_ecs/Cargo.toml create mode 100644 raidillon_ecs/src/lib.rs create mode 100644 raidillon_game/Cargo.toml rename {src => raidillon_game/src}/main.rs (91%) create mode 100644 raidillon_render/Cargo.toml rename {src => raidillon_render/src}/camera.rs (100%) rename src/ecs.rs => raidillon_render/src/ecs_renderer.rs (79%) rename {src => raidillon_render/src}/gltf_loader.rs (99%) create mode 100644 raidillon_render/src/lib.rs rename {src => raidillon_render/src}/model.rs (100%) rename {src => raidillon_render/src}/render.rs (93%) create mode 100644 raidillon_ui/Cargo.toml create mode 100644 raidillon_ui/src/lib.rs rename {src => raidillon_ui/src}/ui.rs (99%) delete mode 100644 src/teapot.rs diff --git a/.gitignore b/.gitignore index b5d2ef8..3db9b6f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /target .aider* +*.patch diff --git a/Cargo.lock b/Cargo.lock index a227390..b75daea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "ab_glyph" -version = "0.2.29" +version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3672c180e71eeaaac3a541fbbc5f5ad4def8b747c595ad30d674e43049f7b0" +checksum = "e074464580a518d16a7126262fffaaa47af89d4099d4cb403f8ed938ba12ee7d" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -14,9 +14,9 @@ dependencies = [ [[package]] name = "ab_glyph_rasterizer" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" +checksum = "b2187590a23ab1e3df8681afdf0987c48504d80291f002fcdb651f0ef5e25169" [[package]] name = "addr2line" @@ -151,9 +151,9 @@ dependencies = [ [[package]] name = "avif-serialize" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98922d6a4cfbcb08820c69d8eeccc05bb1f29bfa06b4f5b1dbfe9a868bd7608e" +checksum = "2ea8ef51aced2b9191c08197f55450d830876d9933f8f48a429b354f1d496b42" dependencies = [ "arrayvec", ] @@ -220,9 +220,9 @@ checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" [[package]] name = "bumpalo" -version = "3.18.1" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytemuck" @@ -276,9 +276,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.27" +version = "1.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc" +checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362" dependencies = [ "jobserver", "libc", @@ -395,9 +395,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] @@ -429,9 +429,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "cursor-icon" @@ -585,23 +585,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" -[[package]] -name = "fps" -version = "0.1.0" -dependencies = [ - "anyhow", - "glam", - "glium", - "gltf", - "glutin", - "hecs", - "image", - "imgui", - "imgui-glium-renderer", - "imgui-winit-support", - "winit", -] - [[package]] name = "gethostname" version = "0.4.3" @@ -923,9 +906,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", "hashbrown 0.15.4", @@ -1037,9 +1020,9 @@ checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" [[package]] name = "libfuzzer-sys" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf78f52d400cf2d84a3a973a78a592b4adc535739e0a5597a0da6f0c357adc75" +checksum = "5037190e1f70cbeef565bd267599242926f724d3b8a9f510fd7e0b540cfa4404" dependencies = [ "arbitrary", "cc", @@ -1057,9 +1040,9 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "1580801010e535496706ba011c15f8532df6b42297d2e471fec38ceadd8c0638" dependencies = [ "bitflags 2.9.1", "libc", @@ -1121,9 +1104,9 @@ checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memmap2" -version = "0.9.5" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" +checksum = "483758ad303d734cec05e5c12b41d7e93e6a6390c5e9dae6bdeb7c1259012d28" dependencies = [ "libc", ] @@ -1652,7 +1635,7 @@ dependencies = [ "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 1.0.7", + "rustix 1.0.8", "tracing", "windows-sys 0.59.0", ] @@ -1742,6 +1725,60 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "raidillon_core" +version = "0.1.0" + +[[package]] +name = "raidillon_ecs" +version = "0.1.0" +dependencies = [ + "glam", + "hecs", +] + +[[package]] +name = "raidillon_game" +version = "0.1.0" +dependencies = [ + "anyhow", + "glam", + "glium", + "glutin", + "hecs", + "raidillon_core", + "raidillon_ecs", + "raidillon_render", + "raidillon_ui", + "winit", +] + +[[package]] +name = "raidillon_render" +version = "0.1.0" +dependencies = [ + "anyhow", + "glam", + "glium", + "gltf", + "glutin", + "hecs", + "image", + "raidillon_ecs", +] + +[[package]] +name = "raidillon_ui" +version = "0.1.0" +dependencies = [ + "anyhow", + "glium", + "imgui", + "imgui-glium-renderer", + "imgui-winit-support", + "winit", +] + [[package]] name = "rand" version = "0.8.5" @@ -1868,9 +1905,9 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.50" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" +checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" [[package]] name = "rustc-demangle" @@ -1893,15 +1930,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ "bitflags 2.9.1", "errno", "libc", "linux-raw-sys 0.9.4", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -2306,12 +2343,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.45" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] @@ -2459,9 +2497,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.72" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -2824,9 +2862,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" +checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" dependencies = [ "memchr", ] @@ -2874,9 +2912,9 @@ checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" [[package]] name = "xcursor" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "635887f4315a33cb714eb059bdbd7c1c92bfa71bc5b9d5115460502f788c2ab5" +checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" [[package]] name = "xkbcommon-dl" @@ -2899,9 +2937,9 @@ checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xml-rs" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda" +checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" [[package]] name = "zerocopy" @@ -2940,9 +2978,9 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.4.18" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7384255a918371b5af158218d131530f694de9ad3815ebdd0453a940485cb0fa" +checksum = "2c9e525af0a6a658e031e95f14b7f889976b74a11ba0eca5a5fc9ac8a1c43a6a" dependencies = [ "zune-core", ] diff --git a/Cargo.toml b/Cargo.toml index d26e25b..67268bd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,21 +1,8 @@ -[package] -name = "fps" -version = "0.1.0" -edition = "2021" - -[dependencies] -anyhow = "1.0.98" -glam = "0.30.4" - -glium = { version = "0.35.0", features = ["glutin_backend", "simple_window_builder"] } -gltf = { version = "1.4.1", features = ["import", "utils", "KHR_texture_transform"] } -glutin = { version = "0.32.3", default-features = false } - -hecs = "0.10.5" -image = "0.25.6" - -imgui = "0.12" -imgui-winit-support = "0.13" -imgui-glium-renderer = "0.13" - -winit = "0.30" +[workspace] +members = [ + "raidillon_core", + "raidillon_ecs", + "raidillon_render", + "raidillon_ui", + "raidillon_game", +] diff --git a/justfile b/justfile index a8ef99b..7236755 100644 --- a/justfile +++ b/justfile @@ -1,10 +1,8 @@ default: @just --list -# Run 'cargo run' on the project run *ARGS: cargo run {{ARGS}} -# Watch for changes and automatically restart watch: bacon diff --git a/opengl.png b/opengl.png deleted file mode 100644 index f765a0704aa91c2e9876ca96e4cca6a47f2c3d3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44866 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 JA!i=^zW{cFP_F<0 diff --git a/raidillon_core/Cargo.toml b/raidillon_core/Cargo.toml new file mode 100644 index 0000000..1d15e30 --- /dev/null +++ b/raidillon_core/Cargo.toml @@ -0,0 +1,4 @@ +[package] +name = "raidillon_core" +version = "0.1.0" +edition = "2021" diff --git a/raidillon_core/src/lib.rs b/raidillon_core/src/lib.rs new file mode 100644 index 0000000..230f8bb --- /dev/null +++ b/raidillon_core/src/lib.rs @@ -0,0 +1,3 @@ +pub mod time; + +pub use time::Time; diff --git a/src/time.rs b/raidillon_core/src/time.rs similarity index 99% rename from src/time.rs rename to raidillon_core/src/time.rs index 5e8159b..13876f1 100644 --- a/src/time.rs +++ b/raidillon_core/src/time.rs @@ -31,4 +31,4 @@ impl Time { pub fn total_seconds(&self) -> f32 { self.total.as_secs_f32() } -} \ No newline at end of file +} diff --git a/raidillon_ecs/Cargo.toml b/raidillon_ecs/Cargo.toml new file mode 100644 index 0000000..7a88695 --- /dev/null +++ b/raidillon_ecs/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "raidillon_ecs" +version = "0.1.0" +edition = "2021" + +[dependencies] +glam = "0.30.4" +hecs = "0.10.5" diff --git a/raidillon_ecs/src/lib.rs b/raidillon_ecs/src/lib.rs new file mode 100644 index 0000000..19a3e69 --- /dev/null +++ b/raidillon_ecs/src/lib.rs @@ -0,0 +1,17 @@ +use glam::{Mat4, Quat, Vec3}; + +#[derive(Copy, Clone)] +pub struct Transform { + pub translation: Vec3, + pub rotation: Quat, + pub scale: Vec3, +} + +impl Transform { + pub fn matrix(&self) -> Mat4 { + Mat4::from_scale_rotation_translation(self.scale, self.rotation, self.translation) + } +} + +#[derive(Clone)] +pub struct ModelHandle(pub usize); diff --git a/raidillon_game/Cargo.toml b/raidillon_game/Cargo.toml new file mode 100644 index 0000000..5c88109 --- /dev/null +++ b/raidillon_game/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "raidillon_game" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = "1.0.98" +glam = "0.30.4" +glium = { version = "0.35.0", features = ["glutin_backend", "simple_window_builder"] } +glutin = { version = "0.32.3", default-features = false } +winit = "0.30" +raidillon_render = { path = "../raidillon_render" } +raidillon_ecs = { path = "../raidillon_ecs" } +raidillon_ui = { path = "../raidillon_ui" } +raidillon_core = { path = "../raidillon_core" } +hecs = "0.10.5" diff --git a/src/main.rs b/raidillon_game/src/main.rs similarity index 91% rename from src/main.rs rename to raidillon_game/src/main.rs index 1a92617..fc9d741 100644 --- a/src/main.rs +++ b/raidillon_game/src/main.rs @@ -1,17 +1,10 @@ -mod camera; -mod ecs; -mod model; -mod gltf_loader; -mod render; -mod time; -mod ui; - use anyhow::Result; -use camera::Camera; -use ecs::{Transform}; use glam::{Quat, Vec3, EulerRot}; use glium::backend::glutin::SimpleWindowBuilder; -use render::GliumRenderer; +use raidillon_core::Time; +use raidillon_ecs::Transform; +use raidillon_render::{Camera, GliumRenderer, gltf_loader, ECSRenderer}; +use raidillon_ui::Gui; fn main() -> Result<()> { let event_loop = glium::winit::event_loop::EventLoop::builder() @@ -19,7 +12,7 @@ fn main() -> Result<()> { .expect("create event-loop"); let (window, display) = SimpleWindowBuilder::new() - .with_title("fps") + .with_title("raidillon") .with_inner_size(1280, 720) .build(&event_loop); @@ -27,13 +20,13 @@ fn main() -> Result<()> { let mut ecsr = { let world = hecs::World::new(); let renderer = GliumRenderer::new(display.clone())?; - ecs::ECSRenderer::new(renderer, world) + ECSRenderer::new(renderer, world) }; // Dear ImGui integration - let mut gui = ui::Gui::new(&display, &window)?; + let mut gui = Gui::new(&display, &window)?; - let mut time = time::Time::new(); + let mut time = Time::new(); let object_ent = { let model_3d = gltf_loader::load_gltf("resources/models/tree.gltf", &display)?; @@ -77,7 +70,7 @@ fn main() -> Result<()> { Event::WindowEvent { event, .. } => match event { WindowEvent::CloseRequested => el.exit(), WindowEvent::Resized(sz) => { - ecsr.world.query_one_mut::<&mut crate::camera::Camera>(camera_ent).map(|mut cam| { + ecsr.world.query_one_mut::<&mut Camera>(camera_ent).map(|mut cam| { cam.aspect = sz.width as f32 / sz.height as f32; }); } diff --git a/raidillon_render/Cargo.toml b/raidillon_render/Cargo.toml new file mode 100644 index 0000000..1f5247c --- /dev/null +++ b/raidillon_render/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "raidillon_render" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = "1.0.98" +glam = "0.30.4" +glium = { version = "0.35.0", features = ["glutin_backend", "simple_window_builder"] } +gltf = { version = "1.4.1", features = ["import", "utils", "KHR_texture_transform"] } +glutin = { version = "0.32.3", default-features = false } +hecs = "0.10.5" +image = "0.25.6" +raidillon_ecs = { path = "../raidillon_ecs" } diff --git a/src/camera.rs b/raidillon_render/src/camera.rs similarity index 100% rename from src/camera.rs rename to raidillon_render/src/camera.rs diff --git a/src/ecs.rs b/raidillon_render/src/ecs_renderer.rs similarity index 79% rename from src/ecs.rs rename to raidillon_render/src/ecs_renderer.rs index a81c9e3..edac676 100644 --- a/src/ecs.rs +++ b/raidillon_render/src/ecs_renderer.rs @@ -1,4 +1,4 @@ -use glam::{Mat4, Quat, Vec3}; +use raidillon_ecs::{Transform, ModelHandle}; use hecs::{Entity, World}; use crate::render::GliumRenderer; use crate::model::Model; @@ -46,19 +46,3 @@ impl ECSRenderer { self.renderer.render_into(&self.world, target); } } - -#[derive(Copy, Clone)] -pub struct Transform { - pub translation: Vec3, - pub rotation: Quat, - pub scale: Vec3, -} - -impl Transform { - pub fn matrix(&self) -> Mat4 { - Mat4::from_scale_rotation_translation(self.scale, self.rotation, self.translation) - } -} - -#[derive(Clone)] -pub struct ModelHandle(pub usize); diff --git a/src/gltf_loader.rs b/raidillon_render/src/gltf_loader.rs similarity index 99% rename from src/gltf_loader.rs rename to raidillon_render/src/gltf_loader.rs index 81b24b7..4d006fb 100644 --- a/src/gltf_loader.rs +++ b/raidillon_render/src/gltf_loader.rs @@ -177,4 +177,4 @@ fn to_rgba(img: &gltf::image::Data) -> Vec { } _ => img.pixels.clone(), } -} \ No newline at end of file +} diff --git a/raidillon_render/src/lib.rs b/raidillon_render/src/lib.rs new file mode 100644 index 0000000..40e3033 --- /dev/null +++ b/raidillon_render/src/lib.rs @@ -0,0 +1,9 @@ +pub mod camera; +pub mod model; +pub mod gltf_loader; +pub mod render; +pub mod ecs_renderer; + +pub use camera::Camera; +pub use render::GliumRenderer; +pub use ecs_renderer::ECSRenderer; diff --git a/src/model.rs b/raidillon_render/src/model.rs similarity index 100% rename from src/model.rs rename to raidillon_render/src/model.rs diff --git a/src/render.rs b/raidillon_render/src/render.rs similarity index 93% rename from src/render.rs rename to raidillon_render/src/render.rs index c382239..38f4175 100644 --- a/src/render.rs +++ b/raidillon_render/src/render.rs @@ -1,5 +1,5 @@ use crate::camera::Camera; -use crate::ecs::{ModelHandle, Transform}; +use raidillon_ecs::{ModelHandle, Transform}; use crate::model::{Model, Mesh}; use glium::texture::{RawImage2d, SrgbTexture2d}; use glium::{uniform, Program, Surface}; @@ -26,8 +26,8 @@ pub struct GliumRenderer { impl GliumRenderer { pub fn new(display: glium::Display) -> anyhow::Result { - const VERT_SRC: &str = include_str!("../resources/shaders/gl_textured.vert"); - const FRAG_SRC: &str = include_str!("../resources/shaders/gl_textured.frag"); + const VERT_SRC: &str = include_str!("../../resources/shaders/gl_textured.vert"); + const FRAG_SRC: &str = include_str!("../../resources/shaders/gl_textured.frag"); let program = Program::from_source(&display, VERT_SRC, FRAG_SRC, None)?; @@ -46,8 +46,8 @@ impl GliumRenderer { .. Default::default() }; - let sky_vert = include_str!("../resources/shaders/skybox.vert"); - let sky_frag = include_str!("../resources/shaders/skybox.frag"); + let sky_vert = include_str!("../../resources/shaders/skybox.vert"); + let sky_frag = include_str!("../../resources/shaders/skybox.frag"); let skybox_program = Program::from_source(&display, sky_vert, sky_frag, None)?; let image = ImageReader::open("resources/skyboxes/sky_24_2k.png")?.decode()?.to_rgba8(); diff --git a/raidillon_ui/Cargo.toml b/raidillon_ui/Cargo.toml new file mode 100644 index 0000000..d26d063 --- /dev/null +++ b/raidillon_ui/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "raidillon_ui" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = "1.0.98" +glium = { version = "0.35.0", features = ["glutin_backend", "simple_window_builder"] } +imgui = "0.12" +imgui-winit-support = "0.13" +imgui-glium-renderer = "0.13" +winit = "0.30" diff --git a/raidillon_ui/src/lib.rs b/raidillon_ui/src/lib.rs new file mode 100644 index 0000000..35f3bd9 --- /dev/null +++ b/raidillon_ui/src/lib.rs @@ -0,0 +1,3 @@ +pub mod ui; + +pub use ui::Gui; diff --git a/src/ui.rs b/raidillon_ui/src/ui.rs similarity index 99% rename from src/ui.rs rename to raidillon_ui/src/ui.rs index c6be88a..8ac7b0d 100644 --- a/src/ui.rs +++ b/raidillon_ui/src/ui.rs @@ -81,4 +81,4 @@ impl Gui { let ui = self.imgui.frame(); build(&ui); } -} \ No newline at end of file +} diff --git a/readme.md b/readme.md index f1458ae..48b6b50 100644 --- a/readme.md +++ b/readme.md @@ -1,3 +1,3 @@ ## Attributions -- [Tree](./resources/models/tree.gltf) by "Poly by Google" [CC-BY] (https://creativecommons.org/licenses/by/3.0/) via [Poly Pizza](https://poly.pizza/m/6pwiq7hSrHr) \ No newline at end of file +- [Tree](./resources/models/tree.gltf) by "Poly by Google" [CC-BY](https://creativecommons.org/licenses/by/3.0/) via [Poly Pizza](https://poly.pizza/m/6pwiq7hSrHr) diff --git a/src/teapot.rs b/src/teapot.rs deleted file mode 100644 index 914a881..0000000 --- a/src/teapot.rs +++ /dev/null @@ -1,2110 +0,0 @@ -#[derive(Copy, Clone)] -pub struct Vertex { - position: (f32, f32, f32) -} - -implement_vertex!(Vertex, position); - -pub const VERTICES: [Vertex; 531] = [ - Vertex { position: (0.0, 0.0, 0.0) }, // dummy vector because in the original model indices - // start at 1 - Vertex { position: (40.6266, 28.3457, -1.10804) }, - Vertex { position: (40.0714, 30.4443, -1.10804) }, - Vertex { position: (40.7155, 31.1438, -1.10804) }, - Vertex { position: (42.0257, 30.4443, -1.10804) }, - Vertex { position: (43.4692, 28.3457, -1.10804) }, - Vertex { position: (37.5425, 28.3457, 14.5117) }, - Vertex { position: (37.0303, 30.4443, 14.2938) }, - Vertex { position: (37.6244, 31.1438, 14.5466) }, - Vertex { position: (38.8331, 30.4443, 15.0609) }, - Vertex { position: (40.1647, 28.3457, 15.6274) }, - Vertex { position: (29.0859, 28.3457, 27.1468) }, - Vertex { position: (28.6917, 30.4443, 26.7527) }, - Vertex { position: (29.149, 31.1438, 27.2099) }, - Vertex { position: (30.0792, 30.4443, 28.1402) }, - Vertex { position: (31.1041, 28.3457, 29.165) }, - Vertex { position: (16.4508, 28.3457, 35.6034) }, - Vertex { position: (16.2329, 30.4443, 35.0912) }, - Vertex { position: (16.4857, 31.1438, 35.6853) }, - Vertex { position: (16.9999, 30.4443, 36.894) }, - Vertex { position: (17.5665, 28.3457, 38.2256) }, - Vertex { position: (0.831025, 28.3457, 38.6876) }, - Vertex { position: (0.831025, 30.4443, 38.1324) }, - Vertex { position: (0.831025, 31.1438, 38.7764) }, - Vertex { position: (0.831025, 30.4443, 40.0866) }, - Vertex { position: (0.831025, 28.3457, 41.5301) }, - Vertex { position: (-15.868, 28.3457, 35.6034) }, - Vertex { position: (-15.0262, 30.4443, 35.0912) }, - Vertex { position: (-14.9585, 31.1438, 35.6853) }, - Vertex { position: (-15.3547, 30.4443, 36.894) }, - Vertex { position: (-15.9044, 28.3457, 38.2256) }, - Vertex { position: (-28.3832, 28.3457, 27.1468) }, - Vertex { position: (-27.4344, 30.4443, 26.7527) }, - Vertex { position: (-27.6068, 31.1438, 27.2099) }, - Vertex { position: (-28.4322, 30.4443, 28.1402) }, - Vertex { position: (-29.4421, 28.3457, 29.165) }, - Vertex { position: (-36.2402, 28.3457, 14.5117) }, - Vertex { position: (-35.52, 30.4443, 14.2938) }, - Vertex { position: (-36.0073, 31.1438, 14.5466) }, - Vertex { position: (-37.1767, 30.4443, 15.0609) }, - Vertex { position: (-38.5027, 28.3457, 15.6274) }, - Vertex { position: (-38.9646, 28.3457, -1.10804) }, - Vertex { position: (-38.4094, 30.4443, -1.10804) }, - Vertex { position: (-39.0534, 31.1438, -1.10804) }, - Vertex { position: (-40.3636, 30.4443, -1.10804) }, - Vertex { position: (-41.8071, 28.3457, -1.10804) }, - Vertex { position: (-35.8804, 28.3457, -16.7278) }, - Vertex { position: (-35.3683, 30.4443, -16.5099) }, - Vertex { position: (-35.9624, 31.1438, -16.7627) }, - Vertex { position: (-37.1711, 30.4443, -17.2769) }, - Vertex { position: (-38.5027, 28.3457, -17.8435) }, - Vertex { position: (-27.4238, 28.3457, -29.3629) }, - Vertex { position: (-27.0297, 30.4443, -28.9687) }, - Vertex { position: (-27.4869, 31.1438, -29.426) }, - Vertex { position: (-28.4172, 30.4443, -30.3562) }, - Vertex { position: (-29.4421, 28.3457, -31.3811) }, - Vertex { position: (-14.7887, 28.3457, -37.8195) }, - Vertex { position: (-14.5708, 30.4443, -37.3073) }, - Vertex { position: (-14.8236, 31.1438, -37.9014) }, - Vertex { position: (-15.3379, 30.4443, -39.1101) }, - Vertex { position: (-15.9044, 28.3457, -40.4417) }, - Vertex { position: (0.831025, 28.3457, -40.9036) }, - Vertex { position: (0.831025, 30.4443, -40.3484) }, - Vertex { position: (0.831025, 31.1438, -40.9925) }, - Vertex { position: (0.831025, 30.4443, -42.3027) }, - Vertex { position: (0.831025, 28.3457, -43.7462) }, - Vertex { position: (16.4508, 28.3457, -37.8195) }, - Vertex { position: (16.2329, 30.4443, -37.3073) }, - Vertex { position: (16.4857, 31.1438, -37.9014) }, - Vertex { position: (16.9999, 30.4443, -39.1101) }, - Vertex { position: (17.5665, 28.3457, -40.4417) }, - Vertex { position: (29.0859, 28.3457, -29.3629) }, - Vertex { position: (28.6917, 30.4443, -28.9687) }, - Vertex { position: (29.149, 31.1438, -29.426) }, - Vertex { position: (30.0792, 30.4443, -30.3562) }, - Vertex { position: (31.1041, 28.3457, -31.3811) }, - Vertex { position: (37.5425, 28.3457, -16.7278) }, - Vertex { position: (37.0303, 30.4443, -16.5099) }, - Vertex { position: (37.6244, 31.1438, -16.7627) }, - Vertex { position: (38.8331, 30.4443, -17.2769) }, - Vertex { position: (40.1647, 28.3457, -17.8435) }, - Vertex { position: (48.6879, 17.1865, -1.10804) }, - Vertex { position: (53.2404, 6.22714, -1.10804) }, - Vertex { position: (56.4605, -4.33246, -1.10804) }, - Vertex { position: (57.6819, -14.2925, -1.10804) }, - Vertex { position: (44.979, 17.1865, 17.6758) }, - Vertex { position: (49.1787, 6.22714, 19.4626) }, - Vertex { position: (52.1492, -4.33246, 20.7265) }, - Vertex { position: (53.2759, -14.2925, 21.2059) }, - Vertex { position: (34.8094, 17.1865, 32.8703) }, - Vertex { position: (38.0417, 6.22714, 36.1026) }, - Vertex { position: (40.3279, -4.33246, 38.3889) }, - Vertex { position: (41.1951, -14.2925, 39.2561) }, - Vertex { position: (19.6148, 17.1865, 43.0399) }, - Vertex { position: (21.4017, 6.22714, 47.2396) }, - Vertex { position: (22.6656, -4.33246, 50.2101) }, - Vertex { position: (23.145, -14.2925, 51.3369) }, - Vertex { position: (0.831025, 17.1865, 46.7488) }, - Vertex { position: (0.831025, 6.22714, 51.3013) }, - Vertex { position: (0.831025, -4.33246, 54.5214) }, - Vertex { position: (0.831025, -14.2925, 55.7428) }, - Vertex { position: (-17.9528, 17.1865, 43.0399) }, - Vertex { position: (-19.7397, 6.22714, 47.2396) }, - Vertex { position: (-21.0035, -4.33246, 50.2101) }, - Vertex { position: (-21.4829, -14.2925, 51.3369) }, - Vertex { position: (-33.1474, 17.1865, 32.8703) }, - Vertex { position: (-36.3796, 6.22714, 36.1026) }, - Vertex { position: (-38.6659, -4.33246, 38.3889) }, - Vertex { position: (-39.5331, -14.2925, 39.2561) }, - Vertex { position: (-43.3169, 17.1865, 17.6758) }, - Vertex { position: (-47.5166, 6.22714, 19.4626) }, - Vertex { position: (-50.4871, -4.33246, 20.7265) }, - Vertex { position: (-51.6139, -14.2925, 21.2059) }, - Vertex { position: (-47.0258, 17.1865, -1.10804) }, - Vertex { position: (-51.5784, 6.22714, -1.10804) }, - Vertex { position: (-54.7984, -4.33246, -1.10804) }, - Vertex { position: (-56.0198, -14.2925, -1.10804) }, - Vertex { position: (-43.3169, 17.1865, -19.8919) }, - Vertex { position: (-47.5166, 6.22714, -21.6787) }, - Vertex { position: (-50.4871, -4.33246, -22.9426) }, - Vertex { position: (-51.6139, -14.2925, -23.422) }, - Vertex { position: (-33.1474, 17.1865, -35.0864) }, - Vertex { position: (-36.3796, 6.22714, -38.3187) }, - Vertex { position: (-38.6659, -4.33246, -40.6049) }, - Vertex { position: (-39.5331, -14.2925, -41.4721) }, - Vertex { position: (-17.9528, 17.1865, -45.256) }, - Vertex { position: (-19.7397, 6.22714, -49.4557) }, - Vertex { position: (-21.0035, -4.33246, -52.4262) }, - Vertex { position: (-21.4829, -14.2925, -53.5529) }, - Vertex { position: (0.831025, 17.1865, -48.9649) }, - Vertex { position: (0.831025, 6.22714, -53.5174) }, - Vertex { position: (0.831025, -4.33246, -56.7375) }, - Vertex { position: (0.831025, -14.2925, -57.9589) }, - Vertex { position: (19.6148, 17.1865, -45.256) }, - Vertex { position: (21.4017, 6.22714, -49.4557) }, - Vertex { position: (22.6656, -4.33246, -52.4262) }, - Vertex { position: (23.145, -14.2925, -53.5529) }, - Vertex { position: (34.8094, 17.1865, -35.0864) }, - Vertex { position: (38.0417, 6.22714, -38.3187) }, - Vertex { position: (40.3279, -4.33246, -40.6049) }, - Vertex { position: (41.1951, -14.2925, -41.4721) }, - Vertex { position: (44.979, 17.1865, -19.8919) }, - Vertex { position: (49.1787, 6.22714, -21.6787) }, - Vertex { position: (52.1492, -4.33246, -22.9426) }, - Vertex { position: (53.2759, -14.2925, -23.422) }, - Vertex { position: (55.4611, -22.7202, -1.10804) }, - Vertex { position: (50.5755, -28.9493, -1.10804) }, - Vertex { position: (45.6899, -33.1798, -1.10804) }, - Vertex { position: (43.4692, -35.6115, -1.10804) }, - Vertex { position: (51.2273, -22.7202, 20.3343) }, - Vertex { position: (46.7203, -28.9493, 18.4167) }, - Vertex { position: (42.2133, -33.1798, 16.4991) }, - Vertex { position: (40.1647, -35.6115, 15.6274) }, - Vertex { position: (39.6184, -22.7202, 37.6793) }, - Vertex { position: (36.1496, -28.9493, 34.2106) }, - Vertex { position: (32.6808, -33.1798, 30.7418) }, - Vertex { position: (31.1041, -35.6115, 29.165) }, - Vertex { position: (22.2733, -22.7202, 49.2882) }, - Vertex { position: (20.3557, -28.9493, 44.7813) }, - Vertex { position: (18.4381, -33.1798, 40.2743) }, - Vertex { position: (17.5665, -35.6115, 38.2256) }, - Vertex { position: (0.831025, -22.7202, 53.5221) }, - Vertex { position: (0.831025, -28.9493, 48.6365) }, - Vertex { position: (0.831025, -33.1798, 43.7508) }, - Vertex { position: (0.831025, -35.6115, 41.5301) }, - Vertex { position: (-20.6113, -22.7202, 49.2882) }, - Vertex { position: (-18.6937, -28.9493, 44.7813) }, - Vertex { position: (-16.7761, -33.1798, 40.2743) }, - Vertex { position: (-15.9044, -35.6115, 38.2256) }, - Vertex { position: (-37.9564, -22.7202, 37.6793) }, - Vertex { position: (-34.4876, -28.9493, 34.2106) }, - Vertex { position: (-31.0188, -33.1798, 30.7418) }, - Vertex { position: (-29.4421, -35.6115, 29.165) }, - Vertex { position: (-49.5653, -22.7202, 20.3343) }, - Vertex { position: (-45.0583, -28.9493, 18.4167) }, - Vertex { position: (-40.5513, -33.1798, 16.4991) }, - Vertex { position: (-38.5027, -35.6115, 15.6274) }, - Vertex { position: (-53.7991, -22.7202, -1.10804) }, - Vertex { position: (-48.9135, -28.9493, -1.10804) }, - Vertex { position: (-44.0279, -33.1798, -1.10804) }, - Vertex { position: (-41.8071, -35.6115, -1.10804) }, - Vertex { position: (-49.5653, -22.7202, -22.5504) }, - Vertex { position: (-45.0583, -28.9493, -20.6327) }, - Vertex { position: (-40.5513, -33.1798, -18.7151) }, - Vertex { position: (-38.5027, -35.6115, -17.8435) }, - Vertex { position: (-37.9564, -22.7202, -39.8954) }, - Vertex { position: (-34.4876, -28.9493, -36.4266) }, - Vertex { position: (-31.0188, -33.1798, -32.9578) }, - Vertex { position: (-29.4421, -35.6115, -31.3811) }, - Vertex { position: (-20.6113, -22.7202, -51.5043) }, - Vertex { position: (-18.6937, -28.9493, -46.9973) }, - Vertex { position: (-16.7761, -33.1798, -42.4903) }, - Vertex { position: (-15.9044, -35.6115, -40.4417) }, - Vertex { position: (0.831025, -22.7202, -55.7382) }, - Vertex { position: (0.831025, -28.9493, -50.8525) }, - Vertex { position: (0.831025, -33.1798, -45.9669) }, - Vertex { position: (0.831025, -35.6115, -43.7462) }, - Vertex { position: (22.2733, -22.7202, -51.5043) }, - Vertex { position: (20.3557, -28.9493, -46.9973) }, - Vertex { position: (18.4381, -33.1798, -42.4903) }, - Vertex { position: (17.5665, -35.6115, -40.4417) }, - Vertex { position: (39.6184, -22.7202, -39.8954) }, - Vertex { position: (36.1496, -28.9493, -36.4266) }, - Vertex { position: (32.6808, -33.1798, -32.9578) }, - Vertex { position: (31.1041, -35.6115, -31.3811) }, - Vertex { position: (51.2273, -22.7202, -22.5504) }, - Vertex { position: (46.7203, -28.9493, -20.6327) }, - Vertex { position: (42.2133, -33.1798, -18.7151) }, - Vertex { position: (40.1647, -35.6115, -17.8435) }, - Vertex { position: (42.5031, -37.1772, -1.10804) }, - Vertex { position: (37.3399, -38.5429, -1.10804) }, - Vertex { position: (24.5818, -39.5089, -1.10804) }, - Vertex { position: (0.831025, -39.8754, -1.10804) }, - Vertex { position: (39.2736, -37.1772, 15.2483) }, - Vertex { position: (34.5105, -38.5429, 13.2217) }, - Vertex { position: (22.7411, -39.5089, 8.21414) }, - Vertex { position: (30.4182, -37.1772, 28.4792) }, - Vertex { position: (26.7523, -38.5429, 24.8133) }, - Vertex { position: (17.6941, -39.5089, 15.755) }, - Vertex { position: (17.1873, -37.1772, 37.3345) }, - Vertex { position: (15.1608, -38.5429, 32.5714) }, - Vertex { position: (10.1532, -39.5089, 20.8021) }, - Vertex { position: (0.831025, -37.1772, 40.5641) }, - Vertex { position: (0.831025, -38.5429, 35.4009) }, - Vertex { position: (0.831025, -39.5089, 22.6427) }, - Vertex { position: (-15.5253, -37.1772, 37.3345) }, - Vertex { position: (-13.4987, -38.5429, 32.5714) }, - Vertex { position: (-8.49115, -39.5089, 20.8021) }, - Vertex { position: (-28.7562, -37.1772, 28.4792) }, - Vertex { position: (-25.0903, -38.5429, 24.8133) }, - Vertex { position: (-16.032, -39.5089, 15.755) }, - Vertex { position: (-37.6115, -37.1772, 15.2483) }, - Vertex { position: (-32.8484, -38.5429, 13.2217) }, - Vertex { position: (-21.0791, -39.5089, 8.21414) }, - Vertex { position: (-40.8411, -37.1772, -1.10804) }, - Vertex { position: (-35.6779, -38.5429, -1.10804) }, - Vertex { position: (-22.9198, -39.5089, -1.10804) }, - Vertex { position: (-37.6115, -37.1772, -17.4643) }, - Vertex { position: (-32.8484, -38.5429, -15.4378) }, - Vertex { position: (-21.0791, -39.5089, -10.4302) }, - Vertex { position: (-28.7562, -37.1772, -30.6952) }, - Vertex { position: (-25.0903, -38.5429, -27.0294) }, - Vertex { position: (-16.032, -39.5089, -17.9711) }, - Vertex { position: (-15.5253, -37.1772, -39.5506) }, - Vertex { position: (-13.4987, -38.5429, -34.7875) }, - Vertex { position: (-8.49115, -39.5089, -23.0181) }, - Vertex { position: (0.831025, -37.1772, -42.7802) }, - Vertex { position: (0.831025, -38.5429, -37.6169) }, - Vertex { position: (0.831025, -39.5089, -24.8588) }, - Vertex { position: (17.1873, -37.1772, -39.5506) }, - Vertex { position: (15.1608, -38.5429, -34.7875) }, - Vertex { position: (10.1532, -39.5089, -23.0181) }, - Vertex { position: (30.4182, -37.1772, -30.6952) }, - Vertex { position: (26.7523, -38.5429, -27.0294) }, - Vertex { position: (17.6941, -39.5089, -17.9711) }, - Vertex { position: (39.2736, -37.1772, -17.4643) }, - Vertex { position: (34.5105, -38.5429, -15.4378) }, - Vertex { position: (22.7411, -39.5089, -10.4302) }, - Vertex { position: (-44.6497, 17.6861, -1.10804) }, - Vertex { position: (-57.9297, 17.5862, -1.10804) }, - Vertex { position: (-67.7453, 16.8867, -1.10804) }, - Vertex { position: (-73.8301, 14.9879, -1.10804) }, - Vertex { position: (-75.9176, 11.2904, -1.10804) }, - Vertex { position: (-44.2055, 18.6855, 3.68876) }, - Vertex { position: (-58.3252, 18.5699, 3.68876) }, - Vertex { position: (-68.6891, 17.7611, 3.68876) }, - Vertex { position: (-75.0724, 15.5657, 3.68876) }, - Vertex { position: (-77.2501, 11.2904, 3.68876) }, - Vertex { position: (-43.2284, 20.884, 5.28769) }, - Vertex { position: (-59.1955, 20.7341, 5.28769) }, - Vertex { position: (-70.7655, 19.6848, 5.28769) }, - Vertex { position: (-77.8053, 16.8367, 5.28769) }, - Vertex { position: (-80.1814, 11.2904, 5.28769) }, - Vertex { position: (-42.2513, 23.0825, 3.68876) }, - Vertex { position: (-60.0657, 22.8983, 3.68876) }, - Vertex { position: (-72.8419, 21.6085, 3.68876) }, - Vertex { position: (-80.5381, 18.1077, 3.68876) }, - Vertex { position: (-83.1128, 11.2904, 3.68876) }, - Vertex { position: (-41.8071, 24.0819, -1.10804) }, - Vertex { position: (-60.4613, 23.882, -1.10804) }, - Vertex { position: (-73.7857, 22.4829, -1.10804) }, - Vertex { position: (-81.7804, 18.6855, -1.10804) }, - Vertex { position: (-84.4453, 11.2904, -1.10804) }, - Vertex { position: (-42.2513, 23.0825, -5.90483) }, - Vertex { position: (-60.0657, 22.8983, -5.90483) }, - Vertex { position: (-72.8419, 21.6085, -5.90483) }, - Vertex { position: (-80.5381, 18.1077, -5.90483) }, - Vertex { position: (-83.1128, 11.2904, -5.90483) }, - Vertex { position: (-43.2284, 20.884, -7.50376) }, - Vertex { position: (-59.1955, 20.7341, -7.50376) }, - Vertex { position: (-70.7655, 19.6848, -7.50376) }, - Vertex { position: (-77.8053, 16.8367, -7.50376) }, - Vertex { position: (-80.1814, 11.2904, -7.50376) }, - Vertex { position: (-44.2055, 18.6855, -5.90483) }, - Vertex { position: (-58.3252, 18.5699, -5.90483) }, - Vertex { position: (-68.6891, 17.7611, -5.90483) }, - Vertex { position: (-75.0724, 15.5657, -5.90483) }, - Vertex { position: (-77.2501, 11.2904, -5.90483) }, - Vertex { position: (-74.8073, 5.4943, -1.10804) }, - Vertex { position: (-71.2985, -1.50103, -1.10804) }, - Vertex { position: (-65.1248, -8.49634, -1.10804) }, - Vertex { position: (-56.0198, -14.2925, -1.10804) }, - Vertex { position: (-76.0183, 4.93477, 3.68876) }, - Vertex { position: (-72.159, -2.35462, 3.68876) }, - Vertex { position: (-65.4267, -9.55033, 3.68876) }, - Vertex { position: (-55.5757, -15.6249, 3.68876) }, - Vertex { position: (-78.6824, 3.70383, 5.28769) }, - Vertex { position: (-74.0522, -4.23253, 5.28769) }, - Vertex { position: (-66.0909, -11.8691, 5.28769) }, - Vertex { position: (-54.5986, -18.5563, 5.28769) }, - Vertex { position: (-81.3466, 2.47288, 3.68876) }, - Vertex { position: (-75.9454, -6.11044, 3.68876) }, - Vertex { position: (-66.755, -14.1878, 3.68876) }, - Vertex { position: (-53.6214, -21.4877, 3.68876) }, - Vertex { position: (-82.5576, 1.91336, -1.10804) }, - Vertex { position: (-76.8059, -6.96404, -1.10804) }, - Vertex { position: (-67.0569, -15.2418, -1.10804) }, - Vertex { position: (-53.1773, -22.8201, -1.10804) }, - Vertex { position: (-81.3466, 2.47288, -5.90483) }, - Vertex { position: (-75.9454, -6.11044, -5.90483) }, - Vertex { position: (-66.755, -14.1878, -5.90483) }, - Vertex { position: (-53.6214, -21.4877, -5.90483) }, - Vertex { position: (-78.6824, 3.70383, -7.50376) }, - Vertex { position: (-74.0522, -4.23253, -7.50376) }, - Vertex { position: (-66.0909, -11.8691, -7.50376) }, - Vertex { position: (-54.5986, -18.5563, -7.50376) }, - Vertex { position: (-76.0183, 4.93477, -5.90483) }, - Vertex { position: (-72.159, -2.35462, -5.90483) }, - Vertex { position: (-65.4267, -9.55033, -5.90483) }, - Vertex { position: (-55.5757, -15.6249, -5.90483) }, - Vertex { position: (49.1543, 0.630882, -1.10804) }, - Vertex { position: (62.7896, 3.76212, -1.10804) }, - Vertex { position: (68.6967, 11.2904, -1.10804) }, - Vertex { position: (71.939, 20.4176, -1.10804) }, - Vertex { position: (77.5797, 28.3457, -1.10804) }, - Vertex { position: (49.1543, -3.03333, 9.4449) }, - Vertex { position: (63.8305, 1.04519, 8.42059) }, - Vertex { position: (70.0292, 9.70814, 6.1671) }, - Vertex { position: (73.5629, 19.8451, 3.91361) }, - Vertex { position: (80.2446, 28.3457, 2.88929) }, - Vertex { position: (49.1543, -11.0946, 12.9626) }, - Vertex { position: (66.1207, -4.93206, 11.5968) }, - Vertex { position: (72.9605, 6.22714, 8.59214) }, - Vertex { position: (77.1355, 18.5855, 5.58749) }, - Vertex { position: (86.1073, 28.3457, 4.22173) }, - Vertex { position: (49.1543, -19.1559, 9.4449) }, - Vertex { position: (68.4108, -10.9093, 8.42059) }, - Vertex { position: (75.8919, 2.74614, 6.1671) }, - Vertex { position: (80.7081, 17.326, 3.91361) }, - Vertex { position: (91.97, 28.3457, 2.88929) }, - Vertex { position: (49.1543, -22.8201, -1.10804) }, - Vertex { position: (69.4518, -13.6262, -1.10804) }, - Vertex { position: (77.2244, 1.16386, -1.10804) }, - Vertex { position: (82.3321, 16.7534, -1.10804) }, - Vertex { position: (94.6349, 28.3457, -1.10804) }, - Vertex { position: (49.1543, -19.1559, -11.661) }, - Vertex { position: (68.4108, -10.9093, -10.6367) }, - Vertex { position: (75.8919, 2.74614, -8.38317) }, - Vertex { position: (80.7081, 17.326, -6.12968) }, - Vertex { position: (91.97, 28.3457, -5.10536) }, - Vertex { position: (49.1543, -11.0946, -15.1786) }, - Vertex { position: (66.1207, -4.93206, -13.8129) }, - Vertex { position: (72.9605, 6.22714, -10.8082) }, - Vertex { position: (77.1355, 18.5855, -7.80356) }, - Vertex { position: (86.1073, 28.3457, -6.4378) }, - Vertex { position: (49.1543, -3.03333, -11.661) }, - Vertex { position: (63.8305, 1.04519, -10.6367) }, - Vertex { position: (70.0292, 9.70814, -8.38317) }, - Vertex { position: (73.5629, 19.8451, -6.12968) }, - Vertex { position: (80.2446, 28.3457, -5.10536) }, - Vertex { position: (79.6227, 29.5449, -1.10804) }, - Vertex { position: (81.1329, 29.9446, -1.10804) }, - Vertex { position: (81.577, 29.5449, -1.10804) }, - Vertex { position: (80.4222, 28.3457, -1.10804) }, - Vertex { position: (82.4767, 29.6034, 2.63946) }, - Vertex { position: (83.8116, 30.0383, 2.08983) }, - Vertex { position: (83.8515, 29.6268, 1.54019) }, - Vertex { position: (82.1988, 28.3457, 1.29036) }, - Vertex { position: (88.7555, 29.7322, 3.88862) }, - Vertex { position: (89.7049, 30.2444, 3.15578) }, - Vertex { position: (88.8555, 29.8072, 2.42294) }, - Vertex { position: (86.1073, 28.3457, 2.08983) }, - Vertex { position: (95.0343, 29.8611, 2.63946) }, - Vertex { position: (95.5982, 30.4505, 2.08983) }, - Vertex { position: (93.8594, 29.9875, 1.54019) }, - Vertex { position: (90.0158, 28.3457, 1.29036) }, - Vertex { position: (97.8883, 29.9196, -1.10804) }, - Vertex { position: (98.2769, 30.5442, -1.10804) }, - Vertex { position: (96.1339, 30.0695, -1.10804) }, - Vertex { position: (91.7924, 28.3457, -1.10804) }, - Vertex { position: (95.0343, 29.8611, -4.85553) }, - Vertex { position: (95.5982, 30.4505, -4.3059) }, - Vertex { position: (93.8594, 29.9875, -3.75626) }, - Vertex { position: (90.0158, 28.3457, -3.50643) }, - Vertex { position: (88.7555, 29.7322, -6.10469) }, - Vertex { position: (89.7049, 30.2444, -5.37185) }, - Vertex { position: (88.8555, 29.8072, -4.63901) }, - Vertex { position: (86.1073, 28.3457, -4.3059) }, - Vertex { position: (82.4767, 29.6034, -4.85553) }, - Vertex { position: (83.8116, 30.0383, -4.3059) }, - Vertex { position: (83.8515, 29.6268, -3.75626) }, - Vertex { position: (82.1988, 28.3457, -3.50643) }, - Vertex { position: (0.831025, 49.6647, -1.10804) }, - Vertex { position: (10.5134, 48.2657, -1.10804) }, - Vertex { position: (10.0693, 44.868, -1.10804) }, - Vertex { position: (6.42728, 40.6708, -1.10804) }, - Vertex { position: (6.51611, 36.8733, -1.10804) }, - Vertex { position: (9.76642, 48.2657, 2.70243) }, - Vertex { position: (9.35632, 44.868, 2.52698) }, - Vertex { position: (5.9947, 40.6708, 1.09187) }, - Vertex { position: (6.07552, 36.8733, 1.12336) }, - Vertex { position: (7.71453, 48.2657, 5.77547) }, - Vertex { position: (7.39819, 44.868, 5.45913) }, - Vertex { position: (4.80736, 40.6708, 2.8683) }, - Vertex { position: (4.86744, 36.8733, 2.92838) }, - Vertex { position: (4.64149, 48.2657, 7.82736) }, - Vertex { position: (4.46604, 44.868, 7.41726) }, - Vertex { position: (3.03093, 40.6708, 4.05564) }, - Vertex { position: (3.06242, 36.8733, 4.13646) }, - Vertex { position: (0.831025, 48.2657, 8.57438) }, - Vertex { position: (0.831025, 44.868, 8.13023) }, - Vertex { position: (0.831025, 40.6708, 4.48822) }, - Vertex { position: (0.831025, 36.8733, 4.57705) }, - Vertex { position: (-2.97944, 48.2657, 7.82736) }, - Vertex { position: (-2.80399, 44.868, 7.41726) }, - Vertex { position: (-1.36888, 40.6708, 4.05564) }, - Vertex { position: (-1.40037, 36.8733, 4.13646) }, - Vertex { position: (-6.05248, 48.2657, 5.77547) }, - Vertex { position: (-5.73614, 44.868, 5.45913) }, - Vertex { position: (-3.14531, 40.6708, 2.8683) }, - Vertex { position: (-3.20539, 36.8733, 2.92838) }, - Vertex { position: (-8.10437, 48.2657, 2.70243) }, - Vertex { position: (-7.69427, 44.868, 2.52698) }, - Vertex { position: (-4.33265, 40.6708, 1.09187) }, - Vertex { position: (-4.41347, 36.8733, 1.12336) }, - Vertex { position: (-8.85139, 48.2657, -1.10804) }, - Vertex { position: (-8.40724, 44.868, -1.10804) }, - Vertex { position: (-4.76523, 40.6708, -1.10804) }, - Vertex { position: (-4.85406, 36.8733, -1.10804) }, - Vertex { position: (-8.10437, 48.2657, -4.9185) }, - Vertex { position: (-7.69427, 44.868, -4.74305) }, - Vertex { position: (-4.33265, 40.6708, -3.30794) }, - Vertex { position: (-4.41347, 36.8733, -3.33943) }, - Vertex { position: (-6.05248, 48.2657, -7.99154) }, - Vertex { position: (-5.73614, 44.868, -7.6752) }, - Vertex { position: (-3.14531, 40.6708, -5.08437) }, - Vertex { position: (-3.20539, 36.8733, -5.14445) }, - Vertex { position: (-2.97944, 48.2657, -10.0434) }, - Vertex { position: (-2.80399, 44.868, -9.63333) }, - Vertex { position: (-1.36888, 40.6708, -6.27171) }, - Vertex { position: (-1.40037, 36.8733, -6.35253) }, - Vertex { position: (0.831025, 48.2657, -10.7904) }, - Vertex { position: (0.831025, 44.868, -10.3463) }, - Vertex { position: (0.831025, 40.6708, -6.70429) }, - Vertex { position: (0.831025, 36.8733, -6.79312) }, - Vertex { position: (4.64149, 48.2657, -10.0434) }, - Vertex { position: (4.46604, 44.868, -9.63333) }, - Vertex { position: (3.03093, 40.6708, -6.27171) }, - Vertex { position: (3.06242, 36.8733, -6.35253) }, - Vertex { position: (7.71453, 48.2657, -7.99154) }, - Vertex { position: (7.39819, 44.868, -7.6752) }, - Vertex { position: (4.80736, 40.6708, -5.08437) }, - Vertex { position: (4.86744, 36.8733, -5.14445) }, - Vertex { position: (9.76642, 48.2657, -4.9185) }, - Vertex { position: (9.35632, 44.868, -4.74305) }, - Vertex { position: (5.9947, 40.6708, -3.30794) }, - Vertex { position: (6.07552, 36.8733, -3.33943) }, - Vertex { position: (13.8001, 34.3417, -1.10804) }, - Vertex { position: (24.282, 32.6095, -1.10804) }, - Vertex { position: (33.6979, 30.8773, -1.10804) }, - Vertex { position: (37.7841, 28.3457, -1.10804) }, - Vertex { position: (12.795, 34.3417, 3.98234) }, - Vertex { position: (22.4646, 32.6095, 8.09647) }, - Vertex { position: (31.1507, 30.8773, 11.7922) }, - Vertex { position: (34.9202, 28.3457, 13.396) }, - Vertex { position: (10.0391, 34.3417, 8.10003) }, - Vertex { position: (17.4812, 32.6095, 15.5422) }, - Vertex { position: (24.1665, 30.8773, 22.2275) }, - Vertex { position: (27.0677, 28.3457, 25.1286) }, - Vertex { position: (5.9214, 34.3417, 10.856) }, - Vertex { position: (10.0355, 32.6095, 20.5255) }, - Vertex { position: (13.7313, 30.8773, 29.2117) }, - Vertex { position: (15.3351, 28.3457, 32.9812) }, - Vertex { position: (0.831025, 34.3417, 11.8611) }, - Vertex { position: (0.831025, 32.6095, 22.3429) }, - Vertex { position: (0.831025, 30.8773, 31.7589) }, - Vertex { position: (0.831025, 28.3457, 35.845) }, - Vertex { position: (-4.25935, 34.3417, 10.856) }, - Vertex { position: (-8.37348, 32.6095, 20.5255) }, - Vertex { position: (-12.0692, 30.8773, 29.2117) }, - Vertex { position: (-13.673, 28.3457, 32.9812) }, - Vertex { position: (-8.37704, 34.3417, 8.10003) }, - Vertex { position: (-15.8192, 32.6095, 15.5422) }, - Vertex { position: (-22.5045, 30.8773, 22.2275) }, - Vertex { position: (-25.4056, 28.3457, 25.1286) }, - Vertex { position: (-11.133, 34.3417, 3.98234) }, - Vertex { position: (-20.8025, 32.6095, 8.09647) }, - Vertex { position: (-29.4887, 30.8773, 11.7922) }, - Vertex { position: (-33.2582, 28.3457, 13.396) }, - Vertex { position: (-12.1381, 34.3417, -1.10804) }, - Vertex { position: (-22.62, 32.6095, -1.10804) }, - Vertex { position: (-32.0359, 30.8773, -1.10804) }, - Vertex { position: (-36.122, 28.3457, -1.10804) }, - Vertex { position: (-11.133, 34.3417, -6.19841) }, - Vertex { position: (-20.8025, 32.6095, -10.3125) }, - Vertex { position: (-29.4887, 30.8773, -14.0083) }, - Vertex { position: (-33.2582, 28.3457, -15.6121) }, - Vertex { position: (-8.37704, 34.3417, -10.3161) }, - Vertex { position: (-15.8192, 32.6095, -17.7582) }, - Vertex { position: (-22.5045, 30.8773, -24.4435) }, - Vertex { position: (-25.4056, 28.3457, -27.3447) }, - Vertex { position: (-4.25935, 34.3417, -13.072) }, - Vertex { position: (-8.37348, 32.6095, -22.7416) }, - Vertex { position: (-12.0692, 30.8773, -31.4277) }, - Vertex { position: (-13.673, 28.3457, -35.1972) }, - Vertex { position: (0.831025, 34.3417, -14.0771) }, - Vertex { position: (0.831025, 32.6095, -24.559) }, - Vertex { position: (0.831025, 30.8773, -33.9749) }, - Vertex { position: (0.831025, 28.3457, -38.0611) }, - Vertex { position: (5.9214, 34.3417, -13.072) }, - Vertex { position: (10.0355, 32.6095, -22.7416) }, - Vertex { position: (13.7313, 30.8773, -31.4277) }, - Vertex { position: (15.3351, 28.3457, -35.1972) }, - Vertex { position: (10.0391, 34.3417, -10.3161) }, - Vertex { position: (17.4812, 32.6095, -17.7582) }, - Vertex { position: (24.1665, 30.8773, -24.4435) }, - Vertex { position: (27.0677, 28.3457, -27.3447) }, - Vertex { position: (12.795, 34.3417, -6.19841) }, - Vertex { position: (22.4646, 32.6095, -10.3125) }, - Vertex { position: (31.1507, 30.8773, -14.0083) }, - Vertex { position: (34.9202, 28.3457, -15.6121) } -]; - -#[derive(Copy, Clone)] -pub struct Normal { - normal: (f32, f32, f32) -} - -implement_vertex!(Normal, normal); - -pub const NORMALS: [Normal; 531] = [ - Normal { normal: (0.0, 0.0, 0.0) }, // dummy vector because in the original model indices - // start at 1 - Normal { normal: (-0.966742, -0.255752, 0.0) }, - Normal { normal: (-0.966824, 0.255443, 0.0) }, - Normal { normal: (-0.092052, 0.995754, 0.0) }, - Normal { normal: (0.68205, 0.731305, 0.0) }, - Normal { normal: (0.870301, 0.492521, -0.0) }, - Normal { normal: (-0.893014, -0.256345, -0.369882) }, - Normal { normal: (-0.893437, 0.255997, -0.369102) }, - Normal { normal: (-0.0838771, 0.995843, -0.0355068) }, - Normal { normal: (0.629724, 0.73186, 0.260439) }, - Normal { normal: (0.803725, 0.49337, 0.332584) }, - Normal { normal: (-0.683407, -0.256729, -0.683407) }, - Normal { normal: (-0.683531, 0.256067, -0.683531) }, - Normal { normal: (-0.0649249, 0.995776, -0.0649248) }, - Normal { normal: (0.481398, 0.732469, 0.481398) }, - Normal { normal: (0.614804, 0.493997, 0.614804) }, - Normal { normal: (-0.369882, -0.256345, -0.893014) }, - Normal { normal: (-0.369102, 0.255997, -0.893437) }, - Normal { normal: (-0.0355067, 0.995843, -0.0838772) }, - Normal { normal: (0.260439, 0.73186, 0.629724) }, - Normal { normal: (0.332584, 0.49337, 0.803725) }, - Normal { normal: (-0.00284834, -0.257863, -0.966177) }, - Normal { normal: (-0.00192311, 0.254736, -0.967009) }, - Normal { normal: (-0.000266114, 0.995734, -0.0922702) }, - Normal { normal: (0.0, 0.731295, 0.682061) }, - Normal { normal: (0.0, 0.492521, 0.870301) }, - Normal { normal: (0.379058, -0.3593, -0.852771) }, - Normal { normal: (0.37711, 0.149086, -0.914091) }, - Normal { normal: (0.0275022, 0.992081, -0.122551) }, - Normal { normal: (-0.26101, 0.726762, 0.635367) }, - Normal { normal: (-0.332485, 0.492546, 0.804271) }, - Normal { normal: (0.663548, -0.410791, -0.625264) }, - Normal { normal: (0.712664, 0.0737216, -0.697621) }, - Normal { normal: (0.0997268, 0.987509, -0.121984) }, - Normal { normal: (-0.48732, 0.723754, 0.488568) }, - Normal { normal: (-0.615242, 0.492602, 0.615484) }, - Normal { normal: (0.880028, -0.332908, -0.338709) }, - Normal { normal: (0.917276, 0.167113, -0.361493) }, - Normal { normal: (0.113584, 0.992365, -0.0480695) }, - Normal { normal: (-0.63415, 0.727508, 0.261889) }, - Normal { normal: (-0.804126, 0.492634, 0.332705) }, - Normal { normal: (0.96669, -0.255738, 0.0104537) }, - Normal { normal: (0.967442, 0.252962, 0.00810329) }, - Normal { normal: (0.0934365, 0.995624, 0.00128063) }, - Normal { normal: (-0.682167, 0.731196, -0.00034353) }, - Normal { normal: (-0.870322, 0.492483, -0.0) }, - Normal { normal: (0.893014, -0.256345, 0.369882) }, - Normal { normal: (0.893437, 0.255997, 0.369102) }, - Normal { normal: (0.0838768, 0.995843, 0.0355066) }, - Normal { normal: (-0.629724, 0.73186, -0.260439) }, - Normal { normal: (-0.803725, 0.49337, -0.332584) }, - Normal { normal: (0.683407, -0.256729, 0.683407) }, - Normal { normal: (0.683531, 0.256067, 0.683531) }, - Normal { normal: (0.0649249, 0.995776, 0.0649249) }, - Normal { normal: (-0.481398, 0.732469, -0.481398) }, - Normal { normal: (-0.614804, 0.493997, -0.614804) }, - Normal { normal: (0.369882, -0.256345, 0.893014) }, - Normal { normal: (0.369102, 0.255997, 0.893437) }, - Normal { normal: (0.0355067, 0.995843, 0.083877) }, - Normal { normal: (-0.260439, 0.73186, -0.629724) }, - Normal { normal: (-0.332584, 0.49337, -0.803725) }, - Normal { normal: (0.0, -0.255752, 0.966742) }, - Normal { normal: (0.0, 0.255443, 0.966824) }, - Normal { normal: (0.0, 0.995754, 0.092052) }, - Normal { normal: (0.0, 0.731305, -0.68205) }, - Normal { normal: (-0.0, 0.492521, -0.870301) }, - Normal { normal: (-0.369882, -0.256345, 0.893014) }, - Normal { normal: (-0.369102, 0.255996, 0.893437) }, - Normal { normal: (-0.0355068, 0.995843, 0.0838771) }, - Normal { normal: (0.260439, 0.73186, -0.629724) }, - Normal { normal: (0.332584, 0.49337, -0.803725) }, - Normal { normal: (-0.683407, -0.256729, 0.683407) }, - Normal { normal: (-0.683531, 0.256067, 0.683531) }, - Normal { normal: (-0.0649249, 0.995776, 0.064925) }, - Normal { normal: (0.481398, 0.732469, -0.481398) }, - Normal { normal: (0.614804, 0.493997, -0.614804) }, - Normal { normal: (-0.893014, -0.256345, 0.369882) }, - Normal { normal: (-0.893437, 0.255997, 0.369102) }, - Normal { normal: (-0.0838767, 0.995843, 0.0355066) }, - Normal { normal: (0.629724, 0.73186, -0.260439) }, - Normal { normal: (0.803725, 0.49337, -0.332584) }, - Normal { normal: (0.915321, 0.402725, 0.0) }, - Normal { normal: (0.941808, 0.336151, -0.0) }, - Normal { normal: (0.97869, 0.205342, 0.0) }, - Normal { normal: (0.997804, -0.0662397, 0.0) }, - Normal { normal: (0.845438, 0.403546, 0.349835) }, - Normal { normal: (0.869996, 0.336859, 0.360047) }, - Normal { normal: (0.904193, 0.205791, 0.37428) }, - Normal { normal: (0.921879, -0.0663697, 0.381752) }, - Normal { normal: (0.646802, 0.404096, 0.646802) }, - Normal { normal: (0.665655, 0.337351, 0.665655) }, - Normal { normal: (0.691923, 0.20612, 0.691923) }, - Normal { normal: (0.705542, -0.0664796, 0.705543) }, - Normal { normal: (0.349835, 0.403546, 0.845438) }, - Normal { normal: (0.360047, 0.336859, 0.869996) }, - Normal { normal: (0.37428, 0.205791, 0.904193) }, - Normal { normal: (0.381752, -0.0663697, 0.921879) }, - Normal { normal: (-0.0, 0.402725, 0.915321) }, - Normal { normal: (0.0, 0.336151, 0.941808) }, - Normal { normal: (-0.0, 0.205342, 0.97869) }, - Normal { normal: (-0.0, -0.0662397, 0.997804) }, - Normal { normal: (-0.349835, 0.403546, 0.845438) }, - Normal { normal: (-0.360047, 0.336859, 0.869996) }, - Normal { normal: (-0.37428, 0.205791, 0.904193) }, - Normal { normal: (-0.381752, -0.0663697, 0.921879) }, - Normal { normal: (-0.646802, 0.404096, 0.646802) }, - Normal { normal: (-0.665655, 0.337351, 0.665655) }, - Normal { normal: (-0.691923, 0.20612, 0.691923) }, - Normal { normal: (-0.705543, -0.0664796, 0.705543) }, - Normal { normal: (-0.845438, 0.403546, 0.349835) }, - Normal { normal: (-0.869996, 0.336859, 0.360047) }, - Normal { normal: (-0.904193, 0.205791, 0.37428) }, - Normal { normal: (-0.921879, -0.0663697, 0.381752) }, - Normal { normal: (-0.915321, 0.402725, -0.0) }, - Normal { normal: (-0.941808, 0.336151, -0.0) }, - Normal { normal: (-0.97869, 0.205342, -0.0) }, - Normal { normal: (-0.997804, -0.0662397, -0.0) }, - Normal { normal: (-0.845438, 0.403546, -0.349835) }, - Normal { normal: (-0.869996, 0.336859, -0.360047) }, - Normal { normal: (-0.904193, 0.205791, -0.37428) }, - Normal { normal: (-0.921879, -0.0663697, -0.381752) }, - Normal { normal: (-0.646802, 0.404096, -0.646802) }, - Normal { normal: (-0.665655, 0.337351, -0.665655) }, - Normal { normal: (-0.691923, 0.20612, -0.691923) }, - Normal { normal: (-0.705542, -0.0664796, -0.705543) }, - Normal { normal: (-0.349835, 0.403546, -0.845438) }, - Normal { normal: (-0.360047, 0.336859, -0.869996) }, - Normal { normal: (-0.37428, 0.205791, -0.904193) }, - Normal { normal: (-0.381752, -0.0663697, -0.921879) }, - Normal { normal: (0.0, 0.402725, -0.915321) }, - Normal { normal: (-0.0, 0.336151, -0.941808) }, - Normal { normal: (0.0, 0.205342, -0.97869) }, - Normal { normal: (0.0, -0.0662397, -0.997804) }, - Normal { normal: (0.349835, 0.403546, -0.845438) }, - Normal { normal: (0.360047, 0.336859, -0.869996) }, - Normal { normal: (0.37428, 0.205791, -0.904193) }, - Normal { normal: (0.381752, -0.0663697, -0.921879) }, - Normal { normal: (0.646802, 0.404096, -0.646802) }, - Normal { normal: (0.665655, 0.337351, -0.665655) }, - Normal { normal: (0.691923, 0.20612, -0.691923) }, - Normal { normal: (0.705543, -0.0664796, -0.705542) }, - Normal { normal: (0.845438, 0.403546, -0.349835) }, - Normal { normal: (0.869996, 0.336859, -0.360047) }, - Normal { normal: (0.904193, 0.205791, -0.37428) }, - Normal { normal: (0.921879, -0.0663697, -0.381752) }, - Normal { normal: (0.900182, -0.435513, -0.0) }, - Normal { normal: (0.729611, -0.683863, -0.0) }, - Normal { normal: (0.693951, -0.720022, -0.0) }, - Normal { normal: (0.79395, -0.607984, 0.0) }, - Normal { normal: (0.831437, -0.43618, 0.344179) }, - Normal { normal: (0.673512, -0.684665, 0.278594) }, - Normal { normal: (0.640399, -0.720924, 0.264874) }, - Normal { normal: (0.732949, -0.608996, 0.303166) }, - Normal { normal: (0.636092, -0.436777, 0.636092) }, - Normal { normal: (0.514965, -0.685289, 0.514965) }, - Normal { normal: (0.489651, -0.721446, 0.489651) }, - Normal { normal: (0.560555, -0.609554, 0.560555) }, - Normal { normal: (0.344179, -0.43618, 0.831437) }, - Normal { normal: (0.278594, -0.684665, 0.673512) }, - Normal { normal: (0.264874, -0.720924, 0.640399) }, - Normal { normal: (0.303166, -0.608996, 0.732949) }, - Normal { normal: (0.0, -0.435513, 0.900182) }, - Normal { normal: (-0.0, -0.683863, 0.729611) }, - Normal { normal: (0.0, -0.720022, 0.693951) }, - Normal { normal: (-0.0, -0.607984, 0.79395) }, - Normal { normal: (-0.344179, -0.43618, 0.831437) }, - Normal { normal: (-0.278594, -0.684665, 0.673512) }, - Normal { normal: (-0.264874, -0.720924, 0.640399) }, - Normal { normal: (-0.303166, -0.608996, 0.732949) }, - Normal { normal: (-0.636092, -0.436777, 0.636092) }, - Normal { normal: (-0.514965, -0.685289, 0.514965) }, - Normal { normal: (-0.489651, -0.721446, 0.489651) }, - Normal { normal: (-0.560555, -0.609554, 0.560555) }, - Normal { normal: (-0.831437, -0.43618, 0.344179) }, - Normal { normal: (-0.673512, -0.684665, 0.278595) }, - Normal { normal: (-0.640399, -0.720924, 0.264874) }, - Normal { normal: (-0.732949, -0.608996, 0.303166) }, - Normal { normal: (-0.900182, -0.435513, -0.0) }, - Normal { normal: (-0.729611, -0.683863, -0.0) }, - Normal { normal: (-0.693951, -0.720022, 0.0) }, - Normal { normal: (-0.79395, -0.607983, -0.0) }, - Normal { normal: (-0.831437, -0.43618, -0.344179) }, - Normal { normal: (-0.673512, -0.684665, -0.278594) }, - Normal { normal: (-0.640399, -0.720924, -0.264874) }, - Normal { normal: (-0.732949, -0.608996, -0.303166) }, - Normal { normal: (-0.636092, -0.436777, -0.636092) }, - Normal { normal: (-0.514965, -0.685289, -0.514965) }, - Normal { normal: (-0.489651, -0.721446, -0.489651) }, - Normal { normal: (-0.560555, -0.609554, -0.560555) }, - Normal { normal: (-0.344179, -0.43618, -0.831437) }, - Normal { normal: (-0.278594, -0.684665, -0.673512) }, - Normal { normal: (-0.264874, -0.720924, -0.640399) }, - Normal { normal: (-0.303166, -0.608996, -0.732949) }, - Normal { normal: (-0.0, -0.435513, -0.900182) }, - Normal { normal: (0.0, -0.683863, -0.729611) }, - Normal { normal: (-0.0, -0.720022, -0.693951) }, - Normal { normal: (0.0, -0.607984, -0.79395) }, - Normal { normal: (0.344179, -0.43618, -0.831437) }, - Normal { normal: (0.278594, -0.684665, -0.673512) }, - Normal { normal: (0.264874, -0.720924, -0.640399) }, - Normal { normal: (0.303167, -0.608996, -0.732949) }, - Normal { normal: (0.636092, -0.436777, -0.636092) }, - Normal { normal: (0.514965, -0.685289, -0.514965) }, - Normal { normal: (0.489651, -0.721446, -0.489651) }, - Normal { normal: (0.560555, -0.609554, -0.560555) }, - Normal { normal: (0.831437, -0.43618, -0.344179) }, - Normal { normal: (0.673512, -0.684665, -0.278595) }, - Normal { normal: (0.640399, -0.720924, -0.264874) }, - Normal { normal: (0.732949, -0.608996, -0.303166) }, - Normal { normal: (0.62386, -0.781536, 0.0) }, - Normal { normal: (0.177291, -0.984159, -0.0) }, - Normal { normal: (0.0492072, -0.998789, 0.0) }, - Normal { normal: (0.0, -1.0, -0.0) }, - Normal { normal: (0.576229, -0.781801, 0.238217) }, - Normal { normal: (0.163629, -0.984208, 0.0675273) }, - Normal { normal: (0.0454217, -0.998792, 0.0187357) }, - Normal { normal: (0.440416, -0.782348, 0.440416) }, - Normal { normal: (0.124903, -0.984276, 0.124903) }, - Normal { normal: (0.0346621, -0.998798, 0.0346621) }, - Normal { normal: (0.238217, -0.781801, 0.576229) }, - Normal { normal: (0.0675273, -0.984208, 0.163629) }, - Normal { normal: (0.0187357, -0.998792, 0.0454217) }, - Normal { normal: (-0.0, -0.781536, 0.62386) }, - Normal { normal: (0.0, -0.984159, 0.177291) }, - Normal { normal: (-0.0, -0.998789, 0.0492072) }, - Normal { normal: (-0.238216, -0.781801, 0.576229) }, - Normal { normal: (-0.0675273, -0.984208, 0.163629) }, - Normal { normal: (-0.0187357, -0.998792, 0.0454217) }, - Normal { normal: (-0.440416, -0.782348, 0.440416) }, - Normal { normal: (-0.124903, -0.984276, 0.124903) }, - Normal { normal: (-0.0346621, -0.998798, 0.0346621) }, - Normal { normal: (-0.576229, -0.781801, 0.238217) }, - Normal { normal: (-0.163629, -0.984208, 0.0675273) }, - Normal { normal: (-0.0454217, -0.998792, 0.0187357) }, - Normal { normal: (-0.62386, -0.781536, -0.0) }, - Normal { normal: (-0.177291, -0.984159, 0.0) }, - Normal { normal: (-0.0492072, -0.998789, -0.0) }, - Normal { normal: (-0.576229, -0.781801, -0.238217) }, - Normal { normal: (-0.163629, -0.984208, -0.0675273) }, - Normal { normal: (-0.0454217, -0.998792, -0.0187357) }, - Normal { normal: (-0.440416, -0.782348, -0.440416) }, - Normal { normal: (-0.124903, -0.984276, -0.124903) }, - Normal { normal: (-0.0346621, -0.998798, -0.0346621) }, - Normal { normal: (-0.238217, -0.781801, -0.576229) }, - Normal { normal: (-0.0675273, -0.984208, -0.163629) }, - Normal { normal: (-0.0187357, -0.998792, -0.0454217) }, - Normal { normal: (0.0, -0.781536, -0.62386) }, - Normal { normal: (-0.0, -0.984159, -0.177291) }, - Normal { normal: (0.0, -0.998789, -0.0492072) }, - Normal { normal: (0.238217, -0.781801, -0.576229) }, - Normal { normal: (0.0675273, -0.984208, -0.163629) }, - Normal { normal: (0.0187357, -0.998792, -0.0454217) }, - Normal { normal: (0.440416, -0.782348, -0.440416) }, - Normal { normal: (0.124903, -0.984276, -0.124903) }, - Normal { normal: (0.0346621, -0.998798, -0.0346621) }, - Normal { normal: (0.576229, -0.781801, -0.238217) }, - Normal { normal: (0.163629, -0.984208, -0.0675273) }, - Normal { normal: (0.0454217, -0.998792, -0.0187357) }, - Normal { normal: (0.00778619, -0.99997, -0.000215809) }, - Normal { normal: (0.0391385, -0.999233, -0.000988567) }, - Normal { normal: (0.179511, -0.983746, -0.00436856) }, - Normal { normal: (0.6123, -0.790556, -0.0104598) }, - Normal { normal: (0.986152, -0.165707, -0.00666949) }, - Normal { normal: (0.00703893, -0.812495, 0.582926) }, - Normal { normal: (0.0361273, -0.837257, 0.545614) }, - Normal { normal: (0.161845, -0.810421, 0.563048) }, - Normal { normal: (0.482365, -0.595148, 0.642746) }, - Normal { normal: (0.73872, -0.114593, 0.664199) }, - Normal { normal: (-0.00190867, 0.162121, 0.986769) }, - Normal { normal: (0.0027616, 0.0171073, 0.99985) }, - Normal { normal: (0.0105326, 0.0733989, 0.997247) }, - Normal { normal: (-0.0660406, 0.130069, 0.989303) }, - Normal { normal: (-0.0944272, 0.0165946, 0.995393) }, - Normal { normal: (-0.009203, 0.871509, 0.490293) }, - Normal { normal: (-0.0486064, 0.840609, 0.539457) }, - Normal { normal: (-0.223298, 0.802881, 0.552739) }, - Normal { normal: (-0.596365, 0.559971, 0.575135) }, - Normal { normal: (-0.803337, 0.0682361, 0.591602) }, - Normal { normal: (-0.0105609, 0.999944, 0.000103364) }, - Normal { normal: (-0.0587986, 0.99827, 0.000709759) }, - Normal { normal: (-0.28071, 0.959787, 0.00326876) }, - Normal { normal: (-0.749723, 0.661738, 0.0042684) }, - Normal { normal: (-0.997351, 0.0727144, 0.00205923) }, - Normal { normal: (-0.00879197, 0.871493, -0.49033) }, - Normal { normal: (-0.0464937, 0.841178, -0.538756) }, - Normal { normal: (-0.217909, 0.806807, -0.549161) }, - Normal { normal: (-0.597291, 0.560026, -0.574121) }, - Normal { normal: (-0.804, 0.0629127, -0.591291) }, - Normal { normal: (-0.00180555, 0.161691, -0.98684) }, - Normal { normal: (0.00203087, 0.014555, -0.999892) }, - Normal { normal: (0.00921499, 0.0600698, -0.998152) }, - Normal { normal: (-0.0593333, 0.113865, -0.991723) }, - Normal { normal: (-0.0868992, 0.0122903, -0.996141) }, - Normal { normal: (0.00641779, -0.812379, -0.583094) }, - Normal { normal: (0.0337833, -0.837512, -0.545373) }, - Normal { normal: (0.157112, -0.811947, -0.56219) }, - Normal { normal: (0.484407, -0.589365, -0.646528) }, - Normal { normal: (0.73887, -0.10132, -0.666187) }, - Normal { normal: (0.946512, 0.32265, -0.0033571) }, - Normal { normal: (0.82583, 0.56387, -0.00745213) }, - Normal { normal: (0.650011, 0.759893, -0.00693681) }, - Normal { normal: (0.532429, 0.846458, -0.00524544) }, - Normal { normal: (0.725608, 0.259351, 0.637362) }, - Normal { normal: (0.645945, 0.461988, 0.607719) }, - Normal { normal: (0.531614, 0.63666, 0.558615) }, - Normal { normal: (0.424964, 0.681717, 0.59554) }, - Normal { normal: (-0.0495616, -0.019755, 0.998576) }, - Normal { normal: (-0.0378162, -0.0356243, 0.99865) }, - Normal { normal: (-0.0379139, -0.0365122, 0.998614) }, - Normal { normal: (-0.168854, -0.297946, 0.93953) }, - Normal { normal: (-0.742342, -0.299166, 0.599523) }, - Normal { normal: (-0.619602, -0.529406, 0.579503) }, - Normal { normal: (-0.483708, -0.685761, 0.543837) }, - Normal { normal: (-0.445293, -0.794355, 0.413176) }, - Normal { normal: (-0.926513, -0.376257, 0.00199587) }, - Normal { normal: (-0.75392, -0.656952, 0.00431723) }, - Normal { normal: (-0.566224, -0.824244, 0.00346105) }, - Normal { normal: (-0.481804, -0.876277, 0.00185047) }, - Normal { normal: (-0.744675, -0.294424, -0.598977) }, - Normal { normal: (-0.621949, -0.528114, -0.578165) }, - Normal { normal: (-0.481171, -0.68834, -0.542828) }, - Normal { normal: (-0.438055, -0.797035, -0.415744) }, - Normal { normal: (-0.0443368, -0.0170558, -0.998871) }, - Normal { normal: (-0.0261761, -0.0281665, -0.99926) }, - Normal { normal: (-0.0252939, -0.0283323, -0.999278) }, - Normal { normal: (-0.157482, -0.289392, -0.944167) }, - Normal { normal: (0.728244, 0.25241, -0.637142) }, - Normal { normal: (0.647055, 0.459725, -0.608254) }, - Normal { normal: (0.522994, 0.640657, -0.562171) }, - Normal { normal: (0.409978, 0.682857, -0.604669) }, - Normal { normal: (-0.230787, 0.972982, -0.00652338) }, - Normal { normal: (-0.548936, 0.835863, -0.00151111) }, - Normal { normal: (-0.875671, 0.482807, 0.00989278) }, - Normal { normal: (-0.877554, 0.479097, 0.0190923) }, - Normal { normal: (-0.69619, 0.717439, 0.024497) }, - Normal { normal: (-0.152878, 0.687211, 0.71019) }, - Normal { normal: (-0.316721, 0.63775, 0.702113) }, - Normal { normal: (-0.601067, 0.471452, 0.64533) }, - Normal { normal: (-0.635889, 0.44609, 0.6298) }, - Normal { normal: (-0.435746, 0.601008, 0.670011) }, - Normal { normal: (0.111112, -0.0850694, 0.99016) }, - Normal { normal: (0.22331, 0.00654036, 0.974726) }, - Normal { normal: (0.190097, 0.154964, 0.969458) }, - Normal { normal: (0.00527077, 0.189482, 0.98187) }, - Normal { normal: (-0.0117518, 0.246688, 0.969024) }, - Normal { normal: (0.343906, -0.722796, 0.599412) }, - Normal { normal: (0.572489, -0.567656, 0.591627) }, - Normal { normal: (0.787436, -0.256459, 0.560512) }, - Normal { normal: (0.647097, -0.306374, 0.698141) }, - Normal { normal: (0.427528, -0.499343, 0.753576) }, - Normal { normal: (0.410926, -0.911668, 0.00128446) }, - Normal { normal: (0.67152, -0.740986, -0.000899122) }, - Normal { normal: (0.922026, -0.38706, -0.00725269) }, - Normal { normal: (0.84691, -0.531556, -0.0138542) }, - Normal { normal: (0.535925, -0.8442, -0.0105045) }, - Normal { normal: (0.341188, -0.722822, -0.600931) }, - Normal { normal: (0.578664, -0.561139, -0.591838) }, - Normal { normal: (0.784869, -0.25102, -0.566542) }, - Normal { normal: (0.642681, -0.302257, -0.70399) }, - Normal { normal: (0.418589, -0.500042, -0.758117) }, - Normal { normal: (0.115806, -0.0791394, -0.990114) }, - Normal { normal: (0.232811, 0.0125652, -0.972441) }, - Normal { normal: (0.206662, 0.153601, -0.96628) }, - Normal { normal: (0.0244996, 0.161443, -0.986578) }, - Normal { normal: (0.00338193, 0.211115, -0.977455) }, - Normal { normal: (-0.134912, 0.687491, -0.713551) }, - Normal { normal: (-0.31954, 0.633073, -0.705062) }, - Normal { normal: (-0.603902, 0.461442, -0.649903) }, - Normal { normal: (-0.631816, 0.437169, -0.640072) }, - Normal { normal: (-0.424306, 0.612706, -0.66675) }, - Normal { normal: (-0.4258, 0.904753, 0.0108049) }, - Normal { normal: (0.0220472, 0.999756, 0.00162273) }, - Normal { normal: (0.999599, 0.0258705, 0.0115556) }, - Normal { normal: (0.709585, -0.704553, 0.00967183) }, - Normal { normal: (-0.259858, 0.791936, 0.552549) }, - Normal { normal: (0.00953916, 0.99972, -0.0216718) }, - Normal { normal: (0.410156, 0.332912, -0.849083) }, - Normal { normal: (0.541523, -0.54862, -0.637) }, - Normal { normal: (0.0463104, 0.455224, 0.889172) }, - Normal { normal: (-0.0106883, 0.988794, 0.148901) }, - Normal { normal: (-0.0443756, 0.682947, -0.729118) }, - Normal { normal: (0.122825, 0.00923214, -0.992385) }, - Normal { normal: (0.481839, -0.180439, 0.85748) }, - Normal { normal: (0.455272, 0.736752, 0.499925) }, - Normal { normal: (-0.220542, 0.907193, -0.358276) }, - Normal { normal: (-0.23592, 0.657249, -0.715797) }, - Normal { normal: (0.728092, -0.685302, -0.0155853) }, - Normal { normal: (0.888739, 0.45811, -0.0166791) }, - Normal { normal: (-0.260097, 0.965582, 0.000800195) }, - Normal { normal: (-0.371612, 0.928378, -0.00441745) }, - Normal { normal: (0.480166, -0.17836, -0.858853) }, - Normal { normal: (0.488103, 0.716801, -0.497947) }, - Normal { normal: (-0.222004, 0.905399, 0.361893) }, - Normal { normal: (-0.235405, 0.66318, 0.710477) }, - Normal { normal: (0.0587203, 0.437704, -0.8972) }, - Normal { normal: (0.00132612, 0.986459, -0.164003) }, - Normal { normal: (-0.0441901, 0.681677, 0.730317) }, - Normal { normal: (0.138801, -0.0341896, 0.98973) }, - Normal { normal: (-0.25889, 0.797206, -0.54538) }, - Normal { normal: (0.0122703, 0.999739, 0.0192865) }, - Normal { normal: (0.39863, 0.35489, 0.845663) }, - Normal { normal: (0.537564, -0.5814, 0.610737) }, - Normal { normal: (-0.0, 1.0, 0.0) }, - Normal { normal: (0.82454, 0.565804, 0.0) }, - Normal { normal: (0.917701, -0.397272, 0.0) }, - Normal { normal: (0.935269, -0.353939, 0.000112842) }, - Normal { normal: (0.780712, 0.624891, 0.0) }, - Normal { normal: (0.762641, 0.565035, 0.314825) }, - Normal { normal: (0.847982, -0.397998, 0.350034) }, - Normal { normal: (0.864141, -0.355261, 0.356441) }, - Normal { normal: (0.720991, 0.625625, 0.297933) }, - Normal { normal: (0.583357, 0.565165, 0.583338) }, - Normal { normal: (0.648485, -0.398726, 0.648448) }, - Normal { normal: (0.660872, -0.355894, 0.660748) }, - Normal { normal: (0.551862, 0.62529, 0.55178) }, - Normal { normal: (0.314824, 0.565051, 0.762629) }, - Normal { normal: (0.350045, -0.397976, 0.847988) }, - Normal { normal: (0.356474, -0.3552, 0.864153) }, - Normal { normal: (0.297983, 0.625515, 0.721067) }, - Normal { normal: (-0.0, 0.565804, 0.82454) }, - Normal { normal: (-0.0, -0.397272, 0.917701) }, - Normal { normal: (-0.000112839, -0.353939, 0.935269) }, - Normal { normal: (-0.0, 0.624891, 0.780712) }, - Normal { normal: (-0.314825, 0.565035, 0.762641) }, - Normal { normal: (-0.350034, -0.397998, 0.847982) }, - Normal { normal: (-0.356441, -0.355261, 0.864141) }, - Normal { normal: (-0.297933, 0.625625, 0.720991) }, - Normal { normal: (-0.583338, 0.565165, 0.583357) }, - Normal { normal: (-0.648448, -0.398726, 0.648485) }, - Normal { normal: (-0.660748, -0.355894, 0.660872) }, - Normal { normal: (-0.55178, 0.62529, 0.551862) }, - Normal { normal: (-0.762629, 0.565051, 0.314824) }, - Normal { normal: (-0.847988, -0.397976, 0.350045) }, - Normal { normal: (-0.864153, -0.3552, 0.356474) }, - Normal { normal: (-0.721067, 0.625515, 0.297983) }, - Normal { normal: (-0.82454, 0.565804, -0.0) }, - Normal { normal: (-0.917701, -0.397272, -0.0) }, - Normal { normal: (-0.935269, -0.353939, -0.000112839) }, - Normal { normal: (-0.780712, 0.624891, -0.0) }, - Normal { normal: (-0.76264, 0.565035, -0.314825) }, - Normal { normal: (-0.847982, -0.397998, -0.350034) }, - Normal { normal: (-0.864141, -0.355261, -0.356441) }, - Normal { normal: (-0.720991, 0.625625, -0.297933) }, - Normal { normal: (-0.583357, 0.565165, -0.583338) }, - Normal { normal: (-0.648485, -0.398726, -0.648448) }, - Normal { normal: (-0.660872, -0.355894, -0.660748) }, - Normal { normal: (-0.551862, 0.62529, -0.55178) }, - Normal { normal: (-0.314824, 0.565051, -0.762629) }, - Normal { normal: (-0.350045, -0.397976, -0.847988) }, - Normal { normal: (-0.356474, -0.3552, -0.864153) }, - Normal { normal: (-0.297983, 0.625515, -0.721067) }, - Normal { normal: (0.0, 0.565804, -0.82454) }, - Normal { normal: (0.0, -0.397272, -0.917701) }, - Normal { normal: (0.000112839, -0.353939, -0.935269) }, - Normal { normal: (0.0, 0.624891, -0.780712) }, - Normal { normal: (0.314825, 0.565035, -0.762641) }, - Normal { normal: (0.350034, -0.397998, -0.847982) }, - Normal { normal: (0.356441, -0.355261, -0.864141) }, - Normal { normal: (0.297933, 0.625625, -0.720991) }, - Normal { normal: (0.583338, 0.565165, -0.583357) }, - Normal { normal: (0.648448, -0.398726, -0.648485) }, - Normal { normal: (0.660748, -0.355894, -0.660872) }, - Normal { normal: (0.55178, 0.62529, -0.551862) }, - Normal { normal: (0.762629, 0.565051, -0.314824) }, - Normal { normal: (0.847988, -0.397976, -0.350045) }, - Normal { normal: (0.864153, -0.3552, -0.356474) }, - Normal { normal: (0.721067, 0.625515, -0.297983) }, - Normal { normal: (0.236584, 0.971611, 0.0) }, - Normal { normal: (0.173084, 0.984907, -0.0) }, - Normal { normal: (0.379703, 0.925108, 0.0) }, - Normal { normal: (0.526673, 0.850068, 0.0) }, - Normal { normal: (0.217978, 0.971775, 0.0902162) }, - Normal { normal: (0.15959, 0.984977, 0.0659615) }, - Normal { normal: (0.350498, 0.925312, 0.14474) }, - Normal { normal: (0.48559, 0.850653, 0.201474) }, - Normal { normal: (0.166631, 0.971838, 0.166631) }, - Normal { normal: (0.121908, 0.985026, 0.121908) }, - Normal { normal: (0.267668, 0.925585, 0.267668) }, - Normal { normal: (0.371315, 0.851029, 0.371315) }, - Normal { normal: (0.0902162, 0.971775, 0.217978) }, - Normal { normal: (0.0659615, 0.984977, 0.15959) }, - Normal { normal: (0.14474, 0.925312, 0.350498) }, - Normal { normal: (0.201474, 0.850653, 0.48559) }, - Normal { normal: (-0.0, 0.971611, 0.236584) }, - Normal { normal: (0.0, 0.984907, 0.173084) }, - Normal { normal: (0.0, 0.925108, 0.379703) }, - Normal { normal: (0.0, 0.850068, 0.526673) }, - Normal { normal: (-0.0902162, 0.971775, 0.217978) }, - Normal { normal: (-0.0659615, 0.984977, 0.15959) }, - Normal { normal: (-0.14474, 0.925312, 0.350498) }, - Normal { normal: (-0.201474, 0.850653, 0.48559) }, - Normal { normal: (-0.166631, 0.971838, 0.166631) }, - Normal { normal: (-0.121908, 0.985026, 0.121908) }, - Normal { normal: (-0.267668, 0.925585, 0.267668) }, - Normal { normal: (-0.371315, 0.851029, 0.371315) }, - Normal { normal: (-0.217978, 0.971775, 0.0902162) }, - Normal { normal: (-0.15959, 0.984977, 0.0659615) }, - Normal { normal: (-0.350498, 0.925312, 0.14474) }, - Normal { normal: (-0.48559, 0.850653, 0.201474) }, - Normal { normal: (-0.236583, 0.971611, -0.0) }, - Normal { normal: (-0.173084, 0.984907, 0.0) }, - Normal { normal: (-0.379703, 0.925108, -0.0) }, - Normal { normal: (-0.526673, 0.850068, 0.0) }, - Normal { normal: (-0.217978, 0.971775, -0.0902162) }, - Normal { normal: (-0.15959, 0.984977, -0.0659615) }, - Normal { normal: (-0.350498, 0.925312, -0.14474) }, - Normal { normal: (-0.48559, 0.850653, -0.201474) }, - Normal { normal: (-0.166631, 0.971838, -0.166631) }, - Normal { normal: (-0.121908, 0.985026, -0.121908) }, - Normal { normal: (-0.267668, 0.925585, -0.267668) }, - Normal { normal: (-0.371315, 0.851029, -0.371315) }, - Normal { normal: (-0.0902162, 0.971775, -0.217978) }, - Normal { normal: (-0.0659615, 0.984977, -0.15959) }, - Normal { normal: (-0.14474, 0.925312, -0.350498) }, - Normal { normal: (-0.201474, 0.850653, -0.485589) }, - Normal { normal: (0.0, 0.971611, -0.236584) }, - Normal { normal: (-0.0, 0.984907, -0.173084) }, - Normal { normal: (-0.0, 0.925108, -0.379703) }, - Normal { normal: (-0.0, 0.850068, -0.526673) }, - Normal { normal: (0.0902162, 0.971775, -0.217978) }, - Normal { normal: (0.0659615, 0.984977, -0.15959) }, - Normal { normal: (0.14474, 0.925312, -0.350498) }, - Normal { normal: (0.201474, 0.850653, -0.48559) }, - Normal { normal: (0.166631, 0.971838, -0.166631) }, - Normal { normal: (0.121908, 0.985026, -0.121908) }, - Normal { normal: (0.267668, 0.925585, -0.267668) }, - Normal { normal: (0.371315, 0.851029, -0.371315) }, - Normal { normal: (0.217978, 0.971775, -0.0902162) }, - Normal { normal: (0.15959, 0.984977, -0.0659615) }, - Normal { normal: (0.350498, 0.925312, -0.14474) }, - Normal { normal: (0.48559, 0.850653, -0.201474) }, -]; - -pub const INDICES: [u16; 3072] = [ - 7, 6, 1, - 1, 2, 7, - 8, 7, 2, - 2, 3, 8, - 9, 8, 3, - 3, 4, 9, - 10, 9, 4, - 4, 5, 10, - 12, 11, 6, - 6, 7, 12, - 13, 12, 7, - 7, 8, 13, - 14, 13, 8, - 8, 9, 14, - 15, 14, 9, - 9, 10, 15, - 17, 16, 11, - 11, 12, 17, - 18, 17, 12, - 12, 13, 18, - 19, 18, 13, - 13, 14, 19, - 20, 19, 14, - 14, 15, 20, - 22, 21, 16, - 16, 17, 22, - 23, 22, 17, - 17, 18, 23, - 24, 23, 18, - 18, 19, 24, - 25, 24, 19, - 19, 20, 25, - 27, 26, 21, - 21, 22, 27, - 28, 27, 22, - 22, 23, 28, - 29, 28, 23, - 23, 24, 29, - 30, 29, 24, - 24, 25, 30, - 32, 31, 26, - 26, 27, 32, - 33, 32, 27, - 27, 28, 33, - 34, 33, 28, - 28, 29, 34, - 35, 34, 29, - 29, 30, 35, - 37, 36, 31, - 31, 32, 37, - 38, 37, 32, - 32, 33, 38, - 39, 38, 33, - 33, 34, 39, - 40, 39, 34, - 34, 35, 40, - 42, 41, 36, - 36, 37, 42, - 43, 42, 37, - 37, 38, 43, - 44, 43, 38, - 38, 39, 44, - 45, 44, 39, - 39, 40, 45, - 47, 46, 41, - 41, 42, 47, - 48, 47, 42, - 42, 43, 48, - 49, 48, 43, - 43, 44, 49, - 50, 49, 44, - 44, 45, 50, - 52, 51, 46, - 46, 47, 52, - 53, 52, 47, - 47, 48, 53, - 54, 53, 48, - 48, 49, 54, - 55, 54, 49, - 49, 50, 55, - 57, 56, 51, - 51, 52, 57, - 58, 57, 52, - 52, 53, 58, - 59, 58, 53, - 53, 54, 59, - 60, 59, 54, - 54, 55, 60, - 62, 61, 56, - 56, 57, 62, - 63, 62, 57, - 57, 58, 63, - 64, 63, 58, - 58, 59, 64, - 65, 64, 59, - 59, 60, 65, - 67, 66, 61, - 61, 62, 67, - 68, 67, 62, - 62, 63, 68, - 69, 68, 63, - 63, 64, 69, - 70, 69, 64, - 64, 65, 70, - 72, 71, 66, - 66, 67, 72, - 73, 72, 67, - 67, 68, 73, - 74, 73, 68, - 68, 69, 74, - 75, 74, 69, - 69, 70, 75, - 77, 76, 71, - 71, 72, 77, - 78, 77, 72, - 72, 73, 78, - 79, 78, 73, - 73, 74, 79, - 80, 79, 74, - 74, 75, 80, - 2, 1, 76, - 76, 77, 2, - 3, 2, 77, - 77, 78, 3, - 4, 3, 78, - 78, 79, 4, - 5, 4, 79, - 79, 80, 5, - 85, 10, 5, - 5, 81, 85, - 86, 85, 81, - 81, 82, 86, - 87, 86, 82, - 82, 83, 87, - 88, 87, 83, - 83, 84, 88, - 89, 15, 10, - 10, 85, 89, - 90, 89, 85, - 85, 86, 90, - 91, 90, 86, - 86, 87, 91, - 92, 91, 87, - 87, 88, 92, - 93, 20, 15, - 15, 89, 93, - 94, 93, 89, - 89, 90, 94, - 95, 94, 90, - 90, 91, 95, - 96, 95, 91, - 91, 92, 96, - 97, 25, 20, - 20, 93, 97, - 98, 97, 93, - 93, 94, 98, - 99, 98, 94, - 94, 95, 99, - 100, 99, 95, - 95, 96, 100, - 101, 30, 25, - 25, 97, 101, - 102, 101, 97, - 97, 98, 102, - 103, 102, 98, - 98, 99, 103, - 104, 103, 99, - 99, 100, 104, - 105, 35, 30, - 30, 101, 105, - 106, 105, 101, - 101, 102, 106, - 107, 106, 102, - 102, 103, 107, - 108, 107, 103, - 103, 104, 108, - 109, 40, 35, - 35, 105, 109, - 110, 109, 105, - 105, 106, 110, - 111, 110, 106, - 106, 107, 111, - 112, 111, 107, - 107, 108, 112, - 113, 45, 40, - 40, 109, 113, - 114, 113, 109, - 109, 110, 114, - 115, 114, 110, - 110, 111, 115, - 116, 115, 111, - 111, 112, 116, - 117, 50, 45, - 45, 113, 117, - 118, 117, 113, - 113, 114, 118, - 119, 118, 114, - 114, 115, 119, - 120, 119, 115, - 115, 116, 120, - 121, 55, 50, - 50, 117, 121, - 122, 121, 117, - 117, 118, 122, - 123, 122, 118, - 118, 119, 123, - 124, 123, 119, - 119, 120, 124, - 125, 60, 55, - 55, 121, 125, - 126, 125, 121, - 121, 122, 126, - 127, 126, 122, - 122, 123, 127, - 128, 127, 123, - 123, 124, 128, - 129, 65, 60, - 60, 125, 129, - 130, 129, 125, - 125, 126, 130, - 131, 130, 126, - 126, 127, 131, - 132, 131, 127, - 127, 128, 132, - 133, 70, 65, - 65, 129, 133, - 134, 133, 129, - 129, 130, 134, - 135, 134, 130, - 130, 131, 135, - 136, 135, 131, - 131, 132, 136, - 137, 75, 70, - 70, 133, 137, - 138, 137, 133, - 133, 134, 138, - 139, 138, 134, - 134, 135, 139, - 140, 139, 135, - 135, 136, 140, - 141, 80, 75, - 75, 137, 141, - 142, 141, 137, - 137, 138, 142, - 143, 142, 138, - 138, 139, 143, - 144, 143, 139, - 139, 140, 144, - 81, 5, 80, - 80, 141, 81, - 82, 81, 141, - 141, 142, 82, - 83, 82, 142, - 142, 143, 83, - 84, 83, 143, - 143, 144, 84, - 149, 88, 84, - 84, 145, 149, - 150, 149, 145, - 145, 146, 150, - 151, 150, 146, - 146, 147, 151, - 152, 151, 147, - 147, 148, 152, - 153, 92, 88, - 88, 149, 153, - 154, 153, 149, - 149, 150, 154, - 155, 154, 150, - 150, 151, 155, - 156, 155, 151, - 151, 152, 156, - 157, 96, 92, - 92, 153, 157, - 158, 157, 153, - 153, 154, 158, - 159, 158, 154, - 154, 155, 159, - 160, 159, 155, - 155, 156, 160, - 161, 100, 96, - 96, 157, 161, - 162, 161, 157, - 157, 158, 162, - 163, 162, 158, - 158, 159, 163, - 164, 163, 159, - 159, 160, 164, - 165, 104, 100, - 100, 161, 165, - 166, 165, 161, - 161, 162, 166, - 167, 166, 162, - 162, 163, 167, - 168, 167, 163, - 163, 164, 168, - 169, 108, 104, - 104, 165, 169, - 170, 169, 165, - 165, 166, 170, - 171, 170, 166, - 166, 167, 171, - 172, 171, 167, - 167, 168, 172, - 173, 112, 108, - 108, 169, 173, - 174, 173, 169, - 169, 170, 174, - 175, 174, 170, - 170, 171, 175, - 176, 175, 171, - 171, 172, 176, - 177, 116, 112, - 112, 173, 177, - 178, 177, 173, - 173, 174, 178, - 179, 178, 174, - 174, 175, 179, - 180, 179, 175, - 175, 176, 180, - 181, 120, 116, - 116, 177, 181, - 182, 181, 177, - 177, 178, 182, - 183, 182, 178, - 178, 179, 183, - 184, 183, 179, - 179, 180, 184, - 185, 124, 120, - 120, 181, 185, - 186, 185, 181, - 181, 182, 186, - 187, 186, 182, - 182, 183, 187, - 188, 187, 183, - 183, 184, 188, - 189, 128, 124, - 124, 185, 189, - 190, 189, 185, - 185, 186, 190, - 191, 190, 186, - 186, 187, 191, - 192, 191, 187, - 187, 188, 192, - 193, 132, 128, - 128, 189, 193, - 194, 193, 189, - 189, 190, 194, - 195, 194, 190, - 190, 191, 195, - 196, 195, 191, - 191, 192, 196, - 197, 136, 132, - 132, 193, 197, - 198, 197, 193, - 193, 194, 198, - 199, 198, 194, - 194, 195, 199, - 200, 199, 195, - 195, 196, 200, - 201, 140, 136, - 136, 197, 201, - 202, 201, 197, - 197, 198, 202, - 203, 202, 198, - 198, 199, 203, - 204, 203, 199, - 199, 200, 204, - 205, 144, 140, - 140, 201, 205, - 206, 205, 201, - 201, 202, 206, - 207, 206, 202, - 202, 203, 207, - 208, 207, 203, - 203, 204, 208, - 145, 84, 144, - 144, 205, 145, - 146, 145, 205, - 205, 206, 146, - 147, 146, 206, - 206, 207, 147, - 148, 147, 207, - 207, 208, 148, - 213, 152, 148, - 148, 209, 213, - 214, 213, 209, - 209, 210, 214, - 215, 214, 210, - 210, 211, 215, - 212, 215, 211, - 211, 212, 212, - 216, 156, 152, - 152, 213, 216, - 217, 216, 213, - 213, 214, 217, - 218, 217, 214, - 214, 215, 218, - 212, 218, 215, - 215, 212, 212, - 219, 160, 156, - 156, 216, 219, - 220, 219, 216, - 216, 217, 220, - 221, 220, 217, - 217, 218, 221, - 212, 221, 218, - 218, 212, 212, - 222, 164, 160, - 160, 219, 222, - 223, 222, 219, - 219, 220, 223, - 224, 223, 220, - 220, 221, 224, - 212, 224, 221, - 221, 212, 212, - 225, 168, 164, - 164, 222, 225, - 226, 225, 222, - 222, 223, 226, - 227, 226, 223, - 223, 224, 227, - 212, 227, 224, - 224, 212, 212, - 228, 172, 168, - 168, 225, 228, - 229, 228, 225, - 225, 226, 229, - 230, 229, 226, - 226, 227, 230, - 212, 230, 227, - 227, 212, 212, - 231, 176, 172, - 172, 228, 231, - 232, 231, 228, - 228, 229, 232, - 233, 232, 229, - 229, 230, 233, - 212, 233, 230, - 230, 212, 212, - 234, 180, 176, - 176, 231, 234, - 235, 234, 231, - 231, 232, 235, - 236, 235, 232, - 232, 233, 236, - 212, 236, 233, - 233, 212, 212, - 237, 184, 180, - 180, 234, 237, - 238, 237, 234, - 234, 235, 238, - 239, 238, 235, - 235, 236, 239, - 212, 239, 236, - 236, 212, 212, - 240, 188, 184, - 184, 237, 240, - 241, 240, 237, - 237, 238, 241, - 242, 241, 238, - 238, 239, 242, - 212, 242, 239, - 239, 212, 212, - 243, 192, 188, - 188, 240, 243, - 244, 243, 240, - 240, 241, 244, - 245, 244, 241, - 241, 242, 245, - 212, 245, 242, - 242, 212, 212, - 246, 196, 192, - 192, 243, 246, - 247, 246, 243, - 243, 244, 247, - 248, 247, 244, - 244, 245, 248, - 212, 248, 245, - 245, 212, 212, - 249, 200, 196, - 196, 246, 249, - 250, 249, 246, - 246, 247, 250, - 251, 250, 247, - 247, 248, 251, - 212, 251, 248, - 248, 212, 212, - 252, 204, 200, - 200, 249, 252, - 253, 252, 249, - 249, 250, 253, - 254, 253, 250, - 250, 251, 254, - 212, 254, 251, - 251, 212, 212, - 255, 208, 204, - 204, 252, 255, - 256, 255, 252, - 252, 253, 256, - 257, 256, 253, - 253, 254, 257, - 212, 257, 254, - 254, 212, 212, - 209, 148, 208, - 208, 255, 209, - 210, 209, 255, - 255, 256, 210, - 211, 210, 256, - 256, 257, 211, - 212, 211, 257, - 257, 212, 212, - 264, 263, 258, - 258, 259, 264, - 265, 264, 259, - 259, 260, 265, - 266, 265, 260, - 260, 261, 266, - 267, 266, 261, - 261, 262, 267, - 269, 268, 263, - 263, 264, 269, - 270, 269, 264, - 264, 265, 270, - 271, 270, 265, - 265, 266, 271, - 272, 271, 266, - 266, 267, 272, - 274, 273, 268, - 268, 269, 274, - 275, 274, 269, - 269, 270, 275, - 276, 275, 270, - 270, 271, 276, - 277, 276, 271, - 271, 272, 277, - 279, 278, 273, - 273, 274, 279, - 280, 279, 274, - 274, 275, 280, - 281, 280, 275, - 275, 276, 281, - 282, 281, 276, - 276, 277, 282, - 284, 283, 278, - 278, 279, 284, - 285, 284, 279, - 279, 280, 285, - 286, 285, 280, - 280, 281, 286, - 287, 286, 281, - 281, 282, 287, - 289, 288, 283, - 283, 284, 289, - 290, 289, 284, - 284, 285, 290, - 291, 290, 285, - 285, 286, 291, - 292, 291, 286, - 286, 287, 292, - 294, 293, 288, - 288, 289, 294, - 295, 294, 289, - 289, 290, 295, - 296, 295, 290, - 290, 291, 296, - 297, 296, 291, - 291, 292, 297, - 259, 258, 293, - 293, 294, 259, - 260, 259, 294, - 294, 295, 260, - 261, 260, 295, - 295, 296, 261, - 262, 261, 296, - 296, 297, 262, - 302, 267, 262, - 262, 298, 302, - 303, 302, 298, - 298, 299, 303, - 304, 303, 299, - 299, 300, 304, - 305, 304, 300, - 300, 301, 305, - 306, 272, 267, - 267, 302, 306, - 307, 306, 302, - 302, 303, 307, - 308, 307, 303, - 303, 304, 308, - 309, 308, 304, - 304, 305, 309, - 310, 277, 272, - 272, 306, 310, - 311, 310, 306, - 306, 307, 311, - 312, 311, 307, - 307, 308, 312, - 313, 312, 308, - 308, 309, 313, - 314, 282, 277, - 277, 310, 314, - 315, 314, 310, - 310, 311, 315, - 316, 315, 311, - 311, 312, 316, - 317, 316, 312, - 312, 313, 317, - 318, 287, 282, - 282, 314, 318, - 319, 318, 314, - 314, 315, 319, - 320, 319, 315, - 315, 316, 320, - 321, 320, 316, - 316, 317, 321, - 322, 292, 287, - 287, 318, 322, - 323, 322, 318, - 318, 319, 323, - 324, 323, 319, - 319, 320, 324, - 325, 324, 320, - 320, 321, 325, - 326, 297, 292, - 292, 322, 326, - 327, 326, 322, - 322, 323, 327, - 328, 327, 323, - 323, 324, 328, - 329, 328, 324, - 324, 325, 329, - 298, 262, 297, - 297, 326, 298, - 299, 298, 326, - 326, 327, 299, - 300, 299, 327, - 327, 328, 300, - 301, 300, 328, - 328, 329, 301, - 336, 335, 330, - 330, 331, 336, - 337, 336, 331, - 331, 332, 337, - 338, 337, 332, - 332, 333, 338, - 339, 338, 333, - 333, 334, 339, - 341, 340, 335, - 335, 336, 341, - 342, 341, 336, - 336, 337, 342, - 343, 342, 337, - 337, 338, 343, - 344, 343, 338, - 338, 339, 344, - 346, 345, 340, - 340, 341, 346, - 347, 346, 341, - 341, 342, 347, - 348, 347, 342, - 342, 343, 348, - 349, 348, 343, - 343, 344, 349, - 351, 350, 345, - 345, 346, 351, - 352, 351, 346, - 346, 347, 352, - 353, 352, 347, - 347, 348, 353, - 354, 353, 348, - 348, 349, 354, - 356, 355, 350, - 350, 351, 356, - 357, 356, 351, - 351, 352, 357, - 358, 357, 352, - 352, 353, 358, - 359, 358, 353, - 353, 354, 359, - 361, 360, 355, - 355, 356, 361, - 362, 361, 356, - 356, 357, 362, - 363, 362, 357, - 357, 358, 363, - 364, 363, 358, - 358, 359, 364, - 366, 365, 360, - 360, 361, 366, - 367, 366, 361, - 361, 362, 367, - 368, 367, 362, - 362, 363, 368, - 369, 368, 363, - 363, 364, 369, - 331, 330, 365, - 365, 366, 331, - 332, 331, 366, - 366, 367, 332, - 333, 332, 367, - 367, 368, 333, - 334, 333, 368, - 368, 369, 334, - 374, 339, 334, - 334, 370, 374, - 375, 374, 370, - 370, 371, 375, - 376, 375, 371, - 371, 372, 376, - 377, 376, 372, - 372, 373, 377, - 378, 344, 339, - 339, 374, 378, - 379, 378, 374, - 374, 375, 379, - 380, 379, 375, - 375, 376, 380, - 381, 380, 376, - 376, 377, 381, - 382, 349, 344, - 344, 378, 382, - 383, 382, 378, - 378, 379, 383, - 384, 383, 379, - 379, 380, 384, - 385, 384, 380, - 380, 381, 385, - 386, 354, 349, - 349, 382, 386, - 387, 386, 382, - 382, 383, 387, - 388, 387, 383, - 383, 384, 388, - 389, 388, 384, - 384, 385, 389, - 390, 359, 354, - 354, 386, 390, - 391, 390, 386, - 386, 387, 391, - 392, 391, 387, - 387, 388, 392, - 393, 392, 388, - 388, 389, 393, - 394, 364, 359, - 359, 390, 394, - 395, 394, 390, - 390, 391, 395, - 396, 395, 391, - 391, 392, 396, - 397, 396, 392, - 392, 393, 397, - 398, 369, 364, - 364, 394, 398, - 399, 398, 394, - 394, 395, 399, - 400, 399, 395, - 395, 396, 400, - 401, 400, 396, - 396, 397, 401, - 370, 334, 369, - 369, 398, 370, - 371, 370, 398, - 398, 399, 371, - 372, 371, 399, - 399, 400, 372, - 373, 372, 400, - 400, 401, 373, - 407, 402, 402, - 402, 403, 407, - 408, 407, 403, - 403, 404, 408, - 409, 408, 404, - 404, 405, 409, - 410, 409, 405, - 405, 406, 410, - 411, 402, 402, - 402, 407, 411, - 412, 411, 407, - 407, 408, 412, - 413, 412, 408, - 408, 409, 413, - 414, 413, 409, - 409, 410, 414, - 415, 402, 402, - 402, 411, 415, - 416, 415, 411, - 411, 412, 416, - 417, 416, 412, - 412, 413, 417, - 418, 417, 413, - 413, 414, 418, - 419, 402, 402, - 402, 415, 419, - 420, 419, 415, - 415, 416, 420, - 421, 420, 416, - 416, 417, 421, - 422, 421, 417, - 417, 418, 422, - 423, 402, 402, - 402, 419, 423, - 424, 423, 419, - 419, 420, 424, - 425, 424, 420, - 420, 421, 425, - 426, 425, 421, - 421, 422, 426, - 427, 402, 402, - 402, 423, 427, - 428, 427, 423, - 423, 424, 428, - 429, 428, 424, - 424, 425, 429, - 430, 429, 425, - 425, 426, 430, - 431, 402, 402, - 402, 427, 431, - 432, 431, 427, - 427, 428, 432, - 433, 432, 428, - 428, 429, 433, - 434, 433, 429, - 429, 430, 434, - 435, 402, 402, - 402, 431, 435, - 436, 435, 431, - 431, 432, 436, - 437, 436, 432, - 432, 433, 437, - 438, 437, 433, - 433, 434, 438, - 439, 402, 402, - 402, 435, 439, - 440, 439, 435, - 435, 436, 440, - 441, 440, 436, - 436, 437, 441, - 442, 441, 437, - 437, 438, 442, - 443, 402, 402, - 402, 439, 443, - 444, 443, 439, - 439, 440, 444, - 445, 444, 440, - 440, 441, 445, - 446, 445, 441, - 441, 442, 446, - 447, 402, 402, - 402, 443, 447, - 448, 447, 443, - 443, 444, 448, - 449, 448, 444, - 444, 445, 449, - 450, 449, 445, - 445, 446, 450, - 451, 402, 402, - 402, 447, 451, - 452, 451, 447, - 447, 448, 452, - 453, 452, 448, - 448, 449, 453, - 454, 453, 449, - 449, 450, 454, - 455, 402, 402, - 402, 451, 455, - 456, 455, 451, - 451, 452, 456, - 457, 456, 452, - 452, 453, 457, - 458, 457, 453, - 453, 454, 458, - 459, 402, 402, - 402, 455, 459, - 460, 459, 455, - 455, 456, 460, - 461, 460, 456, - 456, 457, 461, - 462, 461, 457, - 457, 458, 462, - 463, 402, 402, - 402, 459, 463, - 464, 463, 459, - 459, 460, 464, - 465, 464, 460, - 460, 461, 465, - 466, 465, 461, - 461, 462, 466, - 403, 402, 402, - 402, 463, 403, - 404, 403, 463, - 463, 464, 404, - 405, 404, 464, - 464, 465, 405, - 406, 405, 465, - 465, 466, 406, - 471, 410, 406, - 406, 467, 471, - 472, 471, 467, - 467, 468, 472, - 473, 472, 468, - 468, 469, 473, - 474, 473, 469, - 469, 470, 474, - 475, 414, 410, - 410, 471, 475, - 476, 475, 471, - 471, 472, 476, - 477, 476, 472, - 472, 473, 477, - 478, 477, 473, - 473, 474, 478, - 479, 418, 414, - 414, 475, 479, - 480, 479, 475, - 475, 476, 480, - 481, 480, 476, - 476, 477, 481, - 482, 481, 477, - 477, 478, 482, - 483, 422, 418, - 418, 479, 483, - 484, 483, 479, - 479, 480, 484, - 485, 484, 480, - 480, 481, 485, - 486, 485, 481, - 481, 482, 486, - 487, 426, 422, - 422, 483, 487, - 488, 487, 483, - 483, 484, 488, - 489, 488, 484, - 484, 485, 489, - 490, 489, 485, - 485, 486, 490, - 491, 430, 426, - 426, 487, 491, - 492, 491, 487, - 487, 488, 492, - 493, 492, 488, - 488, 489, 493, - 494, 493, 489, - 489, 490, 494, - 495, 434, 430, - 430, 491, 495, - 496, 495, 491, - 491, 492, 496, - 497, 496, 492, - 492, 493, 497, - 498, 497, 493, - 493, 494, 498, - 499, 438, 434, - 434, 495, 499, - 500, 499, 495, - 495, 496, 500, - 501, 500, 496, - 496, 497, 501, - 502, 501, 497, - 497, 498, 502, - 503, 442, 438, - 438, 499, 503, - 504, 503, 499, - 499, 500, 504, - 505, 504, 500, - 500, 501, 505, - 506, 505, 501, - 501, 502, 506, - 507, 446, 442, - 442, 503, 507, - 508, 507, 503, - 503, 504, 508, - 509, 508, 504, - 504, 505, 509, - 510, 509, 505, - 505, 506, 510, - 511, 450, 446, - 446, 507, 511, - 512, 511, 507, - 507, 508, 512, - 513, 512, 508, - 508, 509, 513, - 514, 513, 509, - 509, 510, 514, - 515, 454, 450, - 450, 511, 515, - 516, 515, 511, - 511, 512, 516, - 517, 516, 512, - 512, 513, 517, - 518, 517, 513, - 513, 514, 518, - 519, 458, 454, - 454, 515, 519, - 520, 519, 515, - 515, 516, 520, - 521, 520, 516, - 516, 517, 521, - 522, 521, 517, - 517, 518, 522, - 523, 462, 458, - 458, 519, 523, - 524, 523, 519, - 519, 520, 524, - 525, 524, 520, - 520, 521, 525, - 526, 525, 521, - 521, 522, 526, - 527, 466, 462, - 462, 523, 527, - 528, 527, 523, - 523, 524, 528, - 529, 528, 524, - 524, 525, 529, - 530, 529, 525, - 525, 526, 530, - 467, 406, 466, - 466, 527, 467, - 468, 467, 527, - 527, 528, 468, - 469, 468, 528, - 528, 529, 469, - 470, 469, 529, - 529, 530, 470u16, -];