![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
rex
文章平均质量分 72
hankern
Code World,Cool Life
展开
-
osgEarth的Rex引擎原理分析(八十二)rex引擎创建图层的过程
目标:(八十一)中的问题159以高程层为例进行说明,在earth文件中高程是这样配置的:<elevation name="googleterrain" driver="xyz"> <url>http://mt0.google.cn/vt/lyrs=t&scale=2&hl=zh-CN&gl=cn&am...原创 2020-03-20 07:30:06 · 838 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(八十一)获取的高程图像为什么除了设置纹理还要设置栅格
目标:(八十)中的问题158在加载高程图像后,除了设置渲染纹理外还设置了高程栅格,如下:osgEarthDrivers/engine_rex/TileNode.cppvoidTileNode::merge(const TerrainTileModel* model, const RenderBindings& bindings){ // Elevation: ...原创 2020-03-14 06:51:12 · 596 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(七十八)TileNodeRegistry和LayerDrawable中_tiles的关系
目标:(七十二)中的问题150TileNodeRegistry中的_tiles本质是随机快速访问的结构体,主要用于管理rex引擎中活跃的瓦片,对于处于休眠的瓦片会进行标记,达到一定数量后,通过rex的卸载器进行卸载。osgEarthDrivers/engine_rex/TileNodeRegistrytypedef RandomAccessTileMap TileNodeMap;Ti...原创 2020-02-15 14:15:35 · 431 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(七十七)rex引擎中绘制瓦片的调度过程原理
目标:(七十二)中的问题151主要是分析瓦片什么时候进入场景树,什么时候从场景树中移出1、初始化osgEarthDrivers/engine_rex/RexTerrainEngineNode.cppvoidRexTerrainEngineNode::dirtyTerrain(){ // Build the first level of the terrain. ...原创 2020-02-15 13:40:20 · 778 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(七十五)rex的瓦片高程影像和高程文件中的影像尺寸如何对应
目标:(七十二)中的问题145高程层默认的尺寸大小为256*256osgEarth/TerrainLayer.cppvoidTerrainLayerOptions::setDefaults(){ _exactCropping.init( false ); _reprojectedTileSize.init( 256 ); _minLevel.init(...原创 2020-02-11 11:21:35 · 753 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(七十四)osgEarth::TerrainLayerOptions高程层选项中参数的含义
目标:(七十二)中的问题143主要用来说明高程、影像层的参数。osgEarth::TerrainLayerOptions高程层选项中参数的含义_tileSize(256):高程瓦片的默认大小_maxDataLevel(99):_minLevel(0):最小的LOD级别_maxLevel(23):最大的LOD级别待继续分析列表:9、earth文...原创 2020-02-11 10:51:37 · 651 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(七十三)从高程文件读取的高程信息如何填充rex的高程瓦片
目标:(七十二)中的问题147高程文件的划分规则和rex瓦片是不一样的,高程文件的0级就是文件本身,不管文件实际范围多大,然后采用二分法逐级增加。rex瓦片的0级对应整个地球表面。两个范围一般不是一一对应的,秘密尽在1、首先根据rex瓦片的范围从高程文件中找出相交的高程文件瓦片(该瓦片不同于rex瓦片,是和高程文件对应的瓦片,瓦片尺寸和rex瓦片最为接近)2、从相交的高程文件瓦片构...原创 2020-02-11 10:20:40 · 961 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(七十二)如何从高程影像变成高程网格
目标:(七十一)中的问题143有两种方法:1、对高程影像进行采样,用采样值来设置高程,通过CPU实现2、通过着色器来实现,在GPU上进行操作待继续分析列表:9、earth文件中都有哪些options((九)中问题)10、如何根据earth文件options创建不同的地理信息引擎节点((九)中问题)...原创 2020-02-08 07:54:14 · 724 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(五十八)osgEarth::ShaderFactory osgEarth::ShaderLoader关系
目标:(五十四)中的问题130osgEarth::ShaderFactory osgEarth::ShaderLoader关系ShaderFactory主要用来产生各个着色器阶段的main函数,一般用户不需要直接使用它,除非有特殊的定制需要。用户只需要创建和使用VirtualProgram就可以了。ShaderFactory对象存放在osgEarth的注册表中。ShaderLoader...原创 2020-02-05 17:34:33 · 543 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(五十七)osgEarth中多个着色器的源代码的编译链接过程
目标:(五十四)中的问题129osgEarth中多个着色器的源代码的编译链接过程1、先一个一个编译void Shader::PerContextShader::compileShader(osg::State& state){ _extensions->glShaderSource( _glShaderHandle, 1, &sourceText,...原创 2020-02-05 17:32:22 · 483 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(七十一)高程瓦片的绘制过程
目标:(五十五)中的问题1421、在RexTerrainEngineNode遍历时生成renderleaf,其中的drawable为LayerDrawable(其对应earth文件中每一个高程、影像层)。在TerrainCuller进行遍历时,会对LayerDrawable添加实际瓦片对应的高程影像纹理,这样绘制出来就能看到高程影像效果了。osgEarthDrivers/engine_r...原创 2020-02-06 09:53:16 · 735 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(七十)TileRenderModel中的RenderingPass和RenderBindings
目标:(五十五)中的问题141TileRenderModel中的RenderingPass和RenderBindingsRenderingPass渲染通道主要存放Samplers采样器列表,采样器存放的是用来渲染影像、高程的纹理和矩阵RenderBindings渲染绑定用来存放SamplerBinding采样器绑定,每个采样器绑定记录采样器的名字(对应glsl文件中的uniform变量...原创 2020-02-06 09:41:12 · 329 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(六十九)状态树和渲染树的关系
目标:(五十五)中的问题140状态树和渲染树的建立是在CullVisitor中完成的。状态树你可以看成是一个二叉树,非叶子节点StateGraph和叶子节点ReaderLeaf组成,然后一个ReaderLeaf你可以看成有一个Drawable对象,但是场景渲染的是渲染树,状态树只是为了好转换成渲染树而存在的。 渲染树你也可以看成一棵二叉树,RenderStage(渲染台)是根节点,Rende...原创 2020-02-06 09:38:09 · 382 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(六十八)stateset中的adduniform、setTextureAttribute等最后是如何反应到opengl上的
目标:(五十五)中的问题139秘密在于(真正是在渲染时做的)osgUtil/RenderLeaf.cppvoid RenderLeaf::render(osg::RenderInfo& renderInfo,RenderLeaf* previous){ state.apply(rg->getStateSet()); state.apply(_parent...原创 2020-02-06 09:35:44 · 451 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(六十七)TileNode中的_surface(SurfaceNode)作用是什么
目标:(五十五)中的问题138每个瓦片TileNode都有一个_surface(SurfaceNode),这里面会存放瓦片的几何信息_drawable(TileDrawable),这个几何信息会传给DrawTileCommand,用于绘制该瓦片。osgEarthDrivers/engine_rex/TileNodeclass TileNode : public osg::Group,...原创 2020-02-06 09:29:34 · 394 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(六十六)DrawTileCommand中的采样器
目标:(五十五)中的问题137DrawTileCommand中的颜色采样器_colorSamplers和共享采样器_sharedSamplers的区别,能不能用一个。RenderBindings将采样器分为6个,前2个是颜色采样器,后4个是共享采样器。osgEarthDrivers/engine_rex/RenderBindingsenum Usage{ COLOR ...原创 2020-02-05 20:48:37 · 254 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(六十五)几个uniformmap的关系
目标:(五十五)中的问题136program中uniformmap(_uniformInfoMap)和stateset中的uniformlist(_uniformList)的关系以及state中的uniformmap(_uniformMap)1、program中uniformmap(_uniformInfoMap)在执行link的时候构造的,主要从shader文件中来,渲染遍历阶段...原创 2020-02-05 20:27:50 · 580 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(六十四)EngineContext的作用
目标:(五十五)中的问题135EngineContext的作用,主要是用来记录RexTerrainEngineNode方方面面的信息的。在rex引擎构建时,创建该上下文,并将引擎的四梁八柱信息都存放在该上下文环境中。osgEarthDrivers/engine_rex/RexTerrainEngineNodeclass RexTerrainEngineNode : public T...原创 2020-02-05 20:20:47 · 443 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(六十三)TerrainTileModel与TileRenderModel的关系
目标:(五十五)中的问题134TileRenderModel主要记录渲染各个瓦片的通道,一个通道对应一个可视化层(颜色、高层、法线等),每个瓦片TileNode都包含一个TileRenderModel。TileRenderModel在每个瓦片创建(有父TileNode情况下)/merge时进行构造每个LoadTileData请求中都包含一个TerrainTileModel。每个Ter...原创 2020-02-05 20:04:11 · 425 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(六十二)从earth文件加载高层图层的过程
目标:(五十五)中的问题133从earth文件加载高层图层的过程待继续分析列表:9、earth文件中都有哪些options((九)中问题)10、如何根据earth文件options创建不同的地理信息引擎节点((九)中问题)11、rex地理信息引擎的四梁八柱((九)中问题)12、osgEarth::TerrainEngineNode中setMap方法作用((十二)中...原创 2020-02-05 20:01:07 · 459 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(六十一)如何提取出指定范围的高程网格
目标:(五十五)中的问题132如果从dem/img等文件中提取出指定范围的高程网格,需要用到gdal库进行读取。遥感影像一般包含至少一个波段,波段对应波长,比如红、绿、蓝等,也包含透明度。osgEarthDrivers/gdal/ReaderWriterGDAL.cpposg::HeightField* createHeightField( const TileKey&...原创 2020-02-05 19:57:04 · 976 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(六十)TileNode与DrawTileCommand的关系
目标:(五十五)中的问题131TileNode与DrawTileCommand的关系DrawTileCommad的几何图形和瓦片编号从TileNode来,最终绘制是用DrawTileCommand的draw函数来实现的,DrawTileCommand还包含影像和高程纹理。TileNode参与场景图的构建工作。rex引擎的的裁剪(TerrainCuller)和osg的裁剪(CullVis...原创 2020-02-05 18:06:16 · 264 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(五十九)rex引擎如何将瓦片构造成地球形状
目标:(二十五)中的问题79秘密就在于convertLocalToModel函数,它会根据不同的投影方式生成瓦片的顶点osgTerrain/Locator.cppbool Locator::convertLocalToModel(const osg::Vec3d& local, osg::Vec3d& world) const{ switch(_coord...原创 2020-02-05 17:47:10 · 430 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(五十六)记录20191024
今天是20191024,好久没有更新文章,等忙完此段再来深究!原创 2019-10-24 21:06:42 · 193 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(十六)请求合并队列_mergeQueue
目标:(十四)中的33请求合并队列_mergeQueue是在帧循环的更新遍历时构建的。这个是有分页数据库DatabasePager的更新遍历实现的,而不是依靠场景树节点的更新遍历。osgEarthDrivers/engine_rex/Loader.cppboolPagerLoader::addChild(osg::Node* node){ osg::ref_ptr<...原创 2018-11-18 19:30:34 · 587 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(五十一)osg::Program与osgEarth::VirtualProgram的关系
目标:(四十五)中的问题113osgEarth::VirtualProgram在apply时用到了osg::Program,也就是VirtualProgram最终是要通过osg::Program实现着色器功能,只不过VirtualProgram中还封装了一些其他内容(比如继承、抽象属性,着色器代码管理等),方便使用而已。待继续分析列表:9、earth文件中都有哪些optio...原创 2019-02-22 06:18:31 · 860 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(四十六)如何定制椭球体并进行椭球体间坐标转换
目标:目标:(四十五)中的108可以用于CGCS2000和WGS84的坐标转换osg::EllipsoidModel默认创建wgs84椭球体将CGCS2000和WGS84的经纬高坐标分别转换为XYZ,然后比较其差值osg/CoordinateSystemNodeclass EllipsoidModel : public Object{inline void conve...原创 2019-02-16 18:29:27 · 878 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(五十)rex引擎shader文件中的#pragma vp_entryPoint vp_location等含义
目标:(四十五)中的问题114#pragma vp_entryPointvp_location指示该shader是顶点shader还是片段shader,以及在相应着色器中的位置。比如"vertex_model"表示在顶点着色器的模型处理阶段,"vertex_view"表示在顶点着色器的视图处理阶段,"vertex_clip"表示在顶点着色器的裁剪/投影处理阶段;"tess_contr...原创 2019-02-21 22:08:31 · 965 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(四十四)如何控制父子TileNode节点的显隐
目标:(三十七)中的105rex渲染出的地球是靠一块块TileNode瓦片拼接起来的,瓦片之间存在父子关系,一般显示父TileNode就不应显示子TileNode,反之亦然。那么rex是如何做这种显隐控制呢?1、每一个TileNode瓦片在遍历时,会根据是否有子节点及子节点的准备情况来决定是否遍历其_surface(负责具体的显示内容)。osgEarthDrivers/engine_...原创 2019-02-16 07:06:14 · 564 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(四十三)osgEarth的Geographic、Geodetic、Geocentric和Project的关系
目标:(三十六)中的103Geographic采用经纬高,高度是平均海平面高(需要有垂直水准面辅助)Geodetic采用经纬高,高度是相对椭球体的法线高ECEF(也即Geocentric)采用地心直角坐标系XYZProject采用投影坐标系 osgEarth/SpatialReference class OSGEARTH_EXPORT SpatialRefere...原创 2019-01-13 16:25:33 · 1724 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(四十五)TileNode绘制过程详解
目标:(三十七)中的1041、生成图形信息,具体参看 osgEarth的Rex引擎原理分析(十七)瓦片请求的生成到处理过程详解2、生成RenderLeaf,在cull中做,生成可绘制的DrawTileCommandosgEarthDrivers/engine_rex/TileNode.cppboolTileNode::cull(TerrainCuller* culler){ ...原创 2019-02-16 19:39:35 · 526 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(四十七)Horizon Cull是什么意思
目标:目标:(四十五)中的109Horizon Cull是地平线裁剪的意思,顾名思义,低于水平线的物体都会被裁剪掉。所谓的地平线就是相机位置到地球表面的切线,下图竖直的黑线即是地平点,视点到所有地平点组成一个圆锥。下图中蓝色阴影部分表示地面线以下的点待继续分析列表:9、earth文件中都有哪些options((九)中问题)10、如何根据earth文件options...原创 2019-02-17 06:26:10 · 666 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(四十八)osgEarth::Drivers::RexTerrainEngine::DrawState的作用
目标:(四十五)中的110每帧都会创建一个DrawState创建在TerrainRenderData::setup(这里存在内存泄漏的问题,因为只有new没有delete,不存在的,_drawState是智能指针,超出范围时会自动销毁,也就是在TerrainRenderData销毁时销毁)osgEarthDrivers/engine_rex/TerrainRenderData....原创 2019-02-17 12:56:00 · 584 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(五十二)CGCS2000与WGS84坐标系的比较
目标:(四十六)中的119文章《2000中国大地坐标系及其与WGS84的比较》对此有详细的比较https://max.book118.com/html/2017/0614/114928909.shtm结论是:实现上相容的(仅在扁率上有微小差异);精度上是一致的。...原创 2019-05-25 20:33:15 · 1015 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(五十四)rex引擎默认的几个着色器功能分析
目标:(五十一)中的问题1221、顶点着色器函数(1)RexEngine.SDK.vert.glsl这个着色器文件中的函数会加载到各个阶段的着色器程序中。主要用在osgEarth::Drivers::RexTerrainEngine::RexTerrainEngineNode节点中。所有地形渲染都可以使用此着色器中的函数。从纹理坐标获取高程值,用r值作为高程值。这个着色器中的函数会...原创 2019-07-12 21:36:06 · 864 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(五十二)osgEarth::VirtualProgram默认出现在哪些位置
目标:(五十一)中的问题121默认出现在五个地方:1、osgEarth::Drivers::RexTerrainEngine::RexTerrainEngineNode节点会设置VirtualProgram,该vp是抽象的,也就是能够被继承使用,在自身节点的渲染中不会起作用osgEarthDrivers/engine_rex/RexTerrainEngineNode.cppRexT...原创 2019-07-11 22:56:41 · 749 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(五十五)Rex引擎如何给shader文件中的uniform变量赋值
目标:(五十四)中的问题128有几个地方RexEngine.SDK.vert.glsl中的uniform sampler2D oe_tile_elevationTex;osgEarthDrivers/engine_rex/RexTerrainEngineNode.cppvoidRexTerrainEngineNode::setupRenderBindings(){ ...原创 2019-07-25 23:59:08 · 503 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(四十二)osgEarth::SpatialReference和osgEarth::Profile的关系
目标:(三十六)中的问题102osgEarth::Profile关注空间范围、初始LOD数目等信息。GeoExtent中有SpatialReference信息,因此通过Profile能获取到SpatialReference信息。每一个高程、影像层都有自己的Profile。osgEarth/Profile class OSGEARTH_EXPORT Profile : public...原创 2019-01-13 16:00:32 · 1455 阅读 · 1 评论 -
osgEarth的Rex引擎原理分析(四十一)osg::State和osg::StateSet的关系
目标:(三十四)中的101osg::State是osg封装的opengl状态机,是全局的。osg状态机会在各个StateSet中切换,以完成图形的绘制。osg/State/** Encapsulates the current applied OpenGL modes, attributes and vertex arrays settings, * implements lazy...原创 2019-01-13 07:25:44 · 981 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(十四)分页瓦片加载器子节点的作用
目标:(十二)中的问题21在rex引擎的setMap中创建了分页瓦片加载器子节点osgEarthDrivers/engine_rex/RexTerrainEngineNode.cppvoidRexTerrainEngineNode::setMap(const Map* map, const TerrainOptions& options){ PagerLoader*...原创 2018-11-17 13:49:08 · 708 阅读 · 0 评论