Răsfoiți Sursa

Projector: Clean up.

Mr.doob 8 ani în urmă
părinte
comite
54635aa709
1 a modificat fișierele cu 52 adăugiri și 38 ștergeri
  1. 52 38
      examples/js/renderers/Projector.js

+ 52 - 38
examples/js/renderers/Projector.js

@@ -343,67 +343,79 @@ THREE.Projector = function () {
 
 	var renderList = new RenderList();
 
-	this.projectScene = function ( scene, camera, sortObjects, sortElements ) {
+	function projectObject( object ) {
 
-		_faceCount = 0;
-		_lineCount = 0;
-		_spriteCount = 0;
+		if ( object.visible === false ) return;
 
-		_renderData.elements.length = 0;
+		if ( object instanceof THREE.Light ) {
 
-		if ( scene.autoUpdate === true ) scene.updateMatrixWorld();
-		if ( camera.parent === null ) camera.updateMatrixWorld();
+			_renderData.lights.push( object );
 
-		_viewMatrix.copy( camera.matrixWorldInverse.getInverse( camera.matrixWorld ) );
-		_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );
+		} else if ( object instanceof THREE.Mesh || object instanceof THREE.Line || object instanceof THREE.Points ) {
 
-		_frustum.setFromMatrix( _viewProjectionMatrix );
+			if ( object.material.visible === false ) return;
+			if ( object.frustumCulled === true && _frustum.intersectsObject( object ) === false ) return;
 
-		//
+			addObject( object );
 
-		_objectCount = 0;
+		} else if ( object instanceof THREE.Sprite ) {
 
-		_renderData.objects.length = 0;
-		_renderData.lights.length = 0;
+			if ( object.material.visible === false ) return;
+			if ( object.frustumCulled === true && _frustum.intersectsSprite( object ) === false ) return;
+
+			addObject( object );
 
-		function addObject( object ) {
+		}
 
-			_object = getNextObjectInPool();
-			_object.id = object.id;
-			_object.object = object;
+		var children = object.children;
 
-			_vector3.setFromMatrixPosition( object.matrixWorld );
-			_vector3.applyMatrix4( _viewProjectionMatrix );
-			_object.z = _vector3.z;
-			_object.renderOrder = object.renderOrder;
+		for ( var i = 0, l = children.length; i < l; i ++ ) {
 
-			_renderData.objects.push( _object );
+			projectObject( children[ i ] );
 
 		}
 
-		scene.traverseVisible( function ( object ) {
+	}
 
-			if ( object instanceof THREE.Light ) {
+	function addObject( object ) {
 
-				_renderData.lights.push( object );
+		_object = getNextObjectInPool();
+		_object.id = object.id;
+		_object.object = object;
 
-			} else if ( object instanceof THREE.Mesh || object instanceof THREE.Line ) {
+		_vector3.setFromMatrixPosition( object.matrixWorld );
+		_vector3.applyMatrix4( _viewProjectionMatrix );
+		_object.z = _vector3.z;
+		_object.renderOrder = object.renderOrder;
 
-				if ( object.material.visible === false ) return;
-				if ( object.frustumCulled === true && _frustum.intersectsObject( object ) === false ) return;
+		_renderData.objects.push( _object );
 
-				addObject( object );
+	}
 
-			} else if ( object instanceof THREE.Sprite ) {
+	this.projectScene = function ( scene, camera, sortObjects, sortElements ) {
 
-				if ( object.material.visible === false ) return;
-				if ( object.frustumCulled === true && _frustum.intersectsSprite( object ) === false ) return;
+		_faceCount = 0;
+		_lineCount = 0;
+		_spriteCount = 0;
 
-				addObject( object );
+		_renderData.elements.length = 0;
 
-			}
+		if ( scene.autoUpdate === true ) scene.updateMatrixWorld();
+		if ( camera.parent === null ) camera.updateMatrixWorld();
+
+		_viewMatrix.copy( camera.matrixWorldInverse.getInverse( camera.matrixWorld ) );
+		_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );
 
-		} );
+		_frustum.setFromMatrix( _viewProjectionMatrix );
+
+		//
+
+		_objectCount = 0;
+
+		_renderData.objects.length = 0;
+		_renderData.lights.length = 0;
+
+		projectObject( scene );
 
 		if ( sortObjects === true ) {
 
@@ -413,9 +425,11 @@ THREE.Projector = function () {
 
 		//
 
-		for ( var o = 0, ol = _renderData.objects.length; o < ol; o ++ ) {
+		var objects = _renderData.objects;
+
+		for ( var o = 0, ol = objects.length; o < ol; o ++ ) {
 
-			var object = _renderData.objects[ o ].object;
+			var object = objects[ o ].object;
 			var geometry = object.geometry;
 
 			renderList.setObject( object );