From d73f2eca960eb4f1dc3e31902592f73670f55931 Mon Sep 17 00:00:00 2001 From: Paolo Cignoni cignoni Date: Tue, 3 Aug 2010 12:37:47 +0000 Subject: [PATCH] Better exposure of shadow parameters --- src/distrib/shaders/decorate_shadow/vsm/objectVSM.frag | 8 +++++--- src/distrib/shaders/decorate_shadow/vsmb/objectVSM.frag | 7 +++++-- src/fgt/decorate_shadow/decorate_shadow.cpp | 8 ++++---- src/fgt/decorate_shadow/variance_shadow_mapping.cpp | 3 +++ src/fgt/decorate_shadow/variance_shadow_mapping_blur.cpp | 3 +++ 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/distrib/shaders/decorate_shadow/vsm/objectVSM.frag b/src/distrib/shaders/decorate_shadow/vsm/objectVSM.frag index bd8092a6c..452481f3b 100644 --- a/src/distrib/shaders/decorate_shadow/vsm/objectVSM.frag +++ b/src/distrib/shaders/decorate_shadow/vsm/objectVSM.frag @@ -2,7 +2,7 @@ uniform mat4 mvpl; uniform sampler2D shadowMap; uniform float texSize; varying vec4 shadowCoord; - +uniform float shadowIntensity; // 1.0 black, 0, transparent vec4 shadowCoordPostW; float chebyshevUpperBound( float distance) { @@ -29,5 +29,7 @@ void main() { if (shadow > 0.4) discard; - gl_FragColor = vec4(vec3(0.0), 0.5 - shadow); -} \ No newline at end of file + // gl_FragColor = vec4(vec3(0.0), 0.5 - shadow); + gl_FragColor = vec4(vec3(0.0), (shadowIntensity-shadow)); + +} diff --git a/src/distrib/shaders/decorate_shadow/vsmb/objectVSM.frag b/src/distrib/shaders/decorate_shadow/vsmb/objectVSM.frag index de1513dae..264f142a3 100644 --- a/src/distrib/shaders/decorate_shadow/vsmb/objectVSM.frag +++ b/src/distrib/shaders/decorate_shadow/vsmb/objectVSM.frag @@ -2,6 +2,7 @@ uniform mat4 mvpl; uniform sampler2D shadowMap; uniform float texSize; varying vec4 shadowCoord; +uniform float shadowIntensity; // 1.0 black, 0, transparent vec4 shadowCoordPostW; @@ -36,5 +37,7 @@ void main() { // gl_FragColor = vec4(0.0,0.0,0.0, 0.0); // } else - gl_FragColor = vec4(vec3(0.0), 0.5 - shadow); -} \ No newline at end of file +// gl_FragColor = vec4(vec3(0.0), 0.5 - shadow); + gl_FragColor = vec4(vec3(0.0), (shadowIntensity-shadow)); + +} diff --git a/src/fgt/decorate_shadow/decorate_shadow.cpp b/src/fgt/decorate_shadow/decorate_shadow.cpp index ff85236c3..e91ee0cb3 100644 --- a/src/fgt/decorate_shadow/decorate_shadow.cpp +++ b/src/fgt/decorate_shadow/decorate_shadow.cpp @@ -57,7 +57,7 @@ void DecorateShadowPlugin::initGlobalParameterSet(QAction *action, RichParameter "Shader used to perform shadow mapping decoration", "Shadow mapping method") ); - parset.addParam(new RichFloat(this->DecorateShadowIntensity(),0.3,"Shadow Intensity","Shadow Intensity")); + parset.addParam(new RichDynamicFloat(this->DecorateShadowIntensity(),0.3,0,1.0f,"Shadow Intensity","Shadow Intensity")); break; } @@ -86,15 +86,15 @@ bool DecorateShadowPlugin::startDecorate(QAction* action, MeshDocument& m, RichP } switch (parset->getEnum(DecorateShadowMethod())){ case SH_MAP: - this->_decoratorSH = new ShadowMapping(parset->getFloat(this->DecorateShadowIntensity())); + this->_decoratorSH = new ShadowMapping(parset->getDynamicFloat(this->DecorateShadowIntensity())); break; case SH_MAP_VSM: - this->_decoratorSH = new VarianceShadowMapping(parset->getFloat(this->DecorateShadowIntensity())); + this->_decoratorSH = new VarianceShadowMapping(parset->getDynamicFloat(this->DecorateShadowIntensity())); break; case SH_MAP_VSM_BLUR: - this->_decoratorSH = new VarianceShadowMappingBlur(parset->getFloat(this->DecorateShadowIntensity())); + this->_decoratorSH = new VarianceShadowMappingBlur(parset->getDynamicFloat(this->DecorateShadowIntensity())); break; default: assert(0); diff --git a/src/fgt/decorate_shadow/variance_shadow_mapping.cpp b/src/fgt/decorate_shadow/variance_shadow_mapping.cpp index ed6e6765c..1d3c01445 100644 --- a/src/fgt/decorate_shadow/variance_shadow_mapping.cpp +++ b/src/fgt/decorate_shadow/variance_shadow_mapping.cpp @@ -117,6 +117,9 @@ void VarianceShadowMapping::runShader(MeshDocument& md, GLArea* gla){ glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, this->_shadowMap); + GLuint shadowIntensityLoc = glGetUniformLocation(this->_shadowMappingProgram, "shadowIntensity"); + glUniform1f(shadowIntensityLoc, this->_intensity); + GLuint loc = glGetUniformLocation(this->_shadowMappingProgram, "shadowMap"); glUniform1i(loc, 0); glEnable(GL_BLEND); diff --git a/src/fgt/decorate_shadow/variance_shadow_mapping_blur.cpp b/src/fgt/decorate_shadow/variance_shadow_mapping_blur.cpp index 74df38072..7554a0ecb 100644 --- a/src/fgt/decorate_shadow/variance_shadow_mapping_blur.cpp +++ b/src/fgt/decorate_shadow/variance_shadow_mapping_blur.cpp @@ -158,6 +158,9 @@ void VarianceShadowMappingBlur::runShader(MeshDocument& md, GLArea* gla){ GLuint matrixLoc = glGetUniformLocation(this->_shadowMappingProgram, "mvpl"); glUniformMatrix4fv(matrixLoc, 1, 0, mvpl.V()); + GLuint shadowIntensityLoc = glGetUniformLocation(this->_shadowMappingProgram, "shadowIntensity"); + glUniform1f(shadowIntensityLoc, this->_intensity); + glEnable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, this->_blurV);