osg.Sequence
是一种用于容纳场景图节点序列的节点类型。可以将节点按顺序添加到osg.Sequence
中,它们将按照添加顺序依次执行。
osg.Sequence
节点osg::ref_ptr<osg::Sequence> sequence = new osg::Sequence;
osg::ref_ptr<osg::Node> node1 = ...;
osg::ref_ptr<osg::Node> node2 = ...;
sequence->addChild(node1);
sequence->addChild(node2);
osg.Sequence
可以通过setTimeControlMode()
方法设置切换事件,即指定在何时切换到下一个子节点。
sequence->setTimeControlMode(osg::Sequence::LOOP_MODE); // 默认模式
sequence->setTimeControlMode(osg::Sequence::SWITCH_ON_TIME); // 时间切换模式
sequence->setTimeControlMode(osg::Sequence::SWITCH_ON_NEXT_INTERVAL); // 时间间隔切换模式
在时间切换模式下,使用setTimeForChildren()
方法设置每个子节点的持续时间。setTime()
用于设置整个序列的持续时间。
sequence->setTimeControlMode(osg::Sequence::SWITCH_ON_TIME);
sequence->setTimeForChildren(0, 2); // 第一个子节点持续2秒
sequence->setTimeForChildren(1, 3); // 第二个子节点持续3秒
sequence->setTime(5); // 整个序列持续5秒
在时间间隔切换模式下,使用setIntervalForChildren()
方法设置子节点之间的时间间隔。setDuration()
用于设置整个序列的持续时间。
sequence->setTimeControlMode(osg::Sequence::SWITCH_ON_NEXT_INTERVAL);
sequence->setIntervalForChildren(0, 2); // 第一个子节点后2秒切换到下一个子节点
sequence->setDuration(5); // 整个序列持续5秒
在osgViewer::Viewer
中,使用setSceneData()
方法设置osg.Sequence
节点作为场景根节点,然后启动渲染循环。
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
viewer->setSceneData(sequence);
viewer->run();
osg.Sequence
节点类型提供了一种方便的方法来容纳和控制场景图节点序列。您可以指定何时切换到下一个节点并设置持续时间或时间间隔。这为创建具有动画效果的场景图提供了完美的解决方案。