Specular fix

This commit is contained in:
2020-07-06 23:50:16 +02:00
parent 0a3f89c150
commit 71dc720a31
5 changed files with 8 additions and 3 deletions

BIN
models/plane.blend Normal file

Binary file not shown.

BIN
models/plane.glb Normal file

Binary file not shown.

View File

@@ -29,9 +29,10 @@ void main() {
vec3 diffuse_color = diffuse_strength * light_color; vec3 diffuse_color = diffuse_strength * light_color;
float specular_value = 1.0; 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); 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; vec3 specular_color = specular_value * specular_strength * light_color;
out_color = vec4(ambient_color + diffuse_color + specular_color, 1.0) * texture(tex, tex_coords); out_color = vec4(ambient_color + diffuse_color + specular_color, 1.0) * texture(tex, tex_coords);

View File

@@ -106,8 +106,9 @@ impl TestGame {
fn game_start(self: &mut Self, renderer: &mut VulkanRenderer) { fn game_start(self: &mut Self, renderer: &mut VulkanRenderer) {
let mut test_comp = TestComponent { game_objects: vec![] }; 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 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); 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); 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); 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); 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)); self.components.push(Box::new(test_comp));
println!("Game loaded!"); println!("Game loaded!");
} }