Scene class
@author mr.doob / http://mrdoob.com/
Ported to Dart from JS by: @author rob silverton / http://www.unwrong.com/
class Scene extends Object3D {
Fog fog;
Material overrideMaterial;
//bool matrixAutoUpdate;
List<Object3D> objects;
List<Light> lights;
List __objectsAdded;
List __objectsRemoved;
Scene() {
// TODO: check how to call super constructor
// super();
fog = null;
overrideMaterial = null;
matrixAutoUpdate = false;
objects = [];
lights = [];
__objectsAdded = [];
__objectsRemoved = [];
}
void addObject( Object3D object ) {
if ( object is Light ) {
if ( lights.indexOf( object ) == - 1 ) {
lights.add( object );
}
} else if ( !( object is Camera || object is Bone ) ) {
if ( objects.indexOf( object ) == - 1 ) {
objects.add( object );
__objectsAdded.add( object );
// check if previously removed
int i = __objectsRemoved.indexOf( object );
if ( i != -1 ) {
__objectsRemoved.removeAt(i);
}
}
}
for ( int c = 0; c < object.children.length; c ++ ) {
addObject( object.children[ c ] );
}
}
void removeObject( Object3D object ) {
//TODO: "instanceof" replaced by "is"?
if ( object is Light ) {
int i = lights.indexOf( object );
if ( i != -1 ) {
lights.removeAt(i);
}
} else if ( !( object is Camera ) ) {
int i = objects.indexOf( object );
if( i != -1 ) {
objects.removeAt(i);
__objectsRemoved.add( object );
// check if previously added
var ai = __objectsAdded.indexOf( object );
if ( ai != -1 ) {
__objectsAdded.removeAt(ai);
}
}
}
for ( int c = 0; c < object.children.length; c ++ ) {
removeObject( object.children[ c ] );
}
}
}
Extends
Object3D > Scene
Constructors
new Scene() #
Creates a new Object instance.
Object instances have no meaningful state, and are only useful through their identity. An Object instance is equal to itself only.
docs inherited from Object
Scene() {
// TODO: check how to call super constructor
// super();
fog = null;
overrideMaterial = null;
matrixAutoUpdate = false;
objects = [];
lights = [];
__objectsAdded = [];
__objectsRemoved = [];
}
Properties
bool frustumCulled #
inherited from Object3D
bool visible = false, castShadow = false, receiveShadow = false, frustumCulled = false
bool isDynamic #
inherited from Object3D
bool get isDynamic => _dynamic;
set isDynamic(bool flag) => _dynamic = flag;
Matrix4 matrixRotationWorld #
inherited from Object3D
Matrix4 matrix, matrixWorld, matrixRotationWorld
bool matrixWorldNeedsUpdate #
inherited from Object3D
bool matrixAutoUpdate = false, matrixWorldNeedsUpdate = false
bool receiveShadow #
inherited from Object3D
bool visible = false, castShadow = false, receiveShadow = false
Operators
Methods
void add(Object3D object) #
inherited from Object3D
void add( Object3D object ) {
if ( object == this ) {
print( 'THREE.Object3D.add: An object can\'t be added as a child of itself.' );
return;
}
if ( object.parent != null ) {
object.parent.remove( object );
}
object.parent = this;
children.add( object );
// add to scene
Object3D scene = this;
while ( scene.parent != null ) {
scene = scene.parent;
}
if ( scene is Scene ) {
scene.addObject( object );
}
}
void addObject(Object3D object) #
void addObject( Object3D object ) {
if ( object is Light ) {
if ( lights.indexOf( object ) == - 1 ) {
lights.add( object );
}
} else if ( !( object is Camera || object is Bone ) ) {
if ( objects.indexOf( object ) == - 1 ) {
objects.add( object );
__objectsAdded.add( object );
// check if previously removed
int i = __objectsRemoved.indexOf( object );
if ( i != -1 ) {
__objectsRemoved.removeAt(i);
}
}
}
for ( int c = 0; c < object.children.length; c ++ ) {
addObject( object.children[ c ] );
}
}
void applyMatrix(Matrix4 matrix) #
inherited from Object3D
void applyMatrix ( Matrix4 matrix ) {
this.matrix = matrix * this.matrix;
this.scale = getScaleFromMatrix( this.matrix );
Matrix4 mat = extractRotation(new Matrix4.identity(), this.matrix );
this.rotation = calcEulerFromRotationMatrix( mat, this.eulerOrder );
this.position = this.matrix.getTranslation();
}
Object3D getChildByName(String name, bool doRecurse) #
inherited from Object3D
Object3D getChildByName( String name, bool doRecurse ) {
int c;
int cl = children.length;
Object3D child, recurseResult;
children.forEach((child){
if ( child.name == name ) {
return child;
}
if ( doRecurse ) {
recurseResult = child.getChildByName( name, doRecurse );
if ( recurseResult != null ) {
return recurseResult;
}
}
});
return null;
}
dynamic localToWorld(Vector3 vector) #
inherited from Object3D
localToWorld(Vector3 vector) => vector.applyProjection(matrixWorld);
void lookAt(Vector3 vector) #
inherited from Object3D
void lookAt( Vector3 vector ) {
// TODO: Add hierarchy support.
makeLookAt( matrix, vector, position, up );
if ( rotationAutoUpdate ) {
if(useQuaternion)
quaternion.setFromRotationMatrix(matrix);
else
rotation = calcEulerFromRotationMatrix( matrix, eulerOrder );
}
}
void remove(Object3D object) #
inherited from Object3D
void remove( Object3D object ) {
int index = children.indexOf( object );
if ( index != - 1 ){
object.parent = null;
children.removeAt(index);
// remove from scene
Object3D scene = this;
while ( scene.parent != null ) {
scene = scene.parent;
}
if (scene is Scene ) {
scene.removeObject( object );
}
}
}
void removeObject(Object3D object) #
void removeObject( Object3D object ) {
//TODO: "instanceof" replaced by "is"?
if ( object is Light ) {
int i = lights.indexOf( object );
if ( i != -1 ) {
lights.removeAt(i);
}
} else if ( !( object is Camera ) ) {
int i = objects.indexOf( object );
if( i != -1 ) {
objects.removeAt(i);
__objectsRemoved.add( object );
// check if previously added
var ai = __objectsAdded.indexOf( object );
if ( ai != -1 ) {
__objectsAdded.removeAt(ai);
}
}
}
for ( int c = 0; c < object.children.length; c ++ ) {
removeObject( object.children[ c ] );
}
}
void translate(num distance, Vector3 axis) #
inherited from Object3D
void translate( num distance, Vector3 axis ) {
matrix.rotate3( axis );
axis.normalize();
position.add( axis.scale( distance ) );
}
void translateX(num distance) #
inherited from Object3D
void translateX( num distance ) => translate( distance, _vector.setValues( 1.0, 0.0, 0.0 ) );
void translateY(num distance) #
inherited from Object3D
void translateY( num distance ) => translate( distance, _vector.setValues( 0.0, 1.0, 0.0 ) );
void translateZ(num distance) #
inherited from Object3D
void translateZ( num distance ) => translate( distance, _vector.setValues( 0.0, 0.0, 1.0 ) );
void updateMatrix() #
inherited from Object3D
void updateMatrix() {
if ( useQuaternion ) {
setRotationFromQuaternion( matrix, quaternion );
} else {
setRotationFromEuler( matrix, rotation, eulerOrder );
}
matrix.setTranslation( position );
if ( scale.x != 1.0 || scale.y != 1.0 || scale.z != 1.0 ) {
matrix.scale( scale );
boundRadiusScale = Math.max( scale.x, Math.max( scale.y, scale.z ) );
}
matrixWorldNeedsUpdate = true;
}
void updateMatrixWorld({bool force: false}) #
inherited from Object3D
void updateMatrixWorld( {bool force: false} ) {
if (matrixAutoUpdate) updateMatrix();
// update matrixWorld
if ( matrixWorldNeedsUpdate || force ) {
if ( parent != null ) {
matrixWorld = parent.matrixWorld * matrix;
} else {
matrixWorld = matrix.clone();
}
matrixWorldNeedsUpdate = false;
force = true;
}
// update children
children.forEach((c) => c.updateMatrixWorld( force: force ) );
}