Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1b0a437ac9 | |||
| 15036109bf | |||
| 0cc59fdc15 | |||
| a79b04114a |
@@ -10,11 +10,13 @@ void main() {
|
|||||||
// ambient component
|
// ambient component
|
||||||
float ambientStrength = 0.1;
|
float ambientStrength = 0.1;
|
||||||
vec3 ambient = ambientStrength * vColor.rgb;
|
vec3 ambient = ambientStrength * vColor.rgb;
|
||||||
|
|
||||||
// terrain bump mapping with multi‐octave noise based on world position
|
// terrain bump mapping with multi‐octave noise based on world position
|
||||||
float bumpStrength = 0.4;
|
float bumpStrength = 0.1;
|
||||||
float n1 = fract(sin(dot(vPosition.xz, vec2(12.9898, 78.233))) * 43758.5453);
|
float n1 = fract(sin(dot(vPosition.xz, vec2(12.9898, 78.233))) * 43758.5453);
|
||||||
float n2 = fract(sin(dot(vPosition.xz * 0.5, vec2(93.9898, 67.345))) * 24634.6345);
|
float n2 = fract(sin(dot(vPosition.xz * 0.5, vec2(93.9898, 67.345))) * 24634.6345);
|
||||||
float noiseVal = mix(n1, n2, 0.5);
|
float noiseVal = mix(n1, n2, 0.5);
|
||||||
|
|
||||||
vec3 bumpNormal = normalize(vNormal + bumpStrength * (noiseVal - 0.5) * vec3(1.0));
|
vec3 bumpNormal = normalize(vNormal + bumpStrength * (noiseVal - 0.5) * vec3(1.0));
|
||||||
// diffuse component (Lambert) with bump
|
// diffuse component (Lambert) with bump
|
||||||
float lambert = max(0.0, dot(normalize(bumpNormal), -lightDirection));
|
float lambert = max(0.0, dot(normalize(bumpNormal), -lightDirection));
|
||||||
|
|||||||
11
src/main.rs
11
src/main.rs
@@ -376,6 +376,7 @@ fn main() {
|
|||||||
// The main rendering loop
|
// The main rendering loop
|
||||||
let first_frame_time = std::time::Instant::now();
|
let first_frame_time = std::time::Instant::now();
|
||||||
let mut previous_frame_time = first_frame_time;
|
let mut previous_frame_time = first_frame_time;
|
||||||
|
let mut door_slide = 0.0f32;
|
||||||
loop {
|
loop {
|
||||||
// Compute time passed since the previous frame and since the start of the program
|
// Compute time passed since the previous frame and since the start of the program
|
||||||
let now = std::time::Instant::now();
|
let now = std::time::Instant::now();
|
||||||
@@ -428,6 +429,7 @@ fn main() {
|
|||||||
// clamp pitch to avoid flipping
|
// clamp pitch to avoid flipping
|
||||||
let pitch_limit = std::f32::consts::FRAC_PI_2 - 0.01;
|
let pitch_limit = std::f32::consts::FRAC_PI_2 - 0.01;
|
||||||
cam_pitch = cam_pitch.clamp(-pitch_limit, pitch_limit);
|
cam_pitch = cam_pitch.clamp(-pitch_limit, pitch_limit);
|
||||||
|
door_slide = if keys.contains(&O) { 2.0 } else { 0.0 };
|
||||||
}
|
}
|
||||||
// Handle mouse movement. delta contains the x and y movement of the mouse since last frame in pixels
|
// Handle mouse movement. delta contains the x and y movement of the mouse since last frame in pixels
|
||||||
if let Ok(mut delta) = mouse_delta.lock() {
|
if let Ok(mut delta) = mouse_delta.lock() {
|
||||||
@@ -474,6 +476,15 @@ fn main() {
|
|||||||
(&mut (*node.children[3]).rotation).x = elapsed * 10.0;
|
(&mut (*node.children[3]).rotation).x = elapsed * 10.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Animate door sliding
|
||||||
|
{
|
||||||
|
let mut pin = root.as_mut();
|
||||||
|
let node = unsafe { pin.get_unchecked_mut() };
|
||||||
|
unsafe {
|
||||||
|
let door_node = &mut *node.children[1];
|
||||||
|
door_node.position.z = door_slide;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw scene via scene graph
|
// Draw scene via scene graph
|
||||||
|
|||||||
Reference in New Issue
Block a user