查看: 2736|回复: 6

如何将模型旋转到和向量平行的位置

[复制链接]

该用户从未签到

发表于 2012-11-7 01:08:15 | 显示全部楼层 |阅读模式
我有一个管状模型沿着X轴放置,另外还有点A,B。
现在希望能通过矩阵旋转到AB直线平行,直接通过在模型父节点加载矩阵来实现,代码如下:
  1. osg::MatrixTransform * mt=new osg::MatrixTransform;
  2.         osg::Matrix m;
  3.         m=osg::Matrix::rotate(osg::Quat(-asin(deltaz),osg::Y_AXIS))*osg::Matrix::rotate(quat);
  4.         m= osg::Matrixd::rotate(osg::Quat(ang1,osg::Vec3(0.0,0.0,1.0)))*
  5.                   osg::Matrixd::rotate(osg::Quat(ang2,osg::Vec3(0.0,1.0,0.0)))*
  6.                   osg::Matrixd::rotate(osg::Quat(ang3,osg::Vec3(1.0,0.0,0.0)))*
  7.                   osg::Matrix::translate(position);
  8.         mt->setMatrix(m);
  9.         mt->addChild(pNode);
复制代码
其中角度是通过两点的三角函数计算得来的,觉得不太合理,觉得角度这样算好像不对。所以想请教一下各位,我这样有什么不对的地方,或者能否提供一些更好的主意  :p

该用户从未签到

发表于 2012-11-7 07:51:40 | 显示全部楼层
本帖最后由 liuzhiyu123 于 2012-11-7 07:51 编辑

m=osg::Matrix::rotate(osg::Quat(-asin(deltaz),osg::Y_AXIS))*osg::Matrix::rotate(quat);
这句是干什么?貌似多余

该用户从未签到

 楼主| 发表于 2012-11-7 09:16:36 | 显示全部楼层
本帖最后由 tzmyf234 于 2012-11-7 09:19 编辑
liuzhiyu123 发表于 2012-11-7 07:51
m=osg::Matrix::rotate(osg:uat(-asin(deltaz),osg::Y_AXIS))*osg::Matrix::rotate(quat);
这句是干什 ...


哦,您真细心~~sorry,我尝试了另一种方法,也没有成功,没有来的及删除这一行。

该用户从未签到

发表于 2012-11-7 09:47:58 | 显示全部楼层
tzmyf234 发表于 2012-11-7 09:16
哦,您真细心~~sorry,我尝试了另一种方法,也没有成功,没有来的及删除这一行。

没有固定的方法,满足需求就可以,不要循规蹈矩

该用户从未签到

发表于 2012-11-7 11:02:25 | 显示全部楼层
我知道怎么做,你可以问我。

该用户从未签到

发表于 2012-11-7 12:30:00 | 显示全部楼层
目标向量 osg::Vec3f BA = PointB-PointA,起始向量 osg::X_AXIS,是否可以通过Quat的一个方法makeRotate得到旋转向量,即
  1. osg::Quat rot;
  2. rot.makeRotate(osg::X_AXIS, BA);
  3. osg::PositionAttitudeTransform* pat = new osg::PositionAttitudeTransform();
  4. pat->setAttitude(rot);
复制代码

该用户从未签到

 楼主| 发表于 2012-11-7 17:33:33 | 显示全部楼层
woshijiameizhou 发表于 2012-11-7 12:30
目标向量 osg::Vec3f BA = PointB-PointA,起始向量 osg::X_AXIS,是否可以通过Quat的一个方法makeRotate得到 ...

谢谢啦,这样做实现了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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