From c32aac62835d507ee19b5d062d970c3eb1f819e0 Mon Sep 17 00:00:00 2001 From: Maire Nicolas Date: Tue, 2 Aug 2011 17:09:51 +0200 Subject: [PATCH] =?UTF-8?q?Rajout=20d'une=20m=C3=A9thode=20pour=20la=20nor?= =?UTF-8?q?malisation=20de=20l'attenuation=20de=20couleurs.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Apps/Examples/clipping.cpp | 9 ++++++--- Apps/Examples/clipping.ui | 3 +++ include/Utils/clippingShader.h | 9 ++++++++- src/Utils/clippingShader.cpp | 15 ++++++++++++++- 4 files changed, 31 insertions(+), 5 deletions(-) diff --git a/Apps/Examples/clipping.cpp b/Apps/Examples/clipping.cpp index d3b0b8811..4f30657d2 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 49e7368b2..c0e4c6cb1 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 91c87837c..11fa9f328 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 5f1929331..97547face 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; -- GitLab