尧图网络 高端网站定制 · 原创设计
免费咨询热线
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/8/8 11:51:21
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/8/8 11:54:55
《凌微经》简介目录与思想总纲

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

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

📅 2026/8/8 11:52:34
MORE NEWS

更多资讯

📰

数字政府政务中心智慧大厅管理系统设计方案:案以“管理+服务”为理念、“软件+硬件+数据+运维+宣传”一体化智慧化建设方案

该方案是一套面向数字政府政务大厅的“软件硬件数据运维宣传”一体化智慧化建设方案,核心目标是依托互联网、云计算、人工智能、大数据等技术,打造现代化智慧政务大厅,提升群众办事体验和政务管理效率。 该方案以“管理服务”为理念&#xf…

📰

AIGC、RAG、Agent、Function Call、MCP 到底啥关系?这次用 TaoToken 让 Codex 走通一遍示例

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

微信小程序端人脸识别图书馆座位预约签到系统设计

简介:基于人脸识别的图书馆座位预约系统微信小程序端,是一份面向小程序开发者与高校学生的完整项目源码资源。系统结合微信小程序轻量化界面与人脸识别验证,实现座位实时查看、在线预约、入馆自动核验与取消释放等核心流程,适合用…

📰

JuiceFS 目录用量统计(Dir Stats)实战指南:启用、查看与修复

JuiceFS 目录用量统计(Dir Stats)实战指南:启用、查看与修复 【免费下载链接】juicefs JuiceFS is a distributed POSIX file system built on top of Redis and S3. 项目地址: https://gitcode.com/GitHub_Trending/ju/juicefs Juice…

📰

基于YOLOv8的无人机农田重金属污染监测系统构建实战

简介:面向计算机视觉与目标检测方向的毕业设计场景,这份基于YOLOv8的农田土壤重金属污染区域无人机监测系统提供了完整可运行的工程方案。项目包含训练代码、推理脚本、可视化界面及配套数据集,可一键启动无人机航拍影像的污染区域识别&#…

📰

深度学习驱动的舌苔识别检测系统设计与实现

简介:一套基于深度学习的舌苔识别检测鉴定系统完整项目,适合计算机视觉方向毕业设计、课程实践或工程入门。资料内含可运行Python源码、带GUI交互界面、已训练模型权重、论文报告与运行截图,覆盖从数据预处理、模型训练到界面部署的主要流程&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

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

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

📞 💬