查看: 1841|回复: 7

请教关于模型旋转的问题

[复制链接]

该用户从未签到

发表于 2011-12-15 10:42:58 | 显示全部楼层 |阅读模式
各位好,我想调整模型的方向,尝试用以下代码来实现:
osg::Matrix mSelection=selection->getMatrix();
osg::Matrix mat;
mat.makeRotate(osg:egreesToRadians(-10.0),osg::Vec3(0.0,0.0,1.0));                                       
selection->setMatrix(mSelection * mat);

但得到的结果是整个模型绕一个轴作圆周运动(方向和位置都变了),而不是在原来的位置调整方向。请高手指点一下,万分感谢!

该用户从未签到

发表于 2011-12-15 10:53:58 | 显示全部楼层
selection->setMatrix(mSelection * mat);

改为
selection->setMatrix( mat*mSelection );

该用户从未签到

发表于 2011-12-15 11:01:05 | 显示全部楼层
使用矩阵的连乘,原来的矩阵基础上右乘做相应变换的矩阵。

该用户从未签到

发表于 2011-12-15 11:38:11 | 显示全部楼层
使用矩阵的连乘,原来的矩阵基础上右乘做相应变换的矩阵。

他给出的程序就是右乘

该用户从未签到

 楼主| 发表于 2011-12-15 11:44:38 | 显示全部楼层
fenma3422 发表于 2011-12-15 10:53
改为
selection->setMatrix( mat*mSelection );

谢谢,我一开始用的就是左乘,就是您说的这种方式,效果也是一样的。现在的问题好像是旋转轴不是模型的对称轴。

该用户从未签到

发表于 2011-12-15 12:06:04 | 显示全部楼层
那只能是一个问题,那就是你MT节点下到geometry之间还有其他变换,使其偏离的geometry的中心和轴

该用户从未签到

 楼主| 发表于 2011-12-15 14:53:00 | 显示全部楼层
fenma3422 发表于 2011-12-15 12:06
那只能是一个问题,那就是你MT节点下到geometry之间还有其他变换,使其偏离的geometry的中心和轴

您好,MT结点下就是加了一个模型进来,没有做其他的变换。就是在鼠标点击的位置添加一个模型,代码如下:
osg::ref_ptr<osg::MatrixTransform> mat = new osg::MatrixTransform;
osg::ref_ptr<osg::Node> model=osgDB::readNodeFile("Resource/tree.ive");
mat->addChild(model.get());

osg::Matrix mtx;
mtx(3, 0) = position.x();
mtx(3, 1) = position.y();
mtx(3, 2) = position.z();

mat->setMatrix(mtx);
m_root->addChild(mat.get());
麻烦看一下有什么问题?

该用户从未签到

发表于 2011-12-15 16:18:22 | 显示全部楼层
清查看一下tree。ive内部是否携带了变换信息
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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