浏览代码

Refactored Projector.

Mr.doob 12 年之前
父节点
当前提交
9bfc3f1cce
共有 1 个文件被更改,包括 37 次插入67 次删除
  1. 37 67
      src/core/Projector.js

+ 37 - 67
src/core/Projector.js

@@ -75,102 +75,72 @@ THREE.Projector = function () {
 
 	};
 
-	var projectGraph = function ( root, sortObjects ) {
-
-		_objectCount = 0;
-
-		_renderData.objects.length = 0;
-		_renderData.sprites.length = 0;
-		_renderData.lights.length = 0;
-
-		var projectObject = function ( parent ) {
-
-			for ( var c = 0, cl = parent.children.length; c < cl; c ++ ) {
-
-				var object = parent.children[ c ];
+	var getObject = function ( object ) {
 
-				if ( object.visible === false ) continue;
+		_object = getNextObjectInPool();
+		_object.object = object;
 
-				if ( object instanceof THREE.Light ) {
+		if ( object.renderDepth !== null ) {
 
-					_renderData.lights.push( object );
-
-				} else if ( object instanceof THREE.Mesh || object instanceof THREE.Line ) {
-
-					if ( object.frustumCulled === false || _frustum.intersectsObject( object ) === true ) {
-
-						_object = getNextObjectInPool();
-						_object.object = object;
-
-						if ( object.renderDepth !== null ) {
-
-							_object.z = object.renderDepth;
-
-						} else {
-
-							_vector3.getPositionFromMatrix( object.matrixWorld );
-							_vector3.applyProjection( _viewProjectionMatrix );
-							_object.z = _vector3.z;
-
-						}
+			_object.z = object.renderDepth;
 
-						_renderData.objects.push( _object );
+		} else {
 
-					}
+			_vector3.getPositionFromMatrix( object.matrixWorld );
+			_vector3.applyProjection( _viewProjectionMatrix );
+			_object.z = _vector3.z;
 
-				} else if ( object instanceof THREE.Sprite || object instanceof THREE.Particle ) {
+		}
 
-					_object = getNextObjectInPool();
-					_object.object = object;
+		return _object;
 
-					// TODO: Find an elegant and performant solution and remove this dupe code.
+	};
 
-					if ( object.renderDepth !== null ) {
+	var projectObject = function ( object ) {
 
-						_object.z = object.renderDepth;
+		if ( object.visible === false ) return;
 
-					} else {
+		if ( object instanceof THREE.Light ) {
 
-						_vector3.getPositionFromMatrix( object.matrixWorld );
-						_vector3.applyProjection( _viewProjectionMatrix );
-						_object.z = _vector3.z;
+			_renderData.lights.push( object );
 
-					}
+		} else if ( object instanceof THREE.Mesh || object instanceof THREE.Line ) {
 
-					_renderData.sprites.push( _object );
+			if ( object.frustumCulled === false || _frustum.intersectsObject( object ) === true ) {
 
-				} else {
+				_renderData.objects.push( getObject( object ) );
 
-					_object = getNextObjectInPool();
-					_object.object = object;
+			}
 
-					if ( object.renderDepth !== null ) {
+		} else if ( object instanceof THREE.Sprite || object instanceof THREE.Particle ) {
 
-						_object.z = object.renderDepth;
+			_renderData.sprites.push( getObject( object ) );
 
-					} else {
+		}
 
-						_vector3.getPositionFromMatrix( object.matrixWorld );
-						_vector3.applyProjection( _viewProjectionMatrix );
-						_object.z = _vector3.z;
+		for ( var i = 0, l = object.children.length; i < l; i ++ ) {
 
-					}
+			projectObject( object.children[ i ] );
 
-					_renderData.objects.push( _object );
+		}
 
-				}
+	};
 
-				projectObject( object );
+	var projectGraph = function ( root, sortObjects ) {
 
-			}
+		_objectCount = 0;
 
-		};
+		_renderData.objects.length = 0;
+		_renderData.sprites.length = 0;
+		_renderData.lights.length = 0;
 
 		projectObject( root );
 
-		if ( sortObjects === true ) _renderData.objects.sort( painterSort );
+		if ( sortObjects === true ) {
 
-		return _renderData;
+			_renderData.objects.sort( painterSort );
+
+		}
 
 	};
 
@@ -198,7 +168,7 @@ THREE.Projector = function () {
 
 		_frustum.setFromMatrix( _viewProjectionMatrix );
 
-		_renderData = projectGraph( scene, sortObjects );
+		projectGraph( scene, sortObjects );
 
 		for ( o = 0, ol = _renderData.objects.length; o < ol; o ++ ) {