|
一般书中创建一个路径动画都是这个例子:
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,关键点位置貌似是正确的,但是飞机沿路径走的时候自身却在旋转,我估计是因为关键点角度没改的原因,但又不知道怎么改,请各位知道的告诉我下,这个关键点角度是怎么计算来的??? |
|