From 4c9bd15076a49d5c52a799d4a7d79ff1252a3adf Mon Sep 17 00:00:00 2001 From: codeanticode Date: Sat, 21 Apr 2012 21:33:33 +0000 Subject: [PATCH] Corrected calculation of Blinn-Phong factor used in specular lights. --- .../src/processing/opengl/FillShaderVertFull.glsl | 9 +++++---- .../src/processing/opengl/FillShaderVertLit.glsl | 10 +++++----- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/java/libraries/opengl/src/processing/opengl/FillShaderVertFull.glsl b/java/libraries/opengl/src/processing/opengl/FillShaderVertFull.glsl index ab78dfa28..42fba0556 100644 --- a/java/libraries/opengl/src/processing/opengl/FillShaderVertFull.glsl +++ b/java/libraries/opengl/src/processing/opengl/FillShaderVertFull.glsl @@ -68,8 +68,9 @@ float lambertFactor(vec3 lightDir, vec3 vecNormal) { return max(zero_float, dot(lightDir, vecNormal)); } -float blinnPhongFactor(vec3 lightDir, vec3 lightPos, vec3 vecNormal, float shine) { - vec3 ldp = normalize(lightDir - lightPos); +float blinnPhongFactor(vec3 lightDir, vec3 vertPos, vec3 vecNormal, float shine) { + vec3 np = normalize(vertPos); + vec3 ldp = normalize(lightDir - np); return pow(max(zero_float, dot(ldp, vecNormal)), shine); } @@ -126,8 +127,8 @@ void main() { if (any(greaterThan(lightSpecular[i], zero_vec3))) { totalSpecular += lightSpecular[i] * falloff * spotf * - blinnPhongFactor(lightDir, lightPos, ecNormal, inShine); - } + blinnPhongFactor(lightDir, ecVertex, ecNormal, inShine); + } } // Calculating final color as result of all lights (plus emissive term). diff --git a/java/libraries/opengl/src/processing/opengl/FillShaderVertLit.glsl b/java/libraries/opengl/src/processing/opengl/FillShaderVertLit.glsl index 7fefea78d..6fd2f0ecf 100644 --- a/java/libraries/opengl/src/processing/opengl/FillShaderVertLit.glsl +++ b/java/libraries/opengl/src/processing/opengl/FillShaderVertLit.glsl @@ -65,8 +65,9 @@ float lambertFactor(vec3 lightDir, vec3 vecNormal) { return max(zero_float, dot(lightDir, vecNormal)); } -float blinnPhongFactor(vec3 lightDir, vec3 lightPos, vec3 vecNormal, float shine) { - vec3 ldp = normalize(lightDir - lightPos); +float blinnPhongFactor(vec3 lightDir, vec3 vertPos, vec3 vecNormal, float shine) { + vec3 np = normalize(vertPos); + vec3 ldp = normalize(lightDir - np); return pow(max(zero_float, dot(ldp, vecNormal)), shine); } @@ -123,9 +124,8 @@ void main() { if (any(greaterThan(lightSpecular[i], zero_vec3))) { totalSpecular += lightSpecular[i] * falloff * spotf * - blinnPhongFactor(lightDir, lightPos, ecNormal, inShine); - } - + blinnPhongFactor(lightDir, ecVertex, ecNormal, inShine); + } } // Calculating final color as result of all lights (plus emissive term).