查看: 2782|回复: 3

如何根据osg动画路径动态生成的控制点,绘制动态轨迹线

[复制链接]

该用户从未签到

发表于 2012-11-7 14:56:13 | 显示全部楼层 |阅读模式
大家好,作为一个新手,真诚的请教大家一个问题。
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;
}

该用户从未签到

发表于 2012-11-7 15:15:02 | 显示全部楼层
关键点 全在这里面了 osg::AnimationPath::ControlPoint
取出来 geometry

该用户从未签到

 楼主| 发表于 2012-11-7 20:56:52 | 显示全部楼层
本帖最后由 lxbboy326 于 2012-11-9 14:46 编辑

谢谢版主,经过摸索,终于显现出来啦。

再次感谢~~

该用户从未签到

发表于 2013-4-19 14:32:39 | 显示全部楼层
我也遇到同样的问题,需要生成轨迹线,楼主能不能讲讲你是这么实现的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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