osgSim扩展库

news2024/9/23 13:22:58

1.osgSim扩展库

        osgSim是0SG的一个工具箱(NodeKit),提供了仿真系统中以及染OpenFlight 数据库所需的特殊渲染功能,如地形高程图、光点节点和 DOF 变换节点等。

        下面对一些可能会用到的类进行简单介绍。

1.1 DOFTransform

        osgSim::DOFTransform类是对 Multigen 中 DOF 操作的一个封装,主要用于机械仿真中的机械运动控制,如履带的运动和机器手臂的运动等。

        osgSim::DOFTransform 的继承关系图如图12-12 所示。

图12-12 osgSim::DOFTransform 的继承关系图

        从继承关系图中可以看出,它继承自osg::Transform,具备一般的变换操作,如平移、旋转。同时它也是一个组节点,可以添加自己的子节点。

        下面介绍 osgSim::DOFTransform的主要成员函数:

  1. void setMinHPR(const osg::Vec3 &hpr) // 设置最小HPR  
  2. const osg::Vec3 & getMinHPR()const// 得到最小HPR  
  3. void setMaxHPR(const osg::Vec3 &hpr) // 设置最大HPR  
  4. const osg::Vec3& getMaxHPR()const// 得到最大HPR  
  5. void setIncrementHPR(const osg::Vec3 &hpr) // 设置HPR增量  
  6. const osg::Vec3 & getIncrementHPR()const // 得到HPR增量  
  7. void setCurrentHPR(const osg::Vec3 &hpr) //设置当前HPR  
  8. const osg::Vec3 & getCurrentHPR()const//得到当前HPR  
  9. void updateCurrentHPR(const osg::Vec3 &hpr) //更新当前HPR  
  10. void setMinTranslate(const osg::Vec3 &translate) //设置最小平移  
  11. const osg::Vec3& getMinTranslate()const//得到最小平移  
  12. void setMaxTranslate(const osg::Vec3 &translate) //设置最大平移  
  13. const osg::Vec3 & getMaxTranslate()const//得到最大平移  
  14. void setIncrementTranslate(const osg::Vec3 &translate) //设置平移增量  
  15. const osg::Vec3 & getIncrementTranslate() const//得到平移增量  
  16. void setCurrentTranslate(const osg::Vec3 &translate) // 设置当前平移  
  17. const osg::Vec3 & getCurrentTranslate()const//得到当前平移  
  18. void updateCurrentTranslate(const osg::Vee3 &translate) //更新当前平移  
  19. void setMinScale(const osg::Vec3 &scale) //设置最小缩放  
  20. const osg::Vec3 & getMinScale()const//得到最小缩放  
  21. void setMaxScale(const osg::Vee3 &scale) //设置最大缩放  
  22. const osg::Vec3 & getMaxScale()const//得到最大缩放  
  23. void setIncrementScale(const osg::Vec3 &scale) //设置缩放增量  
  24. const osg::Vec3 & getIncrementScale()const//得到缩放增量  
  25. void setCurrentScale(const osg::Vec3 &scale) //设置当前缩放  
  26. const osg::Vec3 & getCurrentScale()const//得到当前缩放  
  27. void updateCurrentScale(const osg::Vec3 &scale) //更新当前缩放  
  28. void setPutMatrix(const osg::Matrix &put) //设置放置矩阵  
  29. const osg::Matrix & getPutMatrix()const//得到放置矩阵  
  30. void setInversePutMatrix(const osg::Matrix &inversePut) //设置放置逆矩阵  
  31. const osg::Matrix & getInversePutMatrix()const//得到放置逆矩阵  
  32. void setLimitationFlags(unsigned long flags) //设置限制标志  
  33. unsigned long getLimitationFlngs()const//得到限制标志  
  34. void setHPRMultOrder(const MultOrder order) //设置 HPR 的顺序  
  35. const MultOrdergetHPRMultOrder()const//得到 HPR 的顺序  
  36. void setAnimationOn(bool do_animate) // 设置动面开始控制变量  
  37. bool getAnimationOn()const//得到动面开始控制变量  
  38. void animate(float deltaTime)// DOF 动画  
  39. virtual bool computeLocalToWoridMatrix(osg::Matrix &matrix,osg::NodeVisitor *nv)const//计算局部矩阵到世界矩阵  
  40. virtual bool computeWorldToLocalMatrix(osg::Matrix &matrix,osg::NodeVisitor *nv)const //计算世界矩阵到局部矩阵  

