diff --git a/src/objects/Mesh.js b/src/objects/Mesh.js index 27a050a35cf76f532bd171a5757cf4d364e64a1c..2550004b8b78514bc944f7aac443b230b4e48a77 100644 --- a/src/objects/Mesh.js +++ b/src/objects/Mesh.js @@ -65,6 +65,11 @@ THREE.Mesh.prototype.raycast = ( function () { var vA = new THREE.Vector3(); var vB = new THREE.Vector3(); var vC = new THREE.Vector3(); + + var tempA = new THREE.Vector3(); + var tempB = new THREE.Vector3(); + var tempC = new THREE.Vector3(); + return function ( raycaster, intersects ) { @@ -221,6 +226,7 @@ THREE.Mesh.prototype.raycast = ( function () { var vertices = geometry.vertices; var faces = geometry.faces; + for ( var f = 0, fl = faces.length; f < fl; f ++ ) { var face = faces[ f ]; @@ -248,18 +254,10 @@ THREE.Mesh.prototype.raycast = ( function () { if ( influence === 0 ) continue; var targets = morphTargets[ t ].vertices; - - vA.x += ( targets[ face.a ].x - a.x ) * influence; - vA.y += ( targets[ face.a ].y - a.y ) * influence; - vA.z += ( targets[ face.a ].z - a.z ) * influence; - - vB.x += ( targets[ face.b ].x - b.x ) * influence; - vB.y += ( targets[ face.b ].y - b.y ) * influence; - vB.z += ( targets[ face.b ].z - b.z ) * influence; - - vC.x += ( targets[ face.c ].x - c.x ) * influence; - vC.y += ( targets[ face.c ].y - c.y ) * influence; - vC.z += ( targets[ face.c ].z - c.z ) * influence; + + vA.addScaledVector(tempA.subVectors(targets[ face.a ], a),influence); + vB.addScaledVector(tempB.subVectors(targets[ face.b ], b),influence); + vC.addScaledVector(tempC.subVectors(targets[ face.c ], c),influence); }