查看: 1588|回复: 2

AnimationPath 创建路径动画中路径的问题

[复制链接]

该用户从未签到

发表于 2012-3-30 22:31:14 | 显示全部楼层 |阅读模式
一般书中创建一个路径动画都是这个例子:
for(int i=0;i<numPoint;i++)
//        {
//                //关键点位置
//                osg::Vec3 position(center+osg::Vec3(sinf(yaw)*radius,cosf(yaw)*radius,0.0f));
//
//                //关键点角度
//                osg:uat rotation(osg::Quat(roll,osg::Vec3(0.0,1.0,0.0))*osg::Quat(-(yaw+osg::inDegrees(90.0f)),osg::Vec3(0.0,0.0,1.0)));
//
//                //插入Path,把关键点与时间压入形成Path
//                animationPath->insert(time,osg::AnimationPath::ControlPoint(position,rotation));
//
//                yaw +=yaw_delta;
//                time +=time_delta;
//        }

但是这个例子创建的路径是围绕Z轴转,程序中关键点位置的Z坐标一直为0.0,我现在要创建的路径要求可以以任何轴为中心轴,那该怎么计算关键点位置和关键点角度呢??
for(int i=0;i<numPoint;i++)
        {
                //关键点位置center+osg::Vec3(sinf(yaw)*radius,cosf(yaw)*radius,0.0f)
                osg::Vec3 position(center+osg::Vec3(-cosf(yaw)*radius*sinf(angle),cosf(yaw)*radius*cosf(angle),sinf(yaw)*radius));

                //关键点角度
                osg::Quat rotation(osg::Quat(roll,osg::Vec3(0.0,1.0,0.0))*osg::Quat(-(yaw+osg::inDegrees(90.0f)),osg::Vec3(0.0,0.0,1.0)));

                //插入Path,把关键点与时间压入形成Path
                animationPath->insert(time,osg::AnimationPath::ControlPoint(position,rotation));

                yaw +=yaw_delta;
                time +=time_delta;
        }

这是我自己改的,加入了一个偏移角度angle,关键点位置貌似是正确的,但是飞机沿路径走的时候自身却在旋转,我估计是因为关键点角度没改的原因,但又不知道怎么改,请各位知道的告诉我下,这个关键点角度是怎么计算来的???

该用户从未签到

发表于 2012-4-1 15:16:54 | 显示全部楼层
您是如何计算Quat的?可以直接给丁三个坐标轴和旋转值

该用户从未签到

发表于 2012-7-9 12:57:40 | 显示全部楼层
你的飞机自身的旋转还是按照第一段代码的那样的旋转,所以看起来会有偏差
:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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