From c91ecbef1e30f97240a664f5b699a5617bb55289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 14 May 2012 00:44:51 +0200 Subject: [PATCH] Phong shader: simplified uniforms, added default values. --- src/Shaders/PhongShader.cpp | 4 +--- src/Shaders/PhongShader.frag | 17 ++++++-------- src/Shaders/PhongShader.h | 45 ++++++++++++++++++++---------------- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/Shaders/PhongShader.cpp b/src/Shaders/PhongShader.cpp index 2877d8463..4349732c6 100644 --- a/src/Shaders/PhongShader.cpp +++ b/src/Shaders/PhongShader.cpp @@ -38,9 +38,7 @@ PhongShader::PhongShader() { transformationMatrixUniform = uniformLocation("transformationMatrix"); projectionMatrixUniform = uniformLocation("projectionMatrix"); lightUniform = uniformLocation("light"); - lightAmbientColorUniform = uniformLocation("lightAmbientColor"); - lightDiffuseColorUniform = uniformLocation("lightDiffuseColor"); - lightSpecularColorUniform = uniformLocation("lightSpecularColor"); + lightColorUniform = uniformLocation("lightColor"); } }} diff --git a/src/Shaders/PhongShader.frag b/src/Shaders/PhongShader.frag index ae99af121..b70fb8f04 100644 --- a/src/Shaders/PhongShader.frag +++ b/src/Shaders/PhongShader.frag @@ -1,13 +1,10 @@ #version 330 -uniform vec3 ambientColor; +uniform vec3 ambientColor = vec3(0.0, 0.0, 0.0); uniform vec3 diffuseColor; -uniform vec3 specularColor; -uniform float shininess; - -uniform vec3 lightAmbientColor; -uniform vec3 lightDiffuseColor; -uniform vec3 lightSpecularColor; +uniform vec3 specularColor = vec3(1.0, 1.0, 1.0); +uniform vec3 lightColor = vec3(1.0, 1.0, 1.0); +uniform float shininess = 80.0; in vec3 transformedNormal; in vec3 lightDirection; @@ -16,20 +13,20 @@ out vec4 color; void main() { /* Ambient color */ - color.rgb = ambientColor*lightAmbientColor; + color.rgb = ambientColor; vec3 normalizedTransformedNormal = normalize(transformedNormal); vec3 normalizedLightDirection = normalize(lightDirection); /* Add diffuse color */ float intensity = max(0.0, dot(normalizedTransformedNormal, normalizedLightDirection)); - color.rgb += diffuseColor*lightDiffuseColor*intensity; + color.rgb += diffuseColor*lightColor*intensity; /* Add specular color, if needed */ if(intensity != 0) { vec3 reflection = reflect(-normalizedLightDirection, normalizedTransformedNormal); float specularity = pow(max(0.0, dot(normalizedTransformedNormal, reflection)), shininess); - color.rgb += specularColor*lightSpecularColor*specularity; + color.rgb += specularColor*specularity; } /* Force alpha to 1 */ diff --git a/src/Shaders/PhongShader.h b/src/Shaders/PhongShader.h index 3388d9e88..dac986dfc 100644 --- a/src/Shaders/PhongShader.h +++ b/src/Shaders/PhongShader.h @@ -37,22 +37,35 @@ class PhongShader: public AbstractShaderProgram { /** @brief Constructor */ PhongShader(); - /** @brief %Object ambient color */ + /** + * @brief %Ambient color + * + * If not set, default value is `(0.0f, 0.0f, 0.0f)`. + */ inline void setAmbientColorUniform(const Vector3& color) { setUniform(ambientColorUniform, color); } - /** @brief %Object diffuse color */ + /** @brief Diffuse color */ inline void setDiffuseColorUniform(const Vector3& color) { setUniform(diffuseColorUniform, color); } - /** @brief %Object specular color */ + /** + * @brief Specular color + * + * If not set, default value is `(1.0f, 1.0f, 1.0f)`. + */ inline void setSpecularColorUniform(const Vector3& color) { setUniform(specularColorUniform, color); } - /** @brief %Object shininess */ + /** + * @brief Shininess + * + * The larger value, the harder surface (smaller specular highlight). + * If not set, default value is `80.0f`. + */ inline void setShininessUniform(GLfloat shininess) { setUniform(shininessUniform, shininess); } @@ -72,19 +85,13 @@ class PhongShader: public AbstractShaderProgram { setUniform(lightUniform, light); } - /** @brief %Light ambient color */ - inline void setLightAmbientColorUniform(const Vector3& color) { - setUniform(lightAmbientColorUniform, color); - } - - /** @brief %Light diffuse color */ - inline void setLightDiffuseColorUniform(const Vector3& color) { - setUniform(lightDiffuseColorUniform, color); - } - - /** @brief %Light specular color */ - inline void setLightSpecularColorUniform(const Vector3& color) { - setUniform(lightSpecularColorUniform, color); + /** + * @brief %Light color + * + * If not set, default value is `(1.0f, 1.0f, 1.0f)`. + */ + inline void setLightColorUniform(const Vector3& color) { + setUniform(lightColorUniform, color); } private: @@ -95,9 +102,7 @@ class PhongShader: public AbstractShaderProgram { transformationMatrixUniform, projectionMatrixUniform, lightUniform, - lightAmbientColorUniform, - lightDiffuseColorUniform, - lightSpecularColorUniform; + lightColorUniform; }; }}