import Light from '../Light'; import Vector3 from '../math/Vector3'; /** * @constructor clay.light.Directional * @extends clay.Light * * @example * var light = new clay.light.Directional({ * intensity: 0.5, * color: [1.0, 0.0, 0.0] * }); * light.position.set(10, 10, 10); * light.lookAt(clay.Vector3.ZERO); * scene.add(light); */ var DirectionalLight = Light.extend(/** @lends clay.light.Directional# */ { /** * @type {number} */ shadowBias: 0.001, /** * @type {number} */ shadowSlopeScale: 2.0, /** * Shadow cascade. * Use PSSM technique when it is larger than 1 and have a unique directional light in scene. * @type {number} */ shadowCascade: 1, /** * Available when shadowCascade is larger than 1 and have a unique directional light in scene. * @type {number} */ cascadeSplitLogFactor: 0.2 }, { type: 'DIRECTIONAL_LIGHT', uniformTemplates: { directionalLightDirection: { type: '3f', value: function (instance) { instance.__dir = instance.__dir || new Vector3(); // Direction is target to eye return instance.__dir.copy(instance.worldTransform.z).normalize().negate().array; } }, directionalLightColor: { type: '3f', value: function (instance) { var color = instance.color; var intensity = instance.intensity; return [color[0] * intensity, color[1] * intensity, color[2] * intensity]; } } }, /** * @return {clay.light.Directional} * @memberOf clay.light.Directional.prototype */ clone: function () { var light = Light.prototype.clone.call(this); light.shadowBias = this.shadowBias; light.shadowSlopeScale = this.shadowSlopeScale; return light; } }); export default DirectionalLight;