尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Osg 开发一:OpenSceneGraph 介绍及开发环境设置
文章目录一 OpenSceneGraph 简介1 什么是 OpenSceneGraph2 OSG 中国3 OSG 组成模块二 OSG 开发1 开发环境2 环境设置3 Hello OSG 工程其他一 OpenSceneGraph 简介1 什么是 OpenSceneGraphOSG 是一个开源的场景图形管理开发库主要为图形图像应用程序的开发提供场景管理和图形渲染优化功能。2 OSG 中国2008年初成立的 OsgChina 是目前国内最大的专注于 OSG 发展和研究的网站和论坛以及 OSG 英文官方站点http://www.openscenegraph.org 的唯一中文镜像站。3 OSG 组成模块OpenScenceGraph 层次结构图如下图所示。OpenSceneGraph 及其扩展位于系统的API一级利用 OpenSceneGraph 可以轻松地开发其上层的应用程序。OSG 主要包括4个库1OSG 核心库Core Library。核心库主要用于实现最核心的场景数据库的组织和管理、对场景图形的操作以及外部数据库的导入提供接口等。它主要包括以下4个库。库名描述osg 库基本数据类负责提供基本场景图类构建场景图节点如节点类、状态类、绘制类、向量和矩阵数据计算以及一般的数据类osgUtil 库工具库类提供通用的公用类用于操作场景图形及内容如更新、裁减、遍历、数据统计及场景图的一些优化osgDB 库数据的读写库负责提供场景中数据的读写工作提供一个文件工具类。osgViewer 库OSG 2.0 后逐步发展稳定的一个视窗管理库可以集中各种窗体系统提供 OSG 与各种 GUI 的结合。2OSG 工具库NodeKit。工具库主要是对 OSG 核心库的扩充实现一些特定的功能。主要包括6个库。库名描述osgFX 库特殊效果节点工具用于渲染特效节点包括异性光照特效osgFXAnisotropic Lighting、凹凸贴图特效osgFX::BumpMapping、卡通渲染特效osgFX::Cartoon、刻线特效osgFXScribe、和立方图镜面高光特效osgFXSpecularHighlights等。osgParticle 库粒子系统的节点工具用于模拟各种天气或者自然现象效果如雨效、雪效和爆炸模拟等。osgSim 库虚拟仿真效果的节点工具用于特殊渲染如地形高程图、光点节点和DOF变换节点等。osgTerrain 库生成地形数据的节点工具用于渲染高程数据如TIF、IMAGE和DEM等各种高程数据格式。osgText 库文字节点工具用于向场景中添加文字信息支持TrueType字体。osgShadow 库阴影节点工具用于向场景中添加实时阴影提高场景渲染的真实性。3OSG 插件库。支持各种第三方库OSG 能够直接或者间接地导入3D模型或图片等场景数据。4OSG 内省库osgIntrospection。内省库提供一个与语言无关的运行程序接口确保了 OSG 可以在更多的环境下运行。综上OSG 的组成模块如下图所示二 OSG 开发1 开发环境操作系统Windows10及以上Qt 6.8.0 (MSVC 2022) Release2 环境设置1包含文件和库文件目录INCLUDEPATH$$PWD/xxx/osg/include LIBS-L$$PWD/xxx/osg/lib/-lOpenThreads-losg-losgAnimation-losgDB-losgFX-losgGA \-losgManipulator-losgParticle-losgParticle-losgPresentation \-losgQOpenGL-losgShadow-losgSim-losgTerrain-losgText \-losgUI-losgUtil-losgViewer-losgVolume-losgWidget2将osg动态库.dll拷贝到可执行文件所在目录3 Hello OSG 工程1Qt 中嵌入 OSG 窗口参考文档Qt 中嵌套 OSG 窗口Qt 中嵌入 OSG 窗口的方式有两种方式一是继承于 QOpenGLWidget方式二是继承 QOpenGLWidget 和 osgViewer::Viewer。本文采用方式二主要代码如下。// 头文件 view3d.hclass Viewer3D:public QOpenGLWidget,public osgViewer::Viewer{Q_OBJECT public:Viewer3D(QWidget*parentnullptr);~Viewer3D();protected:boolevent(QEvent*e)override;voidsetKeyboardModifiers(QInputEvent*event);voidkeyPressEvent(QKeyEvent*event)override;voidkeyReleaseEvent(QKeyEvent*event)override;voidmousePressEvent(QMouseEvent*event)override;voidmouseReleaseEvent(QMouseEvent*event)override;voidmouseDoubleClickEvent(QMouseEvent*event)override;voidmouseMoveEvent(QMouseEvent*event)override;voidwheelEvent(QWheelEvent*event)override;voidresizeEvent(QResizeEvent*event)override;voidmoveEvent(QMoveEvent*event)override;voidtimerEvent(QTimerEvent*event)override;voidpaintGL()override;private:voidinit3D();osg::ref_ptrosg::CameracreateCamera(intx,inty,intw,inth);private:osgViewer::GraphicsWindow*m_window;qreal m_scale;};// 初始化 osg 窗口voidViewer3D::init3D(){setCamera(createCamera(0,0,width(),height()));setCameraManipulator(new osgGA::TrackballManipulator);addEventHandler(new osgViewer::StatsHandler);addEventHandler(new osgViewer::ThreadingHandler());addEventHandler(new osgViewer::HelpHandler);addEventHandler(new osgGA::StateSetManipulator(this-getCamera()-getOrCreateStateSet()));setThreadingModel(osgViewer::Viewer::SingleThreaded);realize();getCamera()-setComputeNearFarMode(osg::CullSettings::COMPUTE_NEAR_FAR_USING_PRIMITIVES);getCamera()-setNearFarRatio(0.000003f);startTimer(10);}2Hello OSG 工程#includeosg/Node//核心库基本数据类。节点#includeosg/Geode//叶节点#includeosg/Group//组节点#includeosgDB/ReadFile//核心库数据的读写库#includeosgDB/WriteFile#includeosgUtil/Optimizer//核心库工具类库//创建 Viewer 对象场景浏览器Viewer3D*viewernewViewer3D(this);//创建场景组节点osg::ref_ptrosg::Grouprootnew osg::Group();//创建一个节点读取牛的模型osg::ref_ptrosg::NodenodeosgDB::readNodeFile(cow.osg);//添加到场景root-addChild(node.get());//优化场景数据osgUtil::Optimizer optimizer;optimizer.optimize(root.get());//设置场景数据viewer-setSceneData(root.get());从上面的程序可以看出构建 OSG 场景渲染程序的开发步骤如下设置编程环境指定头文件。创建场景浏览器用于渲染场景。设置场景数据从外部加载模型或者场景数据。设置场景数据为渲染场景建立场景树确定场景数据之间的关系。渲染实现场景渲染。3测试结果其他官方店https://2td9n4muhvgusvzepfo0a3cyfue8cph.taobao.com/
RELATED

