osgSim扩展库

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  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter接口测试:jmeter_HTTP Cookie管理器看这一篇文章就够了

HTTP Cookie管理器 HTTP Cookie管理器可以像浏览器一样自动存储和发送cookie,以这种自 动收集的方式收集到的cookie不会在cookie manager中进行展示,但是运行后, 可以通过 查看结果树(监听器)可以查看到cookie信息 除…

我的创作纪念日--成为创作者的 第1825天(5年) 啦

醉颜凉 ,不知不觉今天已经是你成为创作者的 第1825天(5年) 啦。 机缘 1、作为一个创作者,我最初成为创作者的初心是出于对技术的热爱和对分享的渴望。我希望通过创作,将自己在实战项目中的经验分享给大家,…

计算机体系结构----指令系统(二)

本文仅供学习,不作任何商业用途,严禁转载。绝大部分资料来自----计算机系统结构教程(第二版)张晨曦等 计算机体系结构----指令系统(二) 2.1 指令系统结构的分类2.2 寻址方式2.3 MIPS 指令系统结构2.3.1 MIPS的寄存器2.3.2 MIPS的…

半同步复制与MHA高可用架构设计

各位道友好,鼠鼠我呀校招刚通过了移动的面试 ,但是安排的岗位是偏远县城里面的岗位,各位能给给建议吗?鼠鼠我啊真不想有时候变成销售员去卖产品!!! 半同步复制与MHA高可用架构设计 一、半同步复…

np.random.uniform() 采样得到的是一个高维立方体,而不是球体,为什么?

在代码中,采样是通过以下方式完成的: samples self.center np.random.uniform(-self.radius, self.radius, (num_samples, len(self.center))) 这里,np.random.uniform函数在每个维度独立地生成了一个介于-self.radius和self.radius之间的…

掌握Python BentoML:构建、部署和管理机器学习模型

更多资料获取 📚 个人网站:ipengtao.com BentoML是一个开源的Python框架,旨在简化机器学习模型的打包、部署和管理。本文将深入介绍BentoML的功能和用法,提供详细的示例代码和解释,帮助你更好地理解和应用这个强大的工…

ssm的鲜花销售系统(有报告)。Javaee项目。

演示视频: ssm的鲜花销售系统(有报告)。Javaee项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring SpringMvc Mybatis…

springboot 2.x集成h2数据库

1.引入pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency><groupId>com.h2database</groupId><artifactId>h2<…

pythonselenium自动化测试实战项目

说明&#xff1a;本项目采用流程控制思想&#xff0c;未引用unittest&pytest等单元测试框架 一.项目介绍 目的 测试某官方网站登录功能模块可以正常使用 用例 1.输入格式正确的用户名和正确的密码&#xff0c;验证是否登录成功&#xff1b; 2.输入格式正确的用户名和不…

机械臂仿真之vrep如添加视觉传感器

基于视觉的机械臂作业任务&#xff0c;如何在vrep中加入视觉传感器&#xff0c;并获取画面&#xff1f;

AIGC(生成式AI)试用 14 -- 画画

AIGC&#xff0c;内容生成&#xff0c;多多少少都可以达成&#xff0c;好与坏就看你如何引导、如何生成。 画画&#xff1f;本不想让写文本的去生成图片&#xff0c;但忍不住诱惑&#xff0c;小试一把&#xff0c;毕竟文档也是会要个插图的。 CSDN创作助手显然为文字生成而…

【LeetCode刷题笔记】160.相交链表

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法知识专栏&#xff1a;算法分析&#x1f525; 给大家跳段街舞感谢…

PLC:200smart(13-16章)

PLC&#xff1a;200smart 第十三章2、带参子程序3、将子程序设置成库文件 第十三章 项目ValueValue主程序MAIN一个项目只能有一个&#xff0c;循环扫描子程序SBR_0项目中最多有128个&#xff0c;只有在调用时 才执行&#xff08;子程序可以嵌套其他子程序&#xff0c;最多八层…

【vue实战项目】通用管理系统:信息列表,信息录入

本文为博主的vue实战小项目系列中的第六篇&#xff0c;很适合后端或者才入门的小伙伴看&#xff0c;一个前端项目从0到1的保姆级教学。前面的内容&#xff1a; 【vue实战项目】通用管理系统&#xff1a;登录页-CSDN博客 【vue实战项目】通用管理系统&#xff1a;封装token操作…

JDK 动态代理从入门到掌握

快速入门 本文介绍 JDK 实现的动态代理及其原理&#xff0c;通过 ProxyGenerator 生成的动态代理类字节码文件 环境要求 要求原因JDK 8 及以下在 JDK 9 之后无法使用直接调用 ProxyGenerator 中的方法&#xff0c;不便于将动态代理类对应的字节码文件输出lombok为了使用 Sne…

Linux:docker的网络通信(7)

1.端口映射 端口映射---端口映射机制将容器内的服务提供给外部网络访问 启动容器时&#xff0c;不指定对应的端口&#xff0c;在容器外无法通过网络访问容器内的服务 可随机或指定映射端口范围 -P ---------大写P&#xff0c;开启随机端口 -p 宿主机端口&#xff1a;容器端口…

【java扫盲贴】final修饰变量

引用类型&#xff1a;地址不可变 //Java中的引用类型分为类&#xff08;class&#xff09;、接口&#xff08;interface&#xff09;、数组&#xff08;array&#xff09;和枚举&#xff08;enum&#xff09;。//string是特殊的引用类型&#xff0c;他的底层是被final修饰的字…

Python下利用Selenium获取动态页面数据

利用python爬取网站数据非常便捷&#xff0c;效率非常高&#xff0c;但是常用的一般都是使用BeautifSoup、requests搭配组合抓取静态页面&#xff08;即网页上显示的数据都可以在html源码中找到&#xff0c;而不是网站通过js或者ajax异步加载的&#xff09;&#xff0c;这种类型…

【排序,直接插入排序 折半插入排序 希尔插入排序】

文章目录 排序排序方法的分类插入排序直接插入排序折半插入排序希尔插入排序 排序 将一组杂乱无章的数据按照一定规律排列起来。将无序序列排成一个有序序列。 排序方法的分类 储存介质&#xff1a; 内部排序&#xff1a;数据量不大&#xff0c;数据在内存&#xff0c;无需…

学习笔记-接口测试(postman、jmeter)

一、什么是接口测试 通常做的接口测试指的是系统对外的接口&#xff0c;比如你需要从别的系统来获取到或者同步资源与信息&#xff0c;他们会提供给你一个写好的接口方法供你调用&#xff0c;比如常用的app&#xff0c;用户同步这些在处理数据的时候需要通过接口进行调用。 w…