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 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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue