GLM stuff

This commit is contained in:
Dane Johnson 2022-04-06 18:40:21 -05:00
parent 74a4a35d5b
commit 9fc694f1ff
4 changed files with 162 additions and 7 deletions

141
Cargo.lock generated
View File

@ -23,6 +23,15 @@ version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" 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]] [[package]]
name = "autocfg" name = "autocfg"
version = "1.1.0" version = "1.1.0"
@ -62,6 +71,12 @@ version = "3.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899"
[[package]]
name = "bytemuck"
version = "1.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cdead85bdec19c194affaeeb670c0e41fe23de31459efd1c174d049269cf02cc"
[[package]] [[package]]
name = "calloop" name = "calloop"
version = "0.9.3" version = "0.9.3"
@ -217,6 +232,7 @@ name = "couch"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"glium", "glium",
"nalgebra-glm",
] ]
[[package]] [[package]]
@ -496,6 +512,15 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "matrixmultiply"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84"
dependencies = [
"rawpointer",
]
[[package]] [[package]]
name = "memchr" name = "memchr"
version = "2.4.1" version = "2.4.1"
@ -559,6 +584,33 @@ dependencies = [
"winapi", "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]] [[package]]
name = "ndk" name = "ndk"
version = "0.5.0" version = "0.5.0"
@ -644,6 +696,45 @@ dependencies = [
"winapi", "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]] [[package]]
name = "num_enum" name = "num_enum"
version = "0.5.7" version = "0.5.7"
@ -723,6 +814,12 @@ dependencies = [
"winapi", "winapi",
] ]
[[package]]
name = "paste"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc"
[[package]] [[package]]
name = "percent-encoding" name = "percent-encoding"
version = "2.1.0" version = "2.1.0"
@ -772,6 +869,12 @@ dependencies = [
"cty", "cty",
] ]
[[package]]
name = "rawpointer"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
[[package]] [[package]]
name = "redox_syscall" name = "redox_syscall"
version = "0.2.13" version = "0.2.13"
@ -787,6 +890,15 @@ version = "0.1.21"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" 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]] [[package]]
name = "scoped-tls" name = "scoped-tls"
version = "1.0.0" version = "1.0.0"
@ -815,6 +927,19 @@ dependencies = [
"libc", "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]] [[package]]
name = "smallvec" name = "smallvec"
version = "1.8.0" version = "1.8.0"
@ -892,6 +1017,12 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "typenum"
version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
[[package]] [[package]]
name = "unicode-xid" name = "unicode-xid"
version = "0.2.2" version = "0.2.2"
@ -1051,6 +1182,16 @@ dependencies = [
"wasm-bindgen", "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]] [[package]]
name = "winapi" name = "winapi"
version = "0.3.9" version = "0.3.9"

View File

@ -6,3 +6,4 @@ edition = "2021"
[dependencies] [dependencies]
glium = "0.31.0" glium = "0.31.0"
nalgebra-glm = "0.16.0"

View File

@ -1,11 +1,13 @@
#version 330 #version 330
in vec2 position; in vec3 position;
in vec3 color; in vec3 color;
uniform mat4 MVP;
out vec3 DIFFUSE; out vec3 DIFFUSE;
void main() { void main() {
gl_Position = vec4(position, 0.0, 1.0); gl_Position = MVP * vec4(position, 1.0);
DIFFUSE = color; DIFFUSE = color;
} }

View File

@ -1,9 +1,10 @@
#[macro_use] #[macro_use]
extern crate glium; extern crate glium;
extern crate nalgebra_glm as glm;
#[derive(Copy, Clone)] #[derive(Copy, Clone)]
struct Vertex { struct Vertex {
position: [f32; 2], position: [f32; 3],
color: [f32; 3], color: [f32; 3],
} }
@ -19,9 +20,9 @@ fn main() {
let display = glium::Display::new(wb, cb, &events_loop).unwrap(); 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 vertex1 = Vertex { position: [-0.5, -0.5, 0.0], color: [1.0, 0.0, 0.0] };
let vertex2 = Vertex { position: [ 0.0, 0.5], color: [0.0, 1.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], color: [0.0, 0.0, 1.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 shape = vec![vertex1, vertex2, vertex3];
let vertex_buffer = glium::VertexBuffer::new(&display, &shape).unwrap(); let vertex_buffer = glium::VertexBuffer::new(&display, &shape).unwrap();
@ -31,11 +32,21 @@ fn main() {
let fragment_shader_src = include_str!("flat.frag"); let fragment_shader_src = include_str!("flat.frag");
let program = glium::Program::from_source(&display, vertex_shader_src, fragment_shader_src, None).unwrap(); 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| { events_loop.run(move |ev, _, control_flow| {
frames += 1;
let mvp = glm::perspective::<f32>(1.0, 45.0_f32.to_radians(), 0.2, 100.0);
let mvp = glm::translate::<f32>(&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(); let mut target = display.draw();
target.clear_color(0.0, 0.0, 0.0, 1.0); 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(); &Default::default()).unwrap();
target.finish().unwrap(); target.finish().unwrap();