import { Object3D } from "./Object3D";
import { Utils } from '../common/Utils'
/**
* Lensflare - 镜头光晕
*
* 用于在场景中创建镜头光晕效果。
*
* @class Lensflare
* @memberof THING
* @extends THING.Object3D
* @public
* @example
* // Create lensflare
const textureFlare0 = new THING.ImageTexture("./images/lensflare/lensflare0.png");
const textureFlare1 = new THING.ImageTexture("./images/lensflare/lensflare3.png");
const lensflare = new THING.Lensflare({
parent: directionalLight // set light as parent
});
lensflare.occlusionScale = 0.1;
lensflare.addElement({ imageTexture: textureFlare0, color: [0.2, 0.2, 0.2], scale: 0.6, offset: 0 });
lensflare.addElement({ imageTexture: textureFlare1, color: [0, 1, 1], scale: 0.5, offset: 0.5 });
lensflare.addElement({ imageTexture: textureFlare1, color: [1, 1, 1], scale: 0.06, offset: 0.7 });
lensflare.addElement({ imageTexture: textureFlare1, color: [1, 1, 1], scale: 0.1, offset: 0.9 });
lensflare.addElement({ imageTexture: textureFlare1, color: [1, 1, 1], scale: 0.06, offset: 1 });
*/
class Lensflare extends Object3D {
/**
* 镜头光晕对象的构造函数。
* 参数与 {@link THING.Object3D} 的构造函数相同。
* 请在 {@link THING.Object3D} 的文档中查看构造函数部分以获取详细参数列表。
* @param param
* @constructor
* @public
*/
constructor(param = {}) {
super(param);
}
onBeforeSetup(param) {
param['renderableNode'] = param['renderableNode'] || Utils.createObject('Lensflare', { app: this.app });
super.onBeforeSetup(param);
}
/**
* 获取/设置镜头光晕的遮挡比例。
* @type {number}
* @public
*/
get occlusionScale() {
return this.bodyNode.getOcclusionScale();
}
set occlusionScale(value) {
this.bodyNode.setOcclusionScale(value);
}
/**
* 镜头光晕元素。
* @typedef {object} LensflareElement
* @property {ImageTexture} imageTexture 元素的图像纹理资源。
* @property {Array<number>} color 元素的颜色。
* @property {number} scale 元素的缩放比例。
* @property {number} offset 元素的偏移量。
* @public
*/
/**
* 添加元素。
* @param {LensflareElement} element 镜头光晕元素。
* @public
*/
addElement(element) {
element.imageTexture = element.imageTexture.getTextureResource();
this.bodyNode.addElement(element)
}
/**
* 根据索引移除元素。
* @param {number} index 将要移除的镜头光晕元素的索引。
* @public
*/
removeElement(index) {
this.bodyNode.removeElement(index)
}
/**
* 清除镜头光晕的元素。
* @public
*/
clearElements() {
this.bodyNode.clearElements()
}
/**
* 获取所有镜头光晕的元素。
* @returns {Array<LensflareElement>}
* @public
*/
getAllElements() {
return this.bodyNode.getAllElements()
}
get isLensflare() {
return true;
}
}
export { Lensflare }