osgEarth的Rex引擎原理分析(一一零)state中_defineMap构建过程

2023-11-06

目标:(一零九)中的问题195

是在绘制过程中,每经过一个状态集StateSet就会将该状态集中的模式、属性、一致变量、定义都放入State的相应变量中。定义都放入_defineMap.

 

osg/State.cpp
void State::pushStateSet(const StateSet* dstate)
{
        pushModeList(_modeMap,dstate->getModeList());
        pushAttributeList(_attributeMap,dstate->getAttributeList());
        pushUniformList(_uniformMap,dstate->getUniformList());
        pushDefineList(_defineMap,dstate->getDefineList());
}

_defineMap的构建过程如下:

osg/State.cpp
inline void State::pushDefineList(DefineMap& defineMap,const StateSet::DefineList& defineList)
{
    for(StateSet::DefineList::const_iterator aitr=defineList.begin();
        aitr!=defineList.end();
        ++aitr)
    {
        // get the attribute stack for incoming type {aitr->first}.
        DefineStack& ds = defineMap.map[aitr->first];
        DefineStack::DefineVec& dv = ds.defineVec;
        if (dv.empty())
        {
            // first pair so simply push incoming pair to back.
            dv.push_back(StateSet::DefinePair(aitr->second.first,aitr->second.second));

            ds.changed = true;
            defineMap.changed = true;
        }
        else if ((ds.defineVec.back().second & StateAttribute::OVERRIDE) && !(aitr->second.second & StateAttribute::PROTECTED)) // check the existing override flag
        {
            // push existing back since override keeps the previous value.
            ds.defineVec.push_back(ds.defineVec.back());
        }
        else
        {
            // no override on so simply push incoming pair to back.
            dv.push_back(StateSet::DefinePair(aitr->second.first,aitr->second.second));

            // if the back of the stack has changed since the last then mark it as changed.
            bool changed = (dv[dv.size()-2] != dv.back());
            if (changed)
            {
                ds.changed = true;
                defineMap.changed = true;
            }
        }
    }
}

 

 

待继续分析列表:

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类的意义((十四)中问题)

33、请求合并队列_mergeQueue((十四)中问题)

34、分页瓦片加载器在更新遍历时对请求处理过程((十四)中问题)

35、分页瓦片加载器在更新遍历时对已处理请求裁剪过程((十四)中问题)

36、已处理的请求队列_requests((十四)中问题)

37、DatabasePager中的_fileRequestQueue和_httpRequestQueue((十六)中问题)

38、瓦片请求的生成到处理过程详解((十六)中问题)

39、瓦片节点TileNode的创建过程((十七)中问题)

40、request请求加载瓦片优先级的含义((十七)中问题)

41、request的_internalHandle的作用((十七)中问题)

42、DatabaseRequest中_objectCache含义((十七)中问题)

42、osgEarth的多线程分析((十七)中问题)

43、osgEarth的缓存及其结构((十七)中问题)

44、DatabaseThread从缓存加载数据过程((十七)中问题)

45、DatabaseThread从文件加载数据过程((十七)中问题)

46、决定创建TileNode的时机条件((十七)中问题)

47、TerrainEngineNode的createTileModel过程详解((十七)中问题)

48、DatabaseThread中CompileSet的含义((十七)中问题)

48、PagerLoader的traverse过程详解((十七)中问题)

49、DatabaseThread的run过程详解((十七)中问题)

50、LoadTileData的invoke过程详解((十七)中问题)

51、TileNode的cull过程详解((十七)中问题)

52、遮罩生成器osgEarth::Drivers::RexTerrainEngine::MaskGenerator((十八)中问题)

53、RexTerrainEngineNode::traverse过程详解((十八)中问题)

54、TileNode节点下的场景树分析((十八)中问题)

55、地形瓦片大小尺寸和LOD的关系((十八)中问题)

56、TileNode的_tileKeyValue作用((十八)中问题)

57、TileNode的_morphConstants作用((十八)中问题)

58、TileNode的_stitchNormalMap作用((十八)中问题)

59、TileNode的_renderModel作用((十八)中问题)

60、初始化高程栅格过程详解((十八)中问题)

61、LoadTileData中的CreateTileModelFilter作用((十八)中问题)

