查看: 1018|回复: 1

关于模型旋转

[复制链接]

该用户从未签到

发表于 2013-12-23 03:19:28 | 显示全部楼层 |阅读模式
我想让一个飞机模型  做三种旋转 一种是以飞机朝前的方向为轴旋转 一种是以飞机的正上为轴旋转 一种是以飞机向右的方向为轴旋转
我的飞机是放在一个MatrixTransform下的  然后我通过getMatrix获得当前矩阵 求出 上述三个轴 direction up 和 right  然后在按键响应里 绕这3个轴做旋转 代码如下
  1.         //获得三个轴       
  2. osg::Matrix mat;
  3.         mat.makeRotate(_config_._aircraftMTTrans->getMatrix().getRotate());
  4.         right = osg::Vec3(mat(0,0), mat(1,0), mat(2,0));
  5.         up = osg::Vec3(mat(0,1), mat(1,1), mat(2,1));
  6.         direction = -osg::Vec3(mat(0,2), mat(1,2), mat(2,2));

  7. //按键响应
  8.                         case osgGA::GUIEventAdapter::KEY_A:
  9.                                 {
  10.                                         osg::Quat q(0.05, curRight);
  11.                                         mat.makeRotate(q);
  12.                                         break;
  13.                                 }

  14.                         case osgGA::GUIEventAdapter::KEY_D:
  15.                                 {
  16.                                         osg::Quat q(-0.05, curRight);
  17.                                         mat.makeRotate(q);
  18.                                         break;
  19.                                 }

  20. //左乘求得的新旋转矩阵
  21. _config_._aircraftMTTrans->preMult(mat);
复制代码


请问上述代码 哪里有问题? 运行结果 旋转的轴都不对  诚心求 谢谢!!

该用户从未签到

 楼主| 发表于 2013-12-24 10:02:48 | 显示全部楼层
问题解决。。三个轴直接传 100 010 001 就可以了。。貌似是节点自己的坐标系
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表