From 9fc694f1ff8608f54c486a4d35c7711937a8356c Mon Sep 17 00:00:00 2001 From: Dane Johnson Date: Wed, 6 Apr 2022 18:40:21 -0500 Subject: [PATCH] GLM stuff --- Cargo.lock | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + src/flat.vert | 6 ++- src/main.rs | 21 ++++++-- 4 files changed, 162 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f8ccb53..080f2d1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,6 +23,15 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + [[package]] name = "autocfg" version = "1.1.0" @@ -62,6 +71,12 @@ version = "3.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" +[[package]] +name = "bytemuck" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdead85bdec19c194affaeeb670c0e41fe23de31459efd1c174d049269cf02cc" + [[package]] name = "calloop" version = "0.9.3" @@ -217,6 +232,7 @@ name = "couch" version = "0.1.0" dependencies = [ "glium", + "nalgebra-glm", ] [[package]] @@ -496,6 +512,15 @@ dependencies = [ "libc", ] +[[package]] +name = "matrixmultiply" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84" +dependencies = [ + "rawpointer", +] + [[package]] name = "memchr" version = "2.4.1" @@ -559,6 +584,33 @@ dependencies = [ "winapi", ] +[[package]] +name = "nalgebra" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb2d0de08694bed883320212c18ee3008576bfe8c306f4c3c4a58b4876998be" +dependencies = [ + "approx", + "matrixmultiply", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", +] + +[[package]] +name = "nalgebra-glm" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de5ec1e116731f6a4e86ee76162ea1e33a30d793820942b08849aa7e4fed0d91" +dependencies = [ + "approx", + "nalgebra", + "num-traits", + "simba", +] + [[package]] name = "ndk" version = "0.5.0" @@ -644,6 +696,45 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-complex" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + [[package]] name = "num_enum" version = "0.5.7" @@ -723,6 +814,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "paste" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc" + [[package]] name = "percent-encoding" version = "2.1.0" @@ -772,6 +869,12 @@ dependencies = [ "cty", ] +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + [[package]] name = "redox_syscall" version = "0.2.13" @@ -787,6 +890,15 @@ version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" +[[package]] +name = "safe_arch" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "794821e4ccb0d9f979512f9c1973480123f9bd62a90d74ab0f9426fcf8f4a529" +dependencies = [ + "bytemuck", +] + [[package]] name = "scoped-tls" version = "1.0.0" @@ -815,6 +927,19 @@ dependencies = [ "libc", ] +[[package]] +name = "simba" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13a2609e876d4f77f6ab7ff5254fc39b4f1927ba8e6db3d18be7c32534d3725e" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + [[package]] name = "smallvec" version = "1.8.0" @@ -892,6 +1017,12 @@ dependencies = [ "serde", ] +[[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + [[package]] name = "unicode-xid" version = "0.2.2" @@ -1051,6 +1182,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "wide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3aba2d1dac31ac7cae82847ac5b8be822aee8f99a4e100f279605016b185c5f" +dependencies = [ + "bytemuck", + "safe_arch", +] + [[package]] name = "winapi" version = "0.3.9" diff --git a/Cargo.toml b/Cargo.toml index f3a8cc8..7332161 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,3 +6,4 @@ edition = "2021" [dependencies] glium = "0.31.0" +nalgebra-glm = "0.16.0" diff --git a/src/flat.vert b/src/flat.vert index d9dec66..e1e2a64 100644 --- a/src/flat.vert +++ b/src/flat.vert @@ -1,11 +1,13 @@ #version 330 -in vec2 position; +in vec3 position; in vec3 color; +uniform mat4 MVP; + out vec3 DIFFUSE; void main() { - gl_Position = vec4(position, 0.0, 1.0); + gl_Position = MVP * vec4(position, 1.0); DIFFUSE = color; } diff --git a/src/main.rs b/src/main.rs index 9c9c50b..e32a687 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,10 @@ #[macro_use] extern crate glium; +extern crate nalgebra_glm as glm; #[derive(Copy, Clone)] struct Vertex { - position: [f32; 2], + position: [f32; 3], color: [f32; 3], } @@ -19,9 +20,9 @@ fn main() { let display = glium::Display::new(wb, cb, &events_loop).unwrap(); - let vertex1 = Vertex { position: [-0.5, -0.5], color: [1.0, 0.0, 0.0] }; - let vertex2 = Vertex { position: [ 0.0, 0.5], color: [0.0, 1.0, 0.0] }; - let vertex3 = Vertex { position: [ 0.5, -0.25], color: [0.0, 0.0, 1.0]}; + let vertex1 = Vertex { position: [-0.5, -0.5, 0.0], color: [1.0, 0.0, 0.0] }; + let vertex2 = Vertex { position: [ 0.0, 0.5, 0.0], color: [0.0, 1.0, 0.0] }; + let vertex3 = Vertex { position: [ 0.5, -0.25, 0.0], color: [0.0, 0.0, 1.0]}; let shape = vec![vertex1, vertex2, vertex3]; let vertex_buffer = glium::VertexBuffer::new(&display, &shape).unwrap(); @@ -31,11 +32,21 @@ fn main() { let fragment_shader_src = include_str!("flat.frag"); let program = glium::Program::from_source(&display, vertex_shader_src, fragment_shader_src, None).unwrap(); + let mut frames = 0; + events_loop.run(move |ev, _, control_flow| { + frames += 1; + + let mvp = glm::perspective::(1.0, 45.0_f32.to_radians(), 0.2, 100.0); + let mvp = glm::translate::(&mvp, &glm::vec3(0.0, 0.0, -10.0 + frames as f32 * 0.01)); + let uniforms = uniform! { + MVP: *mvp.as_ref(), + }; + let mut target = display.draw(); target.clear_color(0.0, 0.0, 0.0, 1.0); - target.draw(&vertex_buffer, &indices, &program, &glium::uniforms::EmptyUniforms, + target.draw(&vertex_buffer, &indices, &program, &uniforms, &Default::default()).unwrap(); target.finish().unwrap();