From e30e85f81b09d73719c92a0a8860aed1a5ea37e5 Mon Sep 17 00:00:00 2001 From: lillypath869 <53107244+lillypath869@users.noreply.github.com> Date: Sun, 8 Sep 2019 06:56:54 -0400 Subject: [PATCH] Apply morphs (#3) Fix: fromBufferAttribute wasn't working with morphtargets so we set them manually Fix: update tempVector to use morphVector is needed --- herosaver.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/herosaver.js b/herosaver.js index 720c8fc..fa15e12 100644 --- a/herosaver.js +++ b/herosaver.js @@ -54,7 +54,13 @@ function init() { geometry.skinIndices.push((new THREE.Vector4 ()).fromBufferAttribute(skinIndex,i)); geometry.skinWeights.push((new THREE.Vector4 ()).fromBufferAttribute(skinWeight,i)); for(var j = 0; j < mtcount; j++) { - geometry.morphTargets[j].vertices.push((new THREE.Vector3 ()).fromBufferAttribute(oldgeometry.getAttribute('morphTarget' + j))); + geometry.morphTargets[j].vertices.push(( + new THREE.Vector3( + oldgeometry.getAttribute('morphTarget' + j).getX(i), + oldgeometry.getAttribute('morphTarget' + j).getY(i), + oldgeometry.getAttribute('morphTarget' + j).getZ(i) + ) + )); } } } @@ -145,8 +151,12 @@ function init() { } for (var k = 0; k < 4; k++) { - - var tempVector = new THREE.Vector4(vector.x, vector.y, vector.z); + if (geometry.morphTargets !== undefined) { + var tempVector = new THREE.Vector4(morphVector.x, morphVector.y, morphVector.z); + } else { + var tempVector = new THREE.Vector4(vector.x, vector.y, vector.z); + } + tempVector.multiplyScalar(weights[k]); //the inverse takes the vector into local bone space tempVector.applyMatrix4(inverses[k]) @@ -331,4 +341,4 @@ function get_name() { } } return name; -} \ No newline at end of file +}