62、TileNode节点何时会从场景树中移除((十八)中问题)

63、osgEarth::Map的Profile创建过程((二十)中问题)

64、osgEarth::TerrainTileModelFactory添加颜色层和影像层的区别((二十一)中问题)

65、osgEarth::PatchLayer修补层的作用((二十一)中问题)

66、osgEarth::TerrainLayer中的_memCache(osgEarth::MemCache)详解((二十一)中问题)

67、osgEarth::Layer::RenderType图层渲染类型的作用((二十一)中问题)

68、osgEarth::TerrainLayer中TileSource的作用((二十一)中问题)

69、earth文件没有设置高程图层会不会有默认高程层(高程均为0)((二十一)中问题)

70、TerrainTileModelFactory::addColorLayers过程详解((二十一)中问题)

71、TerrainTileModelFactory::addElevation过程详解((二十一)中问题)

72、osgearth中可能用到的几个全局实例对象(osgDB::Registry osgEarth::Registry osg::Timer osg::DisplaySetting)((二十三)中问题)

73、osgEarth::Map::addLayer过程详解((二十三)中问题)

74、TileNode::setDirty过程详解((二十三)中问题)

75、请求四个状态的含义(IDLE RUNNING MERGING FINISHED)((二十三)中问题)

76、什么时候删除TileNode节点,不会一直增加吧((二十三)中问题)

77、寄存器中请求状态活动记录的含义Registry::instance()->endActivity( req->getName() )((二十三)中问题)

78、瓦片TileNode的生命周期流程详解((二十三)中问题)

79、rex引擎如何将瓦片构造成地球形状((二十五)中问题)

80、高程、影像文件格式详解((二十五)中问题)

81、TileNode的merge过程详解((二十六)中问题)

82、osgEarth支持的空间参考坐标系详解(osgEarth::SpatialReference、osgEarth::CubeSpatialReference、osgEarth::TangentPlaneSpatialReference)((二十九)中问题)

83、osgEarth地球椭球体ellipsoid 大地基准面datum 地图投影Projection详解((二十九)中问题)

84、空间参考坐标系和坐标系统类型的关系(geocentric projected)((二十九)中问题)

85、proj4是什么((二十九)中问题)

86、为什么要删除设置过的垂直水准面((二十九)中问题)

87、osgEarth如何对投影坐标系和大地坐标系进行显示处理的((二十九)中问题)

88、TileNode的节点构成,一个surface、tilenode((三十)中问题)

89、MapFram和MapInfo的关系((三十)中问题)

90、ModifyBoundingBoxCallback的使用时机和场合((三十)中问题)

91、MapFrame为什么要单独存放高程层_elevationLayers,而不是放在图层_layers中((三十)中问题)

92、MapFrame和Map中高程池的作用osg::ref_ptr<ElevationPool> _elevationPool((三十)中问题)

93、osgEarth::Drivers::RexTerrainEngine::TileDrawable分析((三十)中问题)

94、请求读取地理信息失败会如何处理((三十二)中问题)

95、RexTerrainEngineNode的遍历过程详解((三十三)中问题)

96、osgEarth::Drivers::RexTerrainEngine::TerrainCuller的apply过程详解((三十三)中问题)

97、RexTerrainEngineNode的updateState过程详解 设置了很多着色器变量((三十三)中问题)

98、什么时候分配opengl资源((三十三)中问题)

99、TileNode释放opengl资源过程releaseGLObjects详解((三十三)中问题)

100、最近一次遍历的帧号和时间是怎么设置呢(在渲染遍历里),怎么就不会再渲染遍历该瓦片节点了((三十三)中问题)

101、osg::State和osg::StateSet的关系((三十四)中问题)

102、osgEarth::SpatialReference和osgEarth::Profile的关系((三十六)中问题)

103、osgEarth的Geographic、Geodetic、Geocentric和Project的关系((三十六)中问题)

104、TileNode绘制过程详解((三十七)中问题)

105、如何控制父子TileNode节点的显隐((三十七)中问题)

106、GeometryPool的createGeometry过程详解((三十七)中问题)

107、TileNode如何从地图中提取与其分辨率相适应的图像数据((三十七)中问题)

108、如何定制椭球体并进行椭球体间坐标转换((四十五)中问题)

