Bläddra i källkod

Support for THREE.LinePieces raypicking.

stephomi 12 år sedan
förälder
incheckning
e646663c0c
2 ändrade filer med 14 tillägg och 10 borttagningar
  1. 9 6
      examples/webgl_interactive_lines.html
  2. 5 4
      src/core/Raycaster.js

+ 9 - 6
examples/webgl_interactive_lines.html

@@ -63,11 +63,13 @@
 				var geometry = new THREE.Geometry();
 				geometry.vertices.push( new THREE.Vector3( 0, 0, 0 ) );
 				geometry.vertices.push( new THREE.Vector3( 15, 15, 15 ) );
+				geometry.vertices.push( new THREE.Vector3( 0, 30, -40 ) );
+				geometry.vertices.push( new THREE.Vector3( -15, -15, -30 ) );
 
 				parentTransform = new THREE.Mesh();
-				parentTransform.position.x = Math.random() * 800 - 400;
-				parentTransform.position.y = Math.random() * 800 - 400;
-				parentTransform.position.z = Math.random() * 800 - 400;
+				parentTransform.position.x = Math.random() * 200 - 400;
+				parentTransform.position.y = Math.random() * 200 - 400;
+				parentTransform.position.z = Math.random() * 200 - 400;
 
 				parentTransform.rotation.x = Math.random() * 2 * Math.PI;
 				parentTransform.rotation.y = Math.random() * 2 * Math.PI;
@@ -77,9 +79,10 @@
 				// parentTransform.scale.y = Math.random() + 0.5;
 				// parentTransform.scale.z = Math.random() + 0.5;
 
-				for ( var i = 0; i < 1000; i ++ ) {
+				for ( var i = 0; i < 100; i ++ ) {
 
-					var object = new THREE.Line( geometry, new THREE.LineBasicMaterial( { color: Math.random() * 0xffffff, linewidth: 2 } ) );
+					var type = Math.random() > 0.5 ? THREE.LineStrip : THREE.LinePieces;
+					var object = new THREE.Line( geometry, new THREE.LineBasicMaterial( { color: Math.random() * 0xffffff, linewidth: 5 } ), type );
 
 					object.position.x = Math.random() * 800 - 400;
 					object.position.y = Math.random() * 800 - 400;
@@ -172,7 +175,7 @@
 				if ( intersects.length > 0 ) {
 
 					sphereInter.visible = true;
-					sphereInter.position = (intersects[0].point).clone();
+					sphereInter.position = intersects[0].point.clone();
 
 				} else {
 

+ 5 - 4
src/core/Raycaster.js

@@ -291,15 +291,16 @@
 			var vertices = object.geometry.vertices;
 			var nbVertices = vertices.length;
 			var interPoint = new THREE.Vector3();
+			var step = object.type === THREE.LineStrip ? 1 : 2;
 
-			for(var i = 0; i < nbVertices - 1; ++i) {
+			for(var i = 0; i < nbVertices - 1; i=i+step) {
 
 				var distTestSq = localRay.distanceSqAndPointToSegment(vertices[i], vertices[i + 1], null, interPoint);
 				if(distTestSq <= precisionSq) {
-					var worldPoint = interPoint.applyMatrix4(object.matrix);
-					var distance = raycaster.ray.origin.distanceTo(worldPoint)
+					interPoint.applyMatrix4(object.matrixWorld);
+					var distance = raycaster.ray.origin.distanceTo(interPoint);
 					if(raycaster.near <= distance && distance <= raycaster.far)
-						intersects.push({distance: distance, point: worldPoint, object: object});
+						intersects.push({distance: distance, point: interPoint.clone(), object: object});
 				}
 			}
 		}