osgEarth的Rex引擎原理分析(四十五)TileNode绘制过程详解

目标:(三十七)中的104

1、生成图形信息,具体参看 osgEarth的Rex引擎原理分析(十七)瓦片请求的生成到处理过程详解

2、生成RenderLeaf,在cull中做,生成可绘制的DrawTileCommand

osgEarthDrivers/engine_rex/TileNode.cpp
bool
TileNode::cull(TerrainCuller* culler)
{    
    _surface->accept( *culler );
}
osgEarthDrivers/engine_rex/TerrainCuller.cpp
void
TerrainCuller::apply(osg::Node& node)
{
    DrawTileCommand* cmd = addDrawCommand(pass.sourceUID(), &renderModel, &pass, _currentTileNode);
}

DrawTileCommand*
TerrainCuller::addDrawCommand(UID uid, const TileRenderModel* model, const RenderingPass* pass, TileNode* tileNode)
{
    osg::ref_ptr<LayerDrawable> drawable = _terrain.layer(uid);
    drawable->_tiles.push_back(DrawTileCommand());
    DrawTileCommand* tile = &drawable->_tiles.back();

    // install everything we need in the Draw Command:
    tile->_colorSamplers = pass ? &(pass->samplers()) : 0L;
    tile->_sharedSamplers = &model->_sharedSamplers;
    tile->_modelViewMatrix = this->getModelViewMatrix();
    tile->_keyValue = tileNode->getTileKeyValue();
    tile->_geom = surface->getDrawable()->_geom.get();
    tile->_morphConstants = tileNode->getMorphConstants();
    tile->_key = &tileNode->getKey();
    //tile->_order = (int)orderInTile;
    tile->_order = drawable->_order; // layer order in map tile.

    osg::Vec3 c = surface->getBound().center() * surface->getInverseMatrix();
    tile->_range = getDistanceToViewPoint(c, true);
}

3、绘制,在绘制阶段对DrawTileCommand进行draw

osgEarthDrivers/engine_rex/DrawTileCommand.cpp
void
DrawTileCommand::draw(osg::RenderInfo& ri, DrawState& dsMaster, osg::Referenced* layerData) const
{
    _geom->render(ptype, ri);
}
osgEarthDrivers/engine_rex/GeometryPool.cpp
void SharedGeometry::render(GLenum primitiveType, osg::RenderInfo& renderInfo) const
{
    glDrawElements(primitiveType, _maskElement
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值