109、Horizon Cull是什么意思((四十五)中问题)

110、osgEarth::Drivers::RexTerrainEngine::DrawState的作用((四十五)中问题)

111、osgEarth的线程分析((四十五)中问题)

112、从osgEarth到osg到Opengl((四十五)中问题)

113、osg::Program与osgEarth::VirtualProgram的关系((四十五)中问题)

114、rex引擎shader文件中的#pragma vp_entryPoint vp_location等含义((四十五)中问题)

115、rex引擎的着色器如何区分顶点和片段((四十五)中问题)

116、osg::Program是如何对着色器及其变量进行管理的((四十五)中问题)

117、osg的窗口是如何与opengl集成的((四十五)中问题)

118、osg是如何实现opengl的初始化的((四十五)中问题)

119、CGCS2000余WGS84坐标系的比较((四十六)中问题)

120、着色器代码文件到着色器程序的过程((五十一)中问题)

121、osgEarth::VirtualProgram默认出现在哪些位置((五十一)中问题)

122、rex引擎默认的几个着色器功能分析((五十一)中问题)

123、osgEarth::TileRasterizer功能详解((五十二)中问题)

124、osgEarth::ImageLayer如何使用VirtualProgram((五十二)中问题)

125、osgEarth::ShaderFactory osgEarth::ShaderLoader关系((五十四)中问题)

126、osgEarth::URI和osgEarth::URIContext的作用((五十四)中问题)

127、RexTerrainEngineNode中_renderBindings的作用((五十四)中问题)

128、Rex引擎如何给shader文件中的uniform变量赋值((五十四)中问题)

129、osgEarth中多个着色器的源代码的编译链接过程((五十四)中问题)

130、osgEarth::ShaderFactory osgEarth::ShaderLoader关系((五十四)中问题)

131、TileNode与DrawTileCommand的关系((五十五)中问题)

132、如何提取出指定范围的高程网格((五十五)中问题)

133、从earth文件加载高层图层的过程((五十五)中问题)

134、TerrainTileModel与TileRenderModel的关系((五十五)中问题)

135、EngineContext的作用((五十五)中问题)

136、几个uniformmap的关系((五十五)中问题)

137、DrawTileCommand中的采样器((五十五)中问题)

138、TileNode中的_surface(SurfaceNode)作用是什么((五十五)中问题)

139、stateset中的adduniform、setTextureAttribute等最后是如何反应到opengl上的((五十五)中问题)

140、状态树和渲染树的关系((五十五)中问题)

141、TileRenderModel中的RenderingPass和RenderBindings((五十五)中问题)

142、高程瓦片的绘制过程((五十五)中问题)

143、如何从高程影像变成高程网格((七十一)中问题)

144、osg::StateSet中的_binMode作用((七十二)中问题)

145、rex的瓦片高程影像和高程文件中的影像尺寸如何对应((七十二)中问题)

146、osgEarth::TerrainLayerOptions高程层选项中参数的含义((七十二)中问题)

147、从高程文件读取的高程信息如何填充rex的高程瓦片((七十二)中问题)

148、地图下载器实现原理((七十二)中问题)

149、RexTerrainEngineNode和TerrainCuller中_terrain的关系((七十二)中问题)

150、TileNodeRegistry和LayerDrawable中_tiles的关系((七十二)中问题)

151、rex引擎中绘制瓦片的调度过程原理((七十二)中问题)

152、晕眩图的制作与实现((七十八)中问题)

153、如何将高层场保存为tif、MBTiles等((七十八)中问题)

154、如何将tif和MBTiles进行格式转换((七十八)中问题)

155、如何加载百度、高德、谷歌、微软的在线地图((七十八)中问题)

156、osgEarth运行起来为什么很占CPU资源((七十九)中问题)

157、wmts与xyz、quadtree、tms的关系((七十九)中问题)

158、获取的高程图像为什么除了设置纹理还要设置栅格((八十)中问题)

159、rex引擎创建图层的过程((八十一)中问题)

160、如何设置高度单位(m、km等)((八十二)中问题)

161、网络资源加载失败还会不会继续加载((八十二)中问题)

162、rex引擎打开图层的过程((八十二)中问题)

163、osgEarth::MemCache详解((八十二)中问题)

