浏览代码

Simplified Raycaster recursivity code.

Mr.doob 11 年之前
父节点
当前提交
bf979a14f7
共有 3 个文件被更改,包括 13 次插入45 次删除
  1. 0 8
      docs/api/core/Object3D.html
  2. 0 16
      src/core/Object3D.js
  3. 13 21
      src/core/Raycaster.js

+ 0 - 8
docs/api/core/Object3D.html

@@ -218,14 +218,6 @@
 		Executes the callback on this object and all descendants. 
 		</div>
 
-		<h3>.getDescendants( [page:Array array] )</h3>
-		<div>
-		array - optional argument that returns the the array with descendants.<br />
-		</div>
-		<div>
-		Searches whole subgraph recursively to add all objects in the array.
-		</div>
-
 		<h3>.updateMatrix()</h3>
 		<div>
 		Updates local transform.

+ 0 - 16
src/core/Object3D.js

@@ -479,22 +479,6 @@ THREE.Object3D.prototype = {
 
 	},
 
-	getDescendants: function ( array ) {
-
-		if ( array === undefined ) array = [];
-
-		Array.prototype.push.apply( array, this.children );
-
-		for ( var i = 0, l = this.children.length; i < l; i ++ ) {
-
-			this.children[ i ].getDescendants( array );
-
-		}
-
-		return array;
-
-	},
-
 	updateMatrix: function () {
 
 		this.matrix.compose( this.position, this.quaternion, this.scale );

+ 13 - 21
src/core/Raycaster.js

@@ -30,13 +30,19 @@
 
 	};
 
-	var intersectDescendants = function ( object, raycaster, intersects ) {
+	var intersectObject = function ( object, raycaster, intersects, recursive ) {
 
-		var descendants = object.getDescendants();
+		object.raycast( raycaster, intersects );
 
-		for ( var i = 0, l = descendants.length; i < l; i ++ ) {
+		if ( recursive === true ) {
+
+			var children = object.children;
+
+			for ( var i = 0, l = children.length; i < l; i ++ ) {
+
+				intersectObject( children[ i ], raycaster, intersects, true );
 
-			descendants[ i ].raycast( raycaster, intersects );
+			}
 
 		}
 
@@ -57,14 +63,8 @@
 	THREE.Raycaster.prototype.intersectObject = function ( object, recursive ) {
 
 		var intersects = [];
-
-		object.raycast( this, intersects );
-
-		if ( recursive === true ) {
-
-			intersectDescendants( object, this, intersects );
-
-		}
+		
+		intersectObject( object, this, intersects, recursive );
 
 		intersects.sort( descSort );
 
@@ -78,15 +78,7 @@
 
 		for ( var i = 0, l = objects.length; i < l; i ++ ) {
 
-			var object = objects[ i ];
-			
-			object.raycast( this, intersects );
-
-			if ( recursive === true ) {
-
-				intersectDescendants( object, this, intersects );
-
-			}
+			intersectObject( objects[ i ], this, intersects, recursive );
 
 		}