尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Osg 开发三:OpenSceneGraph 变换节点及工程实例
文章目录一 OSG Group 节点二 OSG 变换节点三 变换节点示例1 开发环境2 工程配置3 位置变换节点示例4 矩阵变换节点示例5 对齐变换节点示例其他一 OSG Group 节点osg::Group组节点是 OSG 的核心部分用来组织场景图中的数据。osg::Group上可以添加任意数量的子节点子节点可以继续分发子节点以此类推。通常情况下只有父节点引用osg::Group当释放场景图的根节点时会引发连锁的内存释放避免内存泄漏。osg::Group派生出许多实用的节点类如osg::LOD、osg::Switch、osg::Transform等。本文重点介绍osg::Transform。二 OSG 变换节点osg::Transform变换节点继承自osg::Group派生出osg::PositionAttitudeTransform、osg::MatrixTransform、osg::AutoTransform等。继承关系如下图所示派生变换节点的功能描述如下表所示名称功能描述osg::PositionAttitudeTransform位置变换节点的作用是提供模型的位置变换、大小缩放、原点位置的设置以及坐标系的变换。osg::MatrixTransform矩阵变换节点负责场景中的矩阵变换、矩阵运算及坐标系的变换实现对模型的旋转、平移等操作。osg::AutoTransform自动对齐节点的作用是使节点自动对齐于摄像机或者屏幕。实际引用中通常用来显示一些不变换的文字或者其他标识。三 变换节点示例1 开发环境操作系统Windows10及以上Qt 6.8.0 (MSVC 2022) Release / Qt 5.12.12 (MSVC 2017) 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 位置变换节点示例1osg::PositionAttitudeTransform的常用成员函数voidsetPosition(constVec3dpos)//设置位置constVec3dgetPosition()const//得到位置voidsetAttitude(constQuatquat)//设置姿态参数为四元数constQuatgetAttitude()const//得到姿态2示例代码voidMainWindow::initPosTransform(){// 初始化view3d//......osg::ref_ptrosg::Grouprootnew osg::Group();osg::ref_ptrosg::NodenodeosgDB::readNodeFile(cow.osg);osg::ref_ptrosg::PositionAttitudeTransformpat1new osg::PositionAttitudeTransform();pat1-setPosition(osg::Vec3(-10.0f,0.0f,0.0f));pat1-setScale(osg::Vec3(0.5f,0.5f,0.5f));pat1-addChild(node.get());osg::ref_ptrosg::PositionAttitudeTransformpat2new osg::PositionAttitudeTransform();pat2-setPosition(osg::Vec3(10.0f,0.0f,0.0f));pat2-addChild(node.get());root-addChild(pat1.get());root-addChild(pat2.get());osgUtil::Optimizer optimizer;optimizer.optimize(root.get());viewer-setSceneData(root.get());ui-stackedWidget-addWidget(viewer);}(3) 测试结果4 矩阵变换节点示例1osg::MatrixTransform常用成员函数voidsetMatrix(constMatrixmat)//设置矩阵constMatrixgetMatrix()const//得到矩阵voidpreMult(constMatrixmat)//递乘比较类似于avoidpostMult(constMatrixmat)//递乘比较类似于aconstMatrixgetInverseMatrix()const//得到逆矩阵2示例代码voidMainWindow::initRectTransform(){// 初始化view3d//......osg::ref_ptrosg::Grouprootnew osg::Group();osg::ref_ptrosg::NodenodeosgDB::readNodeFile(cow.osg);osg::ref_ptrosg::MatrixTransformmat1new osg::MatrixTransform();osg::Matrix m;m.makeTranslate(osg::Vec3(10.0f,0.0f,0.0f));m.makeRotate(45.0f,1.0f,0.0,0.0);mat1-setMatrix(m);mat1-addChild(node.get());osg::ref_ptrosg::MatrixTransformmat2new osg::MatrixTransform();osg::Matrix t;t.makeTranslate(osg::Vec3(-10.0f,0.0f,0.0f));mat2-setMatrix(t);mat2-addChild(node.get());root-addChild(mat1.get());root-addChild(mat2.get());osgUtil::Optimizer optimizer;optimizer.optimize(root.get());viewer-setSceneData(root.get());ui-stackedWidget-addWidget(viewer);}3测试结果5 对齐变换节点示例1osg::AutoTransform的对齐模式enumAutoRotateMode{NO_ROTATION,//无ROTATE_TO_SCREEN,//自动朝向屏幕ROTATE_TO_CAMERA//自动朝向相机}2示例代码voidMainWindow::initAutoTransform(){// 初始化view3d//......osg::ref_ptrosg::Grouprootnew osg::Group();std::stringtext(Fly To Sky);//3种变换模式//ROTATE_TO_SCREEN 自动朝向屏幕//ROTATE_TO_CAMERA 自动朝向相机//NO_ROTATION 无//添加ROTATE_TO_SCREEN模式变换节点root-addChild(createAutoTransform(osg::Vec3(0.0f,0.0f,60.0f),60.f,text,osg::AutoTransform::ROTATE_TO_SCREEN,osgText::Text::XY_PLANE));root-addChild(createAutoTransform(osg::Vec3(0.0f,0.0f,0.0f),60.f,text,osg::AutoTransform::NO_ROTATION,osgText::Text::YZ_PLANE));root-addChild(createAutoTransform(osg::Vec3(0.0f,0.0f,-60.0f),60.f,text,osg::AutoTransform::ROTATE_TO_CAMERA,osgText::Text::XY_PLANE));osgUtil::Optimizer optimizer;optimizer.optimize(root.get());viewer-setSceneData(root.get());ui-stackedWidget-addWidget(viewer);}3测试结果其他官方店https://2td9n4muhvgusvzepfo0a3cyfue8cph.taobao.com/
RELATED

