shadows are working idk
parent
c61f734a5b
commit
174061feb1
|
@ -1,6 +1,7 @@
|
||||||
/quic_server.crt
|
/quic_server.crt
|
||||||
/target
|
/target
|
||||||
**/*.rs.bk
|
**/*.rs.bk
|
||||||
|
/videos
|
||||||
|
|
||||||
*.blend*
|
*.blend*
|
||||||
*.trace
|
*.trace
|
||||||
|
|
BIN
sphere.iqm
BIN
sphere.iqm
Binary file not shown.
|
@ -73,7 +73,10 @@ struct GameGraphics {
|
||||||
text_stream: TriangleStream,
|
text_stream: TriangleStream,
|
||||||
|
|
||||||
texture_crate: Texture,
|
texture_crate: Texture,
|
||||||
|
texture_earth: Texture,
|
||||||
texture_sky: Texture,
|
texture_sky: Texture,
|
||||||
|
|
||||||
|
frames: u64,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ShaderLookup for GameGraphics {
|
impl ShaderLookup for GameGraphics {
|
||||||
|
@ -92,8 +95,9 @@ impl GameGraphics {
|
||||||
|
|
||||||
let white = color_from_255 ((255.0, 255.0, 255.0));
|
let white = color_from_255 ((255.0, 255.0, 255.0));
|
||||||
let black = color_from_255 ((0.0, 0.0, 0.0));
|
let black = color_from_255 ((0.0, 0.0, 0.0));
|
||||||
|
let shadow_blue = color_from_255 ((0.0, 0.0, 0.25));
|
||||||
|
|
||||||
let screen_size = (1280.0, 720.0);
|
let screen_size = (320.0, 240.0);
|
||||||
|
|
||||||
let fov = 30.0f32;
|
let fov = 30.0f32;
|
||||||
|
|
||||||
|
@ -114,13 +118,14 @@ impl GameGraphics {
|
||||||
let attrs = shader_vars.attrs;
|
let attrs = shader_vars.attrs;
|
||||||
let unis = shader_vars.unis;
|
let unis = shader_vars.unis;
|
||||||
|
|
||||||
self.texture_sky.bind ();
|
self.texture_earth.bind ();
|
||||||
|
|
||||||
{
|
{
|
||||||
let mvp = view_mat *
|
let mvp = view_mat *
|
||||||
Mat4::from_translation (state.player.pos) *
|
Mat4::from_translation (state.player.pos) *
|
||||||
Mat4::from_scale ((0.5, 0.5, 0.5).into ());
|
Mat4::from_scale ((0.5, 0.5, 0.5).into ());
|
||||||
glezz::uniform_matrix_4fv (unis [&u::MVP], &mvp);
|
glezz::uniform_matrix_4fv (unis [&u::MVP], &mvp);
|
||||||
|
glezz::uniform_3fv (unis [&u::ALBEDO], &white);
|
||||||
|
|
||||||
self.mesh_sphere.draw_all (attrs, |_| {
|
self.mesh_sphere.draw_all (attrs, |_| {
|
||||||
true
|
true
|
||||||
|
@ -128,6 +133,7 @@ impl GameGraphics {
|
||||||
}
|
}
|
||||||
|
|
||||||
self.texture_crate.bind ();
|
self.texture_crate.bind ();
|
||||||
|
glezz::uniform_3fv (unis [&u::ALBEDO], &white);
|
||||||
|
|
||||||
for aabb in &state.aabbs {
|
for aabb in &state.aabbs {
|
||||||
let min = aabb.min;
|
let min = aabb.min;
|
||||||
|
@ -145,6 +151,55 @@ impl GameGraphics {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glezz::uniform_3fv (unis [&u::ALBEDO], &shadow_blue);
|
||||||
|
|
||||||
|
if true {
|
||||||
|
// Raycast for player shadow
|
||||||
|
let coll = opengl_rust::physics::get_candidate (
|
||||||
|
&[], &state.aabbs,
|
||||||
|
state.player.pos,
|
||||||
|
state.player.pos + Vec3::new (0.0, 0.0, -100.0),
|
||||||
|
0.0
|
||||||
|
);
|
||||||
|
|
||||||
|
if coll.t <= 1.0 {
|
||||||
|
let mvp = view_mat *
|
||||||
|
Mat4::from_translation (coll.p_impact + Vec3::new (0.0, 0.0, 0.0625)) *
|
||||||
|
Mat4::from_scale ((0.5, 0.5, 0.0).into ());
|
||||||
|
glezz::uniform_matrix_4fv (unis [&u::MVP], &mvp);
|
||||||
|
|
||||||
|
self.mesh_sphere.draw_all (attrs, |_| {
|
||||||
|
true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for aabb in &state.aabbs {
|
||||||
|
// Raycast for box shadows
|
||||||
|
let min = aabb.min;
|
||||||
|
let max = aabb.max;
|
||||||
|
let center = (min + max) / 2.0;
|
||||||
|
let scale = (max - min) / 2.0;
|
||||||
|
|
||||||
|
let coll = opengl_rust::physics::get_candidate (
|
||||||
|
&[], &state.aabbs,
|
||||||
|
center,
|
||||||
|
center + Vec3::new (0.0, 0.0, -100.0),
|
||||||
|
0.0
|
||||||
|
);
|
||||||
|
|
||||||
|
if coll.t <= 1.0 {
|
||||||
|
let mvp = view_mat *
|
||||||
|
Mat4::from_translation (coll.p_impact + Vec3::new (0.0, 0.0, 0.0625)) *
|
||||||
|
Mat4::from_scale ((scale.x, scale.y, 0.0).into ());
|
||||||
|
glezz::uniform_matrix_4fv (unis [&u::MVP], &mvp);
|
||||||
|
|
||||||
|
self.mesh_cube.draw_all (attrs, |_| {
|
||||||
|
true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
let sky_mvp_mat = view_mat * Mat4::from_scale ((64.0, 64.0, 64.0).into ());
|
let sky_mvp_mat = view_mat * Mat4::from_scale ((64.0, 64.0, 64.0).into ());
|
||||||
|
|
||||||
|
@ -170,7 +225,7 @@ async fn main () -> Result <()> {
|
||||||
|
|
||||||
let sdl_context = sdl2::init ().map_err (|e| anyhow! ("Can't init SDL: {}", e))?;
|
let sdl_context = sdl2::init ().map_err (|e| anyhow! ("Can't init SDL: {}", e))?;
|
||||||
let video_subsystem = sdl_context.video ().map_err (|e| anyhow! ("Can't get SDL video subsystem: {}", e))?;
|
let video_subsystem = sdl_context.video ().map_err (|e| anyhow! ("Can't get SDL video subsystem: {}", e))?;
|
||||||
let window = video_subsystem.window ("3D platformer", 1280, 720)
|
let window = video_subsystem.window ("3D platformer", 320, 240)
|
||||||
.position_centered ()
|
.position_centered ()
|
||||||
.opengl ()
|
.opengl ()
|
||||||
.build ()
|
.build ()
|
||||||
|
@ -275,7 +330,7 @@ async fn main () -> Result <()> {
|
||||||
glezz::enable_vertex_attrib_array (attrs [attributes::NORMAL]);
|
glezz::enable_vertex_attrib_array (attrs [attributes::NORMAL]);
|
||||||
});
|
});
|
||||||
|
|
||||||
let graphics = GameGraphics {
|
let mut graphics = GameGraphics {
|
||||||
mesh_cube,
|
mesh_cube,
|
||||||
mesh_sky,
|
mesh_sky,
|
||||||
mesh_sphere,
|
mesh_sphere,
|
||||||
|
@ -284,7 +339,9 @@ async fn main () -> Result <()> {
|
||||||
shaders,
|
shaders,
|
||||||
text_stream,
|
text_stream,
|
||||||
texture_crate: Texture::from_file ("crate.png"),
|
texture_crate: Texture::from_file ("crate.png"),
|
||||||
|
texture_earth: Texture::from_file ("earth.png"),
|
||||||
texture_sky: Texture::from_file ("sky.png"),
|
texture_sky: Texture::from_file ("sky.png"),
|
||||||
|
frames: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut gl_state = Default::default ();
|
let mut gl_state = Default::default ();
|
||||||
|
@ -374,9 +431,9 @@ async fn main () -> Result <()> {
|
||||||
window.gl_make_current (&gl_ctx).unwrap ();
|
window.gl_make_current (&gl_ctx).unwrap ();
|
||||||
|
|
||||||
graphics.draw (&game_state, &mut gl_state);
|
graphics.draw (&game_state, &mut gl_state);
|
||||||
|
graphics.frames += 1;
|
||||||
|
|
||||||
window.gl_swap_window ();
|
window.gl_swap_window ();
|
||||||
graphics_frames += 1;
|
|
||||||
|
|
||||||
tokio::time::sleep (Duration::from_millis (15)).await;
|
tokio::time::sleep (Duration::from_millis (15)).await;
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,8 +59,8 @@ impl Triangle {
|
||||||
|
|
||||||
#[derive (Clone, Copy, Debug, PartialEq)]
|
#[derive (Clone, Copy, Debug, PartialEq)]
|
||||||
pub struct Collision {
|
pub struct Collision {
|
||||||
t: f32,
|
pub t: f32,
|
||||||
p_impact: Vec3,
|
pub p_impact: Vec3,
|
||||||
normal: Vec3,
|
normal: Vec3,
|
||||||
i: usize,
|
i: usize,
|
||||||
c_type: CollisionType,
|
c_type: CollisionType,
|
||||||
|
|
|
@ -12,7 +12,7 @@ impl TimeStep {
|
||||||
pub fn new (fps_num: u16, fps_den: u16) -> Self {
|
pub fn new (fps_num: u16, fps_den: u16) -> Self {
|
||||||
Self {
|
Self {
|
||||||
last_frame_time: Instant::now (),
|
last_frame_time: Instant::now (),
|
||||||
accum: 0,
|
accum: (fps_den / 2).into (),
|
||||||
fps_num,
|
fps_num,
|
||||||
fps_den,
|
fps_den,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue