|
@@ -286,7 +286,7 @@
|
|
}
|
|
}
|
|
|
|
|
|
public quaternionInterpolateFunctionWithTangents(startValue: Quaternion, outTangent: Quaternion, endValue: Quaternion, inTangent: Quaternion, gradient: number): Quaternion {
|
|
public quaternionInterpolateFunctionWithTangents(startValue: Quaternion, outTangent: Quaternion, endValue: Quaternion, inTangent: Quaternion, gradient: number): Quaternion {
|
|
- return Quaternion.Hermite(startValue, outTangent, endValue, inTangent, gradient);
|
|
|
|
|
|
+ return Quaternion.Hermite(startValue, outTangent, endValue, inTangent, gradient).normalize();
|
|
}
|
|
}
|
|
|
|
|
|
public vector3InterpolateFunction(startValue: Vector3, endValue: Vector3, gradient: number): Vector3 {
|
|
public vector3InterpolateFunction(startValue: Vector3, endValue: Vector3, gradient: number): Vector3 {
|
|
@@ -377,9 +377,10 @@
|
|
var endValue = this._getKeyValue(endKey.value);
|
|
var endValue = this._getKeyValue(endKey.value);
|
|
|
|
|
|
var useTangent = startKey.outTangent && endKey.inTangent;
|
|
var useTangent = startKey.outTangent && endKey.inTangent;
|
|
|
|
+ var frameDelta = endKey.frame - startKey.frame;
|
|
|
|
|
|
// gradient : percent of currentFrame between the frame inf and the frame sup
|
|
// gradient : percent of currentFrame between the frame inf and the frame sup
|
|
- var gradient = (currentFrame - startKey.frame) / (endKey.frame - startKey.frame);
|
|
|
|
|
|
+ var gradient = (currentFrame - startKey.frame) / frameDelta;
|
|
|
|
|
|
// check for easingFunction and correction of gradient
|
|
// check for easingFunction and correction of gradient
|
|
if (this._easingFunction != null) {
|
|
if (this._easingFunction != null) {
|
|
@@ -399,7 +400,7 @@
|
|
break;
|
|
break;
|
|
// Quaternion
|
|
// Quaternion
|
|
case Animation.ANIMATIONTYPE_QUATERNION:
|
|
case Animation.ANIMATIONTYPE_QUATERNION:
|
|
- var quaternion = useTangent ? this.quaternionInterpolateFunctionWithTangents(startValue, startKey.outTangent, endValue, endKey.inTangent, gradient) : this.quaternionInterpolateFunction(startValue, endValue, gradient);
|
|
|
|
|
|
+ var quaternion = useTangent ? this.quaternionInterpolateFunctionWithTangents(startValue, startKey.outTangent.scale(frameDelta), endValue, endKey.inTangent.scale(frameDelta), gradient) : this.quaternionInterpolateFunction(startValue, endValue, gradient);
|
|
switch (loopMode) {
|
|
switch (loopMode) {
|
|
case Animation.ANIMATIONLOOPMODE_CYCLE:
|
|
case Animation.ANIMATIONLOOPMODE_CYCLE:
|
|
case Animation.ANIMATIONLOOPMODE_CONSTANT:
|
|
case Animation.ANIMATIONLOOPMODE_CONSTANT:
|
|
@@ -411,7 +412,7 @@
|
|
return quaternion;
|
|
return quaternion;
|
|
// Vector3
|
|
// Vector3
|
|
case Animation.ANIMATIONTYPE_VECTOR3:
|
|
case Animation.ANIMATIONTYPE_VECTOR3:
|
|
- var vec3Value = useTangent ? this.vector3InterpolateFunctionWithTangents(startValue, startKey.outTangent, endValue, endKey.inTangent, gradient) : this.vector3InterpolateFunction(startValue, endValue, gradient);
|
|
|
|
|
|
+ var vec3Value = useTangent ? this.vector3InterpolateFunctionWithTangents(startValue, startKey.outTangent.scale(frameDelta), endValue, endKey.inTangent.scale(frameDelta), gradient) : this.vector3InterpolateFunction(startValue, endValue, gradient);
|
|
switch (loopMode) {
|
|
switch (loopMode) {
|
|
case Animation.ANIMATIONLOOPMODE_CYCLE:
|
|
case Animation.ANIMATIONLOOPMODE_CYCLE:
|
|
case Animation.ANIMATIONLOOPMODE_CONSTANT:
|
|
case Animation.ANIMATIONLOOPMODE_CONSTANT:
|
|
@@ -421,7 +422,7 @@
|
|
}
|
|
}
|
|
// Vector2
|
|
// Vector2
|
|
case Animation.ANIMATIONTYPE_VECTOR2:
|
|
case Animation.ANIMATIONTYPE_VECTOR2:
|
|
- var vec2Value = useTangent ? this.vector2InterpolateFunctionWithTangents(startValue, startKey.outTangent, endValue, endKey.inTangent, gradient) : this.vector2InterpolateFunction(startValue, endValue, gradient);
|
|
|
|
|
|
+ var vec2Value = useTangent ? this.vector2InterpolateFunctionWithTangents(startValue, startKey.outTangent.scale(frameDelta), endValue, endKey.inTangent.scale(frameDelta), gradient) : this.vector2InterpolateFunction(startValue, endValue, gradient);
|
|
switch (loopMode) {
|
|
switch (loopMode) {
|
|
case Animation.ANIMATIONLOOPMODE_CYCLE:
|
|
case Animation.ANIMATIONLOOPMODE_CYCLE:
|
|
case Animation.ANIMATIONLOOPMODE_CONSTANT:
|
|
case Animation.ANIMATIONLOOPMODE_CONSTANT:
|