osgPresentation.PropertyAnimation
类是OpenSceneGraph
中展示动画的一种方式,它可以通过控制场景中节点的属性值来实现动画效果。在创建PropertyAnimation
前,我们需要明确使用哪种属性类型并通过合适的osgAnimation::StackedTranslateElement
,osgAnimation::StackedRotateElement
或osgAnimation::StackedMatrixElement
类型的UpdateMatrixTransform
等节点将相应的节点属性加入到堆栈中。
osgPresentation::PropertyAnimation::PropertyAnimation(const std::string& propertyName="")
参数propertyName
指定需要控制的属性名称,默认为空字符串。
void osgPresentation::PropertyAnimation::setStartValue(const osg::Vec3& value)
设置动画的起始属性值,osg::Vec3
表示3D向量。
void osgPresentation::PropertyAnimation::setEndValue(const osg::Vec3& value)
设置动画的结束属性值,osg::Vec3
表示3D向量。
void osgPresentation::PropertyAnimation::setDuration(double duration)
设置动画的播放时间,单位为秒。
void osgPresentation::PropertyAnimation::setDelay(double delay)
设置动画的延迟时间,即从开始播放动画到属性值发生变化的时间间隔。
void osgPresentation::PropertyAnimation::setEasingFunction(osg::AnimationPath::EasingFunctionFunction easingFunction)
设置动画的缓动函数,osg::AnimationPath::EasingFunctionFunction
是一个函数指针类型。
osg::AnimationPath* osgPresentation::PropertyAnimation::createAnimationPath(osg::Node* node, double startTime =0.0, double endTime =1.0)
创建动画路径,返回值为osg::AnimationPath
指针。
const osg::Vec3& osgPresentation::PropertyAnimation::getStartValue() const
获取动画的起始属性值,返回值为osg::Vec3
类型的常量引用。
const osg::Vec3& osgPresentation::PropertyAnimation::getEndValue() const
获取动画的结束属性值,返回值为osg::Vec3
类型的常量引用。
double osgPresentation::PropertyAnimation::getDuration() const
获取动画的播放时间,返回值为double
类型。
double osgPresentation::PropertyAnimation::getDelay() const
获取动画的延迟时间,返回值为double
类型。
osg::AnimationPath::EasingFunctionFunction osgPresentation::PropertyAnimation::getEasingFunction() const
获取动画的缓动函数,返回值为osg::AnimationPath::EasingFunctionFunction
类型的函数指针。
void osgPresentation::PropertyAnimation::apply(double time)
将动画作用于节点属性,参数time
表示时间戳,取值范围为[0,1]。
// 设置位置属性
osg::ref_ptr<osg::MatrixTransform> transform = new osg::MatrixTransform;
transform->setName("translate");
osg::ref_ptr<osgAnimation::UpdateMatrixTransform> update = new osgAnimation::UpdateMatrixTransform;
update->setStackedTransformElement(new osgAnimation::StackedTranslateElement(transform->getName()));
transform->setUpdateCallback(update);
// 创建动画
osg::ref_ptr<osgPresentation::PropertyAnimation> animation = new osgPresentation::PropertyAnimation(transform->getName());
animation->setStartValue(osg::Vec3(0.0, 0.0, 0.0));
animation->setEndValue(osg::Vec3(1.0, 0.0, 0.0));
animation->setDuration(2.0);
animation->apply(0.0);
// 将动画添加到动画路径中
osg::ref_ptr<osg::AnimationPath> animationPath = animation->createAnimationPath(transform, 0.0, 2.0);
osgPresentation::PropertyAnimation
的说明。