查看: 4270|回复: 8

请教 PositionAttitudeTransform的setAttitude方法的使用

[复制链接]

该用户从未签到

发表于 2011-3-26 22:32:42 | 显示全部楼层 |阅读模式
本帖最后由 cyscsharp 于 2011-3-26 22:35 编辑

各位高手好

osg::Group* root = new osg::Group;

//牛
osg::Node* cow = osgDB::readNodeFile("cow.osg");
////创建姿态节点
osg:PositionAttitudeTransform* posCow = new osg:PositionAttitudeTransform;
root->addChild(posCow);
posCow->addChild(cow);
  
posCow->setPosition(osg::Vec3(10,0.0,0.0));
//设置姿态 与物体的朝向有关
posCow->setAttitude(osg:quat(osg::Vec4(1,1,1,1)));//请问这句话的意思是什么?
return root;

效果如下:
3.JPG


请问:posCow->setAttitude(osg:quat(osg::Vec4(1,1,1,1)));
这句话表示什么?

这句话如果用
形如:
osg:Quat quat;
quat.makeRotate(osg:PI_2,osg::Vec3(0.0,0.0,1.0));
posCow->setAttitude(quat);
这样形式的语句来表示呢?
因为posCow->setAttitude(osg:Quat(osg::Vec4(1,1,1,1)));(这样的形式看起来不直观)
谢谢!!

该用户从未签到

发表于 2011-3-28 08:47:51 | 显示全部楼层
这句话如果用
形如:
osguat quat;
quat.makeRotate(osgI_2,osg::Vec3(0.0,0.0,1.0));
posCow->setAttitude(quat);
这样形式的语句来表示呢?
当然可以!您为什么不用

该用户从未签到

发表于 2013-1-21 11:53:33 | 显示全部楼层
问个基础的问题。。请问quat.makeRotate(osgI_2,osg::Vec3(0.0,0.0,1.0));的第一个参数是表示什么意义?

该用户从未签到

发表于 2013-1-21 14:49:55 | 显示全部楼层
有人能告诉下么。。我就知道他是代表一个旋转角度  但是是顺时针还是逆时针啊?
quat.makeRotate(osgI_2,osg::Vec3(0.0,0.0,1.0)); 这句话的意思是绕着Z轴旋转90度么? 顺时针还是逆时针啊? 求解。。

该用户从未签到

发表于 2013-1-21 14:56:34 | 显示全部楼层
四元数的重载函数中,四个参数的用法是不实用的。因为我们的思维习惯是绕三个坐标轴旋转一定角度,所以用 (角度,osg::Vec3(x轴,y轴,z轴))的方法,目标轴要设置为1,其他设为0,如果要叠加旋转要执行三次,而不是都设置为1. 而且还要有一定的循序,z轴在最后,x,y那个在前你自己测试下吧

该用户从未签到

发表于 2015-11-11 16:30:06 | 显示全部楼层
应该是Y轴在前,亲测

该用户从未签到

发表于 2015-11-11 17:00:52 | 显示全部楼层
好像不对,xy无论哪个在前,另外一个都有影响的

该用户从未签到

发表于 2015-11-11 19:14:28 | 显示全部楼层
一大波蓝猫 发表于 2013-1-21 14:49
有人能告诉下么。。我就知道他是代表一个旋转角度  但是是顺时针还是逆时针啊?
quat.makeRotate(osgI_2 ...

逆时针为正,顺时针为负

该用户从未签到

发表于 2015-11-11 19:15:34 | 显示全部楼层
2楼正解,但是在旋转的时候还是需要注意顺序的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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