提交 ec1d5a7a 编写于 作者: D Don McCurdy

GLTFLoader: Fix warning on cubicspline interpolation.

上级 c71cdb34
......@@ -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;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册