
osg项目实战
文章平均质量分 83
记录平时做的osg项目
荆楚闲人
老骥伏枥,志在千里;烈士中年,壮心不已。
展开
-
OSG加载模型时显示读取进度
OSG加载模型时显示读取进度原创 2023-11-19 16:40:41 · 633 阅读 · 1 评论 -
利用OSG和GLSL实现彩色图转为灰度图
灰色图片其rgb值是一样的,比如(0.5, 0.5, 0.5)就是一张灰度图。彩色转黑白算法有很多种。因此由彩色转黑白关键就是由彩色的rgb算出灰度gray,然后最终的颜色就是(gray, gray , gray)。网上搜索到RGB转gray的算法有很多种,其中最常见的几种如下:浮点算法:Gray = R * 0.3 + G * 0.59 + B * 0.11整数方法:Gray = (R * 30 + G * 59 + B * 11) / 100。原创 2023-10-30 16:32:24 · 494 阅读 · 0 评论 -
osg高亮显示选中的模型
关键在于判断依据,这里我们选择了判断节点当前所属group的方式进行判断。而这其中如何判断当前节点所属group也是一个重要的关键点。原文链接:https://blog.youkuaiyun.com/lemon_haha/article/details/89680634。转载 2023-10-28 09:19:13 · 677 阅读 · 0 评论 -
osg实现物体沿着控制点生成的Cardinal样条轨迹曲线运动
在设计矢量图案的时候,我们常常需要用到曲线来表达物体造型,单纯用鼠标轨迹绘制显然是不足的。于是我们希望能够实现这样的方法:通过设计师手工选择控制点,再通过插值得到过控制点(或在附近)的一条平滑曲线。在这样的需求下,样条曲线诞生了。简而言之,样条曲线是由多个多项式按比例系数组成的多项式函数,而比例系数是由控制点决定的。Hermite曲线、Cardinal曲线在平时的开发中,经常用于模拟运动物体的轨迹,如下:以上是二维Cardinal曲线效果,如何用osg。原创 2023-10-23 10:15:35 · 500 阅读 · 0 评论 -
osg实现三次样条Cardinal曲线
在设计矢量图案的时候,我们常常需要用到曲线来表达物体造型,单纯用鼠标轨迹绘制显然是不足的。于是我们希望能够实现这样的方法:通过设计师手工选择控制点,再通过插值得到过控制点(或在附近)的一条平滑曲线。在这样的需求下,样条曲线诞生了。简而言之,样条曲线是由多个多项式按比例系数组成的多项式函数,而比例系数是由控制点决定的。Hermite曲线、Cardinal曲线在平时的开发中,经常用于模拟运动物体的轨迹,如下:以上是二维下的Cardinal曲线效果,如何用osg实现 三维的Cardinal曲线呢?原创 2023-10-19 16:20:31 · 411 阅读 · 0 评论 -
自定义一个简单的操控器类
osg已经自己实现了很多操控器类,这些操控器类存放在osg源码目录下的src\osgGA目录。感兴趣的童鞋,可以自己去研究源码。虽然说osg实现了很多常用的操控器类,但现实中的业务需求是各种各样的,当osg自己实现的操控器不能满足平时的业务需求时,就需要自己开发操控器,本博文通过实现一个简单的操控器,来说明如何定制开发自己的操控器类。原创 2023-10-11 12:01:48 · 373 阅读 · 0 评论 -
osg实现自定义插件读取自定义格式的模型文件到场景
osg提供了很多插件来读取模型文件到场景中,这些插件支持大约70种格式类型的文件,但现实中的文件是各式各样,osg不可能囊括所有类型文件,当osg不支持某种类型格式文件时,就需要自己根据文件的格式开发插件来对这些文件定制解析、读取。本文讲解在osg中,如何实现自定义插件读取自定义格式的模型文件到场景。在读本博文之前,强烈建议先看博文,该篇博文对osg读取文件的核心函数osgDB::readNodeFile的源码及原理机制进行了深入的剖析,看完并理解后,更加深对本博文的理解。原创 2023-10-06 09:59:09 · 969 阅读 · 0 评论 -
osg中实现窗体右下角绘制坐标轴且能随场景转动一致
在场景左下角显示一个表示当前场景坐标系,它只对相机旋转有反应,对场景缩放和移动不起效果,采取方法:将一个坐标轴模型节点放在一个Projection下或放在Matrixtransform下设置为绝对坐标模式,然后再回调剔除移动变换。class HUDAxis:public Camera { public: HUDAxis(); HUDAxis(HUDAxis const& copy, CopyOp copyOp = CopyOp::SHALLOW_COPY);原创 2020-10-24 16:10:08 · 1496 阅读 · 11 评论 -
给osg::Geometry(自己绘制的几何体)添加纹理(二)
osg给osg::Geometry(自己绘制的)添加纹理原创 2023-05-26 15:23:04 · 2698 阅读 · 0 评论 -
给osg::Geometry(osg自带的几何体,如:BOX等)添加纹理(一)
osg给Box等几何体添加纹理不显示问题解决原创 2023-05-24 14:37:24 · 639 阅读 · 0 评论 -
osg实现地球并在指定经纬度放置一个飞机模型(非osgEarth方式)
osg实现地球并在指定经纬度放置一个飞机模型(非osgEarth方式)原创 2023-04-21 13:00:06 · 911 阅读 · 2 评论 -
osg实现鼠标框选
有时需要在屏幕通过按住键盘上的某个键如Ctrl键且按住鼠标左键,拖出一个矩形,实现框选三维物体,如下效果:现在的问题是: 对第1节中提到的第1个问题,默认情况下osgViewer::Viewer事件处理器在鼠标左键按下并拖动时,整个场景会随鼠标一起转动。为了不让转动,可以通过改写osgViewer::Viewer的 osgGA::GUIEventHandler事件处理器,重载如下方法:当按住键盘上的某个键如Ctrl键且按住鼠标左键,让该函数返回true,这样后续的流程就不会处理鼠标拖动事原创 2023-10-01 15:52:33 · 2159 阅读 · 2 评论 -
osg实现物体绕自身轴旋转及地球自转且绕太阳公转
如果一个模型不在场景的中心点,这时候使用 osg::Matrix::rotate旋转的话,这个对象会围绕场景的中心点进行旋转,会转一个大圈,那么怎么做才能让他在任何位置的时候,围绕自己的轴心进行旋转?解决思路如下:1. 先保存物体在世界坐标系下的坐标,即物体在世界坐标系下的中心点坐标2. 再将物体移动到世界坐标系的原点。3. 在世界坐标系的原点旋转好后,再移动回原来的位置,即步骤1中的提到的坐标。const osg::BoundingSphere& loaded_bs = m_sp.原创 2020-10-01 17:11:28 · 3341 阅读 · 13 评论 -
osg实现镜面成像、倒影效果
osg实现镜面成像、倒影效果原创 2023-07-02 09:11:10 · 741 阅读 · 0 评论 -
利用GLSL和OSG进行三维渲染项目实战
利用GLSL和OSG进行三维渲染项目实战原创 2023-07-04 17:29:39 · 1204 阅读 · 0 评论