Beautiful badly-lit debug arrows

main
_ 2020-03-08 05:52:26 +00:00
parent 00a51efb19
commit 5b1b59db5e
1 changed files with 75 additions and 10 deletions

View File

@ -211,6 +211,11 @@ impl ShaderClosure {
} }
} }
struct Arrow {
origin: Vec3,
direction: Vec3,
}
fn main () { fn main () {
let sdl_context = sdl2::init ().unwrap (); let sdl_context = sdl2::init ().unwrap ();
let video_subsystem = sdl_context.video ().unwrap (); let video_subsystem = sdl_context.video ().unwrap ();
@ -272,6 +277,7 @@ fn main () {
let mesh_pitch = renderable_from_iqm_file ("pitch.iqm"); let mesh_pitch = renderable_from_iqm_file ("pitch.iqm");
let mesh_arrow = renderable_from_iqm_file ("arrow.iqm"); let mesh_arrow = renderable_from_iqm_file ("arrow.iqm");
let magenta = color_from_255 ((255.0, 0.0, 255.0));
let orange = color_from_255 ((210.0, 125.0, 44.0)); let orange = color_from_255 ((210.0, 125.0, 44.0));
let green = color_from_255 ((52.0, 101.0, 36.0)); let green = color_from_255 ((52.0, 101.0, 36.0));
let white = color_from_255 ((255.0, 255.0, 255.0)); let white = color_from_255 ((255.0, 255.0, 255.0));
@ -360,7 +366,7 @@ fn main () {
let shadow_mat = { let shadow_mat = {
let mut mat = Mat4::identity (); let mut mat = Mat4::identity ();
mat.set_z_axis ((0.25, 0.125, 0.0, 0.0).into ()); mat.set_z_axis ((-0.25, 0.125, 0.0, 0.0).into ());
mat mat
}; };
@ -373,7 +379,7 @@ fn main () {
let sky_mvp_mat = view_mat * Mat4::from_scale ((16.0, 16.0, 16.0).into ()); let sky_mvp_mat = view_mat * Mat4::from_scale ((16.0, 16.0, 16.0).into ());
let light = Vec3::from ((2.0, 0.0, 5.0)).normalize (); let light = Vec3::from ((0.25, -0.125, 1.0)).normalize ();
glezz::clear_color (1.0f32, 0.0f32, 1.0f32, 1.0f32); glezz::clear_color (1.0f32, 0.0f32, 1.0f32, 1.0f32);
glezz::clear (gl::COLOR_BUFFER_BIT | gl::DEPTH_BUFFER_BIT | gl::STENCIL_BUFFER_BIT); glezz::clear (gl::COLOR_BUFFER_BIT | gl::DEPTH_BUFFER_BIT | gl::STENCIL_BUFFER_BIT);
@ -387,6 +393,50 @@ fn main () {
let world_model_mat = Mat4::identity (); let world_model_mat = Mat4::identity ();
let arrows = vec![
Arrow {
origin: (0.0, 0.0, 1.0).into (),
direction: (0.0, 0.0, 1.0).into (),
},
Arrow {
origin: (1.0, 0.0, 1.0).into (),
direction: (1.0, 0.0, 0.0).into (),
},
Arrow {
origin: (0.0, 1.0, 1.0).into (),
direction: (0.0, 1.0, 0.0).into (),
},
];
let arrow_mats: Vec <_> = arrows.iter ().map (|arrow| {
let d = arrow.direction;
let up: Vec3 = if d.z () > 0.5 {
(-1.0, 0.0, 0.0)
}
else if d.z () < -0.5 {
(-1.0, 0.0, 0.0)
}
else {
(0.0, 0.0, 1.0)
}.into ();
// These are probably all fucked
let left = d.cross (up);
let up = d.cross (left);
let mut dir_mat = Mat4::identity ();
dir_mat.set_x_axis ((left.x (), left.y (), left.z (), 0.0).into ());
dir_mat.set_y_axis ((up.x (), up.y (), up.z (), 0.0).into ());
dir_mat.set_z_axis ((d.x (), d.y (), d.z (), 0.0).into ());
Mat4::from_translation (arrow.origin) *
Mat4::from_scale ((0.125, 0.125, 0.125).into ()) *
dir_mat
}).collect ();
use uniforms::*; use uniforms::*;
shader_diffuse.with (|shader_vars| { shader_diffuse.with (|shader_vars| {
@ -423,6 +473,14 @@ fn main () {
i != grass_index i != grass_index
}); });
glezz::uniform_3fv (unis [&ALBEDO], &magenta);
for arrow_mat in &arrow_mats {
let mvp = view_mat * *arrow_mat;
glezz::uniform_matrix_4fv (unis [&MVP], &mvp);
mesh_arrow.draw_all (attrs, |_| true);
}
let draw_sky = true; let draw_sky = true;
if draw_sky { if draw_sky {
glezz::front_face (gl::CCW); glezz::front_face (gl::CCW);
@ -434,6 +492,11 @@ fn main () {
mesh_sky.draw_all (attrs, |_| true); mesh_sky.draw_all (attrs, |_| true);
} }
});
shader_shadow.with (|shader_vars| {
let unis = shader_vars.unis;
let attrs = shader_vars.attrs;
glezz::enable (gl::STENCIL_TEST); glezz::enable (gl::STENCIL_TEST);
unsafe { unsafe {
@ -444,11 +507,6 @@ fn main () {
gl::DepthMask (0); gl::DepthMask (0);
gl::StencilMask (1); gl::StencilMask (1);
} }
});
shader_shadow.with (|shader_vars| {
let unis = shader_vars.unis;
let attrs = shader_vars.attrs;
let view_mat = view_mat * shadow_mat; let view_mat = view_mat * shadow_mat;
@ -462,9 +520,11 @@ fn main () {
mesh_pitch.draw_all (attrs, |i| i != grass_index); mesh_pitch.draw_all (attrs, |i| i != grass_index);
unsafe { for arrow_mat in &arrow_mats {
gl::ColorMask (255, 255, 255, 255); let mvp = view_mat * *arrow_mat;
gl::DepthMask (1);
glezz::uniform_matrix_4fv (unis [&MVP], &mvp);
mesh_arrow.draw_all (attrs, |_| true);
} }
}); });
@ -472,6 +532,11 @@ fn main () {
let unis = shader_vars.unis; let unis = shader_vars.unis;
let attrs = shader_vars.attrs; let attrs = shader_vars.attrs;
unsafe {
gl::ColorMask (255, 255, 255, 255);
gl::DepthMask (1);
}
glezz::front_face (gl::CW); glezz::front_face (gl::CW);
let inverse_pumpkin = pumpkin_model_mat.inverse (); let inverse_pumpkin = pumpkin_model_mat.inverse ();