More animation fixes for curves that don't start on frame 0.
--HG-- branch : nfb
This commit is contained in:
@@ -128,9 +128,9 @@ float KRAnimationCurve::getValue(int frame_number)
|
|||||||
{
|
{
|
||||||
//printf("frame_number: %i\n", frame_number);
|
//printf("frame_number: %i\n", frame_number);
|
||||||
int clamped_frame = frame_number - getFrameStart();
|
int clamped_frame = frame_number - getFrameStart();
|
||||||
if(frame_number < 0) {
|
if(clamped_frame < 0) {
|
||||||
clamped_frame = 0;
|
clamped_frame = 0;
|
||||||
} else if(frame_number >= getFrameCount()) {
|
} else if(clamped_frame >= getFrameCount()) {
|
||||||
clamped_frame = getFrameCount()-1;
|
clamped_frame = getFrameCount()-1;
|
||||||
}
|
}
|
||||||
float *frame_data = (float *)((char *)m_pData->getStart() + sizeof(animation_curve_header));
|
float *frame_data = (float *)((char *)m_pData->getStart() + sizeof(animation_curve_header));
|
||||||
|
|||||||
@@ -359,19 +359,19 @@ KRAnimationCurve *LoadAnimationCurve(KRContext &context, FbxAnimCurve* pAnimCurv
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
float frame_rate = 30.0f; // FINDME, TODO - This needs to be dynamic
|
float dest_frame_rate = 30.0f; // FINDME, TODO - This needs to be dynamic
|
||||||
int frame_start = time_span.GetStart().GetSecondDouble() * frame_rate;
|
int frame_start = time_span.GetStart().GetSecondDouble() * dest_frame_rate;
|
||||||
int frame_count = (time_span.GetStop().GetSecondDouble() * frame_rate) - frame_start;
|
int frame_count = (time_span.GetStop().GetSecondDouble() * dest_frame_rate) - frame_start;
|
||||||
|
|
||||||
KRAnimationCurve *new_curve = new KRAnimationCurve(context, name);
|
KRAnimationCurve *new_curve = new KRAnimationCurve(context, name);
|
||||||
new_curve->setFrameRate(frame_rate);
|
new_curve->setFrameRate(dest_frame_rate);
|
||||||
new_curve->setFrameStart(frame_start);
|
new_curve->setFrameStart(frame_start);
|
||||||
new_curve->setFrameCount(frame_count);
|
new_curve->setFrameCount(frame_count);
|
||||||
|
|
||||||
// Resample animation curve
|
// Resample animation curve
|
||||||
int last_frame = 0; // Used by FBX sdk for faster keyframe searches
|
int last_frame = 0; // Used by FBX sdk for faster keyframe searches
|
||||||
for(int frame_number=0; frame_number < frame_count; frame_number++) {
|
for(int frame_number=0; frame_number < frame_count; frame_number++) {
|
||||||
float frame_seconds = (frame_start + frame_number) / frame_rate;
|
float frame_seconds = (frame_start + frame_number) / dest_frame_rate;
|
||||||
FbxTime frame_time;
|
FbxTime frame_time;
|
||||||
frame_time.SetSecondDouble(frame_seconds);
|
frame_time.SetSecondDouble(frame_seconds);
|
||||||
float frame_value = pAnimCurve->Evaluate(frame_time, &last_frame);
|
float frame_value = pAnimCurve->Evaluate(frame_time, &last_frame);
|
||||||
|
|||||||
Reference in New Issue
Block a user