From 21e102f5cb38af1fd4f3e8d1be234e7095dba907 Mon Sep 17 00:00:00 2001 From: ScorpionX90 Date: Fri, 3 Oct 2025 14:24:34 +0200 Subject: [PATCH] PHONG minus report --- gloom-rs/shaders/simple.frag | 27 +++++++++++++++++++++++++-- gloom-rs/shaders/simple.vert | 3 ++- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/gloom-rs/shaders/simple.frag b/gloom-rs/shaders/simple.frag index 21c28e9..91a0633 100644 --- a/gloom-rs/shaders/simple.frag +++ b/gloom-rs/shaders/simple.frag @@ -2,11 +2,34 @@ in vec4 fragment_colors; in vec3 normal_vec; +in vec3 viewing_vec; out vec4 color; void main() { - float lightVec = normal_vec.x * -0.8 + normal_vec.y * 0.5 + normal_vec.z * -0.6; - vec3 albedo = vec3(fragment_colors) * max(0, lightVec); + // Constants + vec3 i_ambient = vec3(0.4); + vec3 i_diffuse = vec3(0.6); + vec3 i_spec = vec3(0.8); + + float k_ambient = 0.5; + float k_diffuse = 0.9; + float k_spec = 0.6; + float alpha = 8; + + // Light vector + vec3 L = normalize(vec3(-0.8, 0.5, -0.6)); + + // Reflected light vector + vec3 R = 2 * dot(normalize(normal_vec), L) * normalize(normal_vec) - L; + + // Component vectors + vec3 ambient = k_ambient * i_ambient; + vec3 diff = k_diffuse * max(dot(normalize(normal_vec), L), 0.0) * i_diffuse; + vec3 spec = k_spec * pow(max(dot(R, normalize(viewing_vec)), 0.0), alpha) * i_spec; + + // Final color vector + vec3 intensity = ambient + diff + spec; + vec3 albedo = fragment_colors.rgb * intensity; color = vec4(albedo, 1); } \ No newline at end of file diff --git a/gloom-rs/shaders/simple.vert b/gloom-rs/shaders/simple.vert index e2587e5..194dc3c 100644 --- a/gloom-rs/shaders/simple.vert +++ b/gloom-rs/shaders/simple.vert @@ -7,11 +7,12 @@ uniform mat4 mvp_transform; uniform mat4 model_transform; out vec4 fragment_colors; out vec3 normal_vec; - +out vec3 viewing_vec; void main() { gl_Position = mvp_transform * vec4(position, 1.0f); fragment_colors = vertex_colors; normal_vec = normalize(mat3(model_transform) * normal); + viewing_vec = vec3(-gl_Position); }