Browse Source

Raycaster: Check that line.geometry is instanceof Geometry. Fixes #3779.

Mr.doob 12 years ago
parent
commit
73915e8a6e
1 changed files with 25 additions and 19 deletions
  1. 25 19
      src/core/Raycaster.js

+ 25 - 19
src/core/Raycaster.js

@@ -289,33 +289,39 @@
 			inverseMatrix.getInverse( object.matrixWorld );
 			localRay.copy( raycaster.ray ).applyMatrix4( inverseMatrix );
 
-			var vertices = geometry.vertices;
-			var nbVertices = vertices.length;
-			var interSegment = new THREE.Vector3();
-			var interRay = new THREE.Vector3();
-			var step = object.type === THREE.LineStrip ? 1 : 2;
+			/* if ( geometry instanceof THREE.BufferGeometry ) {
+
+			} else */ if ( geometry instanceof THREE.Geometry ) {
 
-			for ( var i = 0; i < nbVertices - 1; i = i + step ) {
+				var vertices = geometry.vertices;
+				var nbVertices = vertices.length;
+				var interSegment = new THREE.Vector3();
+				var interRay = new THREE.Vector3();
+				var step = object.type === THREE.LineStrip ? 1 : 2;
 
-				var distSq = localRay.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment );
+				for ( var i = 0; i < nbVertices - 1; i = i + step ) {
 
-				if ( distSq > precisionSq ) continue;
+					var distSq = localRay.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment );
 
-				var distance = localRay.origin.distanceTo( interRay );
+					if ( distSq > precisionSq ) continue;
 
-				if ( distance < raycaster.near || distance > raycaster.far ) continue;
+					var distance = localRay.origin.distanceTo( interRay );
 
-				intersects.push( {
+					if ( distance < raycaster.near || distance > raycaster.far ) continue;
 
-					distance: distance,
-					// What do we want? intersection point on the ray or on the segment??
-					// point: raycaster.ray.at( distance ),
-					point: interSegment.clone().applyMatrix4( object.matrixWorld ),
-					face: null,
-					faceIndex: null,
-					object: object
+					intersects.push( {
 
-				} );
+						distance: distance,
+						// What do we want? intersection point on the ray or on the segment??
+						// point: raycaster.ray.at( distance ),
+						point: interSegment.clone().applyMatrix4( object.matrixWorld ),
+						face: null,
+						faceIndex: null,
+						object: object
+
+					} );
+
+				}
 
 			}