1.2 osgSim::lmpostor

        osgSim::Impostor从osg::LOD类派生出来,继承了osg::LOD的接口,使用这个功能,可以不绘制远处的几何体,只需要将6个面使用贴图来表示,目的是使用假象的方法来提高渲染效率。

        osgSim::Impostor 的继承关系图如图12-13 所示。

图 12-13 osgSim::Impostor的继承关系图

        从继承图中可以看出,osgSim::Impostor继承自osg::LOD,是一个细节变换节点,可以对模型渲染简化。同时,它的父节点中包含 osgGroup 节点,因此,作为一个组节点,它可以添加自己的子节点来设置替代谊染。

        下面介绍osgSim::Impostor的主要成员函数

  1. void setlmpostorThreshold(float distance) // 设置Impostor开始距离  
  2. float getImpostorThreshold()const// 得到Impostor开始距离  
  3. void setlmpostorThresholdToBound(float ratio=1.0f) // 设置Impostor的开始距离相对物体包围球半径的比例  
  4. ImpostorSprite * findBestlmpostorSprite(unsigned int contextlD, const osg.:Vec3 &currLocalEyePoint)const// 查找最佳ImpostorSprite适应当前视点  
  5.   
  6. void addImpostorSprite(unsigned int contextlD, ImpostorSprite *is) // Impostor 中添加ImpostorSprite  
  7. ImpostorSpriteList & getlmpostorSpriteList(unsigned int contexID) //得到ImpostorSprite 列表  
  8. const ImpostorSpriteList & getlmpostorSpriteList(unsigned int contexID)const//得到constImpostorSprite 列表  
  9. virtual osg::BoundingSphere computeBound()const//计算节点的几何体或子节点的包围球  
  10. ImpostorSprite *createlmpostorSprite(osgUtil::CullVisitor *cv) //利用拣选(Cull)创建ImpostorSprite  

1.3  osgSim::lmpostorSprite

        一个三维的几何体在渲染时可使用贴图方块来替代,ImpostorSprite 通过将三维几何体渲染到贴图作为图像缓存(image cache),一般ImpostorSprite 通过osgUtil::CullSetting 类自动生成,没有必要直接用它生成。

        osgSim::ImpostorSprite 的继承关系图如图12-14 所示。

图12-14 osgSim::ImpostorSprite 的继承关系图

        下面介绍osgSim::ImpostorSprite 的主要成员函数:

  1. void setParent(Impostor *parcnt) //设置父节点,但父节点必须是一个替代节点(Impostor)  
  2. Impostor *getParent()//得到父节点  
  3. const Impostor *getParent()const//得到const父节点  
  4. void setStoredLocalEyePoint(canst osg::Vec3 &v) // 设置视点添加到ImpostorSprite  
  5. const osg::Vec3 & getStoredLocalEyePoint()const// 得到ImpostorSprite的视点  
  6. void setLastFrameUsed(int frameNumber) // 设置使用ImpostorSprite的最后一顿  
  7. int getLastFrameUsed()const// 得到使用ImpostorSprite的最后一顿  
  8. osg::Vec3* getCoords()// 得到匹配ImpostorSprite的四边形的坐标  
  9. const osg::Vec3 * getCoords()const// 得到匹配ImpostorSpriteconst四边形的坐标  
  10. osg::Vec2*getTexCoords()// 得到匹配ImpostorSprite的四边形的纹理坐标  
  11. const osg::Vec2* getTexCoords()const// 得到匹配ImpostorSpriteconst 四边形的坐标  
  12. osg::Vec3* getControlCoords()// 得到匹配ImpostorSprite的四边形的可控制的坐标  
  13. const osg::Vec3* getControlCoords()const// 得到匹配ImpostorSpriteconst四边形的可控制坐标  
  14. float calcPixelError(const osg::Matrix &MVPW)const// 当从局部坐标到屏幕华标转换时,像素计算发生错误  
  15. void setTexture(osg::Texture2D *tex, int s, int t) // 设置纹理贴图  
  16. osg::Texture2D * getTexture()// 得到纹理贴图  
  17. const osg::Texture2D  getTexture()const// 得到const纹理贴图  
  18. int s()const//返回s坐标  
  19. int t()const//返回t坐标  
  20. virtual void drawImplementation (osg::RenderInfo &renderInfo) const// 直接绘制ImpostorSprite  
  21. virtual osg::BoundingBoxcomputeBound()const// 计算绘制几何体的包围盒  
  22. void setCamera(osg::Camera *camera) // 设置一个相机,用于ImpostorSprite渲染  
  23. osg::Camera*getCamcra()// 得到用于ImpostorSprite渲染的相机  
  24. const osg::Camera getCamera()const// 得到用于ImpostorSprite渲染的const相机  

