diff --git a/examples/js/animation/MMDAnimationHelper.js b/examples/js/animation/MMDAnimationHelper.js index c7986120fd9745e709e4663d1738f981d53df283..923cc27c88229a16e91863a69ab3f7888da9e15f 100644 --- a/examples/js/animation/MMDAnimationHelper.js +++ b/examples/js/animation/MMDAnimationHelper.js @@ -275,7 +275,7 @@ THREE.MMDAnimationHelper = ( function () { */ createGrantSolver: function ( mesh ) { - return new GrantSolver( mesh ); + return new GrantSolver( mesh, mesh.geometry.grants ); }, @@ -531,6 +531,7 @@ THREE.MMDAnimationHelper = ( function () { if ( ikSolver && this.enabled.ik ) { + mesh.updateMatrixWorld( true ); ikSolver.update(); } @@ -618,7 +619,7 @@ THREE.MMDAnimationHelper = ( function () { } - return new THREE.CCDIKSolver( mesh ); + return new THREE.CCDIKSolver( mesh, mesh.geometry.iks ); }, @@ -959,10 +960,12 @@ THREE.MMDAnimationHelper = ( function () { /** * @param {THREE.SkinnedMesh} mesh + * @param {Array} grants */ - function GrantSolver( mesh ) { + function GrantSolver( mesh, grants ) { this.mesh = mesh; + this.grants = grants || []; } @@ -979,11 +982,14 @@ THREE.MMDAnimationHelper = ( function () { return function () { - for ( var i = 0, il = this.mesh.geometry.grants.length; i < il; i ++ ) { + var bones = this.mesh.skeleton.bones; + var grants = this.grants; - var grant = this.mesh.geometry.grants[ i ]; - var bone = this.mesh.skeleton.bones[ grant.index ]; - var parentBone = this.mesh.skeleton.bones[ grant.parentIndex ]; + for ( var i = 0, il = grants.length; i < il; i ++ ) { + + var grant = grants[ i ]; + var bone = bones[ grant.index ]; + var parentBone = bones[ grant.parentIndex ]; if ( grant.isLocal ) { @@ -1016,7 +1022,7 @@ THREE.MMDAnimationHelper = ( function () { } - this; + return this; };