尧图网络 高端网站定制 · 原创设计
免费咨询热线
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/11/12 14:35:25
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/9/15 0:16:27
如何快速掌握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/9/20 13:27:30
MORE NEWS

更多资讯

📰

宾县电工证在哪考内部消息实操考试心里没底怕挂科怎么破

宾县电工证在哪考内部消息实操考试心里没底怕挂科怎么破 实操考试心里没底怕挂科,这是很多准备考电工证的朋友最怕遇到的问题。尤其是现在电工证的考试要求越来越高,考试内容也越来越贴近实际操作。 内部消息…

📰

你急需电工证才能上岗?官方回应来了,消防检查电工证吗?周口应届生必看

你急需电工证才能上岗?官方回应来了,消防检查电工证吗?周口应届生必看 你急需特种作业证才能上岗找工作,偏偏又搞不清消防检查电工证吗?更别提流程复杂、政策变化快,搞不好就耽误了入职机会。官方回应明确表示, 特种作业操作证是上岗的“硬门槛”…

📰

河南考电工证考试时间千万别踩坑!施工企业负责人必看

河南考电工证考试时间千万别踩坑!施工企业负责人必看 你是不是也遇到过这种情况?项目开工在即,却迟迟拿不到电工证,整个人都慌了。电工证是特种作业操作证中非常重要的一种,没有它,你连工地都进不了,更别说上岗了。 千万别踩坑…

📰

南昌特种工证怎么转异地,上岗必备攻略来了!

南昌特种工证怎么转异地,上岗必备攻略来了! 工地太忙根本没时间复习考试,你是不是也经常这样想?特别是在南昌,特种工证是上岗必备的通行证,但考证、复习、复审这些环节,对一线施工人员来说,简直成了“时间杀手”。今天,我们就从南昌特种工的实际需求…

📰

电工证考试资格要求保姆级教程:别让证件耽误你找工作

电工证考试资格要求保姆级教程:别让证件耽误你找工作 你是不是正在找电工相关的工作,却发现面试官一开口就问“有没有电工证”?别急,这不是在考验你,而是国家明文规定,特种作业人员必须持证上岗。今天这篇【电工证考试资格要求保姆级教程】,就是帮你把…

📰

特种工证社保缴费标准多久拿证 从业者必看的实操指南

特种工证社保缴费标准多久拿证 从业者必看的实操指南 你是不是正愁找不到工作?特种作业证没拿到,连面试资格都没有。现在全国很多工地、工厂、企业, 特种工证 几乎是入职门槛,特别是像 电工、焊工、高处作业、制冷空调…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

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

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

📞 💬