164、OGR与GDAL的关系((八十二)中问题)

165、osgEarth::Map的cache创建过程((八十三)中问题)

166、osgEarth跨平台的头文件包含设置((八十三)中问题)

167、rex引擎如何实现淹没分析((八十八)中问题)

168、rex引擎如何实现挖方分析((八十八)中问题)

169、rex引擎如何实现地形整平((八十八)中问题)

170、rex引擎如何绘制矢量图形((八十八)中问题)

170、rex引擎如何绘制等高线((八十八)中问题)

171、rex引擎如何显示瓦片的边界((八十八)中问题)

172、边界处瓦片颜色混合的实现((九十)中问题)

173、rex自带的着色器代码会硬编码进动态库吗((九十一)中问题)

174、rex在渲染时会不会纹理单元内容频繁更改((九十一)中问题)

175、如何显示瓦片编号((九十四)中问题)

176、缓存文件复用、弃用的判决((九十五)中问题)

177、RenderingPasses和RenderBindings((九十五)中问题)

178、如何定义裸球颜色并在绘制时起作用((九十八)中问题)

179、有影像和无影像的瓦片在一起如何保证无影像的瓦片被绘制((九十九)中问题)

180、如何判断瓦片的添加删除((一零零)中问题)

181、TileNode::merge为什么只是不合并最后一个图层((一零零)中问题)

182、ImageLayer的coverage属性含义((一零一)中问题)

183、如何判断图源支持的最大级别((一零一)中问题)

184、着色器如何绘制文字((一零一)中问题)

185、rex如何将文字生成图片((一零一)中问题)

186、rex如何在地球上绘制一张图片((一零三)中问题)

187、如何将文字变为图片((一零四)中问题)

188、rex下各个文件、类介绍((一零五)中问题)

189、术语定义((一零五)中问题)

190、rex的状态树和渲染树((一零六)中问题)

191、章节目录((一零七)中问题)

192、雾化fog效果((一零八)中问题)

193、云的渲染((一零八)中问题)

194、19级瓦片分辨率估算((一零八)中问题)

195、state中_defineMap构建过程((一零九)中问题)

196、state获取着色器文件中有效define的过程((一零九)中问题)

197、着色器上下文环境的准备过程((一一零)中问题)

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

osgEarth的Rex引擎原理分析(一一零)state中_defineMap构建过程 的相关文章

