目标:(一一八)中的问题206
原因可能有这么几条:
1、实际使用的要求,rex21级的分辨率可达0.15m(osgEarth的Rex引擎原理分析(一零九)19级瓦片分辨率估算),基本上能满足一般的要求。
2、有效数字精度的要求,对于瓦片编号而言,23级的最大瓦片编号为2^22,如果用float存放的话,这不超float能够存放的极限2^23-1(C++学习(一三九)float、double的有效数字),如果是24级瓦片编号2^23(8388608)则超出了float的极限,不能正确存下。
rex瓦片级数为20级,即0...19,osgEarth默认的级数为24级,即0...23
osgEarth/TerrainOptions.cpp
TerrainOptions::TerrainOptions( const ConfigOptions& options ) :
_maxLOD( 23 )
{
fromConfig( _conf );
}
osgEarthDrivers/engine_rex/RexTerrainEngineNode.cpp
#define DEFAULT_MAX_LOD 19u
void
RexTerrainEngineNode::setMap(const Map* map, const TerrainOptions& options)
{
unsigned maxLOD = _terrainOptions.maxLOD().getOrUse(DEFAULT_MAX_LOD);
_selectionInfo.initialize(
0u, // always zero, not the terrain options firstLOD
std::min( _terrainOptions.maxLOD().get(), maxLOD ),
_mapFrame.getMapInfo().getProfile(),
_terrainOptions.minTileRangeFactor().get() );
}
osgEarthDrivers/engine_rex/TileNode.cpp
//判断是否要继续分割瓦片
bool
TileNode::shouldSubDivide(TerrainCuller* culler, const SelectionInfo& selectionInfo)
{
if (currLOD < selectionInfo.getNumLODs() && currLOD != selectionInfo.getNumLODs()-1)
{
return _surface->anyChildBoxIntersectsSphere(
culler->getViewPointLocal(),
range,
culler->getLODScale());
}
}
待继续分析列表:
9、earth文件中都有哪些options((九)中问题)
10、如何根据earth文件options创建不同的地理信息引擎节点((九)中问题)
11、rex地理信息引擎的四梁八柱((九)中问题)
12、osgEarth::TerrainEngineNode中setMap方法作用((十二)中问题)
13、RexTerrainEngineNode中_mapFrame的作用((十二)中问题)
14、地形变形(Terrain morphing)((十二)中问题)
15、地球瓦片过期门限的含义((十二)中问题)
16、高分辨率优先的含义((十二)中问题)
17、OSGEARTH_DEBUG_NORMALS环境变量的作用((十二)中问题)
18、活跃瓦片寄存器的作用((十二)中问题)
19、资源释放器子节点的作用((十二)中问题)
20、共享几何图形池子节点的作用((十二)中问题)
21、分页瓦片加载器子节点的作用((十二)中问题)
22、分页瓦片卸载器子节点的作用((十二)中问题)
23、栅格化器子节点的作用((十二)中问题)
24、地形子节点的作用((十二)中问题)
25、绑定渲染器的作用((十二)中问题)
26、地图回调函数的作用((十二)中问题)
27、如何将地图图层添加到rex引擎中((十二)中问题)
28、选择信息的作用((十二)中问题)
29、瓦片包围盒修改回调函数的作用((十二)中问题)
30、刷新rex引擎((十二)中问题)
31、刷新边界作用((十二)中问题)
32、osgEarth::Metrics类的意义