Files
vb01/keyframeChannel.cpp
T
2021-10-19 19:06:41 +03:00

67 lines
2.0 KiB
C++

#include "keyframeChannel.h"
using namespace std;
namespace vb01{
float KeyframeChannel::interpolate(float pastValue, float nextValue, Keyframe::Interpolation mode, float ratio){
float currentValue;
switch(mode){
case Keyframe::CONSTANT:
currentValue = pastValue;
break;
case Keyframe::LINEAR:
currentValue = pastValue + (nextValue - pastValue) * ratio;
break;
case Keyframe::BEZIER:
currentValue = pastValue + (nextValue - pastValue) * ratio;
break;
}
return currentValue;
}
KeyframeChannelType KeyframeChannel::getKeyframeChannelType(string typeString){
KeyframeChannelType type;
if(typeString == "pos_x")
type = KeyframeChannelType::POS_X;
else if(typeString == "pos_y")
type = KeyframeChannelType::POS_Y;
else if(typeString == "pos_z")
type = KeyframeChannelType::POS_Z;
else if(typeString == "rot_w")
type = KeyframeChannelType::ROT_W;
else if(typeString == "rot_x")
type = KeyframeChannelType::ROT_X;
else if(typeString == "rot_y")
type = KeyframeChannelType::ROT_Y;
else if(typeString == "rot_z")
type = KeyframeChannelType::ROT_Z;
else if(typeString == "scale_x")
type = KeyframeChannelType::SCALE_X;
else if(typeString == "scale_y")
type = KeyframeChannelType::SCALE_Y;
else if(typeString == "scale_z")
type = KeyframeChannelType::SCALE_Z;
else if(typeString == "shape_key_min")
type = KeyframeChannelType::SHAPE_KEY_MIN;
else if(typeString == "shape_key_value")
type = KeyframeChannelType::SHAPE_KEY_VALUE;
else if(typeString == "shape_key_max")
type = KeyframeChannelType::SHAPE_KEY_MAX;
return type;
}
Keyframe KeyframeChannel::findKeyframe(float time, KeyframeChannel keyframeChannel, bool last){
int pastKeyframeId = -1;
for(int i = 0; i < keyframeChannel.keyframes.size(); i++){
Keyframe keyframe = keyframeChannel.keyframes[i];
if(time >= keyframe.frame){
pastKeyframeId = i;
}
}
return keyframeChannel.keyframes[pastKeyframeId + (last ? 0 : 1)];
}
void KeyframeChannel::transform(){
}
}