diff --git a/models/box.gltf.glb b/models/box.glb similarity index 100% rename from models/box.gltf.glb rename to models/box.glb diff --git a/models/plane.blend b/models/plane.blend new file mode 100644 index 0000000..861d5cd Binary files /dev/null and b/models/plane.blend differ diff --git a/models/plane.glb b/models/plane.glb new file mode 100644 index 0000000..e483bf0 Binary files /dev/null and b/models/plane.glb differ diff --git a/shaders/triangle.frag b/shaders/triangle.frag index e872c19..f4d2221 100644 --- a/shaders/triangle.frag +++ b/shaders/triangle.frag @@ -29,9 +29,10 @@ void main() { vec3 diffuse_color = diffuse_strength * light_color; float specular_value = 1.0; - vec3 view_direction = normalize(ubo.camera_position - position_wld); + + vec3 view_direction = normalize(vec3(inverse(ubo.view) * vec4(0.0, 0.0, 0.0, 1.0)) - position_wld); vec3 reflect_direction = reflect(-light_direction_cam_u, normal_cam_u); - float specular_strength = pow(max(dot(view_direction, reflect_direction), 0.0), 64); + float specular_strength = pow(max(dot(reflect_direction, view_direction), 0.0), 64); vec3 specular_color = specular_value * specular_strength * light_color; out_color = vec4(ambient_color + diffuse_color + specular_color, 1.0) * texture(tex, tex_coords); diff --git a/src/main.rs b/src/main.rs index c04a400..fdc076d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -106,8 +106,9 @@ impl TestGame { fn game_start(self: &mut Self, renderer: &mut VulkanRenderer) { let mut test_comp = TestComponent { game_objects: vec![] }; - let cube_meshes = self.load_gltf(renderer, "models/box.gltf.glb"); + let cube_meshes = self.load_gltf(renderer, "models/box.glb"); let sphere_meshes = self.load_gltf(renderer, "models/sphere.glb"); + let plane_meshes = self.load_gltf(renderer, "models/plane.glb"); let cube = self.add_game_object(renderer, *cube_meshes.first().unwrap(), 0); cube.get_game_object(renderer).unwrap().position = vec3(3.0, 4.0, 5.0); @@ -119,6 +120,9 @@ impl TestGame { let light_sphere = self.add_game_object(renderer, *sphere_meshes.first().unwrap(), 0); light_sphere.get_game_object(renderer).unwrap().scale = vec3(0.1, 0.1, 0.1); + let plane = self.add_game_object(renderer, *plane_meshes.first().unwrap(), 0); + plane.get_game_object(renderer).unwrap().position = vec3(0.0, -1.0, 0.0); + self.components.push(Box::new(test_comp)); println!("Game loaded!"); }