72 lines
1.5 KiB
JavaScript
72 lines
1.5 KiB
JavaScript
import Node from './Node';
|
|
import Shader from './Shader';
|
|
|
|
import lightShader from './shader/source/header/light';
|
|
Shader['import'](lightShader);
|
|
|
|
/**
|
|
* @constructor clay.Light
|
|
* @extends clay.Node
|
|
*/
|
|
var Light = Node.extend(function(){
|
|
return /** @lends clay.Light# */ {
|
|
/**
|
|
* Light RGB color
|
|
* @type {number[]}
|
|
*/
|
|
color: [1, 1, 1],
|
|
|
|
/**
|
|
* Light intensity
|
|
* @type {number}
|
|
*/
|
|
intensity: 1.0,
|
|
|
|
// Config for shadow map
|
|
/**
|
|
* If light cast shadow
|
|
* @type {boolean}
|
|
*/
|
|
castShadow: true,
|
|
|
|
/**
|
|
* Shadow map size
|
|
* @type {number}
|
|
*/
|
|
shadowResolution: 512,
|
|
|
|
/**
|
|
* Light group, shader with same `lightGroup` will be affected
|
|
*
|
|
* Only useful in forward rendering
|
|
* @type {number}
|
|
*/
|
|
group: 0
|
|
};
|
|
},
|
|
/** @lends clay.Light.prototype. */
|
|
{
|
|
/**
|
|
* Light type
|
|
* @type {string}
|
|
* @memberOf clay.Light#
|
|
*/
|
|
type: '',
|
|
|
|
/**
|
|
* @return {clay.Light}
|
|
* @memberOf clay.Light.prototype
|
|
*/
|
|
clone: function() {
|
|
var light = Node.prototype.clone.call(this);
|
|
light.color = Array.prototype.slice.call(this.color);
|
|
light.intensity = this.intensity;
|
|
light.castShadow = this.castShadow;
|
|
light.shadowResolution = this.shadowResolution;
|
|
|
|
return light;
|
|
}
|
|
});
|
|
|
|
export default Light;
|