查看: 2386|回复: 2

PositionAttitudeTransform与MatrixTransform实现变换时为何不同?

[复制链接]

该用户从未签到

发表于 2011-3-26 00:10:04 | 显示全部楼层 |阅读模式
方法一:用PositionAttitudeTransform实现 把牛先平移后旋转 与 把牛先旋转后平移 效果一样

/***把牛先平移后旋转***/
osg::Group* root = new osg::Group;
osg::Node* cow = osgDB::readNodeFile("cow.osg");
osg:ositionAttitudeTransform* posCow = new osg::PositionAttitudeTransform;
root->addChild(posCow);
posCow->addChild(cow);

osg:uat quat;
//平移
posCow->setPosition(osg::Vec3(10,0.0,0.0));
//旋转
quat.makeRotate(osg::PI_2,osg::Vec3(0.0,0.0,1.0));
posCow->setAttitude(quat);

/***把牛先旋转后平移***/
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);

osg::Quat quat;
//旋转
quat.makeRotate(osg::PI_2,osg::Vec3(0.0,0.0,1.0));
//平移
posCow->setPosition(osg::Vec3(10,0.0,0.0));
posCow->setAttitude(quat);

通过实现表明,用PositionAttitudeTransform 把牛先平移后旋转 与 把牛先旋转后平移 效果一样,两只牛重合
效果贴图
1.JPG


方法二:用MatrixTransform 把牛先平移后旋转 与 把牛先旋转后平移 效果却不同

/*************旋转矩阵*平移矩阵 的方式**代码如下********/
osg::Quat quat1;
//创建变换节点
osg::MatrixTransform* matrixCow1  = new osg::MatrixTransform;
root->addChild(matrixCow1);
matrixCow1->addChild(cow);
  quat1.makeRotate(osg::PI_2,osg::Vec3(0.0,0.0,1.0));

//旋转矩阵*平移矩阵
matrixCow1->setMatrix(osg::Matrixd::rotate(quat1)*osg::Matrixd::translate(osg::Vec3(10.0,0.0,0.0)));

/*************平移矩阵*旋转矩阵 的方式**********/
osg::Quat quat1;
//创建变换节点
osg::MatrixTransform* matrixCow1  = new osg::MatrixTransform;
root->addChild(matrixCow1);
matrixCow1->addChild(cow);
  quat1.makeRotate(osg::PI_2,osg::Vec3(0.0,0.0,1.0));

//平移矩阵* 旋转矩阵
matrixCow1->setMatrix(osg::Matrixd::translate(osg::Vec3(9.0,0.0,0.0))*osg::Matrixd::rotate(quat1));
通过实现表明,用MatrixTransform把牛先平移后旋转 与 把牛先旋转后平移 效果不同,一个牛向前,一个牛向后,没有重合
2.JPG

请高手指点:这是为什么呢
MatrixTransform有什么特别之处吗
非常感谢!
1.JPG
1.JPG
1.JPG

该用户从未签到

 楼主| 发表于 2011-3-26 00:11:31 | 显示全部楼层
不好意思,最后三张图传错了

该用户从未签到

发表于 2011-3-26 09:50:49 | 显示全部楼层
PositionAttitudeTransform是按照SRT的变换顺序变换的,所以即使你把他的旋转和平移的先后顺序改变,所得到的结果都是不变的。
但是matrixTransform所得的顺序就是你实际矩阵相乘的顺序。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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