|
大家好,作为一个新手,真诚的请教大家一个问题。
osg动画路径的控制点,由于是动态插值生成,我想根据动态生成的控制点,绘制该条轨迹线,请问各位,如何取得路径函数下的控制点啊?
路径生成,大体框架如下:
worldPointArr ,存放的是我想要的控制点。
麽有思路啊、、、、、求解。 谢谢啦~~
//创建路径
//地理坐标点,转弯半径,插值距离,时间;
osg::ref_ptr<osg::AnimationPath> createFlyAnimationPath(Vec3dArray*mapPoint,double radius,double interpLength/*直线插值间隔*/,
double pTime,double interArcLength/*弧上插值间隔*/,MapNode*mapNode)
{
osg::ref_ptr<osg::AnimationPath> flyAnimationPath = new osg::AnimationPath;
flyAnimationPath->setLoopMode(osg::AnimationPath:OOP);
double interpTime = 0.0;
const SpatialReference* geoSRS = mapNode->getMapSRS()->getGeographicSRS();
//根据已知控制点,进行插值
for ( i=0;i<=mapPoint->size()-3;i++)
{
....坐标系转换....
//用来存放动态生成的世界坐标点
osg::ref_ptr<osg::Vec3dArray> worldPointArr = new osg::Vec3dArray;
//判断三点是否共线
if (...)//则认为三点共线,不需要插弧点
{
//共线,保存点
worldPointArr ->push_back(点);
}
else
{
//不共线,插值保存点
worldPointArr ->push_back(点);
}
//循环控制点,计算方向
for()
{
.......
flyAnimationPath->insert(interpTime, osg::AnimationPath::ControlPoint(worldPointArr->at(i),rotation));
interpTime += pTime;
}
}
return flyAnimationPath;
}
|
|