查看: 2881|回复: 5

从osg::MatrixTransform 中获取旋转角度错误

[复制链接]

该用户从未签到

发表于 2011-12-10 10:37:43 | 显示全部楼层 |阅读模式
本帖最后由 hgyzj 于 2011-12-10 10:40 编辑

    您好!
    我是想旋转一个物体的角度,并且显示出来,我是这样做的

   //相应Left按键,向左旋转
    m_modelMT->preMult(osg:: Matrix:: rotate(osg:: DegreesToRadians(m_fAngle),osg:: Vec3f(0.0,0.0,1.0)));
    osg:: Quat rotateQuat;
    rotateQuat=m_modelMT->getMatrix().getRotate();
    double  rotateAngle;
    rotateQuat.getRotate(rotateAngle,osg:: Vec3f(0,0,1));
   //然后把旋转角度osg:: RadiansToDegrees(rotateAngle)显示出来。
   ........

   //相应Right按键,视点向右旋转
   m_modelMT->preMult(osg:: Matrix:: rotate(osg:: DegreesToRadians(-m_fAngle),osg:: Vec3f(0.0,0.0,1.0)));        
   osg:: Quat rotateQuat;
   rotateQuat=m_modelMT->getMatrix().getRotate();
   double  rotateAngle;
   rotateQuat.getRotate(rotateAngle,osg:: Vec3f(0,0,1));
     //然后把旋转角度osg:: RadiansToDegrees(rotateAngle)显示出来。
  .....

实验结果,转动模型显示没问题。但是获取到的角度出现问题:如果一直向左旋转,获取到的rotateAngle变化范围是从0°-270°,然后又从90°-0°。向右旋转正好相反,并没有出现向右为负,或者0°-360°的情况。请问这是怎么回事?我是想向左转区间为0°到180°,向右转区间为0°到-180°。看到这种现象有点疑惑,不知哪里出了问题,恳请您的指教,谢谢!





该用户从未签到

发表于 2011-12-11 17:06:06 | 显示全部楼层
发现一个相关的帖子,有关setViewMatrixAsLookat设置相机,用getViewMatrixAsLookAt却得不到正确值。
希望有帮助。帖子地址

该用户从未签到

发表于 2011-12-13 11:44:36 | 显示全部楼层
这没什么可奇怪的,STD C的数学函数本来就不会像您期望的那样返回负的角度值

该用户从未签到

 楼主| 发表于 2011-12-14 10:15:58 | 显示全部楼层
谢谢,那么我该如何区分输出的0-90°到底是节点顺时针旋转的还是逆时针旋转的?如何判断呢?

该用户从未签到

发表于 2011-12-16 12:51:54 | 显示全部楼层
可以根据叉积的方向,亦即两个向量所在平面的法线

该用户从未签到

 楼主| 发表于 2011-12-16 14:35:48 | 显示全部楼层
多谢,这样应该可以。我后来用的DOFTransform更方便一些,不过后续的问题估计很多,不如MatrixTransform通用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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