查看: 1629|回复: 5

【新手求助】『已结』旋转拖拽器获取旋转后的欧拉角

[复制链接]

该用户从未签到

发表于 2012-9-12 12:34:00 | 显示全部楼层 |阅读模式
本帖最后由 starmessage 于 2012-9-13 12:08 编辑

这块有点问题。
我是这样做的,请大哥们指正。
首先点击时获取到拖拽器的四元数,旋转后获取到四元数,两者相差,得到旋转四元数。
从中需要拿出四元数的各个轴向欧拉角,我的计算是参考一本书中的代码,晚上回去贴。牵扯到物体惯性四元数和惯性物体四元数,这两个方面不是特别清楚,我用的是惯性物体四元数转欧拉角那个公式,但是得到的欧拉角输出后仍然不对,不知道有没有更为简单的解决办法。
请高手们帮帮忙,

如果旋转物体后,得到旋转了多少度,当然是获取到欧拉角的三个值。

该用户从未签到

发表于 2012-9-12 13:10:52 | 显示全部楼层
要确定旋转顺序   

该用户从未签到

发表于 2012-9-12 13:17:33 | 显示全部楼层
google一下很多算法的

该用户从未签到

 楼主| 发表于 2012-9-12 23:24:05 | 显示全部楼层
float _w,_x,_y,_z;
_x=Quat.x();_y=Quat.y();_z=Quat.z();_w=Quat.w();
float _p,_h,_b;     //三轴旋转的欧拉角度
float _sp=-2.0f*(_y*_z+_w*_x);
if(fabs(_sp)>0.9999f)
{
        _p=1.570796f*_sp;
        _h=atan2(-_x*_z-_w*_y,0.5f-_y*_y-_z*_z);
        _b=0.0f;
}
else
{
        _p=asin(_sp);
        _h=atan2(_x*_z-_w*_y,0.5f-_x*_x-_y*_y);
        _b=atan2(_x*_y-_w*_z,0.5f-_x*_x-_z*_z);
}
这个是我惯性物体的四元数转欧拉角,但是转过去的角度还是不对,请指正。

该用户从未签到

发表于 2012-9-13 10:03:23 | 显示全部楼层
再由欧拉角到四元数,按照这个旋转顺序  出来之后能不对?

该用户从未签到

 楼主| 发表于 2012-9-13 12:07:56 | 显示全部楼层
StackSnow 发表于 2012-9-13 10:03
再由欧拉角到四元数,按照这个旋转顺序  出来之后能不对?

无所谓了,打算重新写rotatecyline那个类,里面rotate可以取到角度,因为要做成3DMax那种,拖动旋转的时候需要显示扇形的区域所以,重新要写,谢谢了。
结贴。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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