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  

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进程间通信基础知识【Linux】——上篇

目录 一,理解进程之间的通信 1. 进程间通信目的 2. 进程间通信的技术背景 3,常见的进程间通信 二,管道 1. 尝试建立一个管道 管道的特点: 管道提供的访问控制: 2. 扩展:进程池 阶段一&#xff1a…

Openwrt linux 启动流程

OpenWRT 启动流程 内核启动过程:【/init/mian.c】 Uboot --> start_kernel() --> rest_init() --> kernel_thread(kernel_init) --> kernel_init_freeable() 初始化过程: Linux Kernel(kernel_init) --> /etc/preinit --> /sbin/in…

基于SSM搭建系统

原理 SSM集成 SpringSpringMvcMybatis集成 框架集成核心,如果你的项目中,用到了Spring框架,那么其他框架主要就是和Spring集成; 和Spring集成的核心思路: 把当前框架的核心类,交给Spring管理&#xff08…

GPU逻辑管线

文章目录 前言一、渲染流水线二、英伟达显卡简化概念图(GPU)1、我们的Shader会调用英伟达提供的 API2、调用API后,把Shader用到的指令存储在Pushbuffer中3、然后图元分配器,会把 模型数据 和 Shader 指令传入GPU中4、这个SM是每个…

设计模式之装饰模式(2)--有意思的想法

目录 背景概述概念角色 基本代码分析❀❀花样重难点聚合关系认贼作父和认孙做父客户端的优化及好处继承到设计模式的演变过程 总结 背景 这是我第二次写装饰模式,这一次是在上一次的基础上进一步探究装饰模式,这一次有了很多新的感受和想法,也…

C++——AVL树

作者:几冬雪来 时间:2023年11月30日 内容:C板块AVL树讲解 目录 前言: AVL树与搜索二叉树之间的关系: AVL树概念: 插入结点: 平衡因子: 旋转: 双旋: …

RabbitMQ登录控制台显示--你与此网站的连接不是私密连接

一、RabbitMQ默认账号 Note: The default administrator username and password are guest and guest. 注:默认管理员用户名和密码为guest和guest 二、自己修改过或者注册的情况 由于本人之前用过,注册过账号密码,在登录时,用户名账号有异常出现以下问题 解决方案: 因为我的rab…

高端制造业中的通用性超精密3D光学测量仪器

超精密光学3D测量仪器具有高精度、自动化程度高、实时反馈和范围广等优势。它能够实现微米级别的精确测量,能够精确测量产品的尺寸、形状和表面粗糙度等,具有广泛的应用价值和重要意义。 超精密光学3D测量仪器配备多种传感器、控制器和计算机系统&#…

虚拟数据生成_以Python为工具

生成虚拟数据_以Python为工具 生成虚拟数据技术在现实生活中具有多个重要的应用领域。它为数据隐私保护、机器学习算法开发、数据处理和可视化等方面提供了实用且有价值的解决方案。尤其是能满足定制化需求的虚拟数据,在预期的方向上让数据定向随机。 &#x1f339…

ODBC一般操作

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:…

sublime Text使用

1、增加install 命令面板 工具(tool)->控制面板(command palette) -> 输入install ->安装第一个install package controller,以下安装过了,所以没展示 2、安装json格式化工具 点击install package,等几秒会进入控制面板&#xff0…

六:Day01_Spring Boot01

一、Spring Boot简介 1. 概念简介 Spring Boot是Spring公司的一个顶级项目,和Spring Framework是一个级别的。 Spring Boot实际上是利用Spring Framework 4 自动配置特性完成。编写项目时不需要编写xml文件。 2. 启动器介绍 Spring Boot的启动器实际上就是一个依赖…