|
@@ -1218,10 +1218,8 @@ THREE.GLTFLoader = ( function () {
|
|
|
};
|
|
|
|
|
|
var INTERPOLATION = {
|
|
|
- CUBICSPLINE: THREE.InterpolateSmooth, // We use custom interpolation GLTFCubicSplineInterpolation for CUBICSPLINE.
|
|
|
- // KeyframeTrack.optimize() can't handle glTF Cubic Spline output values layout,
|
|
|
- // using THREE.InterpolateSmooth for KeyframeTrack instantiation to prevent optimization.
|
|
|
- // See KeyframeTrack.optimize() for the detail.
|
|
|
+ CUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each
|
|
|
+ // keyframe track will be initialized with a default interpolation type, then modified.
|
|
|
LINEAR: THREE.InterpolateLinear,
|
|
|
STEP: THREE.InterpolateDiscrete
|
|
|
};
|
|
@@ -2880,10 +2878,7 @@ THREE.GLTFLoader = ( function () {
|
|
|
|
|
|
if ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {
|
|
|
|
|
|
- // node can be THREE.Group here but
|
|
|
- // PATH_PROPERTIES.weights(morphTargetInfluences) should be
|
|
|
- // the property of a mesh object under group.
|
|
|
-
|
|
|
+ // Node may be a THREE.Group (glTF mesh with several primitives) or a THREE.Mesh.
|
|
|
node.traverse( function ( object ) {
|
|
|
|
|
|
if ( object.isMesh === true && object.morphTargetInfluences ) {
|
|
@@ -2900,20 +2895,16 @@ THREE.GLTFLoader = ( function () {
|
|
|
|
|
|
}
|
|
|
|
|
|
- // KeyframeTrack.optimize() will modify given 'times' and 'values'
|
|
|
- // buffers before creating a truncated copy to keep. Because buffers may
|
|
|
- // be reused by other tracks, make copies here.
|
|
|
for ( var j = 0, jl = targetNames.length; j < jl; j ++ ) {
|
|
|
|
|
|
var track = new TypedKeyframeTrack(
|
|
|
targetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],
|
|
|
- THREE.AnimationUtils.arraySlice( inputAccessor.array, 0 ),
|
|
|
- THREE.AnimationUtils.arraySlice( outputAccessor.array, 0 ),
|
|
|
+ inputAccessor.array,
|
|
|
+ outputAccessor.array,
|
|
|
interpolation
|
|
|
);
|
|
|
|
|
|
- // Here is the trick to enable custom interpolation.
|
|
|
- // Overrides .createInterpolant in a factory method which creates custom interpolation.
|
|
|
+ // Override interpolation with custom factory method.
|
|
|
if ( sampler.interpolation === 'CUBICSPLINE' ) {
|
|
|
|
|
|
track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {
|
|
@@ -2926,8 +2917,7 @@ THREE.GLTFLoader = ( function () {
|
|
|
|
|
|
};
|
|
|
|
|
|
- // Workaround, provide an alternate way to know if the interpolant type is cubis spline to track.
|
|
|
- // track.getInterpolation() doesn't return valid value for custom interpolant.
|
|
|
+ // Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.
|
|
|
track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;
|
|
|
|
|
|
}
|