diff --git a/src/main.rs b/src/main.rs index d739398..9fe57e3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,6 +14,7 @@ use std::{mem, os::raw::c_void, ptr}; mod shader; mod util; +mod mesh; use glutin::event::{ DeviceEvent, @@ -181,6 +182,10 @@ fn main() { } // == // Set up your VAO around here + let terrain_mesh = mesh::Terrain::load("resources/lunarsurface.obj"); + let terrain_vao = unsafe { + create_vao(&terrain_mesh.vertices, &terrain_mesh.colors, &terrain_mesh.indices) + }; let vertices = vec![ // triangle 1 @@ -380,7 +385,7 @@ fn main() { let view: glm::Mat4 = view_rot_x * view_rot_y * view_translation; // build Projection matrix let projection: glm::Mat4 = - glm::perspective(window_aspect_ratio, std::f32::consts::PI / 4.0, 1.0, 100.0); + glm::perspective(window_aspect_ratio, std::f32::consts::PI / 4.0, 1.0, 1000.0); // final transform: Projection * View * Model let transform: glm::Mat4 = projection * view * model; gl::UniformMatrix4fv(transform_loc, 1, gl::FALSE, transform.as_ptr()); @@ -392,6 +397,18 @@ fn main() { std::ptr::null(), ); + // Draw the lunar terrain + let model_terrain: glm::Mat4 = glm::identity(); + let transform_terrain: glm::Mat4 = projection * view * model_terrain; + gl::UniformMatrix4fv(transform_loc, 1, gl::FALSE, transform_terrain.as_ptr()); + gl::BindVertexArray(terrain_vao); + gl::DrawElements( + gl::TRIANGLES, + terrain_mesh.index_count, + gl::UNSIGNED_INT, + std::ptr::null(), + ); + // Draw point‐particles let transform_particles = projection * view * glm::identity(); gl::UniformMatrix4fv(transform_loc, 1, gl::FALSE, transform_particles.as_ptr());