目标:(十八)中的问题56
用于给着色器传递瓦片的编号x/y/z/range。
1、创建瓦片时,设置此变量
osgEarthDrivers/engine_rex/TileNode.cpp
void
TileNode::create(const TileKey& key, TileNode* parent, EngineContext* context)
{
unsigned tw, th;
_key.getProfile()->getNumTiles(_key.getLOD(), tw, th);
const double m = 65536; //pow(2.0, 16.0);
double x = (double)_key.getTileX();
double y = (double)(th - _key.getTileY()-1);
_tileKeyValue.set(
(float)fmod(x, m),
(float)fmod(y, m),
(float)_key.getLOD(),
-1.0f);
}
2、生成瓦片绘制命令时,传递此变量
osgEarthDrivers/TerrainCuller.cpp
DrawTileCommand*
TerrainCuller::addDrawCommand(UID uid, const TileRenderModel* model, const RenderingPass* pass, TileNode* tileNode)
{
DrawTileCommand* tile = &drawable->_tiles.back();
tile->_keyValue = tileNode->getTileKeyValue();
}
3、绘制时,使用此变量
osgEarthDrivers/engine_rex/DrawState.cpp
void
PerContextDrawState::refresh(osg::RenderInfo& ri, const RenderBindings* bindings)
{
_tileKeyUL = pcp->getUniformLocation(osg::Uniform::getNameID("oe_tile_key"));
}
osgEarthDrivers/DrawTileCommand.cpp
void
DrawTileCommand::draw(osg::RenderInfo& ri, DrawState& dsMaster, osg::Referenced* layerData) const
{
if (ds._tileKeyUL >= 0 )
{
ds._ext->glUniform4fv(ds._tileKeyUL, 1, _keyValue.ptr());
}
}
待继续分析列表:
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、地形子节点的作用((十二)中问题)

本文深入剖析osgEarth的Rex引擎中TileNode的_tileKeyValue变量,阐述其在创建瓦片、绘制命令及着色器中的作用。详细解释了如何在不同阶段使用此变量,并探讨其在瓦片管理和渲染过程中的关键功能。
TileNode的_tileKeyValue作用&spm=1001.2101.3001.5002&articleId=107597437&d=1&t=3&u=682c1bc728a24fac97afe6c2a575fc6b)
3637

被折叠的 条评论
为什么被折叠?



