|
@@ -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 );
|