before shadows
This commit is contained in:
parent
7cf16de4f0
commit
51cd254ddb
49
src/main.rs
49
src/main.rs
|
|
@ -1,16 +1,18 @@
|
|||
use glam::Quat;
|
||||
use macroquad::prelude as mq;
|
||||
use rapier3d::prelude::*;
|
||||
|
||||
mod engine;
|
||||
use engine::*;
|
||||
|
||||
mod camera;
|
||||
|
||||
mod graphics_util;
|
||||
use graphics_util::*;
|
||||
|
||||
#[macroquad::main("3D")]
|
||||
async fn main() {
|
||||
// Graphics Initialization
|
||||
|
||||
let vertex = include_str!("shaders/shader.vert");
|
||||
let fragment = include_str!("shaders/shader.frag");
|
||||
|
||||
|
|
@ -35,41 +37,38 @@ async fn main() {
|
|||
// Physics Initialization
|
||||
let mut world = World::default();
|
||||
world.register_free_collider(
|
||||
ColliderBuilder::cuboid(5.0, 0.1, 5.0)
|
||||
ColliderBuilder::cuboid(50.0, 0.1, 50.0)
|
||||
.restitution(0.5)
|
||||
.build(),
|
||||
None,
|
||||
);
|
||||
|
||||
let body = world.register_body(
|
||||
RigidBodyBuilder::dynamic()
|
||||
.translation(vector![0.0, 10.0, 0.0])
|
||||
.rotation(vector![std::f32::consts::PI / 4.2, 0.0, 0.0])
|
||||
.build(),
|
||||
);
|
||||
for i in 0..10 {
|
||||
let body = world.register_body(
|
||||
RigidBodyBuilder::dynamic()
|
||||
.translation(vector![0.0, 10.0 + i as f32, 0.0])
|
||||
.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(
|
||||
ColliderBuilder::cuboid(0.5, 0.5, 0.5)
|
||||
.restitution(0.5)
|
||||
.build(),
|
||||
body,
|
||||
None,
|
||||
);
|
||||
|
||||
// Main Loop
|
||||
let mut cam: camera::FirstPersonCamera =
|
||||
camera::FirstPersonCamera::new(mq::vec3(0.0, 10.0, -5.0));
|
||||
loop {
|
||||
// Physics Simulation
|
||||
world.step();
|
||||
|
||||
// Graphics Rendering
|
||||
mq::clear_background(mq::LIGHTGRAY);
|
||||
|
||||
mq::set_camera(&mq::Camera3D {
|
||||
position: mq::vec3(-20., 15., 0.),
|
||||
up: mq::vec3(0., 1., 0.),
|
||||
target: mq::vec3(0., 0., 0.),
|
||||
..Default::default()
|
||||
});
|
||||
cam.update(mq::get_frame_time());
|
||||
cam.apply();
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
in vec4 v_normal;
|
||||
in vec4 color;
|
||||
in vec3 light_direction;
|
||||
uniform int render_normals_bool;
|
||||
|
||||
out vec4 FragColor;
|
||||
|
|
@ -11,8 +12,7 @@ const float ambient_strenght = 0.3;
|
|||
const float diffuse_strenght = 0.7;
|
||||
|
||||
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(lightDir)), 0) * diffuse_strenght;
|
||||
float diff = max(dot(normalize(vec3(v_normal.x, v_normal.y, v_normal.z)), normalize(light_direction)), 0) * diffuse_strenght;
|
||||
if (render_normals_bool == 1) {
|
||||
FragColor = vec4(v_normal);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,10 @@ uniform mat4 Projection;
|
|||
|
||||
out vec4 v_normal;
|
||||
out vec4 color;
|
||||
out vec3 light_direction;
|
||||
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;
|
||||
v_normal = normal;
|
||||
gl_Position = Projection * Model * vec4(position, 1.0);
|
||||
|
|
|
|||
Loading…
Reference in New Issue