Prechádzať zdrojové kódy

-Bugfix: Anim interpolation does not produce invalid floats anymore on one-frame animation tracks

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@221 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
ulfjorensen 17 rokov pred
rodič
commit
42123de268
1 zmenil súbory, kde vykonal 17 pridanie a 4 odobranie
  1. 17 4
      tools/assimp_view/AnimEvaluator.cpp

+ 17 - 4
tools/assimp_view/AnimEvaluator.cpp

@@ -96,8 +96,15 @@ void AnimEvaluator::Evaluate( double pTime)
 			double diffTime = nextKey.mTime - key.mTime;
 			if( diffTime < 0.0)
 				diffTime += mAnim->mDuration;
-			float factor = (time - key.mTime) / diffTime;
-			presentPosition = key.mValue + (nextKey.mValue - key.mValue) * factor;
+			if( diffTime > 0)
+			{
+				float factor = float( (time - key.mTime) / diffTime);
+				presentPosition = key.mValue + (nextKey.mValue - key.mValue) * factor;
+			} else
+			{
+				presentPosition = key.mValue;
+			}
+
 			mLastPositions[a].get<0>() = frame;
 		}
 
@@ -120,9 +127,15 @@ void AnimEvaluator::Evaluate( double pTime)
 			double diffTime = nextKey.mTime - key.mTime;
 			if( diffTime < 0.0)
 				diffTime += mAnim->mDuration;
-			float factor = (time - key.mTime) / diffTime;
+			if( diffTime > 0)
+			{
+				float factor = float( (time - key.mTime) / diffTime);
+				aiQuaternion::Interpolate( presentRotation, key.mValue, nextKey.mValue, factor);
+			} else
+			{
+				presentRotation = key.mValue;
+			}
 
-			aiQuaternion::Interpolate( presentRotation, key.mValue, nextKey.mValue, factor);
 			mLastPositions[a].get<1>() = frame;
 		}