随机推荐

  • 什么是 MATLAB(矩阵实验室)?工作、功能和应用

    MATLAB 被 MathWorks 定义为专有软件应用程序和编程语言 可促进复杂的数据分析任务 例如算法实施 与其他应用程序交互以及操作数据矩阵 本文介绍了 MATLAB 的用途 其关键概念以及 2022 年的用例 什么是 MATLAB
  • 【解决】TypeError: this.$refs.treeRefs.xxx is not a function

    问题 使用refs触发子组件内方法时报 TypeError this refs treeRefs xxx is not a function 解决 经查看 发现子组件被放在了v for循环体内 示例代码如下
  • 虚拟机上部署K8S集群

    虚拟机上部署K8S集群 安装VM Ware 安装Docker 安装K8S集群 安装kubeadm 使用kubeadm引导集群 安装VM Ware 参考 http www taodudu cc news show 2034573 html a
  • 推荐系统:Wide & Deep模型解析

    1 Wide Deep模型介绍 经典推荐深度模型 Wide Deep 对应的论文 Wide Deep Learning for Recommender Systems 链接 arxiv Wide Deep的模型架构如下图所示 可以看到Wid
  • 运维技能风向标

    运维介绍 运维是一个融合多学科 网络 系统 开发 安全 应用架构 存储等 的综合性技术岗位 从最初的网络管理 网管 发展到现在的系统运维工程师 网络运维工程师 安全运维工程师 运维开发工程师等 可以看出 运维的分工一直在细化 并且对综合技能
  • Element Plus for Vue 3 入门教程

    本文首发 Element Plus for Vue 3 入门教程 Element Plus 有那些升级 Element Plus 与 Element UI 是什么关系 老 Element 项目是否可以平滑升级到 Vue 3 Element
  • 如何快速实现Android平台前端设备接入能力

    技术背景 SIP 会话初始化协议 是在 IP网络上进行多媒体通信的应用层控制协议 以几种RFC的形式提供 其中最重要的是包含核心协议规范的RFC3261 该协议用于创建 修改和终止与一个或多个参与者的会话 通过会话 我们了解了一组进行通信的
  • linux inode满了后,怎么清理

    最近服务器的inode inode介绍 达到了90 当 Ised 节点使用率 达到100 时 即使文件系统有剩余空间也无法写入数据 这里记录下解决方法 清理文件系统下 细碎文件 施放节点数 因为该路径下的文件都是重要文件 不能够删除 所以这
  • 【数据库内核】物理执行器引擎Pull模型之火山模型

    目录 概述 算子介绍 火山模型 火山模型痛点 一 虚函数的开销 二 Cpu Cache的利用率 结论 参考资料 概述 当我们的逻辑计划引擎把SQL生成了逻辑计划后 后端的物理计算引擎接收到逻辑计划生成物理执行计划 便可以开始去真正执行计算作
  • 推荐Android15个常用的图表库,包含线性,条形柱状,饼状图,扇形,雷达,股票,折线,散点,仪表盘......

    1 https github com xcltapestry XCL Charts Android开源图表库 XCL Charts is a free charting library for Android platform XCL Ch
  • fatal error: ros/ros.h: 没有那个文件或目录

    程序包下面的cmakelist txt 加上 find package catkin REQUIRED COMPONENTS roscpp include directories include catkin INCLUDE DIRS
  • Kubernetes系列(一)基础概念

    从最基础开始了解k8s 首先需要清楚三个问题 k8s是怎么出现的 他解决了什么问题 整体架构是什么样的 有哪些优缺点 从以上三个问题出发 本文将分为三个章节 讲述K8S的一些基础概念 发展历程 接触K8S之前 就得先了解一下云计算这个概念
  • 数据结构实验--唯一的确定一棵二叉树

    一 问题描述 如果给出了遍历二叉树的前序序列和中序序列 则可以构造出唯一的一棵二叉树 试编写实现上述功能的程序 基本要求 已知一棵二叉树的前序和中序序列 试设计完成下列任务的一个算法 1 构造一棵二叉树 2 证明构造正确 即分别以前序和中序
  • jsp里面的input的值吗_jsp:如何获取input 输入框中的值?

    匿名用户 1级 2017 01 25 回答 如何用jquery获取中输入的值 test val input name test val input type text val input type text attr value 追问 只能
  • linux: 串口接收十六进制部分字节丢失(0x11,0x0d->0x0a等等)

    https blog csdn net gx19862005 article details 12944687 https blog csdn net chengde6896383 article details 77603302
  • 云备份客户端——客户端整体设计框架以及实用类工具实现

    一 客户端整体框架 客户端要实现的功能和服务端相比相对简单 客户端要实现的功能是自动对指定文件中的文件进行备份 也就是定时对指定文件进行扫描 根据文件信息判断文件 符合要求 新文件或者被修改过的文件 进行上传 因此我们客户端大概需要实现下面
  • FPGA 20个例程篇:8.SD卡任意地址的读写

    三 数据断电存储 工程必备 8 SD卡任意地址的读写 SD卡作为最常见的外设之一 本身也是一种基于半导体快闪记忆器的新一代记忆设备 它具有体积小 传输速度快 支持热插拔等优点 在便携式装置领域得到了非常广泛的应用 例如数码相机 多媒体播放器
  • error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义

    本文主要分析和解决编译链接时产生的 LNK2005 错误 错误信息 mfcs90ud lib dllmodul obj error LNK2005 DllMain 12 already defined in MSVCRTD lib dllm
  • const关键字与指针

    const关键字与指针 1 指针包含的地址是常量 不能被修改 但可以修改指针指向的数据 int x 10 int const p x p 34 指向的数据可以修改 int y 32 p y 不能修改P指向的地址 2 指针指向的数据是常量 不
  • osgEarth的Rex引擎原理分析(一一零)state中_defineMap构建过程

    目标 一零九 中的问题195 是在绘制过程中 每经过一个状态集StateSet就会将该状态集中的模式 属性 一致变量 定义都放入State的相应变量中 定义都放入 defineMap osg State cpp void State pus