ysw 发表于 2013-11-1 17:21:49

osgearth 球面动画问题

最近需要做球面动画,现在遇到 这样一个问题,我使用osg的动画路径,插入一些列球面坐标,然后旋转四元数设定为,球面两点之间的差乘。这样出来的动画,有动画在运行,不过有个问题,当场景不动的时候,动画显示没有问题。当鼠标稍微移动一下场景,我发现场景的帧率编程2,3,场景中的updateCallback 为300多,每一帧中。请问这是为什么,节点更新回调中,哪些变化对其时间影响较大

ysw 发表于 2013-11-18 10:17:15

本问题已解决

就是那个胖子 发表于 2013-11-19 16:13:35

您好,我也想做球面动画,按照Array老师的教程,写了下面代码:
osg::AnimationPath* CCustomOSGWnd::CreatePath()
{
        typedef osg::AnimationPath::ControlPoint ControlPoint;
        osg::ref_ptr<osg::AnimationPath> path = new osg::AnimationPath;
        path->insert(0.0,ControlPoint(osg::Vec3d(122.20,28.59,400)));
        path->insert(5.0,ControlPoint(osg::Vec3d(122.2075,28.66,300)));
        path->insert(10.0,ControlPoint(osg::Vec3d(122.215,28.73,200)));
        path->insert(15.0,ControlPoint(osg::Vec3d(122.225,28.80,100)));
        path->insert(20.0,ControlPoint(osg::Vec3d(122.23,28.86,0)));

        return path.release();

}

BOOL CCustomOSGWnd::CreateMoveModel()
{
        osg::Node* model = osgDB::readNodeFile("F:\\new\\ThirdPartyLib\\Data\\Model\\F-16.ive");//cessna.osg

        osg::AnimationPath* path = CreatePath();
        path->setLoopMode(osg::AnimationPath::LOOP);

        osg::MatrixTransform* positioned = new osg::MatrixTransform;
        positioned->setMatrix(osg::Matrixd::scale(0.08,0.08,0.08));
        positioned->addChild(model);
        positioned->setUpdateCallback(new osg::AnimationPathCallback(path));
        m_pRootNode->addChild(positioned);

        return TRUE;
}
但是运行后没有反应,能指点下吗,谢谢了

ysw 发表于 2013-11-20 11:15:20

你使用的是经纬度坐标,根本没有坐标转化,那样的话,就不是球面坐标,你可以看下osgEarthExample 下的osgearth_los.cpp。里面有一个简单的球面动画

就是那个胖子 发表于 2013-11-20 17:29:09

ysw 发表于 2013-11-20 11:15
你使用的是经纬度坐标,根本没有坐标转化,那样的话,就不是球面坐标,你可以看下osgEarthExample 下的osge ...

谢谢指点,非常感谢
页: [1]
查看完整版本: osgearth 球面动画问题