|
@@ -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 ++ ) {
|
|
|
|