@Override
	public void update(Matrix4 parentMatrixWorld, Boolean forceUpdate, Camera camera){
		if ( this.useTarget ) {

			// local

			this.matrix.lookAt(this.position, this.target.getPosition(), this.up);
			this.matrix.setPosition(this.position);

			// global

			if (parentMatrixWorld != null) {
				this.matrixWorld.multiply(parentMatrixWorld, this.matrix);
			} else {
				this.matrixWorld.copy(this.matrix);
			}

			Matrix4.makeInvert( this.matrixWorld, this.matrixWorldInverse );
			forceUpdate = true;

		} else {
			if (this.matrixAutoUpdate){
				this.updateMatrix();
			}

			if (forceUpdate || this.matrixWorldNeedsUpdate) {

				if (parentMatrixWorld != null) {
					this.matrixWorld.multiply(parentMatrixWorld, this.matrix);
				} else {
					this.matrixWorld.copy(this.matrix);
				}

				this.matrixWorldNeedsUpdate = false;
				forceUpdate = true;

				Matrix4.makeInvert(this.matrixWorld, this.matrixWorldInverse);
			}
		}

		// update children

		for(DimentionObject child : children){
			child.update(this.matrixWorld, forceUpdate, camera);
		}
	};