查看: 1453|回复: 4

请教个关于四元数的变量问题

[复制链接]

该用户从未签到

发表于 2010-1-3 22:21:40 | 显示全部楼层 |阅读模式
本帖最后由 allen 于 2010-1-4 09:09 编辑
  1. int main()
  2. {
  3.         double angle=60.0;
  4.         osg::ref_ptr<osg::Node> node=new osg::Node;
  5.         node=osgDB::readNodeFile("cow.osg");

  6.         osg::ref_ptr<osg::Group> root=new osg::Group;

  7.         osg:uat q;
  8.         q=osg:uat(osg:egreesToRadians(60.0),osg::Vec3(1.0,0.0,0.0));

  9.         osg:ositionAttitudeTransform *pat=new osg:ositionAttitudeTransform;

  10.         pat->setAttitude(q);
  11.         pat->addChild(node);

  12.         root->addChild(pat);
  13.         osgViewer::Viewer viewer;
  14.         viewer.setSceneData( root);
  15.         viewer.realize();
  16. return        viewer.run();

  17. }
复制代码
这是我的代码,我想利用angle代替osg:egreesToRadians(60.0)里的角度,实现多角度观察,但是直接替换不行,大家看看有什么好方法没?
我说的多角度观察是指在用户界面里输入想要观察的角度,用angle来接收这个角度。接着就显示。
感觉好像要用到四元数与欧拉角度的转换,可是看了一下午的四元数,还是没有想法。

该用户从未签到

发表于 2010-1-4 08:51:39 | 显示全部楼层
如果你想实现多角度观察的话,,使用矩阵变换是最好的方案,,我认为是~~~~直接控制四元数来实现观察不具直观性,,毕竟四元数是极坐标下的,,当然,,你采用欧拉角转换也是可以的~~~

该用户从未签到

发表于 2010-1-4 10:59:02 | 显示全部楼层
DegreesToRadians中的60.0当然可以替换成您自己的变量angle,欧拉角度向四元数的变换是很简单的,直接用Quat的构造函数或者makeRotate就可以做到;四元数向欧拉角度的变换却十分复杂,因为有一个先后顺序的问题(XYZ,ZXY,YZX……),每种顺序对应的变换公式都不相同

该用户从未签到

发表于 2010-1-4 11:58:24 | 显示全部楼层
对的,我一开始也很纳闷这个矩阵搞旋转平移多不直观啊,后来发现Matrix有旋转和平移的函数,嘿嘿~

该用户从未签到

 楼主| 发表于 2010-1-5 15:26:08 | 显示全部楼层
恩,现在可以了,以前我换成angle的时候,编译报错,还以为不行呢,谢谢阿ray。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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