相关推荐

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

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

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生态…

📅 2026/8/20 20:03:52
GoPro Python自动化控制终极指南:5个高级技巧释放相机全部潜力

GoPro Python自动化控制终极指南:5个高级技巧释放相机全部潜力

GoPro Python自动化控制终极指南:5个高级技巧释放相机全部潜力 【免费下载链接】gopro-py-api Unofficial GoPro API Library for Python - connect to GoPro via WiFi. 项目地址: https://gitcode.com/gh_mirrors/go/gopro-py-api gopro-py-api是一个强大的…

📅 2026/8/9 13:34:06
如何快速掌握AI提示词优化:面向初学者的完整教程

如何快速掌握AI提示词优化:面向初学者的完整教程

如何快速掌握AI提示词优化:面向初学者的完整教程 【免费下载链接】prompt-optimizer An AI prompt optimizer for writing better prompts and getting better AI results. 项目地址: https://gitcode.com/GitHub_Trending/pro/prompt-optimizer 你是否曾经花…

📅 2026/8/10 4:03:39
MORE NEWS

更多资讯

📰

AI时代教育系统的困境与转型路径

1. 教育系统的时代困境那天在教师休息室,听到几位老教师在讨论:"现在的学生拿着手机5分钟就能查到我们备课两小时的内容,这课还怎么上?"这句话像一记重锤,让我开始认真思考我们教育系统面临的真实挑战。当前…

📰

VC++ MFC双人围棋程序:19×19棋盘实现与绘图交互详解

简介:这是一份面向VC初学者与游戏开发兴趣者的双人围棋对弈程序源码包,聚焦MFC框架下的GUI界面设计与基础博弈逻辑实现,帮助开发者掌握Windows桌面游戏开发的核心流程。资源共24个文件,包含6个CPP源文件与7个H头文件构成完整程序架…

📰

系统拓展CSS核心能力:从选择器、布局到动效与工程化实战

写CSS这行,写久了都会遇到一个尴尬时刻:排版调了又调没问题,一到动效、响应式、复杂布局就卡壳;或者干脆不知道自己“到底哪里不行”只是照着网上的代码抄,换个场景就不会了。这篇文章想说的“拓展”,不是让…

📰

人脸设备如何深度嵌入业务流程?从识别终端到边缘智能节点

1. 一台设备,千种用法:人脸设备不是“刷脸机器”,而是业务流程的嵌入式神经节点你手头那台标着“人脸识别终端”的设备,大概率正安静地立在公司前台、小区门禁旁、或者工厂考勤通道里。它看起来就干一件事:拍张脸&…

📰

二叉树重建算法:前序+中序与后序+中序实现详解

1. 二叉树重建问题解析前些天帮团队新人调试代码时,发现不少人对二叉树遍历序列的转换存在理解偏差。这个问题在技术面试中出现频率极高,根据我参与校招面试的统计数据显示,每场面试平均会出现1.2次与二叉树重建相关的考察点。今天我们就来深…

📰

【郑州工程技术学院主办 | 河南郑州召开 | SPIE出版】第三届模式识别与图像分析国际学术会议(PRIA 2026)

第三届模式识别与图像分析国际学术会议(PRIA 2026) 2026 3rd International Conference on Pattern Recognition and Image Analysis 第三届模式识别与图像分析国际学术会议(PRIA 2026)将于2026年11月6-8日在河南郑州召开&#…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

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

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

📞 💬