Osg 开发一:OpenSceneGraph 介绍及开发环境设置

发布时间:2026/7/12 22:15:20

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/

相关新闻

60.微服务架构介绍

60.微服务架构介绍

2026/7/12 22:15:20

highcharter地图可视化完全手册:从基础地图到高级地理信息展示

highcharter地图可视化完全手册:从基础地图到高级地理信息展示

2026/7/12 22:15:20

highcharter地图可视化完全手册:从基础地图到高级地理信息展示 【免费下载链接】highcharter R wrapper for highcharts 项目地址: https://gitcode.com/gh_mirrors/hi/highcharter 想要在R语言中创建专业级的地图可视化吗?highcharter作为R的Hig…

Element Plus性能优化实战指南:三步实现高效组件库访问与开发体验

Element Plus性能优化实战指南:三步实现高效组件库访问与开发体验

2026/7/12 22:05:19

Element Plus性能优化实战指南:三步实现高效组件库访问与开发体验 【免费下载链接】element-plus 🎉 A Vue.js 3 UI Library made by Element team 项目地址: https://gitcode.com/GitHub_Trending/el/element-plus Element Plus作为Vue.js 3生态…

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

2026/7/13 0:05:25

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools 你是否曾经想要调整Palwor…

语音转文字工具AsrTools:让音频整理变得简单高效

语音转文字工具AsrTools:让音频整理变得简单高效

2026/7/13 0:05:25

语音转文字工具AsrTools:让音频整理变得简单高效 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate text …

卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

2026/7/13 0:05:25

研究痛点提出(提出问题)重组肠激酶是融合标签切除核心工具酶,当前原核表达体系存在三大标准化难题,直接阻碍可复现的蛋白质分离纯化流程搭建:Trx、GST、单 SUMO 标签融合产物绝大多数为包涵体,沉淀占比超 9…

卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

2026/7/13 0:05:25

1 研究背景与现存技术痛点(提出问题)基因工程、蛋白质组学、生物制药研发流程中,蛋白质分离纯化是决定下游实验成败的关键环节。当前实验室常规蛋白质分离纯化工艺存在三类难以标准化的技术瓶颈:传统离子交换、分子筛层析无特异性…

卡梅德生物技术快报|纯化重组蛋白:变异链球菌 SepM 截短蛋白载体构建、诱导优化与纯化重组蛋白全套参数方案

卡梅德生物技术快报|纯化重组蛋白:变异链球菌 SepM 截短蛋白载体构建、诱导优化与纯化重组蛋白全套参数方案

2026/7/13 0:05:25

1 研究背景与现存技术痛点(提出问题)在口腔微生物分子机制研究中,SepM 蛋白酶是调控变异链球菌群体感应、致龋菌素合成的核心功能蛋白,体外功能验证、抗体开发均依赖高纯度可溶性 SepM 蛋白。当前原核表达体系针对 SepM 存在三大技…

morss核心功能解析:自动提取网页全文的秘密

morss核心功能解析:自动提取网页全文的秘密

2026/7/12 23:55:24

morss核心功能解析:自动提取网页全文的秘密 【免费下载链接】morss Get full text RSS feeds 项目地址: https://gitcode.com/gh_mirrors/mo/morss morss是一款强大的工具,能够帮助用户获取网页的全文RSS订阅,让你轻松获取完整的文章内…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/12 0:03:42

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/12 0:03:42

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/12 0:03:42

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

卡梅德生物技术快报|纯化重组蛋白:变异链球菌 SepM 截短蛋白载体构建、诱导优化与纯化重组蛋白全套参数方案

卡梅德生物技术快报|纯化重组蛋白:变异链球菌 SepM 截短蛋白载体构建、诱导优化与纯化重组蛋白全套参数方案

2026/7/13 0:05:25

1 研究背景与现存技术痛点(提出问题)在口腔微生物分子机制研究中,SepM 蛋白酶是调控变异链球菌群体感应、致龋菌素合成的核心功能蛋白,体外功能验证、抗体开发均依赖高纯度可溶性 SepM 蛋白。当前原核表达体系针对 SepM 存在三大技…

卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

2026/7/13 0:05:25

1 研究背景与现存技术痛点(提出问题)基因工程、蛋白质组学、生物制药研发流程中,蛋白质分离纯化是决定下游实验成败的关键环节。当前实验室常规蛋白质分离纯化工艺存在三类难以标准化的技术瓶颈:传统离子交换、分子筛层析无特异性…

卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

2026/7/13 0:05:25

研究痛点提出(提出问题)重组肠激酶是融合标签切除核心工具酶,当前原核表达体系存在三大标准化难题,直接阻碍可复现的蛋白质分离纯化流程搭建:Trx、GST、单 SUMO 标签融合产物绝大多数为包涵体,沉淀占比超 9…