AnimationTransitPtr setupAnimation(const std::vector<Pnt3f>& Path, Transform* const transCore) { //Transformation Keyframe Sequence KeyframeTransformationSequenceRecPtr TransformationKeyframes = KeyframeTransformationSequenceMatrix4f::create(); Matrix TempMat; TempMat.setScale(0.06f); Real32 Speed(1.0f); Real32 SeqTime; Real32 TotalPathDistance(0.0f); for(UInt32 i(0) ; i<Path.size()-1 ; ++i) { TotalPathDistance += Path[i].dist(Path[(i+1)]); } Real32 CumPathDistance(0.0f); Quaternion Rotation; Vec3f Direction; for(UInt32 i(0) ; i<Path.size() ; ++i) { SeqTime = CumPathDistance / Speed; Direction = Path[(i+1)%Path.size()]-Path[i]; Direction[1] = 0.0f; Direction.normalize(); Rotation = Quaternion(Vec3f(0.0f,0.0f,1.0f),Direction); TempMat.setTransform(Vec3f(Path[i]),Rotation,Vec3f(0.1f,0.1f,0.1f)); TransformationKeyframes->addKeyframe(TempMat,SeqTime); if(i<Path.size()-1) { CumPathDistance += Path[i].dist(Path[(i+1)]); } } //Animator KeyframeAnimatorRecPtr TheAnimator = KeyframeAnimator::create(); TheAnimator->setKeyframeSequence(TransformationKeyframes); //Animation FieldAnimationRecPtr TheAnimation = FieldAnimation::create(); TheAnimation->setAnimator(TheAnimator); TheAnimation->setInterpolationType(Animator::LINEAR_INTERPOLATION); TheAnimation->setCycling(1); TheAnimation->setAnimatedField(transCore, std::string("matrix")); return AnimationTransitPtr(TheAnimation); }
AnimationTransitPtr setupAnimation(Transform* const transCore, WindowEventProducer* const win) { //Number Keyframe Sequence KeyframeNumberSequenceRecPtr NumberKeyframes = KeyframeNumberSequenceReal32::create(); NumberKeyframes->addKeyframe(1.0,0.0f); NumberKeyframes->addKeyframe(60.0,1.0f); NumberKeyframes->addKeyframe(20.0,2.0f); NumberKeyframes->addKeyframe(1.0,3.0f); //Color Keyframe Sequence KeyframeColorSequenceRecPtr ColorKeyframes = KeyframeColorSequenceColor3f::create(); ColorKeyframes->addKeyframe(Color4f(1.0f,0.0f,0.0f,1.0f),0.0f); ColorKeyframes->addKeyframe(Color4f(0.0f,1.0f,0.0f,1.0f),2.0f); ColorKeyframes->addKeyframe(Color4f(0.0f,0.0f,1.0f,1.0f),4.0f); ColorKeyframes->addKeyframe(Color4f(1.0f,0.0f,0.0f,1.0f),6.0f); //Position Keyframe Sequence KeyframePositionSequenceRecPtr PositionKeyframes = KeyframePositionSequencePnt3f::create(); PositionKeyframes->addKeyframe(Pnt3f(1.0f,1.0f,1.0f),0.0f); PositionKeyframes->addKeyframe(Pnt3f(0.5f,1.0f,0.5f),1.0f); PositionKeyframes->addKeyframe(Pnt3f(1.0f,1.0f,0.5f),2.0f); PositionKeyframes->addKeyframe(Pnt3f(1.0f,0.5f,0.5f),3.0f); PositionKeyframes->addKeyframe(Pnt3f(1.0f,1.0f,1.0f),4.0f); //Vector Keyframe Sequence KeyframeVectorSequenceRecPtr VectorKeyframes = KeyframeVectorSequenceVec3f::create(); VectorKeyframes->addKeyframe(Vec3f(1.0f,1.0f,1.0f),0.0f); VectorKeyframes->addKeyframe(Vec3f(0.5f,1.0f,0.5f),1.0f); VectorKeyframes->addKeyframe(Vec3f(1.0f,1.0f,0.5f),2.0f); VectorKeyframes->addKeyframe(Vec3f(1.0f,0.5f,0.5f),3.0f); VectorKeyframes->addKeyframe(Vec3f(1.0f,1.0f,1.0f),4.0f); //Rotation Keyframe Sequence KeyframeRotationSequenceRecPtr RotationKeyframes = KeyframeRotationSequenceQuaternion::create(); RotationKeyframes->addKeyframe(Quaternion(Vec3f(0.0f,1.0f,0.0f), 3.14159f*0.0f),0.0f); RotationKeyframes->addKeyframe(Quaternion(Vec3f(0.0f,1.0f,0.0f), 3.14159f*0.5f),1.0f); RotationKeyframes->addKeyframe(Quaternion(Vec3f(0.0f,1.0f,0.0f), 3.14159f*1.0f),2.0f); RotationKeyframes->addKeyframe(Quaternion(Vec3f(0.0f,1.0f,0.0f), 3.14159f*1.5f),3.0f); RotationKeyframes->addKeyframe(Quaternion(Vec3f(0.0f,1.0f,0.0f), 3.14159f*2.0f),4.0f); //Transformation Keyframe Sequence KeyframeTransformationSequenceRecPtr TransformationKeyframes = KeyframeTransformationSequenceMatrix4f::create(); Matrix TempMat; TempMat.setTransform(Vec3f(0.0f,0.0f,0.0f), Quaternion(Vec3f(0.0f,1.0f,0.0f), 3.14159f*0.0f)); TransformationKeyframes->addKeyframe(TempMat,0.0f); TempMat.setTransform(Vec3f(0.0f,1.0f,0.0f), Quaternion(Vec3f(0.0f,1.0f,0.0f), 3.14159f*0.5f)); TransformationKeyframes->addKeyframe(TempMat,1.0f); TempMat.setTransform(Vec3f(1.0f,1.0f,0.0f), Quaternion(Vec3f(0.0f,1.0f,0.0f), 3.14159f*1.0f)); TransformationKeyframes->addKeyframe(TempMat,2.0f); TempMat.setTransform(Vec3f(1.0f,0.0f,0.0f), Quaternion(Vec3f(0.0f,1.0f,0.0f), 3.14159f*1.5f)); TransformationKeyframes->addKeyframe(TempMat,3.0f); TempMat.setTransform(Vec3f(0.0f,0.0f,0.0f), Quaternion(Vec3f(0.0f,1.0f,0.0f), 3.14159f*2.0f)); TransformationKeyframes->addKeyframe(TempMat,4.0f); //Animator KeyframeAnimatorRecPtr TheAnimator = KeyframeAnimator::create(); //TheAnimator->setKeyframeSequence(VectorKeyframes); //TheAnimator->setKeyframeSequence(RotationKeyframes); //TheAnimator->setKeyframeSequence(ColorKeyframes); TheAnimator->setKeyframeSequence(TransformationKeyframes); //TheAnimator->setKeyframeSequence(NumberKeyframes); //Animation FieldAnimationRecPtr TheAnimation = FieldAnimation::create(); TheAnimation->setAnimator(TheAnimator); TheAnimation->setInterpolationType(Animator::LINEAR_INTERPOLATION); TheAnimation->setCycling(2); //TheAnimation->setAnimatedField(getFieldContainer("Transform",std::string("TorusNodeTransformationCore")), std::string("matrix")); //TheAnimation->setAnimatedField(Trans, std::string("scale")); //TheAnimation->setAnimatedField(Trans, std::string("rotation")); //TheAnimation->setAnimatedField(TheTorusMaterial, std::string("diffuse")); //TheAnimation->setAnimatedField(TheTorusMaterial, std::string("shininess")); TheAnimation->setAnimatedField(transCore, std::string("matrix")); AnimationGroupRecPtr TheAnimationGroup = AnimationGroup::create(); TheAnimationGroup->pushToAnimations(TheAnimation); TheAnimationGroup->setCycling(2); TheAnimationGroup->attachUpdateProducer(win); TheAnimationGroup->start(); return AnimationTransitPtr(TheAnimationGroup); }