mirror of
https://github.com/xibyte/jsketcher
synced 2026-02-03 14:04:17 +01:00
130 lines
2.5 KiB
JavaScript
130 lines
2.5 KiB
JavaScript
/**
|
|
* @author mrdoob / http://mrdoob.com/
|
|
*/
|
|
|
|
THREE.Scene = function () {
|
|
|
|
THREE.Object3D.call( this );
|
|
|
|
this.fog = null;
|
|
this.overrideMaterial = null;
|
|
|
|
this.autoUpdate = true; // checked by the renderer
|
|
this.matrixAutoUpdate = false;
|
|
|
|
this.__lights = [];
|
|
|
|
this.__objectsAdded = [];
|
|
this.__objectsRemoved = [];
|
|
|
|
};
|
|
|
|
THREE.Scene.prototype = Object.create( THREE.Object3D.prototype );
|
|
|
|
THREE.Scene.prototype.__addObject = function ( object ) {
|
|
|
|
if ( object instanceof THREE.Light ) {
|
|
|
|
if ( this.__lights.indexOf( object ) === - 1 ) {
|
|
|
|
this.__lights.push( object );
|
|
|
|
}
|
|
|
|
if ( object.target && object.target.parent === undefined ) {
|
|
|
|
this.add( object.target );
|
|
|
|
}
|
|
|
|
} else if ( ! ( object instanceof THREE.Camera || object instanceof THREE.Bone ) ) {
|
|
|
|
this.__objectsAdded.push( object );
|
|
|
|
// check if previously removed
|
|
|
|
var i = this.__objectsRemoved.indexOf( object );
|
|
|
|
if ( i !== - 1 ) {
|
|
|
|
this.__objectsRemoved.splice( i, 1 );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
this.dispatchEvent( { type: 'objectAdded', object: object } );
|
|
object.dispatchEvent( { type: 'addedToScene', scene: this } );
|
|
|
|
for ( var c = 0; c < object.children.length; c ++ ) {
|
|
|
|
this.__addObject( object.children[ c ] );
|
|
|
|
}
|
|
|
|
};
|
|
|
|
THREE.Scene.prototype.__removeObject = function ( object ) {
|
|
|
|
if ( object instanceof THREE.Light ) {
|
|
|
|
var i = this.__lights.indexOf( object );
|
|
|
|
if ( i !== - 1 ) {
|
|
|
|
this.__lights.splice( i, 1 );
|
|
|
|
}
|
|
|
|
if ( object.shadowCascadeArray ) {
|
|
|
|
for ( var x = 0; x < object.shadowCascadeArray.length; x ++ ) {
|
|
|
|
this.__removeObject( object.shadowCascadeArray[ x ] );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if ( ! ( object instanceof THREE.Camera ) ) {
|
|
|
|
this.__objectsRemoved.push( object );
|
|
|
|
// check if previously added
|
|
|
|
var i = this.__objectsAdded.indexOf( object );
|
|
|
|
if ( i !== - 1 ) {
|
|
|
|
this.__objectsAdded.splice( i, 1 );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
this.dispatchEvent( { type: 'objectRemoved', object: object } );
|
|
object.dispatchEvent( { type: 'removedFromScene', scene: this } );
|
|
|
|
for ( var c = 0; c < object.children.length; c ++ ) {
|
|
|
|
this.__removeObject( object.children[ c ] );
|
|
|
|
}
|
|
|
|
};
|
|
|
|
THREE.Scene.prototype.clone = function ( object ) {
|
|
|
|
if ( object === undefined ) object = new THREE.Scene();
|
|
|
|
THREE.Object3D.prototype.clone.call( this, object );
|
|
|
|
if ( this.fog !== null ) object.fog = this.fog.clone();
|
|
if ( this.overrideMaterial !== null ) object.overrideMaterial = this.overrideMaterial.clone();
|
|
|
|
object.autoUpdate = this.autoUpdate;
|
|
object.matrixAutoUpdate = this.matrixAutoUpdate;
|
|
|
|
return object;
|
|
|
|
};
|