Browse Source

Merge remote-tracking branch 'eric-wieser/morph-raycast' into dev

Mr.doob 11 years ago
parent
commit
e49055b30a
1 changed files with 45 additions and 1 deletions
  1. 45 1
      src/core/Raycaster.js

+ 45 - 1
src/core/Raycaster.js

@@ -247,6 +247,8 @@
 				var precision = raycaster.precision;
 
 				var vertices = geometry.vertices;
+				var morphTargets = geometry.morphTargets;
+				var morphInfluences = object.morphTargetInfluences;
 
 				for ( var f = 0, fl = geometry.faces.length; f < fl; f ++ ) {
 
@@ -259,7 +261,49 @@
 					a = vertices[ face.a ];
 					b = vertices[ face.b ];
 					c = vertices[ face.c ];
-					
+
+					if ( material.morphTargets === true) {
+						vA.set(0, 0, 0);
+						vB.set(0, 0, 0);
+						vC.set(0, 0, 0);
+
+						for(var t = 0, tl = morphTargets.length; t < tl; t ++ ) {
+
+							var targets = morphTargets[t].vertices;
+							var influence = morphInfluences[t];
+
+							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.x += a.x;
+						vA.y += a.y;
+						vA.z += a.z;
+
+						vB.x += b.x;
+						vB.y += b.y;
+						vB.z += b.z;
+
+						vC.x += c.x;
+						vC.y += c.y;
+						vC.z += c.z;
+
+						a = vA;
+						b = vB;
+						c = vC;
+
+					}
+
 					if ( material.side === THREE.BackSide ) {
 							
 						var intersectionPoint = localRay.intersectTriangle( c, b, a, true );