<div dir="ltr"><div>I'm showing a large map over a terrain. In the beginning the user sees the whole map from above (call it "position 0"). I want to create an animation before that, with the camera approaching the terrain from very far, up to the initial position (position 0). Only then the user will be able to control the camera with mouse and keyboard.  The camera will also slow down as it approaches. The whole animation only needs to last 1 or 2 seconds.</div><div><br></div><div>I've tried following the first example of chapter 5 from osgCookbook (by Rui Wang & Xuelei Qian). My code is:</div><div><br></div><div>    osg::Quat quad0;<br>    controller->setTransformation(osg::Vec3(lonC,latC,800), quad0 ); // lonC and latC are central coordinates of the map. This works without the animation<br>    <br>    // Animating the camera<br>    osg::ref_ptr<osgAnimation::FloatLinearChannel> ch = new osgAnimation::FloatLinearChannel;<br>    ch->setName( "euler" );<br>    ch->setTargetName( "CamAnimCallback" );<br>    osgAnimation::FloatKeyframeContainer* kfs = ch->getOrCreateSampler()->getOrCreateKeyframeContainer();<br>    kfs->clear(); // why is this needed?<br>    kfs->push_back( osgAnimation::FloatKeyframe(0.0, 800) ); // from up above...<br>    kfs->push_back( osgAnimation::FloatKeyframe(1.0, 80) ); // down until it gets close to the map<br>    osg::ref_ptr<osgAnimation::Animation> animation = new osgAnimation::Animation;<br>    animation->setPlayMode( osgAnimation::Animation::ONCE );<br>    animation->addChannel( ch.get() );<br>    osg::ref_ptr<osgAnimation::UpdateMatrixTransform> updater = new osgAnimation::UpdateMatrixTransform("CamAnimCallback");<br>    updater->getStackedTransforms().push_back( new osgAnimation::StackedTranslateElement("euler", osg::Vec3(lonC,latC,800)) ); // initial position<br>    osg::ref_ptr<osgAnimation::BasicAnimationManager> manager = new osgAnimation::BasicAnimationManager;<br>    manager->registerAnimation( animation.get() );<br>    osgViewer::ViewerBase::Cameras cameras;<br>    viewer.getCameras(cameras);<br>    osg::Camera* camera = cameras[0];<br>    camera->setUpdateCallback( updater.get() );<br>    root->setUpdateCallback( manager.get() );<br><br></div><div>Then I tried to call the animation right before the main loop, and also after viewer.frame (running only once, due to "splash", that begins as true)<br></div><div><br></div><div>        viewer.frame();<br>        if( splash )<br>        {<br>            manager->playAnimation( animation.get() );<br>            splash = false;<br>        }<br></div><div><br></div><div>However, nothing worked. Any ideas or an example that does something like this?</div><div><br></div>Rodrigo.<br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups "OpenSceneGraph Users" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an email to <a href="mailto:osg-users+unsubscribe@googlegroups.com">osg-users+unsubscribe@googlegroups.com</a>.<br />
To view this discussion on the web visit <a href="https://groups.google.com/d/msgid/osg-users/f732a22d-35d1-4c2e-a90c-dad9dedc9fd1%40googlegroups.com?utm_medium=email&utm_source=footer">https://groups.google.com/d/msgid/osg-users/f732a22d-35d1-4c2e-a90c-dad9dedc9fd1%40googlegroups.com</a>.<br />