@openhps/core
Version:
Open Hybrid Positioning System - Core component
147 lines (136 loc) • 4.56 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Scene = void 0;
var _Object3D = require("../core/Object3D.js");
var _Euler = require("../math/Euler.js");
/**
* Scenes allow you to set up what is to be rendered and where by three.js.
* This is where you place 3D objects like meshes, lines or lights.
*
* @augments Object3D
*/
class Scene extends _Object3D.Object3D {
/**
* Constructs a new scene.
*/
constructor() {
super();
/**
* This flag can be used for type testing.
*
* @type {boolean}
* @readonly
* @default true
*/
this.isScene = true;
this.type = 'Scene';
/**
* Defines the background of the scene. Valid inputs are:
*
* - A color for defining a uniform colored background.
* - A texture for defining a (flat) textured background.
* - Cube textures or equirectangular textures for defining a skybox.
*
* @type {?(Color|Texture)}
* @default null
*/
this.background = null;
/**
* Sets the environment map for all physical materials in the scene. However,
* it's not possible to overwrite an existing texture assigned to the `envMap`
* material property.
*
* @type {?Texture}
* @default null
*/
this.environment = null;
/**
* A fog instance defining the type of fog that affects everything
* rendered in the scene.
*
* @type {?(Fog|FogExp2)}
* @default null
*/
this.fog = null;
/**
* Sets the blurriness of the background. Only influences environment maps
* assigned to {@link Scene#background}. Valid input is a float between `0`
* and `1`.
*
* @type {number}
* @default 0
*/
this.backgroundBlurriness = 0;
/**
* Attenuates the color of the background. Only applies to background textures.
*
* @type {number}
* @default 1
*/
this.backgroundIntensity = 1;
/**
* The rotation of the background in radians. Only influences environment maps
* assigned to {@link Scene#background}.
*
* @type {Euler}
* @default (0,0,0)
*/
this.backgroundRotation = new _Euler.Euler();
/**
* Attenuates the color of the environment. Only influences environment maps
* assigned to {@link Scene#environment}.
*
* @type {number}
* @default 1
*/
this.environmentIntensity = 1;
/**
* The rotation of the environment map in radians. Only influences physical materials
* in the scene when {@link Scene#environment} is used.
*
* @type {Euler}
* @default (0,0,0)
*/
this.environmentRotation = new _Euler.Euler();
/**
* Forces everything in the scene to be rendered with the defined material. It is possible
* to exclude materials from override by setting {@link Material#allowOverride} to `false`.
*
* @type {?Material}
* @default null
*/
this.overrideMaterial = null;
if (typeof __THREE_DEVTOOLS__ !== 'undefined') {
__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent('observe', {
detail: this
}));
}
}
copy(source, recursive) {
super.copy(source, recursive);
if (source.background !== null) this.background = source.background.clone();
if (source.environment !== null) this.environment = source.environment.clone();
if (source.fog !== null) this.fog = source.fog.clone();
this.backgroundBlurriness = source.backgroundBlurriness;
this.backgroundIntensity = source.backgroundIntensity;
this.backgroundRotation.copy(source.backgroundRotation);
this.environmentIntensity = source.environmentIntensity;
this.environmentRotation.copy(source.environmentRotation);
if (source.overrideMaterial !== null) this.overrideMaterial = source.overrideMaterial.clone();
this.matrixAutoUpdate = source.matrixAutoUpdate;
return this;
}
toJSON(meta) {
const data = super.toJSON(meta);
if (this.fog !== null) data.object.fog = this.fog.toJSON();
if (this.backgroundBlurriness > 0) data.object.backgroundBlurriness = this.backgroundBlurriness;
if (this.backgroundIntensity !== 1) data.object.backgroundIntensity = this.backgroundIntensity;
data.object.backgroundRotation = this.backgroundRotation.toArray();
if (this.environmentIntensity !== 1) data.object.environmentIntensity = this.environmentIntensity;
data.object.environmentRotation = this.environmentRotation.toArray();
return data;
}
}
exports.Scene = Scene;