diff --git a/Apps/Examples/clipping.cpp b/Apps/Examples/clipping.cpp index d3b0b88110973aef508f937642767c1bd61dee44..4f30657d2a9aea89c3fd87edf3adbdee1df6ace5 100644 --- a/Apps/Examples/clipping.cpp +++ b/Apps/Examples/clipping.cpp @@ -84,6 +84,7 @@ void Clipping::slot_pushButton_addPlane() // Set params m_shader->setClipPlaneParamsOrigin(newPlaneId, m_bb.center()); pickable->translate(m_bb.center()); + pickable->scale(Geom::Vec3f(m_bb.maxSize()*0.5)); // Update shader sources edits dock.vertexEdit->setPlainText(QString(m_shader->getVertexShaderSrc())); @@ -120,9 +121,9 @@ void Clipping::slot_pushButton_addSphere() // Set params m_shader->setClipSphereParamsCenter(newSphereId, m_bb.center()); - m_shader->setClipSphereParamsRadius(newSphereId, (m_bb.maxSize())*1.0); + m_shader->setClipSphereParamsRadius(newSphereId, (m_bb.maxSize())*0.5); pickable->translate(m_bb.center()); - pickable->scale(Geom::Vec3f(m_bb.maxSize()*1.0)); + pickable->scale(Geom::Vec3f(m_bb.maxSize()*0.5)); // Update shader sources edits dock.vertexEdit->setPlainText(QString(m_shader->getVertexShaderSrc())); @@ -152,7 +153,7 @@ void Clipping::slot_pushButton_changeSpheresColor() void Clipping::slot_doubleSpinBox_ColorAttenuationFactor(double c) { - m_shader->setClipColorAttenuationFactor((float)c); + m_shader->setClipColorAttenuationFactorAbsolute((float)c); updateGL(); } @@ -374,6 +375,8 @@ void Clipping::importMesh(std::string& filename) setParamObject(gWidthObj, gPosObj.data()) ; updateGLMatrices(); + + m_shader->setClipColorAttenuationFactorRelative(m_bb.maxSize(), 5.0); } /******************************************************************************* diff --git a/Apps/Examples/clipping.ui b/Apps/Examples/clipping.ui index 49e7368b2e0825ba1a5c52834e83c7c3c9f6d95d..c0e4c6cb118925734f9d80e2509a41e259ac3129 100644 --- a/Apps/Examples/clipping.ui +++ b/Apps/Examples/clipping.ui @@ -302,6 +302,9 @@ + + 4 + 1.000000000000000 diff --git a/include/Utils/clippingShader.h b/include/Utils/clippingShader.h index 91c87837ca3c3465a98613c6ec6ed1999e0f5a3a..11fa9f3280c8557322f0018d3d191f7ed3e16cff 100644 --- a/include/Utils/clippingShader.h +++ b/include/Utils/clippingShader.h @@ -272,7 +272,14 @@ public: * sets the color attenuation factor * @param colorAttenuationFactor color attenuation factor */ - void setClipColorAttenuationFactor(float colorAttenuationFactor); + void setClipColorAttenuationFactorAbsolute(float colorAttenuationFactor); + + /** + * sets the color attenuation factor according to an object size + * @param size size with which the color attenuation will be normalized + * @param factor attenuation factor + */ + void setClipColorAttenuationFactorRelative(float size, float factor); /// gets the color attenuation factor float getClipColorAttenuationFactor(); diff --git a/src/Utils/clippingShader.cpp b/src/Utils/clippingShader.cpp index 5f1929331c7e59b32f3617438bf9bd8362bc7391..97547facebf1c9dce55e2a4456fdd3023d5d76ed 100644 --- a/src/Utils/clippingShader.cpp +++ b/src/Utils/clippingShader.cpp @@ -814,7 +814,7 @@ bool ClippingShader::insertClippingCode() return true; } -void ClippingShader::setClipColorAttenuationFactor(float colorAttenuationFactor) +void ClippingShader::setClipColorAttenuationFactorAbsolute(float colorAttenuationFactor) { // Check if it is worth updating values ! if (colorAttenuationFactor == m_clipColorAttenuationFactor) @@ -827,6 +827,19 @@ void ClippingShader::setClipColorAttenuationFactor(float colorAttenuationFactor) sendClipColorAttenuationFactorUniform(); } +void ClippingShader::setClipColorAttenuationFactorRelative(float size, float factor) +{ + // Compute the relative color attenuation factor + float colAttFact; + if (size != 0.0) + colAttFact = factor / size; + else + colAttFact = factor; + + // Set the resulting factor in absolute + setClipColorAttenuationFactorAbsolute(colAttFact); +} + float ClippingShader::getClipColorAttenuationFactor() { return m_clipColorAttenuationFactor;