Use polygon offsett to avoid flickering with mesh lines

This commit is contained in:
Magne Sjaastad 2014-04-08 08:37:22 +02:00
parent 02c4f8cff7
commit b158c0da9d
3 changed files with 23 additions and 3 deletions

View File

@ -43,6 +43,8 @@
#include "RivSourceInfo.h" #include "RivSourceInfo.h"
#include "cvfRenderState_FF.h" #include "cvfRenderState_FF.h"
#include "cafProgressInfo.h" #include "cafProgressInfo.h"
#include "cvfRenderStatePolygonOffset.h"
#include "cvfRenderStateBlending.h"
@ -329,6 +331,7 @@ void RivGridPartMgr::updateCellResultColor(size_t timeStepIndex, RimResultSlot*
cvf::ref<cvf::Effect> colorArrayEffect = new cvf::Effect; cvf::ref<cvf::Effect> colorArrayEffect = new cvf::Effect;
cvf::ref<cvf::RenderStateMaterial_FF> mat = new cvf::RenderStateMaterial_FF(cvf::Color3::BLUE); cvf::ref<cvf::RenderStateMaterial_FF> mat = new cvf::RenderStateMaterial_FF(cvf::Color3::BLUE);
mat->setAlpha(m_opacityLevel);
mat->enableColorMaterial(true); mat->enableColorMaterial(true);
colorArrayEffect->setRenderState(mat.p()); colorArrayEffect->setRenderState(mat.p());
@ -336,6 +339,20 @@ void RivGridPartMgr::updateCellResultColor(size_t timeStepIndex, RimResultSlot*
lighting->enableTwoSided(true); lighting->enableTwoSided(true);
colorArrayEffect->setRenderState(lighting.p()); colorArrayEffect->setRenderState(lighting.p());
// Simple transparency
if (m_opacityLevel < 1.0f)
{
cvf::ref<cvf::RenderStateBlending> blender = new cvf::RenderStateBlending;
blender->configureTransparencyBlending();
colorArrayEffect->setRenderState(blender.p());
}
caf::PolygonOffset polygonOffset = caf::PO_1;
cvf::ref<cvf::RenderStatePolygonOffset> polyOffset = caf::EffectGenerator::createAndConfigurePolygonOffsetRenderState(polygonOffset);
colorArrayEffect->setRenderState(polyOffset.p());
m_surfaceFaces->setPriority(100);
m_surfaceFaces->setEffect(colorArrayEffect.p()); m_surfaceFaces->setEffect(colorArrayEffect.p());
} }
else else

View File

@ -107,7 +107,7 @@ cvf::String CommonShaderSources::light_AmbientDiffuse()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// Static helper to configure polygon offset render state from enum /// Static helper to configure polygon offset render state from enum
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
static cvf::ref<cvf::RenderStatePolygonOffset> CreateAngConfigurePolygonOffsetRenderState(PolygonOffset polygonOffset) cvf::ref<cvf::RenderStatePolygonOffset> EffectGenerator::createAndConfigurePolygonOffsetRenderState(PolygonOffset polygonOffset)
{ {
cvf::ref<cvf::RenderStatePolygonOffset> rs = new cvf::RenderStatePolygonOffset; cvf::ref<cvf::RenderStatePolygonOffset> rs = new cvf::RenderStatePolygonOffset;
if (polygonOffset == PO_NONE) if (polygonOffset == PO_NONE)
@ -301,7 +301,7 @@ void SurfaceEffectGenerator::updateCommonEffect(cvf::Effect* effect) const
{ {
if (m_polygonOffset != PO_NONE) if (m_polygonOffset != PO_NONE)
{ {
cvf::ref<cvf::RenderStatePolygonOffset> polyOffset = CreateAngConfigurePolygonOffsetRenderState(m_polygonOffset); cvf::ref<cvf::RenderStatePolygonOffset> polyOffset = EffectGenerator::createAndConfigurePolygonOffsetRenderState(m_polygonOffset);
effect->setRenderState(polyOffset.p()); effect->setRenderState(polyOffset.p());
} }
@ -479,7 +479,7 @@ void ScalarMapperEffectGenerator::updateCommonEffect(cvf::Effect* effect) const
if (m_polygonOffset != PO_NONE) if (m_polygonOffset != PO_NONE)
{ {
cvf::ref<cvf::RenderStatePolygonOffset> polyOffset = CreateAngConfigurePolygonOffsetRenderState(m_polygonOffset); cvf::ref<cvf::RenderStatePolygonOffset> polyOffset = EffectGenerator::createAndConfigurePolygonOffsetRenderState(m_polygonOffset);
effect->setRenderState(polyOffset.p()); effect->setRenderState(polyOffset.p());
} }

View File

@ -44,6 +44,7 @@
#include "cvfTextureImage.h" #include "cvfTextureImage.h"
#include "cvfCollection.h" #include "cvfCollection.h"
#include "cvfString.h" #include "cvfString.h"
#include "cvfRenderStatePolygonOffset.h"
namespace caf { namespace caf {
@ -96,6 +97,8 @@ public:
static void clearEffectCache(); static void clearEffectCache();
static void releaseUnreferencedEffects(); static void releaseUnreferencedEffects();
static cvf::ref<cvf::RenderStatePolygonOffset> createAndConfigurePolygonOffsetRenderState(caf::PolygonOffset polygonOffset);
protected: protected:
// Interface that must be implemented in base classes // Interface that must be implemented in base classes