
osg
文章平均质量分 58
hankern
Code World,Cool Life
展开
-
qt5+osg多线程的解决方案
问题描述:Cannot make QOpenGLContext current in a different thread解决思路:在主线程中将qt窗体中的QOpenglContext moveToThread到窗体线程中,这样窗体线程在执行makecurrent时就不会报错。moveToThread必须在QOpenglContext原来所在的线程中执行,否则会失败,提示以上问题信息。以下工...原创 2018-08-16 06:54:46 · 6928 阅读 · 5 评论 -
qt编译osg的cmake工程
前提是需要安装cmake,并且在qt中配置cmake通过qt打开工程,选择cmakelist.txt,qt会自动用cmake解析该文件 然后设置相应的变量值,点击下方的apply configration changes按钮保存这样qt中就会出现一个openscenegraph项目在项目上右键选择cmake对项目进行配置,然后再右键build就可以构建cmake工程了...原创 2018-10-06 17:47:41 · 1006 阅读 · 0 评论 -
osg环境变量设置
OSG_HOME指明OSG文件根目录:D:\Program Files\OpenSceneGraph-3.0.1-VS10.0.30319-x86-debug-12741OSG_FILE_PATH指明测试文件目录:%OSG_HOME%\dataOSG_LIBRARY_PATH避免插件库不能加载上%OSG_HOME%\bin\osgPlugins-3.6.3Path变量前端添加路径(通常...原创 2018-10-06 17:57:34 · 2248 阅读 · 1 评论 -
osgearth消除近裁剪平面离物体太近时的裁剪问题
// This will mitigate near clip plane issues if you zoom in close to the ground: LogarithmicDepthBuffer buf; buf.install( viewer.getCamera() );原创 2018-10-10 21:55:01 · 1324 阅读 · 0 评论 -
osgearth中geodetic和mercator初始的瓦片数不一样
在osgEarth/Registry中if ( !_global_geodetic_profile.valid() ) { GDAL_SCOPED_LOCK; if ( !_global_geodetic_profile.valid() ) // double-check pattern { const_cas...原创 2018-11-03 07:01:53 · 948 阅读 · 0 评论 -
osg::ref_ptr的get和release方法
get方法会新增加一个内存管理对象。release方法将一个对象的内存的管理权限丢弃,一般会交给另一个对象。如果不需要转交管理权,则调用unref_nodelete方法,直接删除内存即可。对于get到的指针,因为并没有改变引用计数,一定不要执行delete操作(可能还有别的地方在使用这个指针),也没有必要使用ref_ptr来接收get到的指针(除非需要通过ref_ptr增加引用计数)...原创 2018-11-03 18:21:43 · 1719 阅读 · 0 评论 -
osgEarth中的METRIC_BEGIN和METRIC_END
#define METRIC_BEGIN(...) if (osgEarth::Metrics::enabled()) osgEarth::Metrics::begin(__VA_ARGS__)#define METRIC_END(...) if (osgEarth::Metrics::enabled()) osgEarth::Metrics::end(__VA_ARGS__)1、C...原创 2018-11-07 06:52:53 · 278 阅读 · 0 评论 -
osg的geographic和geodetic
在SpatialReference源码中有这样一段/** True if this is a geographic SRS (lat/long/msl) */virtual bool isGeographic() const;/** True if this is a geodetic SRS (lat/long/hae) */virtual bool isGeodetic() co...原创 2018-11-02 22:04:37 · 910 阅读 · 0 评论 -
osgEarth的rex地理信息场景树结构
osgEarth::MapNode StickyGroup osgEarth::OverlayDecorator osgEarth::Drivers::RexTerrainEngine::RexTerrainEngineNode osgEarth::Drivers::RexTerrainEngine::Page...原创 2018-11-04 19:30:01 · 811 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(一)地球初始化
分析Rex引擎的起点,要从下面代码开始(或者其它类似)。osg::Node* node = MapNodeHelper().load(arguments, &viewer); 它会解析earth文件,搭建起地球的四梁八柱框架,接下来的帧循环会围绕这个框架进行影像、高程瓦片的调度。这个函数会启动一个读取调用链条(中间省略一些不重要的链条节点)osgDB::readRefNo...原创 2018-11-10 19:58:20 · 3852 阅读 · 3 评论 -
osgEarth的Rex引擎原理分析(二)osg是如何根据文件扩展名寻找需要加载的动态链接库插件的
在(一)中有createLibraryNameForFile,它会根据文件扩展名构造需要加载的动态链接库osgDB/Registry.cpp ReaderWriter::ReadResult Registry::read(const ReadFunctor& readFunctor){ ... std::string libraryName = createLib...原创 2018-11-10 21:21:31 · 1101 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(三)加载动态库插件的过程是什么
osgDB/Registry.cpp ReaderWriter::ReadResult Registry::read(const ReadFunctor& readFunctor){ ... std::string libraryName = createLibraryNameForFile(readFunctor._filename); if (loadLi...原创 2018-11-10 21:33:14 · 967 阅读 · 1 评论 -
osgEarth的Rex引擎原理分析(四)osgDB::Registry的作用是什么
osgDB::Registry在一个osg应用中只有一个实例,保证了不同对象访问到的是同一个东西。osgDB/Registry.cppRegistry* Registry::instance(bool erase){ static ref_ptr<Registry> s_registry = new Registry; if (erase) { ...原创 2018-11-10 21:47:00 · 1265 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(五)osgDB::Registry和osgEarth::Registry的关系
都是程序中的唯一实例,通过instance方法保证唯一性。osgDB::Resigstry主要用于存放文件的读写器。osgEarth::Registry主要用于存放地球相关的全局参数信息。 待继续分析列表:1、osg是如何根据文件扩展名寻找需要加载的动态链接库插件的((一)中问题)2、加载动态库插件的过程是什么((一)中问题)3、osgDB::Registry的作用是什...原创 2018-11-10 21:52:47 · 789 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(六)earth文件如何解析成Config
目标:解决(一)中的问题构建地图节点的依据是ConfigosgEarthDrivers/earth/EarthFileSerialize2.cpposg::Node*EarthFileSerializer2::deserialize( const Config& conf, const std::string& referrer ) const{ osg::...原创 2018-11-10 22:15:28 · 1053 阅读 · 0 评论 -
osg中文路径、中文汉字解决方案
OSG 中文解决方案 【转】概述本文只限于 windows 环境下。OSG 在 windows 下对中文支持已经非常的好了,但是可能很多人并不知道如何去正确的使用。为了解决这些常见的问题,还有一些基础知识的普及。特此把 OSG 的中文相关问题集中起来说明一下。 理论基础一切的原点 ACSII不管什么字符集、什么编码,0-127的编号都是一致的。字符集把具体的文字...转载 2018-11-13 06:44:15 · 2134 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(七)地图map图层的构建过程
目标:解决(一)中的问题地图map主要用于存放高层、影像、矢量等图层信息,为构建地图节点MapNode做准备。osgEarthDrivers/earth/EarthFileSerialize2.cpposg::Node*EarthFileSerializer2::deserialize( const Config& conf, const std::string& r...原创 2018-11-11 06:13:04 · 2086 阅读 · 2 评论 -
osgEarth的Rex引擎原理分析(八)TerrainLayer和ElevationLayer的关系
目标:解决(七)中的问题8osgEarth::TerrainLayer是一个基础的图层osgEarth/TerrainLayerclass OSGEARTH_EXPORT TerrainLayer : public VisibleLayer osgEarth::ElevationLayer和osgEarth::ImageLayer都继承自这个基础类。osgEarth...原创 2018-11-11 14:22:17 · 1890 阅读 · 1 评论 -
osgEarth的Rex引擎原理分析(九)地图节点MapNode的构建过程
目标:(一)中问题6地图map图层构建完成后,就可以用这个map来构建地图节点osgEarth::MapNode了。osgEarthDrivers/earth/EarthFileSerialize2.cpposg::Node*EarthFileSerializer2::deserialize( const Config& conf, const std::string&...原创 2018-11-11 14:26:05 · 2492 阅读 · 1 评论 -
osg::NodePath的push_back奇怪问题
osg::NodePath通过push_back添加元素后,但是在调试时发现items数为0,并且在使用时也发现里面有元素。Loader.cppPagerLoader::PagerLoader(TerrainEngineNode* engine) :_checkpoint ( (osg::Timer_t)0 ),_mergesPerFrame( 0 ),_frameNumber...原创 2018-11-06 06:07:08 · 961 阅读 · 0 评论 -
关于OGRE与OSG的简单比较
关于OGRE与OSG的简单比较林乃养 lnychina{at}gmail.com浙江大学CAD&CG实验室2010年3月27日1 前言我曾经细致阅读过OGRE和OSG官方提供的文档,有《Pro OGRE 3D Programming》、OGRE自带手册(manual)、王锐老师等翻译的《OpenSceneGraph Quick Guide》,同时在网络上查阅了大量的OGR...转载 2018-11-12 06:32:29 · 3254 阅读 · 0 评论 -
城市级海量数据流畅调度方案(初稿)
城市级海量数据流畅调度方案(初稿)一.系统约束1. 硬件限制 (CPU, 显卡,内存,硬盘)最耗费CPU时间的是 视锥体和boundSphere/boundBox的求交计算。显卡现在最大的瓶颈是 当渲染批次多时(2000个primitivesets,20万三角面片),渲染时间(Draw和GPU)都达到了30多毫秒。测试机型硬件配置(本机): CPU为4核处理器显卡:...转载 2018-11-12 06:43:20 · 530 阅读 · 0 评论 -
OpenSceneGraph FAQ
OpenSceneGraph FAQ 【转】1、地球背面的一个点,计算它在屏幕上的坐标,能得到吗? 不是被挡住了吗?答:计算一个空间点的屏幕坐标,使用osgAPEx::GetScreenPosition函数。当空间点处于相机视空间内(不管它是否被别的物体遮挡)时,都是可以得到它对应的屏幕坐标的。如何判断一个点是否在地球背面?可以通过计算该点处垂直地面的方向UP,与相机方向的夹角,如果夹...转载 2018-11-14 06:25:59 · 269 阅读 · 0 评论 -
osgcuda
osgcuda 【转】原文 : http://blog.sina.com.cn/s/blog_df1b276a0101inbi.html osgCompute是对代码的并行流处理器执行的抽象基库。库连接到OSG的(OSG),因此它可以被包括在场景图。它为用户提供了可能性跳转到图形处理单元(GPU)的任何类型的计算。操纵数据,然后事后提供给场景图作进一步处理(例如渲染)。 ...转载 2018-11-14 06:32:44 · 463 阅读 · 0 评论 -
OpenGL中的功能与OSG对应功能
OpenGL中的功能与OSG对应功能 (摘)将OpenGL中的功能与OSG对应功能进行列举: OpenGL function OpenSceneGraph implementation glClear( GLbitfield mask ) osg::Camera::setClearMask(GLbitfield mask) osg::GraphicsContext...转载 2018-11-14 06:33:53 · 582 阅读 · 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 · 634 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(十五)分页瓦片加载器在更新遍历时对请求处理过程
目标:(十四)中的34osgEarthDrivers/engine_rex/Loader.cppvoidPagerLoader::traverse(osg::NodeVisitor& nv){ for(count=0; count < _mergesPerFrame && !_mergeQueue.empty(); ++count)...原创 2018-11-18 19:31:10 · 586 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(十九)request请求加载瓦片优先级的含义
目标:(十七)中的问题40 这要先从TileNode的load说起,它会计算出一个priority,但这个优先级还不是request的优先级osgEarthDrivers/engine_rex/TileNode.cppvoidTileNode::load(TerrainCuller* culler){ const SelectionInfo& si = ...原创 2018-11-21 06:51:21 · 714 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(十)earth文件中都有哪些options
目标:(九)中问题9通过在earth文件中搜索options,发现主要有这么几种:<options> <profile> <srs>epsg:4326</srs> <xmin>-150</xmin> <xmax> 150&原创 2018-11-15 06:28:28 · 1154 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(十一)如何根据earth文件options创建不同的地理信息引擎节点
目标:问题(九)中10在对MapNode做初始化时,需要创建地理信息引擎节点。voidMapNode::init(){ _terrainEngine = TerrainEngineNodeFactory::create( terrainOptions );}osgEarth::TerrainEngineNodeFactory创建地理信息引擎节点的过程如下:osgE...原创 2018-11-15 07:21:14 · 1289 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(十二)rex地理信息引擎的四梁八柱
目标:(九)中问题11在(九)中创建rex引擎节点时,会调用osgEarth::TerrainEngineNode的构造函数,该函数负责设置rex引擎的名称、id、着色器和其它一些变量设置,还会添加地形_terrain子节点。rex引擎的四梁八柱是从这里开始的osgEarth/MapNode.cppvoidMapNode::init(){ _terrainEngine-...原创 2018-11-17 09:30:18 · 1345 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(二十)osgEarth::TerrainEngineNode中setMap方法作用
目标:(十二)中的问题12不同于派生类RexTerrainEngineNode中setMap的内容(详见(十二)),在RexTerrainEngineNode执行setMap时会首先调用TerrainEngineNode的setMap,这里主要完成以下工作:1、设置地图图层_map2、创建地形功能接口类osgEarth::Terrain,这个类可以查询内存的地形场景树、订阅瓦片事件(比...原创 2018-11-22 20:38:23 · 727 阅读 · 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 · 786 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(十八)瓦片节点TileNode的创建过程
目标:(十七)中问题39TileNode::create调用的时机有两种:(1)顶层瓦片创建时;(2)子瓦片需要创建时该函数主要做以下工作:1、设置成员变量_context,记录rex引擎的上下文环境2、设置本级瓦片的_key3、创建遮罩生成器osgEarth::Drivers::RexTerrainEngine::MaskGenerator4、利用rex引擎的共享几何图形...原创 2018-11-20 06:09:48 · 1047 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(二十二)已处理的请求队列_requests
目标:(十四)中问题36这个_requests是PagerLoader的成员变量,用于存放所有在TileNode创建时创建的请求。在DatabasePager对请求进行处理的过程中(详见(十七)),会用到这个队列。这个队列不同于PagerLoader中的队列_mergeQueue:后者是已经对请求中的内容经过了缓存或文件加载,可以应用到TileNode节点上了,而前者主要还是一个内容为空的...原创 2018-11-23 06:19:41 · 431 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(二十三)PagerLoader的traverse过程详解
目标:(十七)中问题48主要包含两个过程:1、已处理过请求的加载这是真正意义上的加载,刚创建出来的请求是从缓存或文件没有关联影像、高程等数据的,需要经过多线程处理后才有数据(详见(十七))。对于这些处理过的请求,在PagerLoader的更新遍历traverse中会进行实质性的处理。具体如下:osgEarthDrivers/engine_rex/Loader.cppvoidP...原创 2018-11-23 07:00:20 · 627 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(二十四)TileNode节点下的场景树分析
目标:(十八)中的问题54osgEarth::Drivers::RexTerrainEngine::TileNode是rex引擎下的一个重要节点,这个节点还不是真正在Earth中看到的瓦片,其内部还有场景树,具体包括一个SurfaceNode和四个下一级LOD的TileNode子节点。SurfaceNode负责本级瓦片的渲染,结构如下:osgEarth::Drivers::RexTerra...原创 2018-11-24 17:43:37 · 541 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(二十五)地形瓦片大小尺寸和LOD的关系
目标:(十八)中的问题55osgEarth::TerrainOption中_tileSize默认大小为17,LOD的默认范围为0-23,这两个值的关系是什么?还有瓦片的像素尺寸_tilePixelSize默认为256,它和_tileSize有什么关系?和(二十一)中创建瓦片模型时默认高程网格点数257什么关系_tileSize和_tilePixelSize是这样说明的:...原创 2018-11-24 18:21:19 · 1961 阅读 · 0 评论 -
osgEarth的Rex引擎原理分析(二十六)TileNode的_renderModel作用
目标:(十八)中的问题59TileRenderModel的内容来自于TerrainTileModel(参考TileNode的merge函数),TerrainTileModel的内容来自于文件或网络(参考LoadTileData的invoke函数)。osgEarth::Drivers::RexTerrainEngine::TileRenderModel主要维护两个变量:采样器osgEarth...原创 2018-11-24 20:28:57 · 408 阅读 · 0 评论 -
osgEarth获取显卡和硬件信息
osgEarth::Capabilities类负责获取显卡和硬件信息原创 2018-11-24 22:12:38 · 815 阅读 · 0 评论