osgGA.AnimationPathManipulator
是一个基于动画路径的相机控制器,它可以让相机沿着制定的动画路径进行移动。
通过以下代码可以创建一个osgGA.AnimationPathManipulator
:
osg::AnimationPath* path = new osg::AnimationPath;
// 添加起始点
path->insert(0.0, osg::AnimationPath::ControlPoint(osg::Vec3(0.0, 0.0, 0.0)));
// 添加终止点
path->insert(5.0, osg::AnimationPath::ControlPoint(osg::Vec3(0.0, 0.0, 10.0)));
osg::ref_ptr<osgGA::AnimationPathManipulator> manipulator =
new osgGA::AnimationPathManipulator(path);
viewer->setCameraManipulator(manipulator);
以上代码创建了一个从(0,0,0)到(0,0,10)的简单路径,并且将创建的osgGA.AnimationPathManipulator
添加为相机的控制器。
osgGA::AnimationPathManipulator::setAnimationPath(osg::AnimationPath *path)
设置要使用的路径。
osgGA::AnimationPathManipulator::setTimeScale(double scale)
设置动画播放速度的缩放因子。
osgGA::AnimationPathManipulator::setVerticalAxisFixed(bool flag)
设置垂直方向是否固定。
如果设置为true
,控制器不会绕X轴旋转。
osgGA::AnimationPathManipulator::setAnimationMode(osgGA::AnimationPathManipulator::AnimationMode mode)
设置动画模式。目前有两种模式可选:
_ONCE
: 动画只播放一次,播放完后停止。_LOOP
: 动画循环播放。osgGA::AnimationPathManipulator::getAnimationPath()
获取当前使用的路径对象。
osgGA::AnimationPathManipulator::getTimeScale()
获取当前动画播放速度的缩放因子。
osgGA::AnimationPathManipulator::getVerticalAxisFixed()
获取当前垂直方向的固定状态。
osgGA::AnimationPathManipulator::getAnimationMode()
获取当前动画模式。
以下是一个简单的动画路径示例代码:
#include <osgViewer/Viewer>
#include <osgGA/AnimationPathManipulator>
int main()
{
osgViewer::Viewer viewer;
// 创建路径
osg::AnimationPath* path = new osg::AnimationPath;
path->setLoopMode(osg::AnimationPath::LOOP);
double radius = 50.0;
double yheight = 25.0;
double time = 0.0;
for(unsigned int i = 0; i < 32; ++i)
{
double angle = 2.0*osg::PI*(double)i/32.0;
osg::Vec3 pos(sinf(angle)*radius,
cosf(angle)*radius,
yheight);
osg::Quat rot(-angle, osg::Z_AXIS);
path->insert(time, osg::AnimationPath::ControlPoint(pos, rot));
time += 0.1;
}
osg::ref_ptr<osgGA::AnimationPathManipulator> manipulator =
new osgGA::AnimationPathManipulator(path);
viewer.setCameraManipulator(manipulator);
return viewer.run();
}
以上代码创建了一个相机绕着一个螺旋形的路径移动的动画效果。