
osgEarth调试
directx3d_beginner
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
调试osgEarth的Rex引擎原理分析(六十四)EngineContext的作用
感谢@hankern学习链接在https://blog.youkuaiyun.com/hankern/article/details/104187834在学习选择信息时,有个问题,如何传递选择信息到tileNode?经过调试,发现是通过EngineContext,再追溯一下,是在RexTerrainEngineNode::dirtyTerrain()中将成员变量_selectionInfo初始化,然后新建了一个EngineContext上下文,通过上下文传递到新建的tileNode。当然EngineContex原创 2022-02-08 10:52:32 · 419 阅读 · 0 评论 -
调试osgEarth的Rex引擎原理分析(十三)选择信息的作用--传递渐变参数给shader
感谢 @hankern学习链接https://blog.youkuaiyun.com/hankern/article/details/84160758这节主要是说明如何将渐变参数传给shader,用于融合高程和地表影像。传递时机是在tileNode创建时设置断点截图如下可知,通过_tileMorphUniform传递过去的跟踪oe_tile_morph,可见在文件RexEngine.Morphing.vert.glsl里。拷贝进来#version $GLSL_VERSION_STR#pragma原创 2022-02-07 11:02:19 · 474 阅读 · 0 评论 -
调试osgEarth的Rex引擎原理分析(十三)选择信息的作用(3)->判断是否需要分裂成子节点
选择信息通过lod的切换距离判断是否需要分裂成子节点的。即从上图所示,是级数不能超过maxLod-1,比如第5层为最大级时,分裂级别最多是3(分裂到4),级别数从0开始。与之相关联的是_viewPointStack.back()细节层次偏差 _LODScale按f11进去看自顶向下看涉及到的函数...原创 2022-01-07 11:59:40 · 343 阅读 · 0 评论 -
调试osgEarth的Rex引擎原理分析(十三)选择信息的作用--初始化
感谢@hankern学习链接https://blog.youkuaiyun.com/hankern/article/details/84160758转眼间半年多过去了,继续进行选择信息初始化。选择信息的初始化分三步:1,确定当前级别。2,根据当前级别和最小级别的差值,获取级别数3,记录这些级别数的可视化距离和颜色渐变(morph)的起始距离和终止距离。它的位置现在看初始化的内容1,确定当前级别。2,根据当前级别和最小级别的差值,获取级别数3,记录这些级别数原创 2022-01-06 11:28:54 · 390 阅读 · 4 评论 -
调试osgEarth的Rex引擎原理分析(十三)选择信息的作用--构造函数
在黑暗里摸索了将近两个月,终于可以看到大神的指点了。感谢@hankern学习链接https://blog.youkuaiyun.com/hankern/article/details/84160758原创 2021-08-23 20:33:19 · 151 阅读 · 0 评论 -
调试osgEarth(33)分页瓦片卸载器子节点的作用-(3)渲染遍历的帧号和时间设置-_真正的terrain使用TerrainCuller---根据选择信息判断(待续)
继续调试这里要涉及到选择信息了,先在这里mark一下。看看它的前生来世。原创 2021-08-19 08:18:27 · 113 阅读 · 0 评论 -
调试osgEarth(33)分页瓦片卸载器子节点的作用-(3)渲染遍历的帧号和时间设置-_真正的terrain使用TerrainCuller---水平方向剔除
如果还记得来自于何方,看看一个月前如何引入TerrainCuller的。如何判断是否该cull呢?在这里先打个断点用的包围球可见,通过VIEW_FRUSTUM_CULLING,SMALL_FEATURE_CULLING,SHADOW_OCCLUSION_CULLING三种方式剔除可见,目前用的是视锥体剔除现在进入正文,开始剔除先看水平方向...原创 2021-08-17 20:50:11 · 225 阅读 · 0 评论 -
调试osgEarth(33)分页瓦片卸载器子节点的作用-(3)渲染遍历的帧号和时间设置-_terrain使用TerrainCuller
继续调试从此可以看到,TileNode是四叉树,有四个子节点本身是实际绘制的SurfaceNode原创 2021-08-11 21:08:51 · 127 阅读 · 0 评论 -
调试osgEarth(33)分页瓦片卸载器子节点的作用-(3)渲染遍历的帧号和时间设置-TerrainCuller赋值给可渲染图层--TerrainRenderData-添加LayerDrawable
继续调试再加上一个空的layer总结下,添加LayerDrawable到每个layer,包括空的layer中,这个layerDrawable放入数组_layerList里面,同时放在_layerMap里面,该layerDrawable与各个层进行关联,包括layer,visibleLayer,patchlayer,imagelayer,它的stateset与layer的stateset相同,渲染状态也与layer的渲染状态相同。...原创 2021-08-09 19:55:44 · 165 阅读 · 0 评论 -
调试osgEarth(33)分页瓦片卸载器子节点的作用-(3)渲染遍历的帧号和时间设置-TerrainCuller赋值给可渲染图层--TerrainRenderData-Layedrawable构造
继续调试总结下,LayerDrawable类是通过DrawTileCommand在各种Layer上绘制的drawable,有自己的渲染状态和渲染次序,可以在VisibleLayer,ImageLayer,PatchLayer上绘制。原创 2021-08-06 08:56:18 · 136 阅读 · 0 评论 -
调试osgEarth(33)分页瓦片卸载器子节点的作用-(3)渲染遍历的帧号和时间设置-TerrainCuller赋值给可渲染图层--TerrainRenderData-添加drawable的前提
继续调试下面进行转换了,看看osgEarth::GDALImageLayer和VisibleLayer的关系,是否是父子关系可见,可以强制转换万事俱备,LayerDrawable要上场了总结下,什么时候可以在层中添加drawable呢?前提是什么?1,isOpen(),即状态Ok2,layer的渲染类型是RENDERTYPE_TERRAIN_SURFACE或者RENDERTYPE_TERRAIN_PATCH,当前环境是RENDERTYPE_TER原创 2021-08-04 08:23:25 · 164 阅读 · 0 评论 -
调试osgEarth(33)分页瓦片卸载器子节点的作用-(3)渲染遍历的帧号和时间设置-TerrainCuller赋值给可渲染图层--TerrainRenderData-Layer
继续调试再回顾下Layer类的成员变量就是说,初始化时调用init(),添加到Map上时,setReadOptions()->open()->addedToMap(),移除时用removedFromMap()总结下,Layer是个基类,有自己的唯一标识ID,有cache,有回调,有shader,状态集,mapNode节点,配置,经纬度坐标范围。初始化时调用init(),添加到Map上时,setReadOptions()->原创 2021-08-03 08:46:08 · 167 阅读 · 0 评论 -
调试osgEarth(33)分页瓦片卸载器子节点的作用-(3)渲染遍历的帧号和时间设置-TerrainCuller赋值给可渲染图层--TerrainRenderData--深度摄像机
继续调试可见,在当前环境下,_definelist为空,不会再有"OE_IS_DEPTH_CAMERA",因此不是深度摄像机果然为false总结下,这里是通过摄像机的状态集的_definelist是否包含"OE_IS_DEPTH_CAMERA",来判断该摄像机是否为深度摄像机。就这样吧。...原创 2021-07-30 08:28:58 · 122 阅读 · 0 评论 -
调试osgEarth(33)分页瓦片卸载器子节点的作用-(3)渲染遍历的帧号和时间设置-TerrainCuller赋值给可渲染图层--TerrainRenderData--DrawState
继续调试从注释中可以DrawState是每帧中地形绘制状态,涉及到传递的Uniform,program和sampler就这样吧。原创 2021-07-29 07:41:46 · 148 阅读 · 0 评论 -
调试osgEarth(33)分页瓦片卸载器子节点的作用-(3)渲染遍历的帧号和时间设置-TerrainCuller赋值给可渲染图层--TerrainRenderData类和成员变量
继续调试原创 2021-07-27 21:39:59 · 105 阅读 · 0 评论 -
调试osgEarth(33)分页瓦片卸载器子节点的作用-(3)渲染遍历的帧号和时间设置-TerrainCuller构造函数-阴影摄像机及TerrainCuller构造函数总结
继续调试。下一步该轮到阴影摄像机了。这里有个标识“OE_IS_SHADOW_CAMERA”,我猜测是传到GPU里面的参数,是不是,需要继续调试。整句话拷贝过来const DefinePair* getDefinePair(const std::string& defineName) const { DefineList::const_iterator itr = _defineList.find(defineName); return (itr!=_defineList.end()原创 2021-07-25 09:34:28 · 184 阅读 · 0 评论 -
调试osgEarth(33)分页瓦片卸载器子节点的作用-(3)渲染遍历的帧号和时间设置-TerrainCuller构造函数-visitorData-TransientUserDataStore-存储
继续调试,看看TransientUserDataStore何时存储的,在当前配置下存储了些什么启动后果然触发了,倒回去看可以看key = osgEarth.Horizon的cullVisitor。水平裁剪?继续向前看看看Horizon类的成员变量可以看到Horizon类是个操作。涉及到了眼睛到中心点和水平的距离。似乎验证了这点。但是,还是有点不知所云。把成员函数也拷贝过来。从成员函数可以看到对水平面剔除的操作。说人话就是:如果在平面上,水平望去,如果站在一个高楼上,影响原创 2021-07-24 10:27:11 · 197 阅读 · 0 评论 -
调试osgEarth(三十三)分页瓦片卸载器子节点的作用--(3)渲染遍历的帧号和时间设置-TerrainCuller类 的构造函数--visitorData
继续调试,每天调试一点点,又不累,又能够细品。这里似乎是存储visitorData临时数据的东东,很明显,这个为空,返回false,_isSpy=false也就是说visitorData的_dataStore里面的_table里面不存在cullvisitor,字符串"osgEarth.Spy"也没有判断到这里应该结束了,不过时间还早,继续看看TransientUserDataStore类很明显,成员变量_table是用来存储的。从声明上看,这个类对_table有添加,删除,查询,获取容原创 2021-07-23 07:35:37 · 146 阅读 · 1 评论 -
调试osgEarth(三十三)分页瓦片卸载器子节点的作用--(3)渲染遍历的帧号和时间设置-TerrainCuller类 的构造函数--摄像机设置
继续调试,到了摄像机了这个看似很简单,实际上还是出乎我意料了,简而言之,是如下流程cullvisitor->renderbin->renderstage->camera就这样吧原创 2021-07-22 08:22:29 · 121 阅读 · 0 评论 -
调试osgEarth(三十三)分页瓦片卸载器子节点的作用--(3)渲染遍历的帧号和时间设置-TerrainCuller类 的构造函数--lod bias设置
lodbias用来控制细节。好设备就在远处也用精模,保持整体渲染效果更好;差设备就在近处用精模,保持流畅。继续调试,展现了如何cull这个倒是简单,就是如何设置LOD bias参数原创 2021-07-21 08:11:42 · 213 阅读 · 0 评论 -
调试osgEarth(三十三)分页瓦片卸载器子节点的作用--(3)渲染遍历的帧号和时间设置-TerrainCuller类 的构造函数--_modelviewStack
继续调试_modelviewStack原创 2021-07-20 19:30:15 · 102 阅读 · 0 评论 -
调试osgEarth(三十三)分页瓦片卸载器子节点的作用--(3)渲染遍历的帧号和时间设置-TerrainCuller类 的构造函数--_projectionCullingStack
继续调试TerrainCuller类 的构造函数总结下,这个函数主要是_projectionCullingStack的创建,视锥体, small feature culling,相关的occluders(这里为空)原创 2021-07-18 21:47:51 · 122 阅读 · 0 评论 -
调试osgEarth(十四)分页瓦片加载器子节点的作用
感谢@hankern学习链接在https://blog.youkuaiyun.com/hankern/article/details/84170502感觉这里应该是重头戏了。打起精神,慢慢调试体会。可见,默认20级原创 2021-07-18 21:08:44 · 151 阅读 · 0 评论 -
调试osgEarth(六)earth文件如何解析成Config
感谢@hankern学习资料链接在https://blog.youkuaiyun.com/hankern/article/details/83933739前面提到了创建插件osgDB_earthd.dll,和加载了该插件,就该读取和解析了。先看如何读取,调试过去接下来就要用osgEarth的驱动读写了接下来就是进行看看是不是网络名称了...原创 2021-07-18 21:08:10 · 219 阅读 · 0 评论 -
调试osgEarth(三十三)分页瓦片卸载器子节点的作用--(3)渲染遍历的帧号和时间设置-TerrainCuller类 的构造函数-RenderStage成员变量
RenderStage在调试osg最长的一帧时看过,不过忘记了,再熟悉下大概回顾了遍RenderStage类的构造函数,宁可慢,不可断。就到这里吧。原创 2021-07-14 07:24:50 · 123 阅读 · 0 评论 -
调试osgEarth(三十三)分页瓦片卸载器子节点的作用--(3)渲染遍历的帧号和时间设置-TerrainCuller构造函数
慢慢调试,是个长期功夫。看看构造函数,如何初始化各个成员变量的。可知,_smallFeatureCullingPixelSize是屏幕空间的原创 2021-07-14 06:49:22 · 150 阅读 · 0 评论 -
调试osgEarth(三十三)分页瓦片卸载器子节点的作用--(3)渲染遍历的帧号和时间设置-TerrainCuller类 的成员变量
从概览中看到,分页瓦片卸载器子节点与TerrainCuller息息相关。趁着周末,从这里调试起。初始化到使用派生于osg::NodeVisitor和osg::CullStack这里涉及到了几个类,不能轻易放走,对引擎的理解程度,在于底层知识的掌握程度。我感觉这个类很重要,还是成员函数也放出来吧。看成员变量涉及到的东东...原创 2021-07-12 08:47:05 · 126 阅读 · 0 评论 -
调试osgEarth(三十三)分页瓦片卸载器子节点的作用--(3)渲染遍历的帧号和时间设置-概览
感谢@hankern学习链接https://blog.youkuaiyun.com/hankern/article/details/85407803继续调试是根据cull判断的可见,与TerrainCuller类相关活动瓦片数组也在这里更新原创 2021-07-10 07:05:37 · 128 阅读 · 0 评论 -
调试osgEarth(三十三)分页瓦片卸载器子节点的作用--(2)删除活跃的瓦片节点
感谢@hankern学习链接在https://blog.youkuaiyun.com/hankern/article/details/85407803很遗憾,这个版本不能这么用了,unloadChildren()注释掉了,也没有扫描器了断点设置在traverse()看看是否有休眠状态的处理还好,这里有个_deadPool,应该就是类似的了逐层看看,是如何被调用的这里有个cull_traverse(),或许将来有用这里有个_tracker,是否类似于以前版本的scanner原创 2021-07-01 08:51:23 · 205 阅读 · 0 评论 -
调试osgEarth(三十三)分页瓦片卸载器子节点的作用--(1)初始化
感谢@hankern学习链接在https://blog.youkuaiyun.com/hankern/article/details/85407803终于有大神带路了。继续调试在这个版本里,资源释放器已经独立出来了。先确定留存在内存中的块,会接下来在分页瓦片卸载器设置...原创 2021-07-01 06:22:07 · 127 阅读 · 0 评论 -
调试osgEarth(十五)分页瓦片加载器在更新遍历时对请求处理过程(3)
现在该正式进入merge的阶段了。我感觉,还是基础不牢,现在调试起来有点懵懂。不管这么着,继续调试下去。一定要有个pass,没有则添加看来每个texture只有一个image以上是颜色的融合,接下来是高程的融合没有高程,所以没进入这两个分支中的任何一个接下来看法线仍然均未命中接下来是LandCover以上就是loadTile的新建,运行和merge过程...原创 2021-06-29 21:39:48 · 207 阅读 · 0 评论 -
调试osgEarth(十五)分页瓦片加载器在更新遍历时对请求处理过程(2)
现在要进行高程层的绘制了。还在loadTile::run()里面,本来,就是加载什么tile,创建什么样的数据可知,只有影像层,所以LandCoverLayer数组也为空了终于该融合了接下来就是如何merge了...原创 2021-06-28 21:48:20 · 149 阅读 · 0 评论 -
调试osgEarth(十五)分页瓦片加载器在更新遍历时对请求处理过程(1)
感谢@原创 2021-06-28 20:10:32 · 206 阅读 · 0 评论 -
调试osgEarth(十四)分页瓦片加载器子节点的作用
感谢@hankern学习链接https://blog.youkuaiyun.com/hankern/article/details/84170502原创 2021-06-20 09:39:02 · 159 阅读 · 0 评论 -
调试共享几何图形池
没有这一节的资料,但是代码该调试到这里了,随意调试着玩吧。环境变量本机都没有设置。看这个意思,似乎是只需要一个几何体。所有的瓦片用类似于matrixTransform->addChild(node)的方式。就这样吧。...原创 2021-06-15 21:16:22 · 135 阅读 · 0 评论 -
调试osgEarth(三十四)资源释放器子节点的作用
感谢@hankern学习链接https://blog.youkuaiyun.com/hankern/article/details/85519058继续调试,设个断点开始时没有要释放的资源看上一层再上一层很明显,ResourceReleaser派生于drawable那么TileNode::releaseGLObjects(osg::State* state) 何时起作用呢?关掉程序的时候,就断点到这里了开始运行出地球按esc退出程序析构时触发,释放资源另外,放大地球,活原创 2021-06-15 19:56:09 · 332 阅读 · 4 评论 -
调试osgEarth(二十八)活跃瓦片寄存器的作用
根据源码,要到活跃瓦片寄存器了。感谢@hankern学习链接https://blog.youkuaiyun.com/hankern/article/details/84480730初始化这边版本不同,是看看调用时机往上一层_liveTiles放入上下文环境,并随上下文环境在其它地方使用再往上一层再往上一层再往上一层,回到setMap()可见,还有很远的路要走。先看看活跃瓦片寄存器的添加...原创 2021-06-10 20:58:57 · 159 阅读 · 0 评论 -
调试osgEarth(二十)osgEarth::TerrainEngineNode中setMap方法作用
感谢@hankern学习链接https://blog.youkuaiyun.com/hankern/article/details/84348416之所以先调试二十,是因为版本和博主的不同。原创 2021-06-09 20:23:44 · 317 阅读 · 0 评论 -
调试osgEarth(十二)rex地理信息引擎的四梁八柱
感谢@hankern学习链接在https://blog.youkuaiyun.com/hankern/article/details/84091841我感觉这里是重点了。直接截图本来想继续调试下去,发现博主的第十三开始逐个调试的,乐得清闲了,在第十三节再调试。博主还总结了步骤,现在也看不懂,等到最后再说吧。...原创 2021-06-07 00:12:32 · 191 阅读 · 0 评论 -
调试osgEarth(10)earth文件中都有哪些options
调着调着就刹不住车了。现在再看看10感谢@hankern学习链接https://blog.youkuaiyun.com/hankern/article/details/84088047?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant_t0原创 2021-06-05 19:27:25 · 289 阅读 · 0 评论