MatrixTransform是从Transform - Group继承而来,因此可以在它的下面挂接Node对象。

通过设置其矩阵,来实现其下子节点的模型变换。

-- 用局部坐标系来理解(局部坐标系又称惯性坐标系,其与模型的相对位置在变换的过程中始终不变)

如下代码:

01 // 创建圆柱体
02 double r = 0.5;
03 double h = 3.0;
04 osg::Vec3 orginPt(0.0, 0.0, 0.0);
05 osg::ref_ptr<osg::Geode> cylinderGeode = new osg::Geode;
06 osg::ref_ptr<osg::Cylinder> geoCylinder = new osg::Cylinder(orginPt, r, h);
07 osg::ref_ptr<osg::ShapeDrawable> cylinderDrawable = new osg::ShapeDrawable(geoCylinder.get());
08 cylinderDrawable->setColor(osg::Vec4(1.0f,0.0f,0.0f,1.0f));
09 cylinderGeode->addDrawable(cylinderDrawable.get());
10   
11 // -- 以下操作都是针对局部坐标系而言 --
12 // 先将圆柱体平移(20.0, -12.0, -35.0)
13 // 再将z轴方向旋转至向量n方向  此时局部坐标系的z轴和n向量一致
14 // 接着,将旋转后的模型的沿z方向平移0.5*h长度 (全局坐标系,相当于沿n方向平移0.5*h长度)
15 // 最后将模型放大2倍
16 osg::Vec3 n(1.0, 1.0, -1.0);
17 osg::Vec3 z(0.0, 0.0, 1.0);
18 n.normalize();
19 osg::ref_ptr<osg::MatrixTransform> mt = new osg::MatrixTransform;
20 mt->setMatrix(osg::Matrix::scale(osg::Vec3(2.0, 2.0, 2.0))* 
21              osg::Matrix::translate(osg::Vec3(0, 0, 0.5*h))*
22         osg::Matrix::rotate(z, n)*
23         osg::Matrix::translate(osg::Vec3(20.0, -12.0, -35.0)));
24 mt->addChild(cylinderGeode);

根据上面的特点,可以计算变化后的模型的三维坐标。

对于下图的包含关系(MatrixTransform A中包含一个MatrixTransform B,MatrixTransform B中包含一个模型)

那么,模型的新坐标 (X, Y, Z) = (x,y,z)* B.matrix * A.matrix;

osg中使用MatrixTransform来实现模型的平移/旋转/缩放相关推荐

  1. OSG仿真案例(5)——模型的平移、缩放、旋转

    这个程序显示的是一头牛,牛的身子朝向屏幕. image.png 旋转后,让牛头朝向屏幕外.如下图所示. image.png OSG中通过旋转模型来改变节点的姿态,使用类 MatrixTransform ...

  2. 三维空间中的几何变换-平移旋转缩放

    前言 前段时间由于项目需要,深入学习了下图形几何变换,主要是绕任意轴旋转部分(其他的已有一定基础),现记录学习笔记. 文章内容部分引用并参考了下面的博客: http://netclass.csu.ed ...

  3. 【Threejs 微信小程序】小程序加载外部模型后对模型进行平移旋转操作

    一.效果展示 需要实现的功能,对已经加载进小程序里的模型进行沿着xyz轴方向去旋转和平移. 如下图的效果: 点击底部的按钮,对模型进行平移和旋转操作. 二.方法描述 关于平移和旋转的方法 比如沿着 Y ...

  4. OpenGL中的平移旋转缩放

    1.opengl中缩放使用的函数是glScalef 其原型为void glScalef(GLfloat  x,  GLfloat  y,  GLfloat  z); 该函数表示模型在各轴上进行扩大和缩 ...

  5. osg中父子节点关系对坐标系的影响(相对坐标绝对坐标%矩阵变换)

    从头梳理一下碰到的坐标问题. osgEarth中坐标系有很多,如世界坐标系,地理坐标系,相机坐标系等等,然后根据形式又分为相对坐标系和绝对坐标系. 这里先记录一下绝对坐标系和相对坐标系 当你构建场景的 ...

  6. 3DMAX文件导入到OSG中。

    插件地址在 http://sourceforge.net/projects/osgmaxexp/files/OpenSceneGraph%20Max%20Exporter/1.0.2/ 有win2版本 ...

  7. unity 3D模型展示旋转缩放

    目标: 在UI层上 自由观察3D 模型,实现鼠标控制模型的旋转,缩放&& 触摸屏手势控制模型的旋转缩放控制: 这里仅将控制代码挂载到相机上,通过对相机的控制来观察模型. 基本上为最小单 ...

  8. 初探OSG+Opencascade在qt上的实践值获取模型颜色并在OSG中显示

    很久没有正式写过一篇博客,之前因为工作原因,致使个人项目一直停滞,在出差回来后,决定利用晚上的空闲时间重新对之前的知识进行梳理和补充,前版本中实现了如何利用opencascade读取stp模型,并显示 ...

  9. osg中三维模型的位置变换

    对模型的平移和旋转等操作是我们在做三维软件开发时必然会解决的事情.但是由于基本变换默认是以世界坐标系的原点为变换中心,所以我们在进行平移旋转等操作时往往会发现其并非如我们想象的那样去执行.举个简单的例 ...

最新文章

  1. 管理到底是“管人”还是“管事”,百分之九十的人理解有问题
  2. SQL提交数据三种类型
  3. 数据库面试题【七、InnoDB索引和MyISAM索引的区别】
  4. IE6/7和IE8/9(怪异模式)浮动元素折行Bug
  5. 两个sql交集_如何使用性能分析工具定位SQL执行慢的原因?
  6. jvm的client与server工作模式
  7. 前端学习(83):按显示进行分类
  8. 【开发者portal在线开发插件系列四】数组 及 可变长度数组
  9. 安卓应用安全指南 4.2.2 创建/使用广播接收器 规则书
  10. Rivian计划在乔治亚州新增一个工厂
  11. 空间波(space wave)
  12. tensorflow之control_dependencies
  13. html dom之iframe对象
  14. 如果软件也玩凡尔赛文学,将如何对话?
  15. 数值计算之第四期:追赶法和范数
  16. 如何在PlayStation 4上查看或清除浏览历史记录
  17. zigbee应用实践
  18. 人工智能+专业运维:企业联络中心的数字化转型
  19. 如何固定输出每行打印的个数
  20. 前端编写bat批处理文件,实现项目启动功能

热门文章

  1. Codeup墓地-1985
  2. R语言中的地理/投影坐标系统(下)[翻译]
  3. python利用字典特性来判断英文语句中单词出现次数
  4. 如何配置自己的台式机
  5. 服务器管理器开机显示,服务器每次开机初始化
  6. 用FPGA实现闸门法频率计(黑金EP4CE6F17C8N)
  7. linux检测更新文件系统,fsck-Linux文件系统检查工具介绍
  8. 优化页面打开速度(一)
  9. 【※桌面图标背景壁纸色问题怎么处理※】
  10. 美容行业店铺经营管理小程序