File: /home/lindsay/xeolabs/xeogl-next/xeogl/src/lighting/shadow.js
- /**
- A **Shadow** defines a shadow cast by a {{#crossLink "DirLight"}}{{/crossLink}} or a {{#crossLink "SpotLight"}}{{/crossLink}}.
-
- Work in progress!
-
- ## Overview
-
- * Shadows are attached to {{#crossLink "DirLight"}}{{/crossLink}} and {{#crossLink "SpotLight"}}{{/crossLink}} components.
-
- TODO
-
- ## Examples
-
- TODO
-
- ## Usage
-
- ```` javascript
- var mesh = new xeogl.Mesh(scene, {
-
- lights: new xeogl.Lights({
- lights: [
-
- new xeogl.SpotLight({
- pos: [0, 100, 100],
- dir: [0, -1, 0],
- color: [0.5, 0.7, 0.5],
- intensity: 1
- constantAttenuation: 0,
- linearAttenuation: 0,
- quadraticAttenuation: 0,
- space: "view",
-
- shadow: new xeogl.Shadow({
- resolution: [1000, 1000],
- intensity: 0.7,
- sampling: "stratified" // "stratified" | "poisson" | "basic"
- });
- })
- ]
- }),
- ,
- material: new xeogl.PhongMaterial({
- diffuse: [0.5, 0.5, 0.0]
- }),
-
- geometry: new xeogl.BoxGeometry()
- });
- ````
-
- @class Shadow
- @module xeogl
- @submodule lighting
- @constructor
- @extends Component
- @param [owner] {Component} Owner component. When destroyed, the owner will destroy this component as well. Creates this component within the default {{#crossLink "Scene"}}{{/crossLink}} when omitted.
- @param [cfg] {*} The Shadow configuration
- @param [cfg.id] {String} Optional ID, unique among all components in the parent {{#crossLink "Scene"}}Scene{{/crossLink}}, generated automatically when omitted.
- @param [cfg.meta] {String:Object} Optional map of user-defined metadata to attach to this Shadow.
- @param [cfg.resolution=[1000,1000]] {Uint16Array} Resolution of the texture map for this Shadow.
- @param [cfg.intensity=1.0] {Number} Intensity of this Shadow.
- */
- import {Component} from '../component.js';
- import {math} from '../math/math.js';
- import {componentClasses} from "./../componentClasses.js";
-
- const type = "xeogl.Shadow";
-
- class Shadow extends Component {
-
- /**
- JavaScript class name for this Component.
-
- For example: "xeogl.AmbientLight", "xeogl.MetallicMaterial" etc.
-
- @property type
- @type String
- @final
- */
- get type() {
- return type;
- }
-
- init(cfg) {
- super.init(cfg);
- this._state = {
- resolution: math.vec3([1000, 1000]),
- intensity: 1.0
- };
- this.resolution = cfg.resolution;
- this.intensity = cfg.intensity;
- }
-
- /**
- The resolution of the texture map for this Shadow.
-
- This will be either World- or View-space, depending on the value of {{#crossLink "Shadow/space:property"}}{{/crossLink}}.
-
- Fires a {{#crossLink "Shadow/resolution:event"}}{{/crossLink}} event on change.
-
- @property resolution
- @default [1000, 1000]
- @type Uint16Array
- */
- set resolution(value) {
-
- this._state.resolution.set(value || [1000.0, 1000.0]);
-
- this._renderer.imageDirty();
-
- /**
- Fired whenever this Shadow's {{#crossLink "Shadow/resolution:property"}}{{/crossLink}} property changes.
- @event resolution
- @param value The property's new value
- */
- this.fire("resolution", this._state.resolution);
- }
-
- get resolution() {
- return this._state.resolution;
- }
-
- /**
- The intensity of this Shadow.
-
- Fires a {{#crossLink "Shadow/intensity:event"}}{{/crossLink}} event on change.
-
- @property intensity
- @default 1.0
- @type Number
- */
- set intensity(value) {
-
- value = value !== undefined ? value : 1.0;
-
- this._state.intensity = value;
-
- this._renderer.imageDirty();
-
- /**
- * Fired whenever this Shadow's {{#crossLink "Shadow/intensity:property"}}{{/crossLink}} property changes.
- * @event intensity
- * @param value The property's new value
- */
- this.fire("intensity", this._state.intensity);
- }
-
- get intensity() {
- return this._state.intensity;
- }
-
- destroy() {
- super.destroy();
- //this._state.destroy();
- }
- }
-
- componentClasses[type] = Shadow;
-
- export{Shadow};
-
-