目标:(十二)中的问题14
morphing翻译为渐变(或混合)比较合适。
先看两张图,左图是使用了Image morphing,右图没有使用。morph的作用是使视域边界处的瓦片颜色和高程均匀变化。Image morphing控制颜色,Terrain morphing控制高程。这个功能是osgEarth的rex区别与mp的主要点之一。
1、实现原理
1.1获取两级纹理数据,在TileNode的merge中
1.2在着色器中对两级纹理进行混合渐变,在RexEngine.Morphing.vert.glsl(负责计算混合系数)和RexEngine.frag.glsl(负责颜色混合)文件中
2、如何控制
2.1程序控制
思路:阻止获取父纹理数据
答案:无法程序控制,因为无法操控isActive中的_unit
osgEarthDrivers/engine_rex/TileNode.cpp
void
TileNode::refreshInheritedData(TileNode* parent, const RenderBindings& bindings)
{
if (s == SamplerBinding::COLOR_PARENT && bindings[SamplerBinding::COLOR_PARENT].isActive())
{
}
}
默认Image morphing、Terrain morphing均为true。
osgEarthDrivers/engine_rex/RexTerrainEngineOptions
RexTerrainEngineOptions( const ConfigOptions& options =ConfigOptions() ) : TerrainOptions( options ),
_skirtRatio ( 0.0f ),
_color ( Color::White ),
_expirationThreshold ( 300 ),
_progressive ( false ),
_highResolutionFirst ( true ),
_normalMaps ( true ),
_normalizeEdges ( false ),
_morphTerrain ( true ),
_morphImagery ( true ),
_mergesPerFrame ( 20 ),
_expirationRange ( 0 )
{
setDriver( "rex" );
fromConfig( _conf );
// override.
enableMercatorFastPath().init( false );
}
2.2earth文件控制
<terrain driver="rex">
<vertical_scale>1.0</vertical_scale>
<morph_imagery>false</morph_imagery>
</terrain>
待继续分析列表:
9、earth