Fix Phong specular term

This commit is contained in:
Abdelrahman Said 2024-08-24 00:39:40 +01:00
parent aa9c443997
commit 798100f138
2 changed files with 8 additions and 7 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 611 KiB

After

Width:  |  Height:  |  Size: 608 KiB

View File

@ -21,10 +21,10 @@ ShaderID orthographic_albedo = {0};
internal Shader perspective = {0}; internal Shader perspective = {0};
internal Shader orthographic = {0}; internal Shader orthographic = {0};
internal V3f g_ambient_light = {0.3f, 0.75f, 0.15f}; internal V3f g_ambient_light = {0.6f, 0.45f, 0.55f};
internal DirectionalLight g_directional_light = { internal DirectionalLight g_directional_light = {
.diffuse_intensity = {0.9f, 0.8f, 0.6f}, .diffuse_intensity = {0.9f, 1.0f, 1.0f},
.specular_intensity = {0.5f, 0.8f, 2.0f}, .specular_intensity = {1.0f, 0.8f, 2.0f},
.direction = {0.0f, 0.0f, 1.5f}, .direction = {0.0f, 0.0f, 1.5f},
}; };
internal V3f g_eye = {0.2f, 0.1f, 0.75f}; internal V3f g_eye = {0.2f, 0.1f, 0.75f};
@ -147,14 +147,15 @@ internal FragmentResult phong_shader_fragment(void *shader,
// Specular term // Specular term
V3f _2_l_dot_n_norm = num_mul_v3(norm, 2.0f * l_dot_n); V3f _2_l_dot_n_norm = num_mul_v3(norm, 2.0f * l_dot_n);
V3f reflected = sub_v3(_2_l_dot_n_norm, light_dir); V3f reflected = sub_v3(_2_l_dot_n_norm, light_dir);
f32 r_dot_v = dot_v3(reflected, data->position); V3f v = sub_v3(g_eye, data->position);
f32 r_dot_v = dot_v3(reflected, v);
if (r_dot_v <= 0.0f) { if (r_dot_v <= 0.0f) {
goto RETURN_OUTPUT_COLOUR; goto RETURN_OUTPUT_COLOUR;
} }
V3f specular = num_mul_v3( V3f specular = num_mul_v3(g_directional_light.specular_intensity,
g_directional_light.specular_intensity, model->material.specular *
powf(model->material.specular * r_dot_v, model->material.shininess)); powf(r_dot_v, model->material.shininess));
intensity = add_v3(intensity, specular); intensity = add_v3(intensity, specular);
RETURN_OUTPUT_COLOUR: RETURN_OUTPUT_COLOUR: