From 1b8c23d274f921362c03a04fc1b36a7429b9e102 Mon Sep 17 00:00:00 2001 From: Mugen87 Date: Thu, 20 Dec 2018 19:05:34 +0100 Subject: [PATCH] Xloader: Fixed SkinnedMesh creation --- examples/js/loaders/XLoader.js | 48 ++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/examples/js/loaders/XLoader.js b/examples/js/loaders/XLoader.js index 8c613e747b..ecf450e171 100644 --- a/examples/js/loaders/XLoader.js +++ b/examples/js/loaders/XLoader.js @@ -1415,9 +1415,9 @@ } var bufferGeometry = this._buildGeometry(); - bufferGeometry.bones = putBones; mesh = new THREE.SkinnedMesh( bufferGeometry, this._currentGeo.Materials.length === 1 ? this._currentGeo.Materials[ 0 ] : this._currentGeo.Materials ); - mesh.skeleton.boneInverses = offsetList; + + this._initSkeleton( mesh, putBones, offsetList ); } else { @@ -1450,6 +1450,50 @@ this.Meshes.push( mesh ); } + }, { + key: '_initSkeleton', + value: function _initSkeleton( mesh, boneList, boneInverses ) { + + var bones = [], bone, gbone; + var i, il; + + for ( i = 0, il = boneList.length; i < il; i ++ ) { + + gbone = boneList[ i ]; + + bone = new THREE.Bone(); + bones.push( bone ); + + bone.name = gbone.name; + bone.position.fromArray( gbone.pos ); + bone.quaternion.fromArray( gbone.rotq ); + if ( gbone.scl !== undefined ) bone.scale.fromArray( gbone.scl ); + + } + + for ( i = 0, il = boneList.length; i < il; i ++ ) { + + gbone = boneList[ i ]; + + if ( ( gbone.parent !== - 1 ) && ( gbone.parent !== null ) && ( bones[ gbone.parent ] !== undefined ) ) { + + bones[ gbone.parent ].add( bones[ i ] ); + + } else { + + mesh.add( bones[ i ] ); + + } + + } + + mesh.updateMatrixWorld( true ); + + var skeleton = new THREE.Skeleton( bones, boneInverses ); + mesh.bind( skeleton, mesh.matrixWorld ); + + } + }, { key: '_readAnimationKey', value: function _readAnimationKey() { -- GitLab