1.引言 想写这个程序的起因是我们即将要开发三维CAD相关,所以用到OSG,但是OSG的安装过于繁琐,我们的项目下个月就要开始了,所以想着自己写个程序帮助同事们直接跳过最繁琐的配置环节,今天虽然是周六并且我还在发烧...,但中午仍然是干了4个小时,写出来了这个程序,现在只把源码放上来,挖坑以后再填,具体的使用方法请看这里:OSG源码下载后,快速配置Cmake的C++程序 2.源码 #include <iostream...= current_path / "OpenSceneGraph-OpenSceneGraph-3.6.5"; fs::path osg_new_path = current_path / "...OpenSceneGraph"; fs::rename(osg_old_path, osg_new_path); // 第二步 fs::path build_path = osg_new_path...=ON" + " -DCMAKE_INSTALL_PREFIX=" + osg_new_path.string() + " -DBUILD_MFC_EXAMPLE=ON"
OSG C++ 获取文件后缀 OSG修改文件后缀名: 在使用OSG开发时,可以使用OSG提供的接口快速实现文件后缀名的修改,而不用麻烦地自己去写C++代码。...在osg的osgDB/FileNameUtils库中,提供了获取和修改文件后缀的函数,如下: /** Gets the parent path from full name (Ex: /a/b/c.Ext
::ref_ptr group = new osg::Group(); vector subDirs; findDir(dataDir, subDirs);...::ref_ptr node = osgDB::readNodeFile(path); osg::ref_ptr lod = new osg::PagedLOD...::LOD::RangeMode::PIXEL_SIZE_ON_SCREEN); osg::ref_ptr geode = new osg::Geode; geode->...; osg::ref_ptr lod = new osg::PagedLOD(); auto bs = node->getBound(); auto c = bs.center...::PIXEL_SIZE_ON_SCREEN); osg::ref_ptr geode = new osg::Geode; geode->getOrCreateStateSet(
数据资源准备 在OSG官方网站上下载最新的源码包。一般要求下载三个包: OpenSceneGraph-3.6.3,OSG的源码包。...2) BUILD_OSG_EXAMPLES/BUILD_MFC_ EXAMPLE: 这两个都是OSG的示例,可以勾选编译进去方便以后学习。...include文件夹就是OSG安装的include文件夹,里面是OSG的头文件。lib/lib_D则放入OSG的lib文件。HelloOSG就是我们用VS2015新建的空白win32控制台工程。...参考文献 OSG环境搭建(OSG3.6.2+VS2017+Qt5.10.1) VS2015+OSG3.6.1编译问题 OSG3.4.0+VS2010+WIN10编译及二次开发环境搭建 VS2010+64...+OSG3.2.1之一帮助文档的生成
最近做了一段时间的CEGUI和OSG之间的结合,有一点小小的收获。写一篇文章来记录所做的一点点事情。 下面写一点CEGUI和OSG之间结合的东西。...一.整体过程概述: CEGUI作为OSG的Drawable集成到OSG中。CEGUI继承osg::Drawable类,作为一个Drawable完成初始化,加入到一个节点中(osg::Geode)。...然后将该节点在Viewerd执行realize()之后加入到osg::Group对象中。即可将CEGUI集成到OSG中。...::ref_ptr gnode = new osg::Geode; osg::ref_ptr stateset = gnode->getOrCreateStateSet...osg::Geode> gnode = new osg::Geode; osg::ref_ptr stateset = gnode->getOrCreateStateSet
int main() { osg::AnimationPath* path = new osg::AnimationPath; osg::AnimationPath...::TimeControlPointMap tcp; tcp[0.0] = osg::AnimationPath::ControlPoint(osg::Vec3d(-4, 0, 0), osg:...:Quat(1, 0, 0, 0)); tcp[4.0] = osg::AnimationPath::ControlPoint(osg::Vec3d(4, 0, 0), osg::Quat(1,...0, 0, 0)); path->setTimeControlPointMap(tcp); osg::ref_ptr mt = new osg...(osg::Vec3d(-4, 0, 0), osg::Quat(1, 0, 0, 0)); tcp[4.0] = osg::AnimationPath::ControlPoint(osg::Vec3d
osg::Group(); string osgPath = "D:/Work/OSGBuild/OpenSceneGraph-Data/glider.osg"; osg::Node...::StateSet * ss = node->getOrCreateStateSet(); osg::ref_ptr program = new osg::Program...::ON); } int main() { osg::ref_ptr root= new osg::Group(); string osgPath = "D:...::StateSet * ss = node->getOrCreateStateSet(); osg::ref_ptr program = new osg::Program...::ON); } int main() { osg::ref_ptr root= new osg::Group(); string osgPath = "D:
1.解决方案 不得不说关于OSG的资料实在太零散了,搜索了很多关于OSG在QT下的解决方案,都是各有各的说法,有的说的不是很清楚,有的已经过时了。这里提供一下自己的解决方案吧。...在远古的OSG里面,应该是提供对QT的支持的;不过应该是由于QT版本变动比较大,现在的OSG版本应该已经没有了。...( osg::Vec4(0.2, 0.2, 0.6, 1.0) ); camera->setViewport( new osg::Viewport(0, 0, traits->width...::DisplaySettings* ds = osg::DisplaySettings::instance().get(); osg::ref_ptr<osg::GraphicsContext...CullThreadPerCameraDrawThreadPerContext; #if QT_VERSION >= 0x040800 // Required for multithreaded QGLWidget on Linux
正文 我之前在这篇博文《OSG嵌入QT的简明总结》中论述了OSG在QT中显示的可视化问题。...int main(int argc, char* argv[]) { QSurfaceFormat format = QSurfaceFormat::defaultFormat(); #ifdef OSG_GL3...::ref_ptr loadedModel = osgDB::readRefNodeFile(filename); // optimize the scene graph...第二个是这个解决方案获取的帧数好像是自己计算的,与OSG内部计算的帧数不同似乎也正常。不过我这里是不太敢用这个解决方案了,目前还是使用之前的解决方案,以后有机会还是自己研究一下其中的实现。...参考 OpenSceneGraph + QOpenGLWidget - minimal example OSG 使用Qt的QOpenGLWidget
/Light> using namespace std; using namespace osg; //添加灯光节点 void AddLight(osg::ref_ptr group...启用指定光源 //创建一个Light对象 osg::ref_ptr light = new osg::Light(); light->setLightNum(0);...->addChild(lightSource); } int main() { //根节点 osg::ref_ptr root = new osg::Group; root..., osg::StateAttribute::ON); // 启用指定光源 //创建一个Light对象 osg::ref_ptr light = new osg::Light...->addChild(lightSource); } int main() { //根节点 osg::ref_ptr root = new osg::Group; root
目录 1.解决方案 1) 使用TIF格式的DEM 2) 描述HeightField 2.存在问题 3.参考文档 1.解决方案 在网上参考了一些资料,使用OSG创建地形最简单的办法就是使用OSG::HeightField...::Geode* geode = new osg::Geode(); osg::ref_ptr heightShape = new osg::ShapeDrawable...osgDB::readImageFile(texFile); osg::ref_ptr tex = new osg::Texture2D; tex->setImage...(texImage); tex->setDataVariance(osg::Object::DYNAMIC); //渲染状态 osg::ref_ptr stateset...3.参考文档 osg三维重建的两种方法剖析:三角面片(osgUtil::DelaunayTriangulator)和四角面片(osg::HeightField) OSG从高程图创建地形-可运行 OSG从高程图创建地形
/TriangleFunctor> using namespace std; using namespace osg; osg::ref_ptr redPolygon;...//计算空间三角形的面积 double CalTriangleArea(const osg::Vec3& a, const osg::Vec3& b, const osg::Vec3& c) {...::Geometry; // osg::ref_ptr redVex = new osg::Vec3Array; redPolygon->setVertexArray...//设置颜色数组 osg::ref_ptr redColors = new osg::Vec4Array; redColors->push_back(osg::Vec4...参考 OSG学习笔记(三)之如何将非三角面转换为三角面 osg几何体的图元的遍历 OSG计算并绘制模型中每一个三角面片的法向量 OSG(OpenSceneGraph)基础学习9:OSG多边形分格化
概述 我在《OSG加载倾斜摄影数据》这篇博文中论述了如何通过OSG生成一个整体的索引文件,通过这个索引文件来正确显示ContextCapture(Smart3D)生成的倾斜摄影模型数据。...osgEarth::GeoTransform,可以直接通过这个类的接口来加载倾斜摄影模型: std::string filePath = "D:/Data/scene/Dayanta/Data.osgb"; osg...::ref_ptr node = osgDB::readNodeFile(filePath); osg::ref_ptr xform...着色 另外一点要注意的是直接读取加载的倾斜摄影模型是没有颜色信息的,这点和OSG还不太一样,在帮助文档里面论述了这个问题: ?..."D:/Data/scene/Dayanta/Data.osgb"; osg::ref_ptr node = osgDB::readNodeFile(filePath); osg
1.首先创建工程之前必须先链接OSG以及CEGUI的开发库,根据自身配置路径进行设置,现将本人设置路径贴出来以供参考,如下: 包含目录: E:\OSG\include F:\CEGUI\cegui...#pragma once #include #include #include #include <CEGUI...::CopyOp ©op=osg::CopyOp::SHALLOW_COPY):Drawable(drawable,copyop){} META_Object(osg,CEGUIDrawable...坐标系统是不一样的,如果是全屏的话,CEGUI中的0在OSG中是900(以1440*900为例),所以需要进行调整,以便CEGUI与OSG屏幕一致 return false; } case...::ref_ptr geode = new osg::Geode; osg::ref_ptr cd = new CEGUIDrawable
/FeatureModelLayer> #include using namespace std; void AddVector(osg...filePath; fmlOpt.featureSourceLayer() = filePath + "_source"; fmlOpt.enableLighting() = false; osg...::ref_ptr map = new osgEarth::Map(mapOpts); osg::ref_ptr mapNode =...map->addLayer(layer); AddVector(map); osgViewer::Viewer viewer; viewer.setSceneData(mapNode); osg...false; fmlOpt.styles() = new osgEarth::Symbology::StyleSheet(); fmlOpt.styles()->addStyle(style); osg
osgEarth::MapOptions mapOpts; mapOpts.cache() = cacheOpts; mapOpts.profile() = profileOpts; //创建地图节点 osg...::ref_ptr map = new osgEarth::Map(mapOpts); osg::ref_ptr mapNode =...osgEarth::Drivers::GDALOptions gdal; gdal.url() = "D:/Work/OSGNewBuild/osgearth-2.10.1/data/world.tif"; osg...BlueMarble", gdal); map->addLayer(layer); osgViewer::Viewer viewer; viewer.setSceneData(mapNode); osg...::ref_ptr map = new osgEarth::Map(mapOpts); osg::ref_ptr mapNode =
1) OpenSceneGraph OSGEarth是OpenSceneGraph扩展库,编译过程可以参看我的另一篇文章:Win64下编译OSG详细过程(Win10+VS2015+OSG3.6.3)。...OSG有非常多的子类库,所以如果自己一个个填写的话非常麻烦。...然后填写文件夹C到OSG_DIR编译项,最后再次“Configure”,就可以帮你自动识别了相关的路径了。 ?
2) 日照方向 关于日照方向,我在《通过OSG实现对模型的日照模拟》这篇文章里面有过详细的表述,那么这里就直接搬运过来。 (1) 太阳高度角和太阳方位角 对于太阳光照来说,其方向并不是随便设置的。...我这里用到了GDAL来读写DEM和图像,此外还有向量计算用到了osg库里面的内容,如果没有osg,可以自己简单实现下,都是很简单的数学知识。...#include #include #include #include #include using namespace std; using namespace osg; //计算三点成面的法向量 void Cal_Normal_3D(const Vec3d& v1, const...::Vec3d arrayvector(0.0f, 0.0f, -1.0f); double fAltitude = osg::DegreesToRadians(solarAltitude);
其他Linux系统不需要,可直接跳至工具安装。.../configure WITH_OSG=no , ./configure WITH_TKENV=no WITH_QTENV=no . ? 开始编译: make -j8 ?
最近上线了的基于HTML5的燃气3D培训仿真系统,以前的老系统是采用基于C++和OpenGL的OpenSceneGraph引擎设计的,OSG引擎性能和渲染效果各方面还是不错的,但因为这次新产品需求要求能运行多移动终端...,多年前基于MFC封装OSG的老系统架构也实在该退休了,这年头找能维护MFC这种古董级GUI的靠谱人也非易事。...,业务功能上还未有太大创新,但就目前的进度我们已经体会到HTML5的开发快速性,js语言也不是想象中那么弱,团队控制好一定的编码规范后js的灵活性带来的开发进度提高还是非常显著,刚开始选型大家还在争论OSG
领取专属 10元无门槛券
手把手带您无忧上云