before shadows

This commit is contained in:
Franchioping 2025-11-23 23:43:48 +00:00
parent 7cf16de4f0
commit 51cd254ddb
3 changed files with 28 additions and 28 deletions

View File

@ -1,16 +1,18 @@
use glam::Quat;
use macroquad::prelude as mq; use macroquad::prelude as mq;
use rapier3d::prelude::*; use rapier3d::prelude::*;
mod engine; mod engine;
use engine::*; use engine::*;
mod camera;
mod graphics_util; mod graphics_util;
use graphics_util::*; use graphics_util::*;
#[macroquad::main("3D")] #[macroquad::main("3D")]
async fn main() { async fn main() {
// Graphics Initialization // Graphics Initialization
let vertex = include_str!("shaders/shader.vert"); let vertex = include_str!("shaders/shader.vert");
let fragment = include_str!("shaders/shader.frag"); let fragment = include_str!("shaders/shader.frag");
@ -35,41 +37,38 @@ async fn main() {
// Physics Initialization // Physics Initialization
let mut world = World::default(); let mut world = World::default();
world.register_free_collider( world.register_free_collider(
ColliderBuilder::cuboid(5.0, 0.1, 5.0) ColliderBuilder::cuboid(50.0, 0.1, 50.0)
.restitution(0.5) .restitution(0.5)
.build(), .build(),
None, None,
); );
let body = world.register_body( for i in 0..10 {
RigidBodyBuilder::dynamic() let body = world.register_body(
.translation(vector![0.0, 10.0, 0.0]) RigidBodyBuilder::dynamic()
.rotation(vector![std::f32::consts::PI / 4.2, 0.0, 0.0]) .translation(vector![0.0, 10.0 + i as f32, 0.0])
.build(), .rotation(vector![std::f32::consts::PI / 4.2, i as f32, i as f32])
); .build(),
);
world.register_collider(
ColliderBuilder::cuboid(0.5, 0.5, 0.5)
.restitution(0.5)
.build(),
body,
None,
);
}
let coll = world.register_collider( let mut cam: camera::FirstPersonCamera =
ColliderBuilder::cuboid(0.5, 0.5, 0.5) camera::FirstPersonCamera::new(mq::vec3(0.0, 10.0, -5.0));
.restitution(0.5)
.build(),
body,
None,
);
// Main Loop
loop { loop {
// Physics Simulation // Physics Simulation
world.step(); world.step();
// Graphics Rendering // Graphics Rendering
mq::clear_background(mq::LIGHTGRAY); mq::clear_background(mq::LIGHTGRAY);
cam.update(mq::get_frame_time());
mq::set_camera(&mq::Camera3D { cam.apply();
position: mq::vec3(-20., 15., 0.),
up: mq::vec3(0., 1., 0.),
target: mq::vec3(0., 0., 0.),
..Default::default()
});
mq::draw_grid(20, 1., mq::BLACK, mq::GRAY); mq::draw_grid(20, 1., mq::BLACK, mq::GRAY);
@ -111,8 +110,6 @@ async fn main() {
} }
} }
// draw_sphere(world.position_of_rb(body).unwrap().into(), 0.5, None, BLUE);
mq::next_frame().await mq::next_frame().await
} }
} }

View File

@ -3,6 +3,7 @@
in vec4 v_normal; in vec4 v_normal;
in vec4 color; in vec4 color;
in vec3 light_direction;
uniform int render_normals_bool; uniform int render_normals_bool;
out vec4 FragColor; out vec4 FragColor;
@ -11,8 +12,7 @@ const float ambient_strenght = 0.3;
const float diffuse_strenght = 0.7; const float diffuse_strenght = 0.7;
void main() { void main() {
vec3 lightDir = vec3(1.0, 0.3, 0.2); float diff = max(dot(normalize(vec3(v_normal.x, v_normal.y, v_normal.z)), normalize(light_direction)), 0) * diffuse_strenght;
float diff = max(dot(normalize(vec3(v_normal.x, v_normal.y, v_normal.z)), normalize(lightDir)), 0) * diffuse_strenght;
if (render_normals_bool == 1) { if (render_normals_bool == 1) {
FragColor = vec4(v_normal); FragColor = vec4(v_normal);
} }

View File

@ -10,7 +10,10 @@ uniform mat4 Projection;
out vec4 v_normal; out vec4 v_normal;
out vec4 color; out vec4 color;
out vec3 light_direction;
void main() { void main() {
vec4 light_dir = vec4(1.0, 1.0, 0.0, 0.0) * Model;
light_direction = vec3(light_dir.x, light_dir.y, light_dir.z);
color = color0; color = color0;
v_normal = normal; v_normal = normal;
gl_Position = Projection * Model * vec4(position, 1.0); gl_Position = Projection * Model * vec4(position, 1.0);