查看: 1431|回复: 3

路径漫游求解

[复制链接]

该用户从未签到

发表于 2013-7-11 16:03:39 | 显示全部楼层 |阅读模式
请教各位大牛,我在做animationPath的时候实时调整模型姿态时,遇到一些问题,我的飞机的机翼在飞行时要如何调到与地面平行(图片) 部分代码如下(可能有误)
  1. for(  ;iter != m_AniMap.end(); iter++ )
  2.         {               
  3.                 pSec = iter->second.m_Point;
  4.                                
  5.                 //假设称其为飞行坐标系(Look,Up, Right)
  6.                 //飞行方向..look
  7.                 osg::Vec3d Look = pSec - pFir;
  8.                 double lengh = Look.length();
  9.                 Look.normalize();

  10.                 //测试运算 地理空间坐标?
  11.                 osg::Vec3d U = pFir;
  12.                 U.normalize();
  13.                 osg::Vec3d Up = Look ^ U;
  14.                 Up.normalize();

  15.                 //对应于Look,这个大概就是机翼伸出来的方向
  16.                 osg::Vec3d Right =  Look ^ Up;
  17.                 Right.normalize();

  18.                 int  t = lengh/m_FlyTime;
  19.         for( int index=0; index<m_FlyTime; ++index )
  20.                 {
  21.                         osg::Vec3d advVec = pFir + Look * t * index;
  22.                         advVec.y() += 300.0;

  23.                         osg::Quat quat2 ;
  24.                         quat2.makeRotate(osg::Vec3d(0.0, -1.0, 0.0), Look);

  25.                         //???计算飞行坐标  机翼方向与地平面的夹角
  26.                         double angle = asin(Right.y()/Right.length());//acos(osg::Vec3d(1,0,0) * Right);
  27.                         OE_WARN<< " angle is " << angle <<std::endl;

  28.                         //机头对齐 and 旋转机翼??
  29.                         osg::Quat ratote (quat2 *   osg::Quat(angle, Look));
  30.                        
  31.                         m_AniPath->insert(time, osg::AnimationPath::ControlPoint(advVec, ratote));
复制代码
我的思路飞行时,使机头与路径方向一致,然后计算Right与地平面的夹角angle,然后绕Look旋转angle..测试结果是错的,希望各位给点意见. 多谢了。
0(W}I`]3OX}UV(WG}$EA[OJ.jpg
DZ$ZKQJLQQQDMRI[)LW)(85.jpg

该用户从未签到

 楼主| 发表于 2013-7-12 09:28:55 | 显示全部楼层
已经解决,原来是旋转轴弄错了,空间想象力太差了,,以下是部分代码.

  1.                         osg::Quat quat1 ;
  2.                         quat1.makeRotate(osg::Vec3d(0.0, -1.0, 0.0), Look);

  3.                         osg::Vec3d Z =  quat1 * osg::Z_AXIS;

  4.                         osg::Quat quat2;
  5.                         quat2.makeRotate(Z,up);
复制代码
PY_EM)[8`6S6{(02D%4Q4DT.jpg

该用户从未签到

发表于 2014-12-30 20:36:12 | 显示全部楼层
CCCstudyer 发表于 2013-7-12 09:28
已经解决,原来是旋转轴弄错了,空间想象力太差了,,以下是部分代码.

请问,路径和模型本身是如何关联的?我看例子里都是直接将模型挂载到了root下,但是root下有模型有场景,是怎么区分控制模型沿着animationpath运用的呢? 谢谢

该用户从未签到

 楼主| 发表于 2015-1-4 16:16:24 | 显示全部楼层
qiulinyao 发表于 2014-12-30 20:36
请问,路径和模型本身是如何关联的?我看例子里都是直接将模型挂载到了root下,但是root下有模型有场景, ...

添加个模型回调就可以了,在相机每一帧更新的时候,传入对应的模型变换矩阵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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