​​​​​​​1.4 osgSim::MultiSwitch

        osgSim::MultiSwitch 类是一个组节点类,它允许同时显示或隐藏多个选中的子节点,MultiSwitch是基于OpenFlight中的switch操作。

        osgSim::MultiSwitch的继承关系图如图12-15所示。

图12-15 osgSim::MuliSwitch 的继承关系图

        从继承关系图可以看出,osgSim::MultiSwitch 直接继承自 osg::Group 类作为一个组节点,可以添加自己的子节点。同时,它编写了一系列关于 OpenFlight 的节点的操作方法。

        下面介绍osgSim::MultiSwitch 的主要成员函数

  1. void setNewChildDefaultValue(bool value) // 设置新子节点的默认值  
  2. bool getNewChildDefaultValue()const// 得到新子节点的默认值  
  3. virtual bool addChild(osg::Node *child) // 添加子节点  
  4. virtual bool insertChild(unsigned int index, osg::Node *child) // 在特定的位置添加子节点  
  5. virtual bool removeChild(osg::Node *child) // 移除子节点  
  6. void setValue(unsigned int switchSet, unsigned int pos, bool value) // 设置某个特定位置的子节点的值  
  7. bool getValue(unsigned int switchSet, unsigned int pos)const// 得到某个特定位置的子节点的值  
  8. yoid setChildValue(const osg::Node *child, unsigned int switchSet, bool value) // 设置某个特定子节点的值  
  9. bool getChildValue(const osg::Node *child, unsigned int switchSet)const// 得到某个特定const子节点的值  
  10. bool setAllChildrenOff(unsigned int switchSet) // 设置所有子节点的值都为 OFF  
  11. bool setAllChildrenOn(unsigned int switchSet) // 设置所有子节点的值都为ON   
  12. bool setSingleChildOn(unsigned int switchSet, unsigned int pos)// 设置只有一个子节点为ON,其余为OFF  
  13. void setActiveSwitchSet(unsigned int switchSet) // 设置有效的Switch 列表被使用  
  14. unsigned int getActiveSwitchSet()const// 得到使用的有效的Switch 列表  
  15. void setSwitchSetList(const SwitchSetList &switchSetList)// 设置Switch列表  
  16. const SwitchSctList & getSwitchSetList()const//得到Switch列表  
  17. void setValueList(unsigned int switchSet, const ValueList &values) //设置一系列不同的值,用来实现特定的switch   
  18. const ValueList & getValueList(unsigned int switchSet)const//得到一系列不同的switch  

​​​​​​​1.5 osgSim::OverlayNode

        可以在一个场景上创建一个覆盖图,这张覆盖图的生成是通过预渲染一个子场景图形到一张贴图上,最后将生成的结果,即纹理贴图贴到场景上。

        osgSim::OverlayNode 的继承关系图如图12-16 所示。

