|
|
@ -5380,7 +5380,8 @@ static bool GetPoseAtTimeGLTF(cgltf_interpolation_type interpolationType, cgltf_ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
float t = (time - tstart)/fmax((tend - tstart), EPSILON); |
|
|
|
float duration = fmax((tend - tstart), EPSILON); |
|
|
|
float t = (time - tstart)/duration; |
|
|
|
t = (t < 0.0f)? 0.0f : t; |
|
|
|
t = (t > 1.0f)? 1.0f : t; |
|
|
|
|
|
|
@ -5419,9 +5420,9 @@ static bool GetPoseAtTimeGLTF(cgltf_interpolation_type interpolationType, cgltf_ |
|
|
|
Vector3 v1 = {tmp[0], tmp[1], tmp[2]}; |
|
|
|
cgltf_accessor_read_float(output, 3*keyframe+2, tmp, 3); |
|
|
|
Vector3 tangent1 = {tmp[0], tmp[1], tmp[2]}; |
|
|
|
cgltf_accessor_read_float(output, 3*(keyframe+1), tmp, 3); |
|
|
|
Vector3 v2 = {tmp[0], tmp[1], tmp[2]}; |
|
|
|
cgltf_accessor_read_float(output, 3*(keyframe+1)+1, tmp, 3); |
|
|
|
Vector3 v2 = {tmp[0], tmp[1], tmp[2]}; |
|
|
|
cgltf_accessor_read_float(output, 3*(keyframe+1), tmp, 3); |
|
|
|
Vector3 tangent2 = {tmp[0], tmp[1], tmp[2]}; |
|
|
|
Vector3 *r = data; |
|
|
|
|
|
|
@ -5462,14 +5463,25 @@ static bool GetPoseAtTimeGLTF(cgltf_interpolation_type interpolationType, cgltf_ |
|
|
|
cgltf_accessor_read_float(output, 3*keyframe+1, tmp, 4); |
|
|
|
Vector4 v1 = {tmp[0], tmp[1], tmp[2], tmp[3]}; |
|
|
|
cgltf_accessor_read_float(output, 3*keyframe+2, tmp, 4); |
|
|
|
Vector4 tangent1 = {tmp[0], tmp[1], tmp[2]}; |
|
|
|
cgltf_accessor_read_float(output, 3*(keyframe+1), tmp, 4); |
|
|
|
Vector4 v2 = {tmp[0], tmp[1], tmp[2], tmp[3]}; |
|
|
|
Vector4 outTangent1 = {tmp[0], tmp[1], tmp[2]}; |
|
|
|
cgltf_accessor_read_float(output, 3*(keyframe+1)+1, tmp, 4); |
|
|
|
Vector4 tangent2 = {tmp[0], tmp[1], tmp[2]}; |
|
|
|
Vector4 v2 = {tmp[0], tmp[1], tmp[2], tmp[3]}; |
|
|
|
cgltf_accessor_read_float(output, 3*(keyframe+1), tmp, 4); |
|
|
|
Vector4 inTangent2 = {tmp[0], tmp[1], tmp[2]}; |
|
|
|
Vector4 *r = data; |
|
|
|
|
|
|
|
*r = QuaternionCubicSpline(v1, tangent1, v2, tangent2, t); |
|
|
|
v1 = QuaternionNormalize(v1); |
|
|
|
v2 = QuaternionNormalize(v2); |
|
|
|
|
|
|
|
if (Vector4DotProduct(v1, v2) < 0.0f) |
|
|
|
{ |
|
|
|
v2 = Vector4Negate(v2); |
|
|
|
} |
|
|
|
|
|
|
|
outTangent1 = Vector4Scale(outTangent1, duration); |
|
|
|
inTangent2 = Vector4Scale(inTangent2, duration); |
|
|
|
|
|
|
|
*r = QuaternionCubicHermiteSpline(v1, outTangent1, v2, inTangent2, t); |
|
|
|
} break; |
|
|
|
} |
|
|
|
} |
|
|
|