相关推荐

60.微服务架构介绍

60.微服务架构介绍

📅 2026/11/12 14:17:19
AIGC(生成式AI)试用 45 -- 个人知识库 DocsGpt

AIGC(生成式AI)试用 45 -- 个人知识库 DocsGpt

一切从DocsGPT的API调用开始。 0. 启动DocsGpt 1) 启动 Docker Desktop 2) 启动 DocsGPT # Launch DocsGPT with Docker Compose docker compose -f deployment/docker-compose.yaml up -d # Launch DocsGPT with Ollama, CPU docker …

📅 2026/9/14 23:57:56
《凌微经》简介目录与思想总纲

《凌微经》简介目录与思想总纲

《凌微经——对称性共生关系论》是一部奠基于逻辑理性的体系化哲学著作。它通过分析解构与理论建构,尝试为世界万象——从科学、逻辑学、数学到哲学、语言学、美学、人文价值乃至神秘主义,寻求一个圆融且自洽的统一解释框架,用以指导人生和安…

📅 2026/10/10 16:11:56
MORE NEWS

更多资讯

📰

台州特种工考证哪家好全国通用吗怎么转过来

台州特种工考证哪家好全国通用吗怎么转过来 之前考的证在外省能不能转过来,这是很多特种作业人员最关心的问题,尤其是那些在外地打工多年、准备回老家发展的朋友。其实, 全国通用…

📰

低压电工证和弱电考前押题怎么找?别被中介骗了

低压电工证和弱电考前押题怎么找?别被中介骗了 你是不是正打算考低压电工证和弱电,但又不知道去哪报名,怕被中介坑?别急,这篇文章就是给你打的强心针,从报考到备考,从避坑到拿证,我这个干了10年应急管理行业的老手,把该说的都说透。…

📰

电工证实操怕挂科?手机查询电工证码+怎么报名全流程避坑指南

电工证实操怕挂科?手机查询电工证码+怎么报名全流程避坑指南 实操考试心里没底怕挂科,这几乎是所有报考电工证新手的第一反应。特别是像你这样刚入行的公路工程从业者,手上没证,干活都难上加码,更别说谈薪资了。今天就用一个真实的案例,带你一步步了解…

📰

电工证复印件借人怎么处理?通过率揭秘全在这了

电工证复印件借人怎么处理?通过率揭秘全在这了 之前考的证在外省能不能转过来?很多人手里拿着电工证,但因为工作调动、换城市等原因,不得不把证书交给别人,或者想把外省证转回本地。这种情况下,很多人不知道怎么处理,甚至担心被“借”走后证书会出问题…

📰

抚州市特种作业操作证千万别踩坑,找工作别没证

抚州市特种作业操作证千万别踩坑,找工作别没证 你是不是正为找工作发愁?特种作业证没拿到,连面试资格都没有?【抚州市特种作业操作证】办理流程复杂,很多人踩坑,别再走弯路了,今天我就给你说清楚,怎么顺利拿到证,别再被坑了。 ###…

📰

外省低压电工证能转过来吗?低压电工作业考试题库值不值得考

外省低压电工证能转过来吗?低压电工作业考试题库值不值得考 之前考的证在外省能不能转过来?这是很多在河南从事低压电工作业的朋友最关心的问题。尤其是在郑州金水区从事劳务班组的负责人,经常需要面对外地人员证件的使用和认证问题。低压电工作业考试题库…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