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 "cvfRenderState_FF.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::RenderStateMaterial_FF> mat = new cvf::RenderStateMaterial_FF(cvf::Color3::BLUE);
mat->setAlpha(m_opacityLevel);
mat->enableColorMaterial(true);
colorArrayEffect->setRenderState(mat.p());
@ -336,6 +339,20 @@ void RivGridPartMgr::updateCellResultColor(size_t timeStepIndex, RimResultSlot*
lighting->enableTwoSided(true);
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());
}
else

View File

@ -107,7 +107,7 @@ cvf::String CommonShaderSources::light_AmbientDiffuse()
//--------------------------------------------------------------------------------------------------
/// 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;
if (polygonOffset == PO_NONE)
@ -301,7 +301,7 @@ void SurfaceEffectGenerator::updateCommonEffect(cvf::Effect* effect) const
{
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());
}
@ -479,7 +479,7 @@ void ScalarMapperEffectGenerator::updateCommonEffect(cvf::Effect* effect) const
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());
}

View File

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