图12-16 osgSim::OverlayNode 的继承关系图

        下面介绍osgSim::OverlayNode 的主要成员函数

  1. // 设置生成覆盖子图的技法  
  2. void setOverlayTechnique(OverlayTechnique technique)  
  3. // 得到生成覆盖子图的技法  
  4. OverlayTechnique getOverlayTechnique()const  
  5. // 设置生成覆盖子图纹理时执行的渲染标志  
  6. void setRenderTargetlmplementation(osg::Camera::RenderTargetImplementation impl)  
  7. // 设置用于生成覆盖子图的节点  
  8. void setOverlaySubgraph(osg::Node *node)  
  9. //得到用于生成覆盖子图的节点  
  10. osg::Node *getOverlaySubgraph()  
  11. //得到用于生成覆盖子图的const节点  
  12. const osg::Node *getOverlaySubgraph()const  
  13. //更新覆盖子图纹理  
  14. void dirtyOverlayTexture()  
  15. //设置覆盖子图持续更新  
  16. void setContinuousUpdate(bool update)  
  17. //得到覆盖子图持续更新的bool  
  18. bool getContinuousUpdate()const  
  19. //设置覆盖子图基面的高度  
  20. void setOverlayBaseHeight(double baseHeight)  
  21. //得到覆盖子图基面的高度  
  22. double getOverlayBaseHeight()const  
  23. //设置覆盖子图的背景清除色  
  24. void setOverlayClearColor(const osg::Vec4 &color)  
  25. //得到覆盖子图的背景清除色  
  26. const osg::Vec4 & getOverlayClearColor()const  
  27. //设置纹理环境模式  
  28. void setTexEnvMode(GLenum mode)  
  29. //得到纹理环境模式  
  30. GLenum getTexEnvMode()const  
  31. //设置爱盖子图的纹理单元  
  32. void setOverlayTextureUnit(unsigned int unit)  
  33. //得到覆盖子图的纹理单元  
  34. unsigned int getOverlayTextureUnit()const  
  35. //设置覆盖子图纹理的尺寸大小细分度
  36. void setOverlayTextureSizeHint(unsigned int size)
  37. //得到覆盖子图纹理的尺寸大小细分度
  38. unsigned int getOverlayTextureSizeHint()const

1.6  osgSim::VisibilityGroup 类

        在一个 Visibility 的盒子中,根据当前的相机的视点,发射一条线段,然后判断在盒子中的物体与这条射线是否有相交,如果相交,将显示次物体(遍历时会遍历到),否则是隐藏的。

        osgSim:: VisibilityGroup 的继承关系图如图12-17 所示。

图12-17 osgSim::VisibilityGroup的承关系图

        从继承关系图可以看出,osgSim::VisibilityGroup 直接继承自osg::Group 节点。作为一个组节点可以添加自己的子节点。同时,它编写了一系列关于场景中多个物体渲染顺序问题的操作,用于控制多个重合物体渲染时的选择。

        下面介绍osgSim::VisibilityGroup的主要成员函数

  1. //设置子节点的可见度  
  2. void setVisibilityVolume(osg::Node*node)  
  3. //得到子节点的可见度  
  4. osg::Node *getVisibilityVolumc()  
  5. //得到子节点的const可见度  
  6. const osg::Node*getVisibilityVolume()const  
  7. //设置遍历时相交测试的标识  
  8. void setVolumelntersectionMask(osg::Node::NodeMask mask)  
  9. //得到遍历时相交测试的标识  
  10. osg::Node::NodeMask getVolumeIntersectionMask()const  
  11. //设置线段的长度  
  12. void setSegmentLength(float length)  
  13. //得到线段的长度  
  14. float getSegmentlength()const  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1272630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

冒泡排序算法是对已知的数列进行从小到大的递增排序。

题目描述冒泡排序算法是对已知的数列进行从小到大的递增排序每个实例输出两行,第一行输出第1轮结果, 第二行输出最终结果 它的排序方法如下: 1.对数列从头开始扫描,比较两个相邻的元素,如果前者大于后者,则交换两者位置 2.重复步骤1,直到没有…

智能优化算法应用:基于旗鱼算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于旗鱼算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于旗鱼算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.旗鱼算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

go学习之json和单元测试知识

文章目录 一、json以及序列化1.概述2.json应用场景图3.json数据格式说明4.json的序列化1)介绍2)应用案例 5.json的反序列化1)介绍2)应用案例 二、单元测试1.引子2.单元测试-基本介绍3.代码实现4.单元测试的细节说明5.单元测试的综…

希亦、追觅和添可洗地机哪个好?3款热门洗地机测评

洗地机因为自身的超强清洁效果,能大大的降低家务清洁工作,所以近年来以及越来越成为家庭的标配家电。 地机选起来让人眼花缭乱,对于消费者来说,如何选择一台实用性价比高的洗地机已经是一个头疼的问题,看着宣传画面很…

【玩转 EdgeOne】| 腾讯云下一代边缘加速CDN EdgeOne 是安全加速界的未来吗?

目录 前言边缘加速与安全加固边缘计算与CDN的融合EdgeOne优秀的安全特性EdgeOne卓越的性能表现灵活的配置和管理生态系统的支持与发展技术创新与未来展望EdgeOne试用结束语 前言 在当下互联网的迅猛发展的时刻,云计算和边缘计算技术的快速发展为网络加速领域带来了…

