Scene.js 2.0 KB
Newer Older
M
Mr.doob 已提交
1 2
/**
 * @author mr.doob / http://mrdoob.com/
3
 * @author mikael emtinger / http://gomo.se/
M
Mr.doob 已提交
4 5
 */

M
Mr.doob 已提交
6
THREE.Scene = function () {
7

M
Mr.doob 已提交
8
	THREE.Object3D.call( this );
9

10 11 12 13
	this.matrixAutoUpdate = false;

	this.fog = null;

M
Mr.doob 已提交
14 15
	this.overrideMaterial = null;

A
alteredq 已提交
16
	this.collisions = null;
17

18
	this.objects = [];
M
Mr.doob 已提交
19 20
	this.lights = [];

21 22
	this.__objectsAdded = [];
	this.__objectsRemoved = [];
M
Mr.doob 已提交
23

24
};
M
Mr.doob 已提交
25

M
Mr.doob 已提交
26
THREE.Scene.prototype = new THREE.Object3D();
27
THREE.Scene.prototype.constructor = THREE.Scene;
M
Mr.doob 已提交
28
THREE.Scene.prototype.supr = THREE.Object3D.prototype;
M
Mr.doob 已提交
29

30
THREE.Scene.prototype.addChild = function( child ) {
31

32 33
	this.supr.addChild.call( this, child );
	this.addChildRecurse( child );
34

35
}
36

A
alteredq 已提交
37
THREE.Scene.prototype.addChildRecurse = function( child ) {
M
Mr.doob 已提交
38 39 40 41 42 43 44 45 46 47 48 49 50

	if ( child instanceof THREE.Light ) {

		if ( this.lights.indexOf( child ) === -1 ) {

			this.lights.push( child );

		}

	} else if ( !( child instanceof THREE.Camera || child instanceof THREE.Bone ) ) {

		if ( this.objects.indexOf( child ) === -1 ) {

A
alteredq 已提交
51
			this.objects.push( child );
52
			this.__objectsAdded.push( child );
53

M
Mr.doob 已提交
54 55
		}

56
	}
M
Mr.doob 已提交
57 58 59

	for ( var c = 0; c < child.children.length; c++ ) {

A
alteredq 已提交
60
		this.addChildRecurse( child.children[ c ] );
61

M
Mr.doob 已提交
62 63
	}

64
}
65

66

67
THREE.Scene.prototype.removeChild = function( child ) {
68

69 70
	this.supr.removeChild.call( this, child );
	this.removeChildRecurse( child );
71

72
}
M
Mr.doob 已提交
73

74
THREE.Scene.prototype.removeChildRecurse = function( child ) {
M
Mr.doob 已提交
75 76 77

	if ( child instanceof THREE.Light ) {

A
alteredq 已提交
78
		var i = this.lights.indexOf( child );
M
Mr.doob 已提交
79 80 81

		if ( i !== -1 ) {

82
			this.lights.splice( i, 1 );
M
Mr.doob 已提交
83

M
Mr.doob 已提交
84 85 86 87
		}

	} else if ( !( child instanceof THREE.Camera ) ) {

A
alteredq 已提交
88
		var i = this.objects.indexOf( child );
M
Mr.doob 已提交
89 90 91

		if( i !== -1 ) {

92
			this.objects.splice( i, 1 );
93
			this.__objectsRemoved.push( child );
M
Mr.doob 已提交
94

M
Mr.doob 已提交
95 96
		}

97
	}
M
Mr.doob 已提交
98

M
Mr.doob 已提交
99
	for ( var c = 0; c < child.children.length; c++ ) {
M
Mr.doob 已提交
100

M
Mr.doob 已提交
101
		this.removeChildRecurse( child.children[ c ] );
102

M
Mr.doob 已提交
103
	}
M
Mr.doob 已提交
104

M
Mr.doob 已提交
105
}
106

M
Mr.doob 已提交
107
THREE.Scene.prototype.addObject = THREE.Scene.prototype.addChild;
108
THREE.Scene.prototype.removeObject = THREE.Scene.prototype.removeChild;
M
Mr.doob 已提交
109 110
THREE.Scene.prototype.addLight = THREE.Scene.prototype.addChild;
THREE.Scene.prototype.removeLight = THREE.Scene.prototype.removeChild;