10-微信小程序 图片 相机 二维码 动画相关API(实现选择相册、拍照、录像、动画)

10-微信小程序 图片 相机 二维码 动画相关API(实现选择相册、拍照、录像、动画) 文章目录 10.1选择图片wx.chooseImage(Object object)object.success 回调函数代码效果 10.2 预览图片wx.previewImage(Object object)代码效果 10.3 相机APICameraContext wx.createCameraContex…

Python基础学习之包与模块详解

文章目录 前言什么是 Python 的包与模块包的身份证如何创建包创建包的小练习 包的导入 - import模块的导入 - from…import导入子包及子包函数的调用导入主包及主包的函数调用导入的包与子包模块之间过长如何优化 强大的第三方包什么是第三方包如何安装第三方包 总结关于Python…

互联网计算机 IC 生态发展大揭秘,DFINITY 官方扶持计划全公开!

DFINITY 团队致力于推动去中心化的互联网计算机(IC)生态发展,拥有来自斯坦福大学、耶鲁大学、Google 等多领域专家,旨在建立高性能、低成本、开发者友好的生态系统。全球首个官方 DFINITY 实战指南现已上线,将带领更多…

Python面向对象之成员相关知识总结

文章目录 前言一、成员1.1 变量1.2 方法1.3 属性 二、成员修饰符三、对象嵌套四、特殊成员关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面…

如何使用内网穿透实现无公网ip环境访问VScode远程开发

文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

解决:ModuleNotFoundError: No module named ‘xlrd‘

解决:ModuleNotFoundError: No module named ‘xlrd’ 文章目录 解决:ModuleNotFoundError: No module named xlrd背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在使用之前的代码时,报错: pin_r…

智能优化算法应用:基于乌鸦算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于乌鸦算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于乌鸦算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.乌鸦算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

算法:双指针

数组分块 题型特点:给一个数组,在某个规则下将数组划分成几个区间 解决:双指针(数组中利用下标充当指针) 283 移动0 定义两个指针 dest指针(已处理区间内非0元素的最后一个位置)cur指针&#…

Windows系列:windows server 2016 下域环境的搭建(完整版)

windows server 2016 下域环境的搭建(完整版) windows server 2016 下域环境的搭建在搭建之前简单介绍一下基础知识:一、环境介绍 :1.这里用拓扑图进行展示:2.所有环境配置如下 二、搭建主域:一. 创建主域1…

【DDD】领域驱动设计总结——如何构造领域模型

文章目录 一 分离领域二 领域对象分类2.1 实体(ENTITY)2.2 值对象(VALUE OBJECT)2.3 服务(SERVICE)2.4 模块(MODULE) 三 管理领域对象的生命周期3.1 聚合(AGGREGATE)3.2 工厂(FACTORY)3.3 存储库…

再探Java集合系列—HashMap

前面我们已经针对LinkedList和ArrayList的底层原理进行了具体研究讨论,大家可以跳链接阅读哦~ 再探Java集合系列—ArrayList-CSDN博客 再探Java集合系列—LinkedList-CSDN博客 HashMap有哪些特征呢? value可以重复,key不能重复&#xff0c…

一个数据中心的PUE修养,必将迎来液冷存储的曙光

实现小于1.3的PUE硬指标,数据中心液冷存储将功不可没。 【全球存储观察 | 科技热点关注】 4000亿千瓦时,能耗如此惊人,这是预计到2030年全国数据中心的年耗电总量。 小于1.3,看似微不足道的数字,这是新建…

鸿蒙HarmonyOS应用开发-ColumnRow组件

1 概述 一个丰富的页面需要很多组件组成,那么,我们如何才能让这些组件有条不紊地在页面上布局呢?这就需要借助容器组件来实现。 容器组件是一种比较特殊的组件,它可以包含其他的组件,而且按照一定的规律布局&#xf…

原生GPT本地及云端部署方式保姆级教程

前提条件 部署必须要有一个超过1年的Github账号 本地服务部署 运行效果 部署方法 下载安装包 暂时无法在飞书文档外展示此内容 GitHub授权登录: https://dash.pandoranext.com/ 登录后是这个样子: 复制下面红框里面这个License Id 编辑Config.js…

基于SpringBoot母婴商城

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本母婴商城系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&am…