@galacean/effects-plugin-orientation-transformer 1.2.0 → 2.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.min.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
1
+ {"version":3,"file":"index.min.js","sources":["../../../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/rng.js","../../../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/stringify.js","../../../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/native.js","../../../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/v4.js","../../../node_modules/.pnpm/@galacean+effects-math@1.0.1/node_modules/@galacean/effects-math/es/core/utils.js","../../../node_modules/.pnpm/@galacean+effects-math@1.0.1/node_modules/@galacean/effects-math/es/core/vector2.js","../../../node_modules/.pnpm/@galacean+effects-math@1.0.1/node_modules/@galacean/effects-math/es/core/euler.js","../../../node_modules/.pnpm/@galacean+effects-math@1.0.1/node_modules/@galacean/effects-math/es/core/vector3.js","../../../node_modules/.pnpm/@galacean+effects-math@1.0.1/node_modules/@galacean/effects-math/es/core/quaternion.js","../../../node_modules/.pnpm/@galacean+effects-math@1.0.1/node_modules/@galacean/effects-math/es/core/matrix4.js","../../../node_modules/.pnpm/@galacean+effects-math@1.0.1/node_modules/@galacean/effects-math/es/core/vector4.js","../../../node_modules/.pnpm/@galacean+effects-math@1.0.1/node_modules/@galacean/effects-math/es/core/ray.js","../../../node_modules/.pnpm/@galacean+effects-specification@1.0.1/node_modules/@galacean/effects-specification/dist/index.mjs","../../../node_modules/.pnpm/@galacean+effects-specification@1.0.1/node_modules/@galacean/effects-specification/dist/fallback.mjs"],"sourcesContent":["// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","export var PI2 = Math.PI * 2;\nexport var DEG2RAD = Math.PI / 180;\nexport var RAD2DEG = 180 / Math.PI;\nexport var NumberEpsilon = 1e-6;\nexport function isZero(v) {\n return isNaN(v) || Math.abs(v) < NumberEpsilon;\n}\nexport function isEqual(a, b) {\n return Math.abs(a - b) < NumberEpsilon || (a === Infinity && b === Infinity) || (a === -Infinity && b === -Infinity);\n}\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\nexport var damp = function (x, y, lambda, dt) { return lerp(x, y, 1 - Math.exp(-lambda * dt)); };\n// https://en.wikipedia.org/wiki/Linear_interpolation\nexport var lerp = function (x, y, t) { return (1 - t) * x + t * y; };\nexport var degToRad = function (degrees) { return degrees * DEG2RAD; };\nexport var radToDeg = function (radians) { return radians * RAD2DEG; };\nexport function clamp(value, min, max) {\n var fixedMin = isNaN(min) ? -Infinity : min;\n var fixedMax = isNaN(max) ? Infinity : max;\n var lower = Math.min(fixedMin, fixedMax);\n var upper = Math.max(fixedMin, fixedMax);\n return Math.min(Math.max(value, lower), upper);\n}\n","import { NumberEpsilon } from './utils';\n/**\n * 二维向量\n */\nexport var Vector2 = /** @class */ (function () {\n /**\n * 构造函数,默认为零向量\n * @param [x=0] - x 分量\n * @param [y=0] - y 分量\n */\n function Vector2(x, y) {\n if (x === void 0) { x = 0; }\n if (y === void 0) { y = 0; }\n this.x = x;\n this.y = y;\n }\n /**\n * 设置向量\n * @param x - x 轴分量\n * @param y - y 轴分量\n * @returns\n */\n Vector2.prototype.set = function (x, y) {\n this.x = x;\n this.y = y;\n return this;\n };\n /**\n * 设置零向量\n * @returns 向量\n */\n Vector2.prototype.setZero = function () {\n this.x = 0;\n this.y = 0;\n return this;\n };\n /**\n * 通过标量数值创建向量\n * @param num - 数值\n * @returns 向量\n */\n Vector2.prototype.setFromNumber = function (num) {\n this.x = num;\n this.y = num;\n return this;\n };\n /**\n * 通过数组创建向量\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns 向量\n */\n Vector2.prototype.setFromArray = function (array, offset) {\n var _a, _b;\n if (offset === void 0) { offset = 0; }\n this.x = (_a = array[offset]) !== null && _a !== void 0 ? _a : 0;\n this.y = (_b = array[offset + 1]) !== null && _b !== void 0 ? _b : 0;\n return this;\n };\n /**\n * 拷贝向量\n * @param src - 要拷贝的对象\n * @returns 向量\n */\n Vector2.prototype.copyFrom = function (src) {\n this.x = src.x;\n this.y = src.y;\n return this;\n };\n /**\n * 克隆向量\n * @returns 克隆结果\n */\n Vector2.prototype.clone = function () {\n return new Vector2(this.x, this.y);\n };\n /**\n * 根据下标设置元素值\n * @param index - 下标值\n * @param value - 数字\n * @returns 向量\n */\n Vector2.prototype.setElement = function (index, value) {\n switch (index) {\n case 0:\n this.x = value;\n break;\n case 1:\n this.y = value;\n break;\n default: console.error('index is out of range: ' + index);\n }\n return this;\n };\n /**\n * 根据下标获取值\n * @param index - 下标\n * @returns 值\n */\n Vector2.prototype.getElement = function (index) {\n switch (index) {\n case 0: return this.x;\n case 1: return this.y;\n default: console.error('index is out of range: ' + index);\n }\n return 0;\n };\n /**\n * 向量相加\n * @param right - 向量 | 数字\n * @returns 向量\n */\n Vector2.prototype.add = function (right) {\n if (typeof right === 'number') {\n this.x += right;\n this.y += right;\n }\n else if (right instanceof Array) {\n this.x += right[0];\n this.y += right[1];\n }\n else {\n this.x += right.x;\n this.y += right.y;\n }\n return this;\n };\n /**\n * 向量相加\n * @param left - 向量\n * @param right - 向量\n * @returns 相加结果\n */\n Vector2.prototype.addVectors = function (left, right) {\n this.x = left.x + right.x;\n this.y = left.y + right.y;\n return this;\n };\n /**\n * 向量相减\n * @param right - 向量 | 数字\n * @returns 相减结果\n */\n Vector2.prototype.subtract = function (right) {\n if (typeof right === 'number') {\n this.x -= right;\n this.y -= right;\n }\n else if (right instanceof Array) {\n this.x -= right[0];\n this.y -= right[1];\n }\n else {\n this.x -= right.x;\n this.y -= right.y;\n }\n return this;\n };\n /**\n * 向量相减\n * @param left - 向量\n * @param right - 向量\n * @returns 相减结果\n */\n Vector2.prototype.subtractVectors = function (left, right) {\n this.x = left.x - right.x;\n this.y = left.y - right.y;\n return this;\n };\n /**\n * 向量相乘\n * @param right - 向量 | 数字\n * @returns 相乘结果\n */\n Vector2.prototype.multiply = function (right) {\n if (typeof right === 'number') {\n this.x *= right;\n this.y *= right;\n }\n else if (right instanceof Array) {\n this.x *= right[0];\n this.y *= right[1];\n }\n else {\n this.x *= right.x;\n this.y *= right.y;\n }\n return this;\n };\n /**\n * 向量相乘\n * @param left - 向量\n * @param right - 向量\n * @returns 相乘结果\n */\n Vector2.prototype.multiplyVectors = function (left, right) {\n this.x = left.x * right.x;\n this.y = left.y * right.y;\n return this;\n };\n /**\n * 向量相除\n * @param right - 向量 | 数字\n * @returns 相除结果\n */\n Vector2.prototype.divide = function (right) {\n if (typeof right === 'number') {\n this.x /= right;\n this.y /= right;\n }\n else if (right instanceof Array) {\n this.x /= right[0];\n this.y /= right[1];\n }\n else {\n this.x /= right.x;\n this.y /= right.y;\n }\n return this;\n };\n /**\n * 向量缩放\n * @param v - 数字\n * @returns 缩放结果\n */\n Vector2.prototype.scale = function (v) {\n this.x *= v;\n this.y *= v;\n return this;\n };\n /**\n * 分量求和\n * @returns 求和结果\n */\n Vector2.prototype.sum = function () {\n return this.x + this.y;\n };\n /**\n * 向量求最小值\n * @param v - 向量\n * @returns 最小值\n */\n Vector2.prototype.min = function (v) {\n if (typeof v === 'number') {\n this.x = Math.min(this.x, v);\n this.y = Math.min(this.y, v);\n }\n else {\n this.x = Math.min(this.x, v.x);\n this.y = Math.min(this.y, v.y);\n }\n return this;\n };\n /**\n * 向量求最大值\n * @param v - 向量\n * @returns 最大值\n */\n Vector2.prototype.max = function (v) {\n if (typeof v === 'number') {\n this.x = Math.max(this.x, v);\n this.y = Math.max(this.y, v);\n }\n else {\n this.x = Math.max(this.x, v.x);\n this.y = Math.max(this.y, v.y);\n }\n return this;\n };\n /**\n * 向量阈值约束\n * @param min - 极小值\n * @param max - 极大值\n * @returns 向量\n */\n Vector2.prototype.clamp = function (min, max) {\n return this.max(min).min(max);\n };\n /**\n * 向量向下取整\n * @returns 取整结果\n */\n Vector2.prototype.floor = function () {\n this.x = Math.floor(this.x);\n this.y = Math.floor(this.y);\n return this;\n };\n /**\n * 向量向上取整\n * @returns 取整结果\n */\n Vector2.prototype.ceil = function () {\n this.x = Math.ceil(this.x);\n this.y = Math.ceil(this.y);\n return this;\n };\n /**\n * 向量取四舍五入\n * @returns 四舍五入结果\n */\n Vector2.prototype.round = function () {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n return this;\n };\n /**\n * 向量取绝对值\n * @returns 向量\n */\n Vector2.prototype.abs = function () {\n this.x = Math.abs(this.x);\n this.y = Math.abs(this.y);\n return this;\n };\n /**\n * 向量取反\n * @returns 取反结果\n */\n Vector2.prototype.negate = function () {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n };\n /**\n * 向量长度\n * @returns 求值结果\n */\n Vector2.prototype.length = function () {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n };\n /**\n * 向量长度平方\n * @returns 求值结果\n */\n Vector2.prototype.lengthSquared = function () {\n return this.x * this.x + this.y * this.y;\n };\n /**\n * 向量归一化\n * @returns 归一化结果\n */\n Vector2.prototype.normalize = function () {\n return this.divide(this.length() || 1);\n };\n /**\n * 设置向量长度\n * @param length - 长度\n * @returns 向量\n */\n Vector2.prototype.setLength = function (length) {\n return this.normalize().multiply(length);\n };\n /**\n * 向量线性插值\n * @param other - 向量\n * @param alpha - 插值比\n * @returns 计算结果\n */\n Vector2.prototype.lerp = function (other, alpha) {\n this.x += (other.x - this.x) * alpha;\n this.y += (other.y - this.y) * alpha;\n return this;\n };\n /**\n * 向量线性插值\n * @param v1 - 向量\n * @param v2 - 向量\n * @param alpha - 插值比\n * @returns 计算结果\n */\n Vector2.prototype.lerpVectors = function (v1, v2, alpha) {\n this.x = v1.x + (v2.x - v1.x) * alpha;\n this.y = v1.y + (v2.y - v1.y) * alpha;\n return this;\n };\n /**\n * 向量点乘\n * @param v - 向量\n * @returns 点乘结果\n */\n Vector2.prototype.dot = function (v) {\n return this.x * v.x + this.y * v.y;\n };\n /**\n * 向量叉乘\n * @param v - 向量\n * @returns 叉乘结果\n */\n Vector2.prototype.cross = function (v) {\n return this.x * v.y - this.y * v.x;\n };\n /**\n * 点距离\n * @param v - 点\n * @returns 距离\n */\n Vector2.prototype.distance = function (v) {\n var dx = this.x - v.x;\n var dy = this.y - v.y;\n return Math.sqrt(dx * dx + dy * dy);\n };\n /**\n * 点距离平方\n * @param v - 点\n * @returns 距离平方\n */\n Vector2.prototype.distanceSquared = function (v) {\n var dx = this.x - v.x;\n var dy = this.y - v.y;\n return dx * dx + dy * dy;\n };\n /**\n * 向量判等\n * @param v - 向量\n * @returns 判等结果\n */\n Vector2.prototype.equals = function (v) {\n return this.x === v.x && this.y === v.y;\n };\n /**\n * 是否零向量\n * @returns 是否零向量\n */\n Vector2.prototype.isZero = function () {\n var _a;\n var eps = NumberEpsilon;\n var x = (_a = this, _a.x), y = _a.y;\n return Math.abs(x) <= eps && Math.abs(y) <= eps;\n };\n /**\n * 向量转数组\n * @returns 数组\n */\n Vector2.prototype.toArray = function () {\n return [this.x, this.y];\n };\n Vector2.prototype.fill = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n array[offset] = this.x;\n array[offset + 1] = this.y;\n };\n /**\n * 随机生成向量\n * @returns 向量\n */\n Vector2.prototype.random = function () {\n this.x = Math.random();\n this.y = Math.random();\n return this;\n };\n /**\n * 通过标量创建向量\n * @param num - 数值\n * @returns 向量\n */\n Vector2.fromNumber = function (num) {\n return new Vector2().setFromNumber(num);\n };\n /**\n * 通过数组创建向量\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns 向量\n */\n Vector2.fromArray = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n return new Vector2().setFromArray(array, offset);\n };\n /**\n * 二维向量的常量\n */\n Vector2.ONE = new Vector2(1.0, 1.0);\n Vector2.ZERO = new Vector2(0.0, 0.0);\n return Vector2;\n}());\n","import { Quaternion } from './quaternion';\nimport { Matrix4 } from './matrix4';\nimport { RAD2DEG, clamp } from './utils';\nimport { DEG2RAD } from './utils';\n/**\n * 欧拉角顺序\n */\nexport var EulerOrder;\n(function (EulerOrder) {\n EulerOrder[EulerOrder[\"XYZ\"] = 0] = \"XYZ\";\n EulerOrder[EulerOrder[\"XZY\"] = 1] = \"XZY\";\n EulerOrder[EulerOrder[\"YXZ\"] = 2] = \"YXZ\";\n EulerOrder[EulerOrder[\"YZX\"] = 3] = \"YZX\";\n EulerOrder[EulerOrder[\"ZXY\"] = 4] = \"ZXY\";\n EulerOrder[EulerOrder[\"ZYX\"] = 5] = \"ZYX\";\n})(EulerOrder || (EulerOrder = {}));\n/**\n * 欧拉角\n */\nexport var Euler = /** @class */ (function () {\n /**\n * 构造函数,传入值为 x, y, z 方向分量以及欧拉角顺序\n * @param [x=0] - x 方向分量\n * @param [y=0] - y 方向分量\n * @param [z=0] - z 方向分量\n * @param [order=Euler.DEFAULT_ORDER] - 欧拉角顺序\n */\n function Euler(x, y, z, order) {\n if (x === void 0) { x = 0; }\n if (y === void 0) { y = 0; }\n if (z === void 0) { z = 0; }\n if (order === void 0) { order = Euler.DEFAULT_ORDER; }\n this.x = x;\n this.y = y;\n this.z = z;\n this.order = order;\n }\n /**\n * 设置欧拉角\n * @param x - x 方向分量\n * @param y - y 方向分量\n * @param z - z 方向分量\n * @param [order] - 欧拉角顺序\n * @returns\n */\n Euler.prototype.set = function (x, y, z, order) {\n if (order === void 0) { order = this.order; }\n this.x = x;\n this.y = y;\n this.z = z;\n this.order = order;\n return this;\n };\n Euler.prototype.setZero = function (order) {\n if (order === void 0) { order = this.order; }\n return this.set(0, 0, 0, order);\n };\n /**\n * 通过矩阵设置欧拉角\n * @param m - 矩阵\n * @param [order] - 欧拉角顺序\n * @returns\n */\n Euler.prototype.setFromRotationMatrix4 = function (m, order) {\n if (order === void 0) { order = this.order; }\n var te = m.elements;\n var m11 = te[0];\n var m12 = te[4];\n var m13 = te[8];\n var m21 = te[1];\n var m22 = te[5];\n var m23 = te[9];\n var m31 = te[2];\n var m32 = te[6];\n var m33 = te[10];\n switch (order) {\n case EulerOrder.XYZ:\n this.y = Math.asin(clamp(m13, -1, 1));\n if (Math.abs(m13) < 0.9999999) {\n this.x = Math.atan2(-m23, m33);\n this.z = Math.atan2(-m12, m11);\n }\n else {\n this.x = Math.atan2(m32, m22);\n this.z = 0;\n }\n break;\n case EulerOrder.YXZ:\n this.x = Math.asin(-clamp(m23, -1, 1));\n if (Math.abs(m23) < 0.9999999) {\n this.y = Math.atan2(m13, m33);\n this.z = Math.atan2(m21, m22);\n }\n else {\n this.y = Math.atan2(-m31, m11);\n this.z = 0;\n }\n break;\n case EulerOrder.ZXY:\n this.x = Math.asin(clamp(m32, -1, 1));\n if (Math.abs(m32) < 0.9999999) {\n this.y = Math.atan2(-m31, m33);\n this.z = Math.atan2(-m12, m22);\n }\n else {\n this.y = 0;\n this.z = Math.atan2(m21, m11);\n }\n break;\n case EulerOrder.ZYX:\n this.y = Math.asin(-clamp(m31, -1, 1));\n if (Math.abs(m31) < 0.9999999) {\n this.x = Math.atan2(m32, m33);\n this.z = Math.atan2(m21, m11);\n }\n else {\n this.x = 0;\n this.z = Math.atan2(-m12, m22);\n }\n break;\n case EulerOrder.YZX:\n this.z = Math.asin(clamp(m21, -1, 1));\n if (Math.abs(m21) < 0.9999999) {\n this.x = Math.atan2(-m23, m22);\n this.y = Math.atan2(-m31, m11);\n }\n else {\n this.x = 0;\n this.y = Math.atan2(m13, m33);\n }\n break;\n case EulerOrder.XZY:\n this.z = Math.asin(-clamp(m12, -1, 1));\n if (Math.abs(m12) < 0.9999999) {\n this.x = Math.atan2(m32, m22);\n this.y = Math.atan2(m13, m11);\n }\n else {\n this.x = Math.atan2(-m23, m33);\n this.y = 0;\n }\n break;\n default:\n console.error('setFromRotationMatrix: unknown order: ' + order);\n }\n this.x *= RAD2DEG;\n this.y *= RAD2DEG;\n this.z *= RAD2DEG;\n this.order = order;\n return this;\n };\n /**\n * 通过四元数设置欧拉角\n * @param quat - 四元数\n * @param [order] - 欧拉角顺序\n * @returns\n */\n Euler.prototype.setFromQuaternion = function (quat, order) {\n if (order === void 0) { order = this.order; }\n var matrix = Euler.tempMat0;\n matrix.setFromQuaternion(quat);\n return this.setFromRotationMatrix4(matrix, order);\n };\n /**\n * 通过三维向量设置欧拉角\n * @param v - 三维向量\n * @param [order] - 欧拉角顺序\n * @returns\n */\n Euler.prototype.setFromVector3 = function (v, order) {\n if (order === void 0) { order = this.order; }\n return this.set(v.x, v.y, v.z, order);\n };\n /**\n * 通过数组设置欧拉角\n * @param array - 数组\n * @param [offset=0] - 偏移\n * @param [order] - 欧拉角顺序\n * @returns\n */\n Euler.prototype.setFromArray = function (array, offset, order) {\n var _a, _b, _c, _d;\n if (offset === void 0) { offset = 0; }\n if (order === void 0) { order = this.order; }\n this.x = (_a = array[offset]) !== null && _a !== void 0 ? _a : 0;\n this.y = (_b = array[offset + 1]) !== null && _b !== void 0 ? _b : 0;\n this.z = (_c = array[offset + 2]) !== null && _c !== void 0 ? _c : 0;\n this.order = (_d = array[offset + 3]) !== null && _d !== void 0 ? _d : order;\n return this;\n };\n /**\n * 克隆欧拉角\n * @returns 克隆结果\n */\n Euler.prototype.clone = function () {\n return new Euler(this.x, this.y, this.z, this.order);\n };\n /**\n * 复制欧拉角\n * @param euler - 复制对象\n * @returns 复制结果\n */\n Euler.prototype.copyFrom = function (euler) {\n this.x = euler.x;\n this.y = euler.y;\n this.z = euler.z;\n this.order = euler.order;\n return this;\n };\n Euler.prototype.add = function (euler) {\n if (this.order != euler.order) {\n console.error('add euler with different order');\n return this;\n }\n this.x += euler.x;\n this.y += euler.y;\n this.z += euler.z;\n return this;\n };\n Euler.prototype.addEulers = function (left, right) {\n if (left.order != right.order) {\n console.error('add euler with different order');\n return this;\n }\n this.x = left.x + right.x;\n this.y = left.y + right.y;\n this.z = left.z + right.z;\n this.order = left.order;\n return this;\n };\n Euler.prototype.negate = function () {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n };\n /**\n * 修改欧拉角顺序\n * @param newOrder - 欧拉角顺序\n * @returns 修改结果\n */\n Euler.prototype.reorder = function (newOrder) {\n var quaternion = new Quaternion();\n quaternion.setFromEuler(this);\n return this.setFromQuaternion(quaternion, newOrder);\n };\n /**\n * 通过四元数旋转向量\n * @param v - 待旋转向量\n * @param out - 旋转结果,如果没有传入直接覆盖输入值\n * @returns\n */\n Euler.prototype.rotateVector3 = function (v, out) {\n var q = Euler.tempQuat0;\n return q.setFromEuler(this).rotateVector3(v, out);\n };\n /**\n * 欧拉角相等判断\n * @param euler - 欧拉角\n * @returns 判断结果\n */\n Euler.prototype.equals = function (euler) {\n return euler.x === this.x\n && euler.y === this.y\n && euler.z === this.z\n && euler.order === this.order;\n };\n /**\n * 欧拉角保存于三维向量\n * @param vec - 目标保存对象\n * @returns 保存结果\n */\n Euler.prototype.toVector3 = function (vec) {\n return vec.set(this.x, this.y, this.z);\n };\n /**\n * 欧拉角转数组\n * @returns 保存结果\n */\n Euler.prototype.toArray = function () {\n return [this.x, this.y, this.z];\n };\n /**\n * 欧拉角转四元数\n * @param quat - 目标四元数\n * @returns 目标四元数\n */\n Euler.prototype.toQuaternion = function (quat) {\n var _a;\n var x = (_a = this, _a.x), y = _a.y, z = _a.z, order = _a.order;\n var c1 = Math.cos(x * DEG2RAD * 0.5);\n var c2 = Math.cos(y * DEG2RAD * 0.5);\n var c3 = Math.cos(z * DEG2RAD * 0.5);\n var s1 = Math.sin(x * DEG2RAD * 0.5);\n var s2 = Math.sin(y * DEG2RAD * 0.5);\n var s3 = Math.sin(z * DEG2RAD * 0.5);\n switch (order) {\n case EulerOrder.XYZ:\n quat.set(s1 * c2 * c3 + c1 * s2 * s3, c1 * s2 * c3 - s1 * c2 * s3, c1 * c2 * s3 + s1 * s2 * c3, c1 * c2 * c3 - s1 * s2 * s3);\n break;\n case EulerOrder.YXZ:\n quat.set(s1 * c2 * c3 + c1 * s2 * s3, c1 * s2 * c3 - s1 * c2 * s3, c1 * c2 * s3 - s1 * s2 * c3, c1 * c2 * c3 + s1 * s2 * s3);\n break;\n case EulerOrder.ZXY:\n quat.set(s1 * c2 * c3 - c1 * s2 * s3, c1 * s2 * c3 + s1 * c2 * s3, c1 * c2 * s3 + s1 * s2 * c3, c1 * c2 * c3 - s1 * s2 * s3);\n break;\n case EulerOrder.ZYX:\n quat.set(s1 * c2 * c3 - c1 * s2 * s3, c1 * s2 * c3 + s1 * c2 * s3, c1 * c2 * s3 - s1 * s2 * c3, c1 * c2 * c3 + s1 * s2 * s3);\n break;\n case EulerOrder.YZX:\n quat.set(s1 * c2 * c3 + c1 * s2 * s3, c1 * s2 * c3 + s1 * c2 * s3, c1 * c2 * s3 - s1 * s2 * c3, c1 * c2 * c3 - s1 * s2 * s3);\n break;\n case EulerOrder.XZY:\n quat.set(s1 * c2 * c3 - c1 * s2 * s3, c1 * s2 * c3 - s1 * c2 * s3, c1 * c2 * s3 + s1 * s2 * c3, c1 * c2 * c3 + s1 * s2 * s3);\n break;\n default:\n console.error('unknown euler order: ' + order);\n }\n return quat;\n };\n /**\n * 欧拉角转矩阵\n * @param mat - 目标矩阵\n * @returns 返回目标矩阵\n */\n Euler.prototype.toMatrix4 = function (mat) {\n var _a;\n var me = mat.elements;\n var x = (_a = this, _a.x), y = _a.y, z = _a.z, order = _a.order;\n var cosX = Math.cos(x * DEG2RAD), sinX = Math.sin(x * DEG2RAD);\n var cosY = Math.cos(y * DEG2RAD), sinY = Math.sin(y * DEG2RAD);\n var cosZ = Math.cos(z * DEG2RAD), sinZ = Math.sin(z * DEG2RAD);\n if (order === EulerOrder.XYZ) {\n var cosXcosZ = cosX * cosZ;\n var cosXsinZ = cosX * sinZ;\n var sinXcosZ = sinX * cosZ;\n var sinXsinZ = sinX * sinZ;\n me[0] = cosY * cosZ;\n me[4] = -cosY * sinZ;\n me[8] = sinY;\n me[1] = cosXsinZ + sinXcosZ * sinY;\n me[5] = cosXcosZ - sinXsinZ * sinY;\n me[9] = -sinX * cosY;\n me[2] = sinXsinZ - cosXcosZ * sinY;\n me[6] = sinXcosZ + cosXsinZ * sinY;\n me[10] = cosX * cosY;\n }\n else if (order === EulerOrder.YXZ) {\n var cosYcosZ = cosY * cosZ;\n var cosYsinZ = cosY * sinZ;\n var sinYcosZ = sinY * cosZ;\n var sinYsinZ = sinY * sinZ;\n me[0] = cosYcosZ + sinYsinZ * sinX;\n me[4] = sinYcosZ * sinX - cosYsinZ;\n me[8] = cosX * sinY;\n me[1] = cosX * sinZ;\n me[5] = cosX * cosZ;\n me[9] = -sinX;\n me[2] = cosYsinZ * sinX - sinYcosZ;\n me[6] = sinYsinZ + cosYcosZ * sinX;\n me[10] = cosX * cosY;\n }\n else if (order === EulerOrder.ZXY) {\n var cosYcosZ = cosY * cosZ;\n var cosYsinZ = cosY * sinZ;\n var sinYcosZ = sinY * cosZ;\n var sinYsinZ = sinY * sinZ;\n me[0] = cosYcosZ - sinYsinZ * sinX;\n me[4] = -cosX * sinZ;\n me[8] = sinYcosZ + cosYsinZ * sinX;\n me[1] = cosYsinZ + sinYcosZ * sinX;\n me[5] = cosX * cosZ;\n me[9] = sinYsinZ - cosYcosZ * sinX;\n me[2] = -cosX * sinY;\n me[6] = sinX;\n me[10] = cosX * cosY;\n }\n else if (order === EulerOrder.ZYX) {\n var cosXcosZ = cosX * cosZ;\n var cosXsinZ = cosX * sinZ;\n var sinXcosZ = sinX * cosZ;\n var sinXsinZ = sinX * sinZ;\n me[0] = cosY * cosZ;\n me[4] = sinXcosZ * sinY - cosXsinZ;\n me[8] = cosXcosZ * sinY + sinXsinZ;\n me[1] = cosY * sinZ;\n me[5] = sinXsinZ * sinY + cosXcosZ;\n me[9] = cosXsinZ * sinY - sinXcosZ;\n me[2] = -sinY;\n me[6] = sinX * cosY;\n me[10] = cosX * cosY;\n }\n else if (order === EulerOrder.YZX) {\n var cosXcosY = cosX * cosY;\n var cosXsinY = cosX * sinY;\n var sinXcosY = sinX * cosY;\n var sinXsinY = sinX * sinY;\n me[0] = cosY * cosZ;\n me[4] = sinXsinY - cosXcosY * sinZ;\n me[8] = sinXcosY * sinZ + cosXsinY;\n me[1] = sinZ;\n me[5] = cosX * cosZ;\n me[9] = -sinX * cosZ;\n me[2] = -sinY * cosZ;\n me[6] = cosXsinY * sinZ + sinXcosY;\n me[10] = cosXcosY - sinXsinY * sinZ;\n }\n else if (order === EulerOrder.XZY) {\n var cosXcosY = cosX * cosY;\n var cosXsinY = cosX * sinY;\n var sinXcosY = sinX * cosY;\n var sinXsinY = sinX * sinY;\n me[0] = cosY * cosZ;\n me[4] = -sinZ;\n me[8] = sinY * cosZ;\n me[1] = cosXcosY * sinZ + sinXsinY;\n me[5] = cosX * cosZ;\n me[9] = cosXsinY * sinZ - sinXcosY;\n me[2] = sinXcosY * sinZ - cosXsinY;\n me[6] = sinX * cosZ;\n me[10] = sinXsinY * sinZ + cosXcosY;\n }\n else {\n console.error('toMatrix4: Invalid order ' + order);\n }\n // bottom row\n me[3] = 0;\n me[7] = 0;\n me[11] = 0;\n // last column\n me[12] = 0;\n me[13] = 0;\n me[14] = 0;\n me[15] = 1;\n return mat;\n };\n /**\n * 通过矩阵创建欧拉角\n * @param m - 矩阵\n * @param [order=Euler.DEFAULT_ORDER] - 欧拉角顺序\n * @returns 创建结果\n */\n Euler.fromRotationMatrix4 = function (m, order) {\n if (order === void 0) { order = Euler.DEFAULT_ORDER; }\n return new Euler().setFromRotationMatrix4(m, order);\n };\n /**\n * 通过四元数创建欧拉角\n * @param quat - 四元数\n * @param [order=Euler.DEFAULT_ORDER] - 欧拉角顺序\n * @returns 创建结果\n */\n Euler.fromQuaternion = function (quat, order) {\n if (order === void 0) { order = Euler.DEFAULT_ORDER; }\n return new Euler().setFromQuaternion(quat, order);\n };\n /**\n * 通过三维向量创建欧拉角\n * @param v - 三维向量\n * @param [order=Euler.DEFAULT_ORDER] - 欧拉角顺序\n * @returns 创建结果\n */\n Euler.fromVector3 = function (v, order) {\n if (order === void 0) { order = Euler.DEFAULT_ORDER; }\n return new Euler().setFromVector3(v, order);\n };\n /**\n * 通过数组创建欧拉角\n * @param array - 数组\n * @param [offset=0] - 偏移\n * @param [order=Euler.DEFAULT_ORDER] - 欧拉角顺序\n * @returns 创建结果\n */\n Euler.fromArray = function (array, offset, order) {\n if (offset === void 0) { offset = 0; }\n if (order === void 0) { order = Euler.DEFAULT_ORDER; }\n return new Euler().setFromArray(array, offset, order);\n };\n Euler.DEFAULT_ORDER = EulerOrder.ZYX;\n Euler.tempQuat0 = new Quaternion();\n Euler.tempMat0 = new Matrix4();\n return Euler;\n}());\n","import { NumberEpsilon } from './utils';\nimport { Vector2 } from './vector2';\n/**\n * 三维向量\n */\nexport var Vector3 = /** @class */ (function () {\n /**\n * 构造函数,默认值为零向量\n * @param [x=0]\n * @param [y=0]\n * @param [z=0]\n */\n function Vector3(x, y, z) {\n if (x === void 0) { x = 0; }\n if (y === void 0) { y = 0; }\n if (z === void 0) { z = 0; }\n this.x = x;\n this.y = y;\n this.z = z;\n }\n /**\n * 设置向量\n * @param x - x 轴分量\n * @param y - y 轴分量\n * @param z - z 轴分量\n * @returns 向量\n */\n Vector3.prototype.set = function (x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n };\n /**\n * 设置零向量\n * @returns 向量\n */\n Vector3.prototype.setZero = function () {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n return this;\n };\n /**\n * 通过标量数值设置向量\n * @param num - 数值\n * @returns 向量\n */\n Vector3.prototype.setFromNumber = function (num) {\n this.x = num;\n this.y = num;\n this.z = num;\n return this;\n };\n /**\n * 通过数组设置向量\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns 向量\n */\n Vector3.prototype.setFromArray = function (array, offset) {\n var _a, _b, _c;\n if (offset === void 0) { offset = 0; }\n this.x = (_a = array[offset]) !== null && _a !== void 0 ? _a : 0;\n this.y = (_b = array[offset + 1]) !== null && _b !== void 0 ? _b : 0;\n this.z = (_c = array[offset + 2]) !== null && _c !== void 0 ? _c : 0;\n return this;\n };\n /**\n * 拷贝向量\n * @param v - 要拷贝的对象\n * @returns 向量\n */\n Vector3.prototype.copyFrom = function (v) {\n this.x = v.x;\n this.y = v.y;\n this.z = v.z;\n return this;\n };\n /**\n * 克隆向量\n * @returns 向量\n */\n Vector3.prototype.clone = function () {\n return new Vector3(this.x, this.y, this.z);\n };\n /**\n * 根据下标设置向量分量\n * @param index - 下标值\n * @param value - 数字\n * @returns 向量\n */\n Vector3.prototype.setElement = function (index, value) {\n switch (index) {\n case 0:\n this.x = value;\n break;\n case 1:\n this.y = value;\n break;\n case 2:\n this.z = value;\n break;\n default: console.error('index is out of range: ' + index);\n }\n return this;\n };\n /**\n * 根据下标获取向量分量\n * @param index - 下标\n * @returns\n */\n Vector3.prototype.getElement = function (index) {\n switch (index) {\n case 0: return this.x;\n case 1: return this.y;\n case 2: return this.z;\n default: console.error('index is out of range: ' + index);\n }\n return 0;\n };\n /**\n * 向量相加\n * @param right - 向量 | 数字\n * @returns 相加结果\n */\n Vector3.prototype.add = function (right) {\n if (typeof right === 'number') {\n this.x += right;\n this.y += right;\n this.z += right;\n }\n else if (right instanceof Array) {\n this.x += right[0];\n this.y += right[1];\n this.z += right[2];\n }\n else {\n this.x += right.x;\n this.y += right.y;\n this.z += right.z;\n }\n return this;\n };\n /**\n * 向量相加\n * @param left - 向量\n * @param right - 向量\n * @returns 相加结果\n */\n Vector3.prototype.addVectors = function (left, right) {\n this.x = left.x + right.x;\n this.y = left.y + right.y;\n this.z = left.z + right.z;\n return this;\n };\n /**\n * 向量乘比例后相加\n * @param right - 向量\n * @param s - 比例\n * @returns 相加结果\n */\n Vector3.prototype.addScaledVector = function (right, s) {\n this.x += right.x * s;\n this.y += right.y * s;\n this.z += right.z * s;\n return this;\n };\n /**\n * 向量相减\n * @param right - 向量 | 数字\n * @returns 相减\n */\n Vector3.prototype.subtract = function (right) {\n if (typeof right === 'number') {\n this.x -= right;\n this.y -= right;\n this.z -= right;\n }\n else if (right instanceof Array) {\n this.x -= right[0];\n this.y -= right[1];\n this.z -= right[2];\n }\n else {\n this.x -= right.x;\n this.y -= right.y;\n this.z -= right.z;\n }\n return this;\n };\n /**\n * 向量相减\n * @param left - 向量\n * @param right - 向量\n * @returns 相减结果\n */\n Vector3.prototype.subtractVectors = function (left, right) {\n this.x = left.x - right.x;\n this.y = left.y - right.y;\n this.z = left.z - right.z;\n return this;\n };\n /**\n * 向量相乘\n * @param right - 向量 | 数字\n * @returns 相乘结果\n */\n Vector3.prototype.multiply = function (right) {\n if (typeof right === 'number') {\n this.x *= right;\n this.y *= right;\n this.z *= right;\n }\n else if (right instanceof Array) {\n this.x *= right[0];\n this.y *= right[1];\n this.z *= right[2];\n }\n else {\n this.x *= right.x;\n this.y *= right.y;\n this.z *= right.z;\n }\n return this;\n };\n /**\n * 向量相乘\n * @param left - 向量\n * @param right - 向量\n * @returns 相乘结果\n */\n Vector3.prototype.multiplyVectors = function (left, right) {\n this.x = left.x * right.x;\n this.y = left.y * right.y;\n this.z = left.z * right.z;\n return this;\n };\n /**\n * 向量相除\n * @param right - 向量 | 数字\n * @returns 相除结果\n */\n Vector3.prototype.divide = function (right) {\n if (typeof right === 'number') {\n this.x /= right;\n this.y /= right;\n this.z /= right;\n }\n else if (right instanceof Array) {\n this.x /= right[0];\n this.y /= right[1];\n this.z /= right[2];\n }\n else {\n this.x /= right.x;\n this.y /= right.y;\n this.z /= right.z;\n }\n return this;\n };\n /**\n * 向量缩放\n * @param v - 数字\n * @returns 缩放结果\n */\n Vector3.prototype.scale = function (v) {\n this.x *= v;\n this.y *= v;\n this.z *= v;\n return this;\n };\n /**\n * 分量求和\n * @returns 求和结果\n */\n Vector3.prototype.sum = function () {\n return this.x + this.y + this.z;\n };\n /**\n * 向量求最小值\n * @param v - 向量或数值\n * @returns 求值结果\n */\n Vector3.prototype.min = function (v) {\n if (typeof v === 'number') {\n this.x = Math.min(this.x, v);\n this.y = Math.min(this.y, v);\n this.z = Math.min(this.z, v);\n }\n else {\n this.x = Math.min(this.x, v.x);\n this.y = Math.min(this.y, v.y);\n this.z = Math.min(this.z, v.z);\n }\n return this;\n };\n /**\n * 向量求最大值\n * @param v - 向量或数值\n * @returns 求值结果\n */\n Vector3.prototype.max = function (v) {\n if (typeof v === 'number') {\n this.x = Math.max(this.x, v);\n this.y = Math.max(this.y, v);\n this.z = Math.max(this.z, v);\n }\n else {\n this.x = Math.max(this.x, v.x);\n this.y = Math.max(this.y, v.y);\n this.z = Math.max(this.z, v.z);\n }\n return this;\n };\n /**\n * 向量阈值约束\n * @param min - 向量\n * @param max - 向量\n * @returns 求值结果\n */\n Vector3.prototype.clamp = function (min, max) {\n return this.max(min).min(max);\n };\n /**\n * 向量向下取整\n * @returns 取整结果\n */\n Vector3.prototype.floor = function () {\n this.x = Math.floor(this.x);\n this.y = Math.floor(this.y);\n this.z = Math.floor(this.z);\n return this;\n };\n /**\n * 向量向上取整\n * @returns 取整结果\n */\n Vector3.prototype.ceil = function () {\n this.x = Math.ceil(this.x);\n this.y = Math.ceil(this.y);\n this.z = Math.ceil(this.z);\n return this;\n };\n /**\n * 向量四舍五入\n * @returns 计算结果\n */\n Vector3.prototype.round = function () {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n this.z = Math.round(this.z);\n return this;\n };\n /**\n * 向量取绝对值\n * @returns 向量\n */\n Vector3.prototype.abs = function () {\n this.x = Math.abs(this.x);\n this.y = Math.abs(this.y);\n this.z = Math.abs(this.z);\n return this;\n };\n /**\n * 向量取反\n * @returns 向量\n */\n Vector3.prototype.negate = function () {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n };\n /**\n * 向量长度\n * @returns 长度\n */\n Vector3.prototype.length = function () {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n };\n /**\n * 向量长度平方\n * @returns 长度平方\n */\n Vector3.prototype.lengthSquared = function () {\n return this.x * this.x + this.y * this.y + this.z * this.z;\n };\n /**\n * 向量归一化\n * @returns 向量\n */\n Vector3.prototype.normalize = function () {\n return this.divide(this.length() || 1);\n };\n /**\n * 设置向量长度\n * @param length - 长度\n * @returns 向量\n */\n Vector3.prototype.setLength = function (length) {\n return this.normalize().multiply(length);\n };\n /**\n * 向量间求线性插值\n * @param other - 向量\n * @param alpha - 插值比例\n * @returns 插值结果\n */\n Vector3.prototype.lerp = function (other, alpha) {\n this.x += (other.x - this.x) * alpha;\n this.y += (other.y - this.y) * alpha;\n this.z += (other.z - this.z) * alpha;\n return this;\n };\n /**\n * 向量间求线性插值\n * @param v1 - 第一个向量\n * @param v2 - 第二个向量\n * @param alpha - 插值比例\n * @returns 求值结果\n */\n Vector3.prototype.lerpVectors = function (v1, v2, alpha) {\n this.x = v1.x + (v2.x - v1.x) * alpha;\n this.y = v1.y + (v2.y - v1.y) * alpha;\n this.z = v1.z + (v2.z - v1.z) * alpha;\n return this;\n };\n /**\n * 向量求点积,点积为零表示两向量垂直\n * @param v - 向量\n * @returns 点积结果\n */\n Vector3.prototype.dot = function (v) {\n return this.x * v.x + this.y * v.y + this.z * v.z;\n };\n /**\n * 向量求叉积\n * @param right - 向量\n * @returns 叉积结果\n */\n Vector3.prototype.cross = function (right) {\n return this.crossVectors(this, right);\n };\n /**\n * 向量(a 与 b)求叉积\n * @param left - 向量\n * @param right - 向量\n * @returns 叉积结果\n */\n Vector3.prototype.crossVectors = function (left, right) {\n var ax = left.x, ay = left.y, az = left.z;\n var bx = right.x, by = right.y, bz = right.z;\n this.x = ay * bz - az * by;\n this.y = az * bx - ax * bz;\n this.z = ax * by - ay * bx;\n return this;\n };\n /**\n * 向量反射\n * @param normal - 法线\n * @returns 反射结果\n */\n Vector3.prototype.reflect = function (normal) {\n // reflect incident vector off plane orthogonal to normal\n // normal is assumed to have unit length\n return this.subtract(normal.clone().multiply(2 * this.dot(normal)));\n };\n /**\n * 计算向量距离\n * @param v - 向量\n * @returns 距离\n */\n Vector3.prototype.distance = function (v) {\n return Math.sqrt(this.distanceSquared(v));\n };\n /**\n * 计算向量距离平方\n * @param v - 向量\n * @returns 距离平方\n */\n Vector3.prototype.distanceSquared = function (v) {\n var dx = this.x - v.x;\n var dy = this.y - v.y;\n var dz = this.z - v.z;\n return dx * dx + dy * dy + dz * dz;\n };\n /**\n * 向量判等\n * @param v - 向量\n * @returns 判等结果\n */\n Vector3.prototype.equals = function (v) {\n return v.x === this.x && v.y === this.y && v.z === this.z;\n };\n /**\n * 是否零向量\n * @returns 是否零向量\n */\n Vector3.prototype.isZero = function () {\n var _a;\n var eps = NumberEpsilon;\n var x = (_a = this, _a.x), y = _a.y, z = _a.z;\n return Math.abs(x) <= eps && Math.abs(y) <= eps && Math.abs(z) <= eps;\n };\n /**\n * 向量转数组\n * @param array - 目标保存对象\n * @returns 数组\n */\n Vector3.prototype.toArray = function () {\n return [this.x, this.y, this.z];\n };\n Vector3.prototype.toVector2 = function () {\n return new Vector2(this.x, this.y);\n };\n Vector3.prototype.fill = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n array[offset] = this.x;\n array[offset + 1] = this.y;\n array[offset + 2] = this.z;\n };\n /**\n * 获取随机向量\n * @returns\n */\n Vector3.prototype.random = function () {\n this.x = Math.random();\n this.y = Math.random();\n this.z = Math.random();\n return this;\n };\n /**\n * 用欧拉角旋转向量\n * @param euler - 欧拉角\n * @param [out] - 输出结果,如果没有就覆盖当前向量值\n * @returns 旋转结果\n */\n Vector3.prototype.applyEuler = function (euler, out) {\n return euler.rotateVector3(this, out);\n };\n /**\n * 用四元数旋转向量\n * @param q - 四元数\n * @param [out] - 输出结果,如果没有就覆盖当前向量值\n * @returns 旋转结果\n */\n Vector3.prototype.applyQuaternion = function (q, out) {\n return q.rotateVector3(this, out);\n };\n /**\n * 用矩阵变换点\n * @param m - 变换矩阵\n * @param [out] - 输出结果,如果没有就覆盖当前向量值\n * @returns 结果点\n */\n Vector3.prototype.applyMatrix = function (m, out) {\n return m.transformPoint(this, out);\n };\n /**\n * 用法向量矩阵变换法向量\n * @param m - 法向量矩阵\n * @param [out] - 输出结果,如果没有就覆盖当前向量值\n * @returns 向量\n */\n Vector3.prototype.applyNormalMatrix = function (m, out) {\n return m.transformNormal(this, out);\n };\n /**\n * 用投影矩阵变换点\n * @param m - 投影矩阵\n * @param [out] - 输出结果,如果没有就覆盖当前向量值\n * @returns 结果点\n */\n Vector3.prototype.applyProjectionMatrix = function (m, out) {\n return m.projectPoint(this, out);\n };\n /**\n * 通过标量数值创建向量\n * @param num - 数值\n * @returns 向量\n */\n Vector3.fromNumber = function (num) {\n return new Vector3().setFromNumber(num);\n };\n /**\n * 通过数组创建向量\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns 向量\n */\n Vector3.fromArray = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n return new Vector3().setFromArray(array, offset);\n };\n /**\n * 三维向量的常量\n */\n Vector3.X = new Vector3(1.0, 0.0, 0.0);\n Vector3.Y = new Vector3(0.0, 1.0, 0.0);\n Vector3.Z = new Vector3(0.0, 0.0, 1.0);\n Vector3.ONE = new Vector3(1.0, 1.0, 1.0);\n Vector3.ZERO = new Vector3(0.0, 0.0, 0.0);\n return Vector3;\n}());\n","import { clamp } from './utils';\nimport { Vector3 } from './vector3';\n/**\n * 四元数\n */\nexport var Quaternion = /** @class */ (function () {\n /**\n * 构造函数\n * @param [x=0] - x 分量\n * @param [y=0] - y 分量\n * @param [z=0] - z 分量\n * @param [w=1] - w 分量\n */\n function Quaternion(x, y, z, w) {\n if (x === void 0) { x = 0; }\n if (y === void 0) { y = 0; }\n if (z === void 0) { z = 0; }\n if (w === void 0) { w = 1; }\n this.x = x;\n this.y = y;\n this.z = z;\n this.w = w;\n }\n /**\n * 四元数设置\n * @param x - x 分量\n * @param y - y 分量\n * @param z - z 分量\n * @param w - w 分量\n * @returns 四元数\n */\n Quaternion.prototype.set = function (x, y, z, w) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.w = w;\n return this;\n };\n /**\n * 通过欧拉角设置四元数\n * @param euler - 欧拉角\n * @returns\n */\n Quaternion.prototype.setFromEuler = function (euler) {\n euler.toQuaternion(this);\n return this;\n };\n /**\n * 通过旋转轴和旋转角度设置四元数\n * @param axis - 旋转轴\n * @param angle - 旋转角度(弧度)\n * @returns\n */\n Quaternion.prototype.setFromAxisAngle = function (axis, angle) {\n var halfAngle = angle / 2;\n var s = Math.sin(halfAngle);\n var v = Quaternion.tempVec0;\n v.copyFrom(axis).normalize();\n this.x = v.x * s;\n this.y = v.y * s;\n this.z = v.z * s;\n this.w = Math.cos(halfAngle);\n return this;\n };\n /**\n * 通过数组设置四元数\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns\n */\n Quaternion.prototype.setFromArray = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n this.x = array[offset];\n this.y = array[offset + 1];\n this.z = array[offset + 2];\n this.w = array[offset + 3];\n return this;\n };\n /**\n * 通过矩阵设置四元数\n * @param m - 矩阵\n * @returns\n */\n Quaternion.prototype.setFromRotationMatrix = function (m) {\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n var te = m.elements;\n var m11 = te[0];\n var m12 = te[4];\n var m13 = te[8];\n var m21 = te[1];\n var m22 = te[5];\n var m23 = te[9];\n var m31 = te[2];\n var m32 = te[6];\n var m33 = te[10];\n var trace = m11 + m22 + m33;\n if (trace > 0) {\n var s = 0.5 / Math.sqrt(trace + 1.0);\n this.w = 0.25 / s;\n this.x = (m32 - m23) * s;\n this.y = (m13 - m31) * s;\n this.z = (m21 - m12) * s;\n }\n else if (m11 > m22 && m11 > m33) {\n var s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);\n this.w = (m32 - m23) / s;\n this.x = 0.25 * s;\n this.y = (m12 + m21) / s;\n this.z = (m13 + m31) / s;\n this.negate();\n }\n else if (m22 > m33) {\n var s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);\n this.w = (m13 - m31) / s;\n this.x = (m12 + m21) / s;\n this.y = 0.25 * s;\n this.z = (m23 + m32) / s;\n this.negate();\n }\n else {\n var s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);\n this.w = (m21 - m12) / s;\n this.x = (m13 + m31) / s;\n this.y = (m23 + m32) / s;\n this.z = 0.25 * s;\n this.negate();\n }\n // 兼容原先数学库\n return this;\n };\n /**\n * 通过开始和结束向量设置四元数\n * @param from - 开始向量\n * @param to - 结束向量\n * @returns\n */\n Quaternion.prototype.setFromUnitVectors = function (from, to) {\n // assumes direction vectors vFrom and vTo are normalized\n var r = from.dot(to) + 1;\n if (r < Number.EPSILON) {\n r = 0;\n if (Math.abs(from.x) > Math.abs(from.z)) {\n this.x = -from.y;\n this.y = from.x;\n this.z = 0;\n this.w = r;\n }\n else {\n this.x = 0;\n this.y = -from.z;\n this.z = from.y;\n this.w = r;\n }\n }\n else {\n this.x = from.y * to.z - from.z * to.y;\n this.y = from.z * to.x - from.x * to.z;\n this.z = from.x * to.y - from.y * to.x;\n this.w = r;\n }\n return this.normalize();\n };\n /**\n * 四元数拷贝\n * @param quat - 拷贝目标四元数\n * @returns 拷贝四元数\n */\n Quaternion.prototype.copyFrom = function (quat) {\n this.x = quat.x;\n this.y = quat.y;\n this.z = quat.z;\n this.w = quat.w;\n return this;\n };\n /**\n * 四元数克隆\n * @returns 克隆结果\n */\n Quaternion.prototype.clone = function () {\n return new Quaternion(this.x, this.y, this.z, this.w);\n };\n /**\n * 四元数间的夹角计算\n * @param other - 其他四元数\n * @returns 夹角\n */\n Quaternion.prototype.angleTo = function (other) {\n return 2 * Math.acos(Math.abs(clamp(this.dot(other), -1, 1)));\n };\n /**\n * 四元数向目标旋转\n * @param q - 四元数\n * @param step - 旋转弧度\n * @returns 目标四元数\n */\n Quaternion.prototype.rotateTowards = function (q, step) {\n var angle = this.angleTo(q);\n if (angle === 0) {\n return this;\n }\n var t = Math.min(1, step / angle);\n this.slerp(q, t);\n return this;\n };\n /**\n * 四元数单位化\n * @returns 单位四元数\n */\n Quaternion.prototype.identity = function () {\n return this.set(0, 0, 0, 1);\n };\n /**\n * 四元数求逆\n * @returns 四元数的逆\n */\n Quaternion.prototype.invert = function () {\n return this.conjugate();\n };\n /**\n * 四元数取负\n * @returns 负四元数\n */\n Quaternion.prototype.negate = function () {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n this.w = -this.w;\n return this;\n };\n /**\n * 四元数求共轭值\n * @returns 四元数的共轭值\n */\n Quaternion.prototype.conjugate = function () {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n };\n /**\n * 四元数点乘结果\n * @param v\n * @return\n */\n Quaternion.prototype.dot = function (v) {\n return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n };\n /**\n * 四元数的模平方\n * @return\n */\n Quaternion.prototype.lengthSquared = function () {\n return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n };\n /**\n * 四元数的欧式长度\n * @returns 长度\n */\n Quaternion.prototype.length = function () {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);\n };\n /**\n * 四元数归一化\n * @returns 归一化值\n */\n Quaternion.prototype.normalize = function () {\n var l = this.length();\n if (l === 0) {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n this.w = 1;\n }\n else {\n l = 1 / l;\n this.x = this.x * l;\n this.y = this.y * l;\n this.z = this.z * l;\n this.w = this.w * l;\n }\n return this;\n };\n /**\n * 四元数右乘\n * @param right - 右乘的四元数\n * @returns\n */\n Quaternion.prototype.multiply = function (right) {\n return this.multiplyQuaternions(this, right);\n };\n /**\n * 四元数左乘\n * @param left - 左乘的四元数\n * @returns\n */\n Quaternion.prototype.premultiply = function (left) {\n return this.multiplyQuaternions(left, this);\n };\n /**\n * 四元数乘法\n * @param left - 四元数\n * @param right - 四元数\n * @returns 四元数\n */\n Quaternion.prototype.multiplyQuaternions = function (left, right) {\n // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n var qax = left.x;\n var qay = left.y;\n var qaz = left.z;\n var qaw = left.w;\n var qbx = right.x;\n var qby = right.y;\n var qbz = right.z;\n var qbw = right.w;\n this.x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n this.y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n this.z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n this.w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n return this;\n };\n /**\n * 四元数线性插值\n * @see http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n * @param other - 四元数\n * @param t - 插值比\n * @returns 插值结果\n */\n Quaternion.prototype.slerp = function (other, t) {\n var _a;\n if (t === 0) {\n return this;\n }\n if (t === 1) {\n return this.copyFrom(other);\n }\n var x = (_a = this, _a.x), y = _a.y, z = _a.z, w = _a.w;\n var cosHalfTheta = w * other.w + x * other.x + y * other.y + z * other.z;\n if (cosHalfTheta < 0) {\n this.w = -other.w;\n this.x = -other.x;\n this.y = -other.y;\n this.z = -other.z;\n cosHalfTheta = -cosHalfTheta;\n }\n else {\n this.copyFrom(other);\n }\n if (cosHalfTheta >= 1.0) {\n this.w = w;\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n }\n var sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n if (sqrSinHalfTheta <= Number.EPSILON) {\n var s = 1 - t;\n this.w = s * w + t * this.w;\n this.x = s * x + t * this.x;\n this.y = s * y + t * this.y;\n this.z = s * z + t * this.z;\n this.normalize();\n return this;\n }\n var sinHalfTheta = Math.sqrt(sqrSinHalfTheta);\n var halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta);\n var ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta;\n var ratioB = Math.sin(t * halfTheta) / sinHalfTheta;\n this.w = (w * ratioA + this.w * ratioB);\n this.x = (x * ratioA + this.x * ratioB);\n this.y = (y * ratioA + this.y * ratioB);\n this.z = (z * ratioA + this.z * ratioB);\n return this;\n };\n /**\n * 两个四元数的线性插值\n * @param qa - 四元数\n * @param qb - 四元数\n * @param t - 插值比\n */\n Quaternion.prototype.slerpQuaternions = function (qa, qb, t) {\n this.copyFrom(qa).slerp(qb, t);\n };\n /**\n * 通过四元数旋转向量\n * @param v - 待旋转向量\n * @param [out] - 旋转结果,如果没有传入直接覆盖输入值\n * @returns\n */\n Quaternion.prototype.rotateVector3 = function (v, out) {\n var _a;\n var qx = (_a = this, _a.x), qy = _a.y, qz = _a.z, qw = _a.w;\n var vx = v.x, vy = v.y, vz = v.z;\n var ix = qw * vx + qy * vz - qz * vy;\n var iy = qw * vy + qz * vx - qx * vz;\n var iz = qw * vz + qx * vy - qy * vx;\n var iw = -qx * vx - qy * vy - qz * vz;\n var res = out !== null && out !== void 0 ? out : v;\n res.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n res.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n res.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n return res;\n };\n /**\n * 四元数判等\n * @param quaternion - 四元数\n * @returns 判等结果\n */\n Quaternion.prototype.equals = function (quaternion) {\n return quaternion.x === this.x\n && quaternion.y === this.y\n && quaternion.z === this.z\n && quaternion.w === this.w;\n };\n /**\n * 四元数保存为数组\n * @returns\n */\n Quaternion.prototype.toArray = function () {\n return [this.x, this.y, this.z, this.w];\n };\n /**\n * 四元数转四维向量数组\n * @param vec - 目标保存对象\n * @returns 保存结果\n */\n Quaternion.prototype.toVector4 = function (vec) {\n return vec.set(this.x, this.y, this.z, this.w);\n };\n /**\n * 四元数转欧拉角\n * @param euler - 目标欧拉角\n * @returns 欧拉角\n */\n Quaternion.prototype.toEuler = function (euler) {\n return euler.setFromQuaternion(this);\n };\n /**\n * 四元数转矩阵\n * @param mat - 目标矩阵\n * @returns\n */\n Quaternion.prototype.toMatrix4 = function (mat) {\n return mat.compose(Vector3.ZERO, this, Vector3.ONE);\n };\n /**\n * 通过欧拉角创建四元数\n * @param euler - 欧拉角\n * @returns 四元数\n */\n Quaternion.fromEuler = function (euler) {\n return new Quaternion().setFromEuler(euler);\n };\n /**\n * 通过旋转轴和旋转角度创建四元数\n * @param axis - 旋转轴\n * @param angle - 旋转角(弧度值)\n * @returns 四元数\n */\n Quaternion.fromAxisAngle = function (axis, angle) {\n return new Quaternion().setFromAxisAngle(axis, angle);\n };\n /**\n * 通过数组获取四元数\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns 四元数\n */\n Quaternion.fromArray = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n return new Quaternion().setFromArray(array, offset);\n };\n /**\n * 通过旋转矩阵创建四元数\n * @param m - 旋转矩阵\n * @returns 四元数\n */\n Quaternion.fromRotationMatrix = function (m) {\n return new Quaternion().setFromRotationMatrix(m);\n };\n /**\n * 通过开始和结束向量创建四元数\n * @param from - 开始向量\n * @param to - 结束向量\n * @returns\n */\n Quaternion.fromUnitVectors = function (from, to) {\n return new Quaternion().setFromUnitVectors(from, to);\n };\n Quaternion.tempVec0 = new Vector3();\n return Quaternion;\n}());\n","var __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { Vector3 } from './vector3';\nimport { isEqual } from './utils';\nimport { Quaternion } from './quaternion';\n/**\n * 四阶矩阵(列优先矩阵)\n */\nexport var Matrix4 = /** @class */ (function () {\n /**\n * 构造函数,初始值为单位矩阵\n * @param [m11=1] - 第 1 行,第 1 列\n * @param [m21=0] - 第 2 行,第 1 列\n * @param [m31=0] - 第 3 行,第 1 列\n * @param [m41=0] - 第 4 行,第 1 列\n * @param [m12=0] - 第 1 行,第 2 列\n * @param [m22=1] - 第 2 行,第 2 列\n * @param [m32=0] - 第 3 行,第 2 列\n * @param [m42=0] - 第 4 行,第 2 列\n * @param [m13=0] - 第 1 行,第 3 列\n * @param [m23=0] - 第 2 行,第 3 列\n * @param [m33=1] - 第 3 行,第 3 列\n * @param [m43=0] - 第 4 行,第 3 列\n * @param [m14=0] - 第 1 行,第 4 列\n * @param [m24=0] - 第 2 行,第 4 列\n * @param [m34=0] - 第 3 行,第 4 列\n * @param [m44=1] - 第 4 行,第 4 列\n */\n function Matrix4(m11, m21, m31, m41, m12, m22, m32, m42, m13, m23, m33, m43, m14, m24, m34, m44) {\n if (m11 === void 0) { m11 = 1; }\n if (m21 === void 0) { m21 = 0; }\n if (m31 === void 0) { m31 = 0; }\n if (m41 === void 0) { m41 = 0; }\n if (m12 === void 0) { m12 = 0; }\n if (m22 === void 0) { m22 = 1; }\n if (m32 === void 0) { m32 = 0; }\n if (m42 === void 0) { m42 = 0; }\n if (m13 === void 0) { m13 = 0; }\n if (m23 === void 0) { m23 = 0; }\n if (m33 === void 0) { m33 = 1; }\n if (m43 === void 0) { m43 = 0; }\n if (m14 === void 0) { m14 = 0; }\n if (m24 === void 0) { m24 = 0; }\n if (m34 === void 0) { m34 = 0; }\n if (m44 === void 0) { m44 = 1; }\n this.elements = [\n m11, m21, m31, m41,\n m12, m22, m32, m42,\n m13, m23, m33, m43,\n m14, m24, m34, m44,\n ];\n }\n /**\n * 设置矩阵\n * @param m11 - 第 1 行,第 1 列\n * @param m21 - 第 2 行,第 1 列\n * @param m31 - 第 3 行,第 1 列\n * @param m41 - 第 4 行,第 1 列\n * @param m12 - 第 1 行,第 2 列\n * @param m22 - 第 2 行,第 2 列\n * @param m32 - 第 3 行,第 2 列\n * @param m42 - 第 4 行,第 2 列\n * @param m13 - 第 1 行,第 3 列\n * @param m23 - 第 2 行,第 3 列\n * @param m33 - 第 3 行,第 3 列\n * @param m43 - 第 4 行,第 3 列\n * @param m14 - 第 1 行,第 4 列\n * @param m24 - 第 2 行,第 4 列\n * @param m34 - 第 3 行,第 4 列\n * @param m44 - 第 4 行,第 4 列\n * @returns 矩阵\n */\n Matrix4.prototype.set = function (m11, m21, m31, m41, m12, m22, m32, m42, m13, m23, m33, m43, m14, m24, m34, m44) {\n var e = this.elements;\n e[0] = m11;\n e[1] = m21;\n e[2] = m31;\n e[3] = m41;\n e[4] = m12;\n e[5] = m22;\n e[6] = m32;\n e[7] = m42;\n e[8] = m13;\n e[9] = m23;\n e[10] = m33;\n e[11] = m43;\n e[12] = m14;\n e[13] = m24;\n e[14] = m34;\n e[15] = m44;\n return this;\n };\n /**\n * 通过行优先数据设置矩阵\n * @param m11 - 第 1 行,第 1 列\n * @param m12 - 第 1 行,第 2 列\n * @param m13 - 第 1 行,第 3 列\n * @param m14 - 第 1 行,第 4 列\n * @param m21 - 第 2 行,第 1 列\n * @param m22 - 第 2 行,第 2 列\n * @param m23 - 第 2 行,第 3 列\n * @param m24 - 第 2 行,第 4 列\n * @param m31 - 第 3 行,第 1 列\n * @param m32 - 第 3 行,第 2 列\n * @param m33 - 第 3 行,第 3 列\n * @param m34 - 第 3 行,第 4 列\n * @param m41 - 第 4 行,第 1 列\n * @param m42 - 第 4 行,第 2 列\n * @param m43 - 第 4 行,第 3 列\n * @param m44 - 第 4 行,第 4 列\n * @returns 矩阵\n */\n Matrix4.prototype.setFromRowMajorData = function (m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44) {\n var e = this.elements;\n e[0] = m11;\n e[4] = m12;\n e[8] = m13;\n e[12] = m14;\n e[1] = m21;\n e[5] = m22;\n e[9] = m23;\n e[13] = m24;\n e[2] = m31;\n e[6] = m32;\n e[10] = m33;\n e[14] = m34;\n e[3] = m41;\n e[7] = m42;\n e[11] = m43;\n e[15] = m44;\n return this;\n };\n /**\n * 通过四个列向量设置矩阵\n * @param c1 - 第一列\n * @param c2 - 第二列\n * @param c3 - 第三列\n * @param c4 - 第四列\n * @returns 矩阵\n */\n Matrix4.prototype.setFromColumnVectors = function (c1, c2, c3, c4) {\n return this.set(c1.x, c1.y, c1.z, c1.w, c2.x, c2.y, c2.z, c2.w, c3.x, c3.y, c3.z, c3.w, c4.x, c4.y, c4.z, c4.w);\n };\n /**\n * 通过三维矩阵设置矩阵\n * @param m - 三维矩阵\n * @returns 设置结果\n */\n Matrix4.prototype.setFromMatrix3 = function (m) {\n var me = m.elements;\n this.set(me[0], me[1], me[2], 0, me[3], me[4], me[5], 0, me[6], me[7], me[8], 0, 0, 0, 0, 1);\n return this;\n };\n /**\n * 通过数组设置矩阵\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns 矩阵\n */\n Matrix4.prototype.setFromArray = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n for (var i = 0; i < 16; i++) {\n this.elements[i] = array[offset + i];\n }\n return this;\n };\n /**\n * 通过缩放设置矩阵\n * @param x - x 方向缩放\n * @param y - y 方向缩放\n * @param z - z 方向缩放\n * @returns 缩放矩阵\n */\n Matrix4.prototype.setFromScale = function (x, y, z) {\n return this.set(x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1);\n };\n /**\n * 通过平移设置矩阵\n * @param x - x 方向平移\n * @param y - y 方向平移\n * @param z - z 方向平移\n * @returns 平移矩阵\n */\n Matrix4.prototype.setFromTranslation = function (x, y, z) {\n return this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, x, y, z, 1);\n };\n /**\n * 通过 x 轴旋转角度设置矩阵\n * @param theta - x 轴旋转弧度\n * @returns 矩阵\n */\n Matrix4.prototype.setFromRotationX = function (theta) {\n var c = Math.cos(theta);\n var s = Math.sin(theta);\n return this.set(1, 0, 0, 0, 0, c, s, 0, 0, -s, c, 0, 0, 0, 0, 1);\n };\n /**\n * 通过 y 轴旋转角度设置矩阵\n * @param theta - y 轴旋转弧度\n * @returns 矩阵\n */\n Matrix4.prototype.setFromRotationY = function (theta) {\n var c = Math.cos(theta);\n var s = Math.sin(theta);\n return this.set(c, 0, -s, 0, 0, 1, 0, 0, s, 0, c, 0, 0, 0, 0, 1);\n };\n /**\n * 通过 z 轴旋转角度设置矩阵\n * @param theta - z 轴旋转弧度\n * @returns 矩阵\n */\n Matrix4.prototype.setFromRotationZ = function (theta) {\n var c = Math.cos(theta);\n var s = Math.sin(theta);\n return this.set(c, s, 0, 0, -s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n };\n /**\n * 根据三维旋转轴与弧度设置矩阵\n * @param axis - 三维旋转轴\n * @param angle - 旋转弧度\n * @returns 矩阵\n */\n Matrix4.prototype.setFromRotationAxis = function (axis, angle) {\n // Based on http://www.gamedev.net/reference/articles/article1199.asp\n var v = Matrix4.tempVec0;\n v.copyFrom(axis).normalize();\n var c = Math.cos(angle);\n var s = Math.sin(angle);\n var t = 1 - c;\n var x = v.x, y = v.y, z = v.z;\n var tx = t * x;\n var ty = t * y;\n return this.set(tx * x + c, tx * y + s * z, tx * z - s * y, 0, tx * y - s * z, ty * y + c, ty * z + s * x, 0, tx * z + s * y, ty * z - s * x, t * z * z + c, 0, 0, 0, 0, 1);\n };\n /**\n * 通过欧拉角设置矩阵\n * @param euler - 欧拉角\n * @returns 矩阵\n */\n Matrix4.prototype.setFromEuler = function (euler) {\n euler.toMatrix4(this);\n return this;\n };\n /**\n * 通过四元数设置矩阵\n * @param quat - 四元数\n * @returns 矩阵\n */\n Matrix4.prototype.setFromQuaternion = function (quat) {\n return this.compose(Vector3.ZERO, quat, Vector3.ONE);\n };\n /**\n * 通过倾斜参数设置矩阵\n * @param x - x 方向倾斜分量\n * @param y - y 方向倾斜分量\n * @param z - z 方向倾斜分量\n * @returns 倾斜矩阵\n */\n Matrix4.prototype.setFromShear = function (x, y, z) {\n return this.set(1, x, x, 0, y, 1, y, 0, z, z, 1, 0, 0, 0, 0, 1);\n };\n /**\n * 通过基轴设置矩阵\n * @param xAxis - x 轴\n * @param yAxis - y 轴\n * @param zAxis - z 轴\n * @returns 倾斜矩阵\n */\n Matrix4.prototype.setFromBasis = function (xAxis, yAxis, zAxis) {\n return this.set(xAxis.x, xAxis.y, xAxis.z, 0, yAxis.x, yAxis.y, yAxis.z, 0, zAxis.x, zAxis.y, zAxis.z, 0, 0, 0, 0, 1);\n };\n /**\n * 矩阵清零\n * @returns 零矩阵\n */\n Matrix4.prototype.setZero = function () {\n for (var i = 0; i < 16; i++) {\n this.elements[i] = 0;\n }\n return this;\n };\n /**\n * 矩阵单位化\n * @returns 单位矩阵\n */\n Matrix4.prototype.identity = function () {\n return this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n };\n /**\n * 单位阵判断\n * @returns 判断结果\n */\n Matrix4.prototype.isIdentity = function () {\n var e = this.elements;\n return e[0] === 1 && e[4] === 0 && e[8] === 0 && e[12] === 0\n && e[1] === 0 && e[5] === 1 && e[9] === 0 && e[13] === 0\n && e[2] === 0 && e[6] === 0 && e[10] === 1 && e[14] === 0\n && e[3] === 0 && e[7] === 0 && e[11] === 0 && e[15] === 1;\n };\n /**\n * 矩阵克隆\n * @returns 克隆结果\n */\n Matrix4.prototype.clone = function () {\n var e = this.elements;\n return new Matrix4(e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8], e[9], e[10], e[11], e[12], e[13], e[14], e[15]);\n };\n /**\n * 矩阵复制\n * @param m - 复制对象\n * @returns 复制结果\n */\n Matrix4.prototype.copyFrom = function (m) {\n this.elements = __spreadArray([], __read(m.elements), false);\n return this;\n };\n /**\n * 得到列向量\n * @param i - 列向量索引,从 0 开始\n * @param v\n * @returns 矩阵\n */\n Matrix4.prototype.getColumnVector = function (i, v) {\n return v.set(this.elements[i * 4], this.elements[i * 4 + 1], this.elements[i * 4 + 2], this.elements[i * 4 + 3]);\n };\n /**\n * 设置相机矩阵\n * @param eye - 相机位置\n * @param target - 目标位置\n * @param up - 相机方向\n * @returns 矩阵\n */\n Matrix4.prototype.lookAt = function (eye, target, up) {\n var vX = Matrix4.tempVec0;\n var vY = Matrix4.tempVec1;\n var vZ = Matrix4.tempVec2;\n vZ.subtractVectors(eye, target);\n vZ.normalize();\n vX.crossVectors(up, vZ);\n vX.normalize();\n vY.crossVectors(vZ, vX);\n var te = this.elements;\n te[0] = vX.x;\n te[1] = vY.x;\n te[2] = vZ.x;\n te[3] = 0;\n te[4] = vX.y;\n te[5] = vY.y;\n te[6] = vZ.y;\n te[7] = 0;\n te[8] = vX.z;\n te[9] = vY.z;\n te[10] = vZ.z;\n te[11] = 0;\n te[12] = -vX.dot(eye);\n te[13] = -vY.dot(eye);\n te[14] = -vZ.dot(eye);\n te[15] = 1;\n return this;\n };\n /**\n * 矩阵乘比例后相加\n * @param right - 矩阵\n * @param s - 比例\n * @returns 相加结果\n */\n Matrix4.prototype.addScaledMatrix = function (right, s) {\n var te = this.elements;\n var re = right.elements;\n for (var i = 0; i < 16; i++) {\n te[i] += re[i] * s;\n }\n return this;\n };\n /**\n * 矩阵右乘\n * @param right - 右侧矩阵或数值\n * @returns 右乘结果\n */\n Matrix4.prototype.multiply = function (right) {\n if (typeof right === 'number') {\n for (var i = 0; i < 16; i++) {\n this.elements[i] *= right;\n }\n return this;\n }\n else {\n return this.multiplyMatrices(this, right);\n }\n };\n /**\n * 矩阵左乘\n * @param left - 左侧矩阵\n * @returns 左乘结果\n */\n Matrix4.prototype.premultiply = function (left) {\n return this.multiplyMatrices(left, this);\n };\n /**\n * 矩阵相乘\n * @param left - 矩阵\n * @param right - 矩阵\n * @returns 相乘结果\n */\n Matrix4.prototype.multiplyMatrices = function (left, right) {\n var ae = left.elements;\n var be = right.elements;\n var te = this.elements;\n var a11 = ae[0], a12 = ae[4], a13 = ae[8], a14 = ae[12];\n var a21 = ae[1], a22 = ae[5], a23 = ae[9], a24 = ae[13];\n var a31 = ae[2], a32 = ae[6], a33 = ae[10], a34 = ae[14];\n var a41 = ae[3], a42 = ae[7], a43 = ae[11], a44 = ae[15];\n var b11 = be[0], b12 = be[4], b13 = be[8], b14 = be[12];\n var b21 = be[1], b22 = be[5], b23 = be[9], b24 = be[13];\n var b31 = be[2], b32 = be[6], b33 = be[10], b34 = be[14];\n var b41 = be[3], b42 = be[7], b43 = be[11], b44 = be[15];\n te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n te[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n te[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n te[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n te[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n te[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n te[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n te[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n return this;\n };\n /**\n * 矩阵缩放\n * @param s - 缩放比例\n * @returns 缩放结果\n */\n Matrix4.prototype.multiplyScalar = function (s) {\n var e = this.elements;\n e[0] *= s;\n e[4] *= s;\n e[8] *= s;\n e[12] *= s;\n e[1] *= s;\n e[5] *= s;\n e[9] *= s;\n e[13] *= s;\n e[2] *= s;\n e[6] *= s;\n e[10] *= s;\n e[14] *= s;\n e[3] *= s;\n e[7] *= s;\n e[11] *= s;\n e[15] *= s;\n return this;\n };\n /**\n * 矩阵求行列式值\n * @returns 行列式值\n */\n Matrix4.prototype.determinant = function () {\n var e = this.elements;\n var m11 = e[0], m12 = e[4], m13 = e[8], m14 = e[12];\n var m21 = e[1], m22 = e[5], m23 = e[9], m24 = e[13];\n var m31 = e[2], m32 = e[6], m33 = e[10], m34 = e[14];\n var m41 = e[3], m42 = e[7], m43 = e[11], m44 = e[15];\n return (m41 * (+m14 * m23 * m32\n - m13 * m24 * m32\n - m14 * m22 * m33\n + m12 * m24 * m33\n + m13 * m22 * m34\n - m12 * m23 * m34) +\n m42 * (+m11 * m23 * m34\n - m11 * m24 * m33\n + m14 * m21 * m33\n - m13 * m21 * m34\n + m13 * m24 * m31\n - m14 * m23 * m31) +\n m43 * (+m11 * m24 * m32\n - m11 * m22 * m34\n - m14 * m21 * m32\n + m12 * m21 * m34\n + m14 * m22 * m31\n - m12 * m24 * m31) +\n m44 * (-m13 * m22 * m31\n - m11 * m23 * m32\n + m11 * m22 * m33\n + m13 * m21 * m32\n - m12 * m21 * m33\n + m12 * m23 * m31));\n };\n /**\n * 矩阵转置\n * @returns 转置结果\n */\n Matrix4.prototype.transpose = function () {\n var e = this.elements;\n var t;\n t = e[1];\n e[1] = e[4];\n e[4] = t;\n t = e[2];\n e[2] = e[8];\n e[8] = t;\n t = e[3];\n e[3] = e[12];\n e[12] = t;\n //\n t = e[6];\n e[6] = e[9];\n e[9] = t;\n t = e[7];\n e[7] = e[13];\n e[13] = t;\n t = e[11];\n e[11] = e[14];\n e[14] = t;\n return this;\n };\n /**\n * 矩阵求逆\n * @returns 逆矩阵\n */\n Matrix4.prototype.invert = function () {\n // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n var e = this.elements;\n var m11 = e[0], m21 = e[1], m31 = e[2], m41 = e[3];\n var m12 = e[4], m22 = e[5], m32 = e[6], m42 = e[7];\n var m13 = e[8], m23 = e[9], m33 = e[10], m43 = e[11];\n var m14 = e[12], m24 = e[13], m34 = e[14], m44 = e[15];\n var t11 = m23 * m34 * m42 - m24 * m33 * m42 + m24 * m32 * m43 - m22 * m34 * m43 - m23 * m32 * m44 + m22 * m33 * m44;\n var t12 = m14 * m33 * m42 - m13 * m34 * m42 - m14 * m32 * m43 + m12 * m34 * m43 + m13 * m32 * m44 - m12 * m33 * m44;\n var t13 = m13 * m24 * m42 - m14 * m23 * m42 + m14 * m22 * m43 - m12 * m24 * m43 - m13 * m22 * m44 + m12 * m23 * m44;\n var t14 = m14 * m23 * m32 - m13 * m24 * m32 - m14 * m22 * m33 + m12 * m24 * m33 + m13 * m22 * m34 - m12 * m23 * m34;\n var det = m11 * t11 + m21 * t12 + m31 * t13 + m41 * t14;\n if (det === 0) {\n return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n var detInv = 1 / det;\n e[0] = t11 * detInv;\n e[1] = (m24 * m33 * m41 - m23 * m34 * m41 - m24 * m31 * m43 + m21 * m34 * m43 + m23 * m31 * m44 - m21 * m33 * m44) * detInv;\n e[2] = (m22 * m34 * m41 - m24 * m32 * m41 + m24 * m31 * m42 - m21 * m34 * m42 - m22 * m31 * m44 + m21 * m32 * m44) * detInv;\n e[3] = (m23 * m32 * m41 - m22 * m33 * m41 - m23 * m31 * m42 + m21 * m33 * m42 + m22 * m31 * m43 - m21 * m32 * m43) * detInv;\n e[4] = t12 * detInv;\n e[5] = (m13 * m34 * m41 - m14 * m33 * m41 + m14 * m31 * m43 - m11 * m34 * m43 - m13 * m31 * m44 + m11 * m33 * m44) * detInv;\n e[6] = (m14 * m32 * m41 - m12 * m34 * m41 - m14 * m31 * m42 + m11 * m34 * m42 + m12 * m31 * m44 - m11 * m32 * m44) * detInv;\n e[7] = (m12 * m33 * m41 - m13 * m32 * m41 + m13 * m31 * m42 - m11 * m33 * m42 - m12 * m31 * m43 + m11 * m32 * m43) * detInv;\n e[8] = t13 * detInv;\n e[9] = (m14 * m23 * m41 - m13 * m24 * m41 - m14 * m21 * m43 + m11 * m24 * m43 + m13 * m21 * m44 - m11 * m23 * m44) * detInv;\n e[10] = (m12 * m24 * m41 - m14 * m22 * m41 + m14 * m21 * m42 - m11 * m24 * m42 - m12 * m21 * m44 + m11 * m22 * m44) * detInv;\n e[11] = (m13 * m22 * m41 - m12 * m23 * m41 - m13 * m21 * m42 + m11 * m23 * m42 + m12 * m21 * m43 - m11 * m22 * m43) * detInv;\n e[12] = t14 * detInv;\n e[13] = (m13 * m24 * m31 - m14 * m23 * m31 + m14 * m21 * m33 - m11 * m24 * m33 - m13 * m21 * m34 + m11 * m23 * m34) * detInv;\n e[14] = (m14 * m22 * m31 - m12 * m24 * m31 - m14 * m21 * m32 + m11 * m24 * m32 + m12 * m21 * m34 - m11 * m22 * m34) * detInv;\n e[15] = (m12 * m23 * m31 - m13 * m22 * m31 + m13 * m21 * m32 - m11 * m23 * m32 - m12 * m21 * m33 + m11 * m22 * m33) * detInv;\n return this;\n };\n /**\n * 提取基轴\n * @param xAxis - 提取的 x 轴\n * @param yAxis - 提取的 y 轴\n * @param zAxis - 提取的 z 轴\n * @returns\n */\n Matrix4.prototype.extractBasis = function (xAxis, yAxis, zAxis) {\n var te = this.elements;\n xAxis.set(te[0], te[1], te[2]);\n yAxis.set(te[4], te[5], te[6]);\n zAxis.set(te[8], te[9], te[10]);\n return this;\n };\n /**\n * 根据基础信息组装矩阵\n * @param translation - 位置信息\n * @param rotation - 旋转信息\n * @param scale - 缩放信息\n * @param [anchor] - 锚点信息\n * @returns 矩阵\n */\n Matrix4.prototype.compose = function (translation, rotation, scale, anchor) {\n if (anchor === void 0) { anchor = Vector3.ZERO; }\n var te = this.elements;\n var x = rotation.x, y = rotation.y, z = rotation.z, w = rotation.w;\n var l = -anchor.x;\n var m = -anchor.y;\n var n = -anchor.z;\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = scale.x, sy = scale.y, sz = scale.z;\n te[0] = (1 - (yy + zz)) * sx;\n te[1] = (xy + wz) * sx;\n te[2] = (xz - wy) * sx;\n te[3] = 0;\n te[4] = (xy - wz) * sy;\n te[5] = (1 - (xx + zz)) * sy;\n te[6] = (yz + wx) * sy;\n te[7] = 0;\n te[8] = (xz + wy) * sz;\n te[9] = (yz - wx) * sz;\n te[10] = (1 - (xx + yy)) * sz;\n te[11] = 0;\n te[12] = l * te[0] + m * te[4] + n * te[8] - l + translation.x;\n te[13] = l * te[1] + m * te[5] + n * te[9] - m + translation.y;\n te[14] = l * te[2] + m * te[6] + n * te[10] - n + translation.z;\n return this;\n };\n /**\n * 矩阵拆分为基础信息\n * @param translation - 位置信息\n * @param rotation - 旋转信息\n * @param scale - 缩放信息\n * @returns 矩阵\n */\n Matrix4.prototype.decompose = function (translation, rotation, scale) {\n var v = Matrix4.tempVec0;\n var te = this.elements;\n var sx = v.set(te[0], te[1], te[2]).length();\n var sy = v.set(te[4], te[5], te[6]).length();\n var sz = v.set(te[8], te[9], te[10]).length();\n // if determine is negative, we need to invert one scale\n var det = this.determinant();\n if (det < 0) {\n sx = -sx;\n }\n translation.x = te[12];\n translation.y = te[13];\n translation.z = te[14];\n // scale the rotation part\n var m = Matrix4.tempMat0;\n m.copyFrom(this);\n var invSX = 1 / sx;\n var invSY = 1 / sy;\n var invSZ = 1 / sz;\n m.elements[0] *= invSX;\n m.elements[1] *= invSX;\n m.elements[2] *= invSX;\n m.elements[4] *= invSY;\n m.elements[5] *= invSY;\n m.elements[6] *= invSY;\n m.elements[8] *= invSZ;\n m.elements[9] *= invSZ;\n m.elements[10] *= invSZ;\n rotation.setFromRotationMatrix(m);\n scale.x = sx;\n scale.y = sy;\n scale.z = sz;\n return this;\n };\n Matrix4.prototype.getTranslation = function (translation) {\n var te = this.elements;\n return translation.set(te[12], te[13], te[14]);\n };\n Matrix4.prototype.getScale = function (scale) {\n var te = this.elements;\n return scale.set(Math.hypot(te[0], te[1], te[2]), Math.hypot(te[4], te[5], te[6]), Math.hypot(te[8], te[9], te[10]));\n };\n /**\n * 获得矩阵分解的结果\n * @returns 分解的结果\n */\n Matrix4.prototype.getTransform = function () {\n var translation = new Vector3();\n var rotation = new Quaternion();\n var scale = new Vector3();\n this.decompose(translation, rotation, scale);\n return { translation: translation, rotation: rotation, scale: scale };\n };\n /**\n * 根据视窗信息设置正交相机投影矩阵\n * @param left - 视窗左平面位置\n * @param right - 视窗右平面位置\n * @param top - 视窗上平面位置\n * @param bottom - 视窗下平面位置\n * @param near - 视窗近平面位置\n * @param far - 视窗远平面位置\n * @returns 矩阵\n */\n Matrix4.prototype.orthographic = function (left, right, top, bottom, near, far) {\n var a = 1.0 / (right - left);\n var b = 1.0 / (top - bottom);\n var c = 1.0 / (far - near);\n var tx = -(right + left) * a;\n var ty = -(top + bottom) * b;\n var tz = -(far + near) * c;\n a *= 2.0;\n b *= 2.0;\n c *= -2.0;\n var te = this.elements;\n te[0] = a;\n te[1] = 0.0;\n te[2] = 0.0;\n te[3] = 0.0;\n //\n te[4] = 0.0;\n te[5] = b;\n te[6] = 0.0;\n te[7] = 0.0;\n //\n te[8] = 0.0;\n te[9] = 0.0;\n te[10] = c;\n te[11] = 0.0;\n //\n te[12] = tx;\n te[13] = ty;\n te[14] = tz;\n te[15] = 1.0;\n return this;\n };\n /**\n * 通过透视相机基础参数设置投影矩阵\n * @param fov - 视角(弧度)\n * @param aspect - 视窗比例\n * @param near - 近平面\n * @param far - 远平面\n * @param [reverse] - 视锥体长宽反转(3D这里反了?)\n * @returns 投影矩阵\n */\n Matrix4.prototype.perspective = function (fov, aspect, near, far, reverse) {\n var f = 1.0 / Math.tan(fov * 0.5);\n var nf = 1 / (near - far);\n var te = this.elements;\n te[0] = reverse ? f : f / aspect;\n te[1] = 0;\n te[2] = 0;\n te[3] = 0;\n //\n te[4] = 0;\n te[5] = reverse ? f * aspect : f;\n te[6] = 0;\n te[7] = 0;\n //\n te[8] = 0;\n te[9] = 0;\n te[10] = (far + near) * nf;\n te[11] = -1;\n //\n te[12] = 0;\n te[13] = 0;\n te[14] = 2 * far * near * nf;\n te[15] = 0;\n if (far === null || far === Infinity) {\n te[10] = -1;\n te[14] = -2 * near;\n }\n return this;\n };\n /**\n * 对点进行投影变换\n * @param v - 输入点\n * @param [out] - 输出点,如果没有就覆盖输入的数据\n * @returns 投影后的点\n */\n Matrix4.prototype.projectPoint = function (v, out) {\n var x = v.x, y = v.y, z = v.z;\n var e = this.elements;\n var res = out !== null && out !== void 0 ? out : v;\n res.x = e[0] * x + e[4] * y + e[8] * z + e[12];\n res.y = e[1] * x + e[5] * y + e[9] * z + e[13];\n res.z = e[2] * x + e[6] * y + e[10] * z + e[14];\n var w = e[3] * x + e[7] * y + e[11] * z + e[15];\n return res.multiply(1 / w);\n };\n /**\n * 对点进行矩阵变换\n * @param v - 输入点\n * @param [out] - 输出点,如果没有就覆盖输入的数据\n * @returns 变换后的点\n */\n Matrix4.prototype.transformPoint = function (v, out) {\n var x = v.x, y = v.y, z = v.z;\n var e = this.elements;\n var res = out !== null && out !== void 0 ? out : v;\n res.x = e[0] * x + e[4] * y + e[8] * z + e[12];\n res.y = e[1] * x + e[5] * y + e[9] * z + e[13];\n res.z = e[2] * x + e[6] * y + e[10] * z + e[14];\n return res;\n };\n /**\n * 对法向量进行矩阵变换\n * @param v - 输入法向量\n * @param [out] - 输出法向量,如果没有就覆盖输入的数据\n * @returns 变换后的法向量\n */\n Matrix4.prototype.transformNormal = function (v, out) {\n var x = v.x, y = v.y, z = v.z;\n var e = this.elements;\n var res = out !== null && out !== void 0 ? out : v;\n res.x = e[0] * x + e[4] * y + e[8] * z;\n res.y = e[1] * x + e[5] * y + e[9] * z;\n res.z = e[2] * x + e[6] * y + e[10] * z;\n return res.normalize();\n };\n /**\n * 对四维向量进行矩阵变换\n * @param v - 输入向量\n * @param [out] - 输出向量,如果没有就覆盖输入的数据\n * @returns 变换后向量\n */\n Matrix4.prototype.transformVector4 = function (v, out) {\n var x = v.x, y = v.y, z = v.z, w = v.w;\n var e = this.elements;\n var res = out !== null && out !== void 0 ? out : v;\n res.x = e[0] * x + e[4] * y + e[8] * z + e[12] * w;\n res.y = e[1] * x + e[5] * y + e[9] * z + e[13] * w;\n res.z = e[2] * x + e[6] * y + e[10] * z + e[14] * w;\n res.w = e[3] * x + e[7] * y + e[11] * z + e[15] * w;\n return res;\n };\n /**\n * 矩阵判等\n * @param matrix - 矩阵\n * @returns 判等结果\n */\n Matrix4.prototype.equals = function (matrix) {\n var te = this.elements;\n var me = matrix.elements;\n for (var i = 0; i < 16; i++) {\n if (!isEqual(te[i], me[i])) {\n return false;\n }\n }\n return true;\n };\n /**\n * 矩阵转数组\n * @returns\n */\n Matrix4.prototype.toArray = function () {\n return __spreadArray([], __read(this.elements), false);\n };\n Matrix4.prototype.fill = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n var te = this.elements;\n array[offset] = te[0];\n array[offset + 1] = te[1];\n array[offset + 2] = te[2];\n array[offset + 3] = te[3];\n array[offset + 4] = te[4];\n array[offset + 5] = te[5];\n array[offset + 6] = te[6];\n array[offset + 7] = te[7];\n array[offset + 8] = te[8];\n array[offset + 9] = te[9];\n array[offset + 10] = te[10];\n array[offset + 11] = te[11];\n array[offset + 12] = te[12];\n array[offset + 13] = te[13];\n array[offset + 14] = te[14];\n array[offset + 15] = te[15];\n };\n /**\n * 创建单位阵\n * @returns 单位矩阵\n */\n Matrix4.fromIdentity = function () {\n return new Matrix4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n };\n /**\n * 创建相机矩阵\n * @param eye - 相机位置\n * @param target - 目标位置\n * @param up - 相机方向\n * @returns 矩阵\n */\n Matrix4.fromLookAt = function (eye, target, up) {\n return new Matrix4().lookAt(eye, target, up);\n };\n /**\n * 创建投影矩阵\n * @param fov - 视角\n * @param aspect - 视窗比例\n * @param near - 近平面\n * @param far - 远平面\n * @param [reverse] - 视锥体长宽反转\n * @returns 投影矩阵\n */\n Matrix4.fromPerspective = function (fov, aspect, near, far, reverse) {\n return new Matrix4().perspective(fov, aspect, near, far, reverse);\n };\n /**\n * 通过四个列向量创建矩阵\n * @param c1 - 第一列\n * @param c2 - 第二列\n * @param c3 - 第三列\n * @param c4 - 第四列\n * @returns\n */\n Matrix4.fromColumnVectors = function (c1, c2, c3, c4) {\n return new Matrix4().setFromColumnVectors(c1, c2, c3, c4);\n };\n /**\n * 通过三阶矩阵创建矩阵\n * @param m - 三阶矩阵\n * @returns 创建的矩阵\n */\n Matrix4.fromMatrix3 = function (m) {\n return new Matrix4().setFromMatrix3(m);\n };\n /**\n * 通过数组创建矩阵\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns 矩阵\n */\n Matrix4.fromArray = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n return new Matrix4().setFromArray(array, offset);\n };\n /**\n * 通过缩放创建矩阵\n * @param x - x 缩放\n * @param y - y 缩放\n * @param z - z 缩放\n * @returns 缩放结果\n */\n Matrix4.fromScale = function (x, y, z) {\n return new Matrix4().setFromScale(x, y, z);\n };\n /**\n * 通过平移创建矩阵\n * @param x - x 平移\n * @param y - y 平移\n * @param z - z 平移\n * @returns 平移结果\n */\n Matrix4.fromTranslation = function (x, y, z) {\n return new Matrix4().setFromTranslation(x, y, z);\n };\n /**\n * 通过 x 轴旋转创建矩阵\n * @param theta - x 轴旋转弧度\n * @returns 矩阵\n */\n Matrix4.fromRotationX = function (theta) {\n return new Matrix4().setFromRotationX(theta);\n };\n /**\n * 通过 y 轴旋转创建矩阵\n * @param theta - y 轴旋转弧度\n * @returns 矩阵\n */\n Matrix4.fromRotationY = function (theta) {\n return new Matrix4().setFromRotationY(theta);\n };\n /**\n * 通过 z 轴旋转创建矩阵\n * @param theta - z 轴旋转弧度\n * @returns\n */\n Matrix4.fromRotationZ = function (theta) {\n return new Matrix4().setFromRotationZ(theta);\n };\n /**\n * 通过旋转轴与旋转弧度创建矩阵\n * @param axis - 旋转轴\n * @param angle - 旋转弧度\n * @returns\n */\n Matrix4.fromRotationAxis = function (axis, angle) {\n return new Matrix4().setFromRotationAxis(axis, angle);\n };\n /**\n * 通过欧拉角创建矩阵\n * @param euler - 欧拉角\n * @returns\n */\n Matrix4.fromEuler = function (euler) {\n return new Matrix4().setFromEuler(euler);\n };\n /**\n * 通过四元数创建矩阵\n * @param quat - 四元数\n * @returns\n */\n Matrix4.fromQuaternion = function (quat) {\n return new Matrix4().setFromQuaternion(quat);\n };\n /**\n * 通过倾斜创建矩阵\n * @param x - x 方向倾斜分量\n * @param y - y 方向倾斜分量\n * @param z - z 方向倾斜分量\n * @returns 倾斜矩阵\n */\n Matrix4.fromShear = function (x, y, z) {\n return new Matrix4().setFromShear(x, y, z);\n };\n /**\n * 通过基轴创建矩阵\n * @param xAxis - x 轴\n * @param yAxis - y 轴\n * @param zAxis - z 轴\n * @returns\n */\n Matrix4.fromBasis = function (xAxis, yAxis, zAxis) {\n return new Matrix4().setFromBasis(xAxis, yAxis, zAxis);\n };\n /**\n * 通过行优先数据设置矩阵\n * @param m11 - 第 1 行,第 1 列\n * @param m12 - 第 1 行,第 2 列\n * @param m13 - 第 1 行,第 3 列\n * @param m14 - 第 1 行,第 4 列\n * @param m21 - 第 2 行,第 1 列\n * @param m22 - 第 2 行,第 2 列\n * @param m23 - 第 2 行,第 3 列\n * @param m24 - 第 2 行,第 4 列\n * @param m31 - 第 3 行,第 1 列\n * @param m32 - 第 3 行,第 2 列\n * @param m33 - 第 3 行,第 3 列\n * @param m34 - 第 3 行,第 4 列\n * @param m41 - 第 4 行,第 1 列\n * @param m42 - 第 4 行,第 2 列\n * @param m43 - 第 4 行,第 3 列\n * @param m44 - 第 4 行,第 4 列\n * @returns\n */\n Matrix4.fromRowMajorData = function (m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44) {\n return new Matrix4(m11, m21, m31, m41, m12, m22, m32, m42, m13, m23, m33, m43, m14, m24, m34, m44);\n };\n Matrix4.IDENTITY = new Matrix4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n Matrix4.ZERO = new Matrix4(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n Matrix4.tempVec0 = new Vector3();\n Matrix4.tempVec1 = new Vector3();\n Matrix4.tempVec2 = new Vector3();\n Matrix4.tempMat0 = new Matrix4();\n return Matrix4;\n}());\n","import { NumberEpsilon } from './utils';\nimport { Vector3 } from './vector3';\n/**\n * 四维向量\n */\nexport var Vector4 = /** @class */ (function () {\n /**\n * 构造函数\n * @param [x=0] - x 轴分量\n * @param [y=0] - y 轴分量\n * @param [z=0] - z 轴分量\n * @param [w=1] - w 轴分量\n */\n function Vector4(x, y, z, w) {\n if (x === void 0) { x = 0; }\n if (y === void 0) { y = 0; }\n if (z === void 0) { z = 0; }\n if (w === void 0) { w = 0; }\n this.x = x;\n this.y = y;\n this.z = z;\n this.w = w;\n }\n /**\n * 设置向量\n * @param x - x 轴分量\n * @param y - y 轴分量\n * @param z - z 轴分量\n * @param w - w 轴分量\n * @returns\n */\n Vector4.prototype.set = function (x, y, z, w) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.w = w;\n return this;\n };\n /**\n * 设置零向量\n * @returns 向量\n */\n Vector4.prototype.setZero = function () {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n this.w = 0;\n return this;\n };\n /**\n * 通过标量数值设置向量\n * @param num - 数值\n * @returns 向量\n */\n Vector4.prototype.setFromNumber = function (num) {\n this.x = num;\n this.y = num;\n this.z = num;\n this.w = num;\n return this;\n };\n /**\n * 通过数组创建向量\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns 向量\n */\n Vector4.prototype.setFromArray = function (array, offset) {\n var _a, _b, _c, _d;\n if (offset === void 0) { offset = 0; }\n this.x = (_a = array[offset]) !== null && _a !== void 0 ? _a : 0;\n this.y = (_b = array[offset + 1]) !== null && _b !== void 0 ? _b : 0;\n this.z = (_c = array[offset + 2]) !== null && _c !== void 0 ? _c : 0;\n this.w = (_d = array[offset + 3]) !== null && _d !== void 0 ? _d : 0;\n return this;\n };\n /**\n * 拷贝向量\n * @param v - 复制对象\n * @returns 拷贝结果\n */\n Vector4.prototype.copyFrom = function (v) {\n this.x = v.x;\n this.y = v.y;\n this.z = v.z;\n this.w = v.w;\n return this;\n };\n /**\n * 克隆向量\n * @returns 克隆结果\n */\n Vector4.prototype.clone = function () {\n return new Vector4(this.x, this.y, this.z, this.w);\n };\n /**\n * 根据下标设置向量分量\n * @param index - 下标值\n * @param value - 分量值\n * @returns 向量\n */\n Vector4.prototype.setElement = function (index, value) {\n switch (index) {\n case 0:\n this.x = value;\n break;\n case 1:\n this.y = value;\n break;\n case 2:\n this.z = value;\n break;\n case 3:\n this.w = value;\n break;\n default: console.error('index is out of range: ' + index);\n }\n return this;\n };\n /**\n * 根据下标获取向量分量\n * @param index - 下标\n * @returns 分量值\n */\n Vector4.prototype.getElement = function (index) {\n switch (index) {\n case 0: return this.x;\n case 1: return this.y;\n case 2: return this.z;\n case 3: return this.w;\n default: console.error('index is out of range: ' + index);\n }\n return 0;\n };\n /**\n * 向量相加\n * @param right - 相加对象,向量 | 数字\n * @returns 相加结果\n */\n Vector4.prototype.add = function (right) {\n if (typeof right === 'number') {\n this.x += right;\n this.y += right;\n this.z += right;\n this.w += right;\n }\n else if (right instanceof Array) {\n this.x += right[0];\n this.y += right[1];\n this.z += right[2];\n this.w += right[3];\n }\n else {\n this.x += right.x;\n this.y += right.y;\n this.z += right.z;\n this.w += right.w;\n }\n return this;\n };\n /**\n * 向量相加\n * @param left - 向量\n * @param right - 向量\n * @returns 求和结果\n */\n Vector4.prototype.addVectors = function (left, right) {\n this.x = left.x + right.x;\n this.y = left.y + right.y;\n this.z = left.z + right.z;\n this.w = left.w + right.w;\n return this;\n };\n /**\n * 向量比例缩放后相加\n * @param right - 向量\n * @param s - 比例\n * @returns 求和结果\n */\n Vector4.prototype.addScaledVector = function (right, s) {\n this.x += right.x * s;\n this.y += right.y * s;\n this.z += right.z * s;\n this.w += right.w * s;\n return this;\n };\n /**\n * 向量相减\n * @param right - 相减对象,向量 | 数字\n * @returns 相减结果\n */\n Vector4.prototype.subtract = function (right) {\n if (typeof right === 'number') {\n this.x -= right;\n this.y -= right;\n this.z -= right;\n this.w -= right;\n }\n else if (right instanceof Array) {\n this.x -= right[0];\n this.y -= right[1];\n this.z -= right[2];\n this.w -= right[3];\n }\n else {\n this.x -= right.x;\n this.y -= right.y;\n this.z -= right.z;\n this.w -= right.w;\n }\n return this;\n };\n /**\n * 向量相减\n * @param left - 向量\n * @param right - 向量\n * @returns 向量\n */\n Vector4.prototype.subtractVectors = function (left, right) {\n this.x = left.x - right.x;\n this.y = left.y - right.y;\n this.z = left.z - right.z;\n this.w = left.w - right.w;\n return this;\n };\n /**\n * 向量相乘\n * @param right - 相乘对象,对象 | 数字\n * @returns 向量\n */\n Vector4.prototype.multiply = function (right) {\n if (typeof right === 'number') {\n this.x *= right;\n this.y *= right;\n this.z *= right;\n this.w *= right;\n }\n else if (right instanceof Array) {\n this.x *= right[0];\n this.y *= right[1];\n this.z *= right[2];\n this.w *= right[3];\n }\n else {\n this.x *= right.x;\n this.y *= right.y;\n this.z *= right.z;\n this.w *= right.w;\n }\n return this;\n };\n /**\n * 向量相乘\n * @param left - 向量\n * @param right - 向量\n * @returns 向量\n */\n Vector4.prototype.multiplyVectors = function (left, right) {\n this.x = left.x * right.x;\n this.y = left.y * right.y;\n this.z = left.z * right.z;\n this.w = left.w * right.w;\n return this;\n };\n /**\n * 向量相除\n * @param right - 相除对象,对象 | 数字\n * @returns 向量\n */\n Vector4.prototype.divide = function (right) {\n if (typeof right === 'number') {\n this.x /= right;\n this.y /= right;\n this.z /= right;\n this.w /= right;\n }\n else if (right instanceof Array) {\n this.x /= right[0];\n this.y /= right[1];\n this.z /= right[2];\n this.w /= right[3];\n }\n else {\n this.x /= right.x;\n this.y /= right.y;\n this.z /= right.z;\n this.w /= right.w;\n }\n return this;\n };\n /**\n * 向量缩放\n * @param v - 数字\n * @returns 缩放结果\n */\n Vector4.prototype.scale = function (v) {\n this.x *= v;\n this.y *= v;\n this.z *= v;\n this.w *= v;\n return this;\n };\n /**\n * 分量求和\n * @returns 求和结果\n */\n Vector4.prototype.sum = function () {\n return this.x + this.y + this.z + this.w;\n };\n /**\n * 向量求最小值\n * @param v - 向量或数值\n * @returns 最小值\n */\n Vector4.prototype.min = function (v) {\n if (typeof v === 'number') {\n this.x = Math.min(this.x, v);\n this.y = Math.min(this.y, v);\n this.z = Math.min(this.z, v);\n this.w = Math.min(this.w, v);\n }\n else {\n this.x = Math.min(this.x, v.x);\n this.y = Math.min(this.y, v.y);\n this.z = Math.min(this.z, v.z);\n this.w = Math.min(this.w, v.w);\n }\n return this;\n };\n /**\n * 向量求最大值\n * @param v - 向量或数值\n * @returns 最大值\n */\n Vector4.prototype.max = function (v) {\n if (typeof v === 'number') {\n this.x = Math.max(this.x, v);\n this.y = Math.max(this.y, v);\n this.z = Math.max(this.z, v);\n this.w = Math.max(this.w, v);\n }\n else {\n this.x = Math.max(this.x, v.x);\n this.y = Math.max(this.y, v.y);\n this.z = Math.max(this.z, v.z);\n this.w = Math.max(this.w, v.w);\n }\n return this;\n };\n /**\n * 向量阈值约束\n * @param min - 最小值\n * @param max - 最大值\n * @returns 向量\n */\n Vector4.prototype.clamp = function (min, max) {\n return this.max(min).min(max);\n };\n /**\n * 向量向下取整\n * @returns 取整结果\n */\n Vector4.prototype.floor = function () {\n this.x = Math.floor(this.x);\n this.y = Math.floor(this.y);\n this.z = Math.floor(this.z);\n this.w = Math.floor(this.w);\n return this;\n };\n /**\n * 向量向上取整\n * @returns 取整结果\n */\n Vector4.prototype.ceil = function () {\n this.x = Math.ceil(this.x);\n this.y = Math.ceil(this.y);\n this.z = Math.ceil(this.z);\n this.w = Math.ceil(this.w);\n return this;\n };\n /**\n * 向量四舍五入\n * @returns 求值结果\n */\n Vector4.prototype.round = function () {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n this.z = Math.round(this.z);\n this.w = Math.round(this.w);\n return this;\n };\n /**\n * 向量取绝对值\n * @returns 向量\n */\n Vector4.prototype.abs = function () {\n this.x = Math.abs(this.x);\n this.y = Math.abs(this.y);\n this.z = Math.abs(this.z);\n this.w = Math.abs(this.w);\n return this;\n };\n /**\n * 向量取反\n * @returns 取反结果\n */\n Vector4.prototype.negate = function () {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n this.w = -this.w;\n return this;\n };\n /**\n * 向量长度平方\n * @returns 长度平方\n */\n Vector4.prototype.lengthSquared = function () {\n return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n };\n /**\n * 向量长度\n * @returns 长度\n */\n Vector4.prototype.length = function () {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);\n };\n /**\n * 向量归一化\n * @returns 归一化结果\n */\n Vector4.prototype.normalize = function () {\n return this.divide(this.length() || 1);\n };\n /**\n * 设置向量长度\n * @param length - 长度\n * @returns 向量\n */\n Vector4.prototype.setLength = function (length) {\n return this.normalize().multiply(length);\n };\n /**\n * 向量求线性插值\n * @param v - 向量\n * @param alpha - 插值比例\n * @returns 插值结果\n */\n Vector4.prototype.lerp = function (v, alpha) {\n this.x += (v.x - this.x) * alpha;\n this.y += (v.y - this.y) * alpha;\n this.z += (v.z - this.z) * alpha;\n this.w += (v.w - this.w) * alpha;\n return this;\n };\n /**\n * 两向量求线性插值\n * @param v1 - 第一个向量\n * @param v2 - 第二个向量\n * @param alpha - 插值比例\n * @returns 插值结果\n */\n Vector4.prototype.lerpVectors = function (v1, v2, alpha) {\n this.x = v1.x + (v2.x - v1.x) * alpha;\n this.y = v1.y + (v2.y - v1.y) * alpha;\n this.z = v1.z + (v2.z - v1.z) * alpha;\n this.w = v1.w + (v2.w - v1.w) * alpha;\n return this;\n };\n /**\n * 向量求点积\n * @param v - 向量\n * @returns 点积结果\n */\n Vector4.prototype.dot = function (v) {\n return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n };\n /**\n * 向量判等\n * @param v - 向量\n * @returns 判等结果\n */\n Vector4.prototype.equals = function (v) {\n return v.x === this.x && v.y === this.y && v.z === this.z && v.w === this.w;\n };\n /**\n * 是否零向量\n * @returns 是否零向量\n */\n Vector4.prototype.isZero = function () {\n var _a;\n var eps = NumberEpsilon;\n var x = (_a = this, _a.x), y = _a.y, z = _a.z, w = _a.w;\n return Math.abs(x) <= eps && Math.abs(y) <= eps && Math.abs(z) <= eps && Math.abs(w) <= eps;\n };\n /**\n * 向量转数组\n * @returns 数组\n */\n Vector4.prototype.toArray = function () {\n return [this.x, this.y, this.z, this.w];\n };\n Vector4.prototype.toVector3 = function () {\n return new Vector3(this.x, this.y, this.z);\n };\n Vector4.prototype.fill = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n array[offset] = this.x;\n array[offset + 1] = this.y;\n array[offset + 2] = this.z;\n array[offset + 3] = this.w;\n };\n /**\n * 生成随机向量\n * @returns 向量\n */\n Vector4.prototype.random = function () {\n this.x = Math.random();\n this.y = Math.random();\n this.z = Math.random();\n this.w = Math.random();\n return this;\n };\n /**\n * 变换矩阵作用于向量\n * @param m - 变换矩阵\n * @param [out] - 输出结果,如果没有设置就直接覆盖当前值\n * @returns 向量\n */\n Vector4.prototype.applyMatrix = function (m, out) {\n return m.transformVector4(this, out);\n };\n /**\n * 通过标量数值创建向量\n * @param num - 数值\n * @returns 向量\n */\n Vector4.fromNumber = function (num) {\n return new Vector4().setFromNumber(num);\n };\n /**\n * 通过数组创建向量\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns 向量\n */\n Vector4.fromArray = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n return new Vector4().setFromArray(array, offset);\n };\n /**\n * 四维向量的常量\n */\n Vector4.ONE = new Vector4(1.0, 1.0, 1.0, 1.0);\n Vector4.ZERO = new Vector4(0.0, 0.0, 0.0, 0.0);\n return Vector4;\n}());\n","import { Vector3 } from './vector3';\n/**\n * 光线类\n */\nexport var Ray = /** @class */ (function () {\n /**\n * 构造函数\n * @param [origin] - 原点,默认是 (0, 0, 0)\n * @param [direction] - 方向,默认是 (1, 0, 0)\n */\n function Ray(origin, direction) {\n if (origin === void 0) { origin = Vector3.ZERO; }\n if (direction === void 0) { direction = Vector3.X; }\n /**\n * 光线的原点\n */\n this.origin = new Vector3();\n /**\n * 光线的方向\n */\n this.direction = new Vector3();\n // 注意这里必须拷贝\n this.origin.copyFrom(origin);\n this.direction.copyFrom(direction).normalize();\n }\n /**\n * 光线设置\n * @param origin - 原点\n * @param direction - 方向\n * @returns\n */\n Ray.prototype.set = function (origin, direction) {\n this.origin.copyFrom(origin);\n this.direction.copyFrom(direction).normalize();\n return this;\n };\n /**\n * 光线克隆\n * @returns 克隆结果\n */\n Ray.prototype.clone = function () {\n return new Ray(this.origin, this.direction);\n };\n /**\n * 光线拷贝\n * @param ray - 要拷贝对象\n * @returns 拷贝结果\n */\n Ray.prototype.copyFrom = function (ray) {\n return this.set(ray.origin, ray.direction);\n };\n /**\n * 根据t计算新的光线原点\n * @param t - 光线的系数 t\n * @returns\n */\n Ray.prototype.recast = function (t) {\n this.origin.copyFrom(this.at(t, Ray.tempVec0));\n return this;\n };\n /**\n * 根据t值计算光线上的点\n * @param t - 光线的系数 t\n * @param [out] - 计算的点\n * @returns\n */\n Ray.prototype.at = function (t, out) {\n var ret = out ? out : new Vector3();\n ret.copyFrom(this.origin);\n return ret.addScaledVector(this.direction, t);\n };\n /**\n * 光线相等判断\n * @param other - 其他对象\n * @returns\n */\n Ray.prototype.equals = function (other) {\n return this.origin.equals(other.origin) && this.direction.equals(other.direction);\n };\n /**\n * 根据矩阵对光线进行变换\n * @param m - 变换矩阵\n * @returns\n */\n Ray.prototype.applyMatrix = function (m) {\n this.origin.applyProjectionMatrix(m);\n this.direction.applyNormalMatrix(m);\n return this;\n };\n /**\n * 光线和包围盒求交\n * @param box - 类包围盒对象\n * @param [out] - 交点\n * @returns\n */\n Ray.prototype.intersectBox = function (box, out) {\n var _a, _b, _c, _d;\n var ox = (_a = this.origin, _a.x), oy = _a.y, oz = _a.z;\n var dx = (_b = this.direction, _b.x), dy = _b.y, dz = _b.z;\n var bxmin = (_c = box.min, _c.x), bymin = _c.y, bzmin = _c.z;\n var bxmax = (_d = box.max, _d.x), bymax = _d.y, bzmax = _d.z;\n var tmin, tmax, tymin, tymax, tzmin, tzmax;\n var invdirx = 1 / dx;\n var invdiry = 1 / dy;\n var invdirz = 1 / dz;\n if (invdirx >= 0) {\n tmin = (bxmin - ox) * invdirx;\n tmax = (bxmax - ox) * invdirx;\n }\n else {\n tmin = (bxmax - ox) * invdirx;\n tmax = (bxmin - ox) * invdirx;\n }\n if (invdiry >= 0) {\n tymin = (bymin - oy) * invdiry;\n tymax = (bymax - oy) * invdiry;\n }\n else {\n tymin = (bymax - oy) * invdiry;\n tymax = (bymin - oy) * invdiry;\n }\n if ((tmin > tymax) || (tymin > tmax)) {\n return;\n }\n if (tymin > tmin || tmin !== tmin) {\n tmin = tymin;\n }\n if (tymax < tmax || tmax !== tmax) {\n tmax = tymax;\n }\n if (tymin > tmin || tmin !== tmin) {\n tmin = tymin;\n }\n if (tymax < tmax || tmax !== tmax) {\n tmax = tymax;\n }\n if (invdirz >= 0) {\n tzmin = (bzmin - oz) * invdirz;\n tzmax = (bzmax - oz) * invdirz;\n }\n else {\n tzmin = (bzmax - oz) * invdirz;\n tzmax = (bzmin - oz) * invdirz;\n }\n if ((tmin > tzmax) || (tzmin > tmax)) {\n return;\n }\n if (tzmin > tmin || tmin !== tmin) {\n tmin = tzmin;\n }\n if (tzmax < tmax || tmax !== tmax) {\n tmax = tzmax;\n }\n if (tmax < 0) {\n return;\n }\n return tmin >= 0 ? this.at(tmin, out) : this.at(tmax, out);\n };\n /**\n * 光线和平面求交\n * @param plane - 类平面对象\n * @param [out] - 交点\n * @returns\n */\n Ray.prototype.intersectPlane = function (plane, out) {\n var normal = plane.normal;\n var distance = plane.distance;\n var denominator = normal.dot(this.direction);\n if (denominator === 0) {\n // line is coplanar, return origin\n var t_1 = normal.dot(this.origin) + distance;\n if (t_1 === 0) {\n var ret = out ? out : new Vector3();\n return ret.copyFrom(this.origin);\n }\n // Null is preferable to undefined since undefined means.... it is undefined\n return;\n }\n var t = -(this.origin.dot(normal) + distance) / denominator;\n // Return if the ray never intersects the plane\n return t >= 0 ? this.at(t, out) : undefined;\n };\n /**\n * 光线和圆求交\n * @param sphere - 类球对象\n * @param [out] - 交点\n * @returns\n */\n Ray.prototype.intersectSphere = function (sphere, out) {\n var center = sphere.center;\n var vector = Ray.tempVec0.subtractVectors(center, this.origin);\n var tca = vector.dot(this.direction);\n var d2 = vector.dot(vector) - tca * tca;\n var radius2 = sphere.radius * sphere.radius;\n if (d2 > radius2) {\n return;\n }\n var thc = Math.sqrt(radius2 - d2);\n // t0 = first intersect point - entrance on front of sphere\n var t0 = tca - thc;\n // t1 = second intersect point - exit point on back of sphere\n var t1 = tca + thc;\n // test to see if t1 is behind the ray - if so, return null\n if (t1 < 0) {\n return;\n }\n // test to see if t0 is behind the ray:\n // if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n // in order to always return an intersect point that is in front of the ray.\n // else t0 is in front of the ray, so return the first collision point scaled by t0\n return t0 >= 0 ? this.at(t0, out) : this.at(t1, out);\n };\n /**\n * 光线和三角形求交\n * @param triangle - 类三角形对象\n * @param [out] - 交点\n * @param [backfaceCulling] - 是否背面剔除\n * @returns\n */\n Ray.prototype.intersectTriangle = function (triangle, out, backfaceCulling) {\n // FIXME: 交换out和backfaceCulling\n // Compute the offset origin, edges, and normal.\n // from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n var a = triangle.p0;\n var b = triangle.p1;\n var c = triangle.p2;\n var edge1 = Ray.tempVec0.subtractVectors(b, a);\n var edge2 = Ray.tempVec1.subtractVectors(c, a);\n var diff = Ray.tempVec2.subtractVectors(this.origin, a);\n var normal = Ray.tempVec3.crossVectors(edge1, edge2);\n // Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n // E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n // |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n // |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n // |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n var DdN = this.direction.dot(normal);\n var sign;\n if (DdN > 0) {\n if (backfaceCulling) {\n return;\n }\n sign = 1;\n }\n else if (DdN < 0) {\n sign = -1;\n DdN = -DdN;\n }\n else {\n return;\n }\n edge2.crossVectors(diff, edge2);\n var DdQxE2 = sign * this.direction.dot(edge2);\n // b1 < 0, no intersection\n if (DdQxE2 < 0) {\n return;\n }\n edge1.cross(diff);\n var DdE1xQ = sign * this.direction.dot(edge1);\n // b2 < 0, no intersection\n if (DdE1xQ < 0) {\n return;\n }\n // b1+b2 > 1, no intersection\n if (DdQxE2 + DdE1xQ > DdN) {\n return;\n }\n // Line intersects triangle, check if ray does.\n var QdN = -sign * diff.dot(normal);\n // t < 0, no intersection\n if (QdN < 0) {\n return;\n }\n // Ray intersects triangle.\n return this.at(QdN / DdN, out);\n };\n Ray.tempVec0 = new Vector3();\n Ray.tempVec1 = new Vector3();\n Ray.tempVec2 = new Vector3();\n Ray.tempVec3 = new Vector3();\n return Ray;\n}());\n","/*!\n * Name: @galacean/effects-specification\n * Description: Galacean Effects JSON Specification\n * Author: Ant Group CO., Ltd.\n * Version: v1.0.1\n */\n\n/*********************************************/\n/* 元素属性参数类型 */\n/*********************************************/\n/**\n * 渲染等级\n */\nvar RenderLevel;\n(function (RenderLevel) {\n RenderLevel[\"S\"] = \"S\";\n RenderLevel[\"APlus\"] = \"A+\";\n RenderLevel[\"A\"] = \"A\";\n RenderLevel[\"BPlus\"] = \"B+\";\n RenderLevel[\"B\"] = \"B\";\n})(RenderLevel || (RenderLevel = {}));\n/**\n * 混合模式\n */\nvar BlendingMode;\n(function (BlendingMode) {\n /**\n * 普通混合模式\n */\n BlendingMode[BlendingMode[\"ALPHA\"] = 0] = \"ALPHA\";\n /**\n * 叠加混合模式\n */\n BlendingMode[BlendingMode[\"ADD\"] = 1] = \"ADD\";\n /**\n * 相乘混合模式\n */\n BlendingMode[BlendingMode[\"MULTIPLY\"] = 2] = \"MULTIPLY\";\n /**\n * 亮度混合模式\n */\n BlendingMode[BlendingMode[\"BRIGHTNESS\"] = 3] = \"BRIGHTNESS\";\n /**\n * 减色混合模式\n */\n BlendingMode[BlendingMode[\"SUBTRACTION\"] = 4] = \"SUBTRACTION\";\n /**\n * 强光混合模式\n */\n BlendingMode[BlendingMode[\"STRONG_LIGHT\"] = 5] = \"STRONG_LIGHT\";\n /**\n * 弱光混合模式\n */\n BlendingMode[BlendingMode[\"WEAK_LIGHT\"] = 6] = \"WEAK_LIGHT\";\n /**\n * 亮度叠加混合模式\n */\n BlendingMode[BlendingMode[\"SUPERPOSITION\"] = 7] = \"SUPERPOSITION\";\n})(BlendingMode || (BlendingMode = {}));\n/**\n * 单双面模式\n */\nvar SideMode;\n(function (SideMode) {\n /**\n * 双面模式\n */\n SideMode[SideMode[\"DOUBLE\"] = 1032] = \"DOUBLE\";\n /**\n * 正面模式\n */\n SideMode[SideMode[\"FRONT\"] = 1028] = \"FRONT\";\n /**\n * 背面模式\n */\n SideMode[SideMode[\"BACK\"] = 1029] = \"BACK\";\n})(SideMode || (SideMode = {}));\n/**\n * 蒙版模式\n */\nvar MaskMode;\n(function (MaskMode) {\n /**\n * 无蒙版\n */\n MaskMode[MaskMode[\"NONE\"] = 0] = \"NONE\";\n /**\n * 蒙版\n */\n MaskMode[MaskMode[\"MASK\"] = 1] = \"MASK\";\n /**\n * 被遮挡\n */\n MaskMode[MaskMode[\"OBSCURED\"] = 2] = \"OBSCURED\";\n /**\n * 被反向遮挡\n */\n MaskMode[MaskMode[\"REVERSE_OBSCURED\"] = 3] = \"REVERSE_OBSCURED\";\n})(MaskMode || (MaskMode = {}));\n/**\n * 发射器形状\n */\nvar ShapeType;\n(function (ShapeType) {\n /**\n * 没有类型\n */\n ShapeType[ShapeType[\"NONE\"] = 0] = \"NONE\";\n /**\n * 圆球\n */\n ShapeType[ShapeType[\"SPHERE\"] = 1] = \"SPHERE\";\n /**\n * 圆锥\n */\n ShapeType[ShapeType[\"CONE\"] = 2] = \"CONE\";\n /**\n * 半球\n */\n ShapeType[ShapeType[\"HEMISPHERE\"] = 3] = \"HEMISPHERE\";\n /**\n * 圆\n */\n ShapeType[ShapeType[\"CIRCLE\"] = 4] = \"CIRCLE\";\n /**\n * 圆环\n */\n ShapeType[ShapeType[\"DONUT\"] = 5] = \"DONUT\";\n /**\n * 矩形\n */\n ShapeType[ShapeType[\"RECTANGLE\"] = 6] = \"RECTANGLE\";\n /**\n * 矩形框\n */\n ShapeType[ShapeType[\"RECTANGLE_EDGE\"] = 7] = \"RECTANGLE_EDGE\";\n /**\n * 直线\n */\n ShapeType[ShapeType[\"EDGE\"] = 8] = \"EDGE\";\n /**\n * 贴图\n */\n ShapeType[ShapeType[\"TEXTURE\"] = 9] = \"TEXTURE\";\n})(ShapeType || (ShapeType = {}));\n/**\n * 插件类型\n */\nvar PluginType;\n(function (PluginType) {\n /**\n * 陀螺仪\n */\n PluginType[PluginType[\"GYROSCOPE\"] = 0] = \"GYROSCOPE\";\n /**\n * Spine\n */\n PluginType[PluginType[\"SPINE\"] = 1] = \"SPINE\";\n})(PluginType || (PluginType = {}));\n/**\n * 交互类型\n */\nvar InteractType;\n(function (InteractType) {\n /**\n * 点击\n */\n InteractType[InteractType[\"CLICK\"] = 0] = \"CLICK\";\n /**\n * 消息\n * 前端收到 onMessageItem 回调\n */\n InteractType[InteractType[\"MESSAGE\"] = 1] = \"MESSAGE\";\n /**\n * 拖拽\n */\n InteractType[InteractType[\"DRAG\"] = 2] = \"DRAG\";\n})(InteractType || (InteractType = {}));\n/**\n * 交互行为\n */\nvar InteractBehavior;\n(function (InteractBehavior) {\n /**\n * 无\n */\n InteractBehavior[InteractBehavior[\"NONE\"] = 0] = \"NONE\";\n /**\n * 通知\n */\n InteractBehavior[InteractBehavior[\"NOTIFY\"] = 1] = \"NOTIFY\";\n /**\n * 重置播放器\n */\n InteractBehavior[InteractBehavior[\"RESUME_PLAYER\"] = 2] = \"RESUME_PLAYER\";\n /**\n * 清除元素\n */\n InteractBehavior[InteractBehavior[\"REMOVE\"] = 3] = \"REMOVE\";\n /**\n * 暂停播放器\n */\n InteractBehavior[InteractBehavior[\"PAUSE\"] = 4] = \"PAUSE\";\n})(InteractBehavior || (InteractBehavior = {}));\n/**\n * 元素类型\n */\nvar ItemType;\n(function (ItemType) {\n /**\n * 错误元素\n */\n ItemType[\"base\"] = \"0\";\n /**\n * 图层元素\n */\n ItemType[\"sprite\"] = \"1\";\n /**\n * 粒子元素\n */\n ItemType[\"particle\"] = \"2\";\n /**\n * 空节点元素\n */\n ItemType[\"null\"] = \"3\";\n /**\n * 交互元素\n */\n ItemType[\"interact\"] = \"4\";\n /**\n * 插件元素\n */\n ItemType[\"plugin\"] = \"5\";\n /**\n * 相机元素\n */\n ItemType[\"camera\"] = \"6\";\n /**\n * 预合成元素\n */\n ItemType[\"composition\"] = \"7\";\n /**\n * 滤镜图层\n */\n ItemType[\"filter\"] = \"8\";\n /**\n * Spine 元素\n */\n ItemType[\"spine\"] = \"spine\";\n /**\n * Mesh 元素\n */\n ItemType[\"mesh\"] = \"mesh\";\n /**\n * 节点树元素\n */\n ItemType[\"tree\"] = \"tree\";\n /**\n * 文本元素\n */\n ItemType[\"text\"] = \"text\";\n /**\n * 灯光元素\n */\n ItemType[\"light\"] = \"light\";\n /**\n * 天空盒元素\n */\n ItemType[\"skybox\"] = \"skybox\";\n})(ItemType || (ItemType = {}));\n/**\n * 渲染模式\n */\nvar RenderMode;\n(function (RenderMode) {\n /**\n * 广告牌模式\n */\n RenderMode[RenderMode[\"BILLBOARD\"] = 0] = \"BILLBOARD\";\n /**\n * 网格模式\n */\n RenderMode[RenderMode[\"MESH\"] = 1] = \"MESH\";\n /**\n * 垂直广告牌模式\n */\n RenderMode[RenderMode[\"VERTICAL_BILLBOARD\"] = 2] = \"VERTICAL_BILLBOARD\";\n /**\n * 水平广告牌模式\n */\n RenderMode[RenderMode[\"HORIZONTAL_BILLBOARD\"] = 3] = \"HORIZONTAL_BILLBOARD\";\n})(RenderMode || (RenderMode = {}));\n/**\n * 变换中心\n */\nvar ParticleOrigin;\n(function (ParticleOrigin) {\n /**\n * 水平和垂直中点\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_CENTER\"] = 0] = \"PARTICLE_ORIGIN_CENTER\";\n /**\n * 水平左侧 垂直顶部\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_LEFT_TOP\"] = 1] = \"PARTICLE_ORIGIN_LEFT_TOP\";\n /**\n * 水平左侧 垂直中间\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_LEFT_CENTER\"] = 2] = \"PARTICLE_ORIGIN_LEFT_CENTER\";\n /**\n * 水平左侧 垂直底部\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_LEFT_BOTTOM\"] = 3] = \"PARTICLE_ORIGIN_LEFT_BOTTOM\";\n /**\n * 水平中间 垂直顶部\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_CENTER_TOP\"] = 4] = \"PARTICLE_ORIGIN_CENTER_TOP\";\n /**\n * 水平中间 垂直底部\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_CENTER_BOTTOM\"] = 5] = \"PARTICLE_ORIGIN_CENTER_BOTTOM\";\n /**\n * 水平右侧 垂直顶部\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_RIGHT_TOP\"] = 6] = \"PARTICLE_ORIGIN_RIGHT_TOP\";\n /**\n * 水平右侧 垂直中间\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_RIGHT_CENTER\"] = 7] = \"PARTICLE_ORIGIN_RIGHT_CENTER\";\n /**\n * 水平右侧 垂直底部\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_RIGHT_BOTTOM\"] = 8] = \"PARTICLE_ORIGIN_RIGHT_BOTTOM\";\n})(ParticleOrigin || (ParticleOrigin = {}));\n\nvar END_BEHAVIOR_DESTROY = 0;\nvar END_BEHAVIOR_PAUSE = 1;\nvar END_BEHAVIOR_FORWARD = 2;\nvar END_BEHAVIOR_PAUSE_AND_DESTROY = 3;\nvar END_BEHAVIOR_FREEZE = 4;\nvar END_BEHAVIOR_RESTART = 5;\nvar END_BEHAVIOR_DESTROY_CHILDREN = 6;\nvar CAMERA_CLIP_MODE_VERTICAL = 1;\nvar CAMERA_CLIP_MODE_NORMAL = 0;\nvar MESSAGE_ITEM_PHRASE_BEGIN = 2;\nvar MESSAGE_ITEM_PHRASE_END = 1;\n\nvar CameraClipMode;\n(function (CameraClipMode) {\n /**\n * 剪裁上下\n */\n CameraClipMode[CameraClipMode[\"portrait\"] = CAMERA_CLIP_MODE_VERTICAL] = \"portrait\";\n /**\n * 剪裁左右\n */\n CameraClipMode[CameraClipMode[\"landscape\"] = CAMERA_CLIP_MODE_NORMAL] = \"landscape\";\n})(CameraClipMode || (CameraClipMode = {}));\n/**\n * 结束行为\n */\nvar CompositionEndBehavior;\n(function (CompositionEndBehavior) {\n /**\n * 销毁\n */\n CompositionEndBehavior[CompositionEndBehavior[\"destroy\"] = END_BEHAVIOR_DESTROY] = \"destroy\";\n /**\n * 暂停\n */\n CompositionEndBehavior[CompositionEndBehavior[\"pause\"] = END_BEHAVIOR_PAUSE] = \"pause\";\n /**\n * 重播\n */\n CompositionEndBehavior[CompositionEndBehavior[\"restart\"] = END_BEHAVIOR_RESTART] = \"restart\";\n /**\n * 无限播放\n */\n CompositionEndBehavior[CompositionEndBehavior[\"forward\"] = END_BEHAVIOR_FORWARD] = \"forward\";\n /**\n * 销毁并保留最后一帧\n */\n CompositionEndBehavior[CompositionEndBehavior[\"pause_destroy\"] = END_BEHAVIOR_PAUSE_AND_DESTROY] = \"pause_destroy\";\n})(CompositionEndBehavior || (CompositionEndBehavior = {}));\n\n/*********************************************/\n/* 基本数值属性参数 */\n/*********************************************/\nvar ValueType;\n(function (ValueType) {\n /**\n * 常数\n */\n ValueType[ValueType[\"CONSTANT\"] = 0] = \"CONSTANT\";\n /**\n * 二维常数向量\n */\n ValueType[ValueType[\"CONSTANT_VEC2\"] = 1] = \"CONSTANT_VEC2\";\n /**\n * 三维常数向量\n */\n ValueType[ValueType[\"CONSTANT_VEC3\"] = 2] = \"CONSTANT_VEC3\";\n /**\n * 四维常数向量\n */\n ValueType[ValueType[\"CONSTANT_VEC4\"] = 3] = \"CONSTANT_VEC4\";\n /**\n * 随机数\n */\n ValueType[ValueType[\"RANDOM\"] = 4] = \"RANDOM\";\n /**\n * 直线\n */\n ValueType[ValueType[\"LINE\"] = 5] = \"LINE\";\n /**\n * 曲线\n */\n ValueType[ValueType[\"CURVE\"] = 6] = \"CURVE\";\n /**\n * 贝塞尔路径\n */\n ValueType[ValueType[\"BEZIER_PATH\"] = 7] = \"BEZIER_PATH\";\n /**\n * 颜色\n */\n ValueType[ValueType[\"RGBA_COLOR\"] = 8] = \"RGBA_COLOR\";\n /**\n * 渐变色\n */\n ValueType[ValueType[\"GRADIENT_COLOR\"] = 9] = \"GRADIENT_COLOR\";\n /**\n * 蒙版形状点集\n */\n ValueType[ValueType[\"SHAPE_POINTS\"] = 10] = \"SHAPE_POINTS\";\n /**\n * 蒙版形状切分\n */\n ValueType[ValueType[\"SHAPE_SPLITS\"] = 11] = \"SHAPE_SPLITS\";\n /**\n *直线路径\n */\n ValueType[ValueType[\"LINEAR_PATH\"] = 12] = \"LINEAR_PATH\";\n /**\n * 多色\n */\n ValueType[ValueType[\"COLORS\"] = 13] = \"COLORS\";\n /**\n * 二进制指针\n */\n ValueType[ValueType[\"BINARY\"] = 20] = \"BINARY\";\n /**\n * 贝塞尔曲线\n */\n ValueType[ValueType[\"BEZIER_CURVE\"] = 21] = \"BEZIER_CURVE\";\n /**\n * 贝塞尔曲线路径\n */\n ValueType[ValueType[\"BEZIER_CURVE_PATH\"] = 22] = \"BEZIER_CURVE_PATH\";\n})(ValueType || (ValueType = {}));\n/**\n * 关键帧类型\n */\nvar BezierKeyframeType;\n(function (BezierKeyframeType) {\n BezierKeyframeType[BezierKeyframeType[\"AUTO\"] = 0] = \"AUTO\";\n BezierKeyframeType[BezierKeyframeType[\"EASE\"] = 1] = \"EASE\";\n BezierKeyframeType[BezierKeyframeType[\"EASE_IN\"] = 2] = \"EASE_IN\";\n BezierKeyframeType[BezierKeyframeType[\"EASE_OUT\"] = 3] = \"EASE_OUT\";\n BezierKeyframeType[BezierKeyframeType[\"LINE\"] = 4] = \"LINE\";\n BezierKeyframeType[BezierKeyframeType[\"HOLD\"] = 5] = \"HOLD\";\n BezierKeyframeType[BezierKeyframeType[\"LINE_OUT\"] = 6] = \"LINE_OUT\";\n})(BezierKeyframeType || (BezierKeyframeType = {}));\n\nvar ItemEndBehavior;\n(function (ItemEndBehavior) {\n ItemEndBehavior[ItemEndBehavior[\"destroy\"] = END_BEHAVIOR_DESTROY] = \"destroy\";\n ItemEndBehavior[ItemEndBehavior[\"loop\"] = END_BEHAVIOR_RESTART] = \"loop\";\n ItemEndBehavior[ItemEndBehavior[\"freeze\"] = END_BEHAVIOR_FREEZE] = \"freeze\";\n})(ItemEndBehavior || (ItemEndBehavior = {}));\nvar ParentItemEndBehavior;\n(function (ParentItemEndBehavior) {\n ParentItemEndBehavior[ParentItemEndBehavior[\"destroyChildren\"] = END_BEHAVIOR_DESTROY_CHILDREN] = \"destroyChildren\";\n})(ParentItemEndBehavior || (ParentItemEndBehavior = {}));\n\n/**\n * 粒子交互行为\n */\nvar ParticleInteractionBehavior;\n(function (ParticleInteractionBehavior) {\n /**\n * 无\n */\n ParticleInteractionBehavior[ParticleInteractionBehavior[\"none\"] = 0] = \"none\";\n /**\n * 移出粒子\n */\n ParticleInteractionBehavior[ParticleInteractionBehavior[\"removeParticle\"] = 1] = \"removeParticle\";\n})(ParticleInteractionBehavior || (ParticleInteractionBehavior = {}));\n\nvar ShapeArcMode;\n(function (ShapeArcMode) {\n /**\n * 随机\n */\n ShapeArcMode[ShapeArcMode[\"RANDOM\"] = 0] = \"RANDOM\";\n /**\n * 单向循环\n */\n ShapeArcMode[ShapeArcMode[\"UNIDIRECTIONAL_CYCLE\"] = 1] = \"UNIDIRECTIONAL_CYCLE\";\n /**\n * 双向循环\n */\n ShapeArcMode[ShapeArcMode[\"BIDIRECTIONAL_CYCLE\"] = 2] = \"BIDIRECTIONAL_CYCLE\";\n /**\n * 均匀爆发\n */\n ShapeArcMode[ShapeArcMode[\"UNIFORM_BURST\"] = 3] = \"UNIFORM_BURST\";\n})(ShapeArcMode || (ShapeArcMode = {}));\n\nvar BloomFilterThresholdAvgColor = 0;\n\nvar ModelBoundingType;\n(function (ModelBoundingType) {\n ModelBoundingType[ModelBoundingType[\"box\"] = 2] = \"box\";\n ModelBoundingType[ModelBoundingType[\"sphere\"] = 3] = \"sphere\";\n})(ModelBoundingType || (ModelBoundingType = {}));\n\n// 材质类型\nvar MaterialType;\n(function (MaterialType) {\n MaterialType[\"unlit\"] = \"unlit\";\n MaterialType[\"pbr\"] = \"pbr\";\n // 头发材质,在 pbr 材质基础上扩展\n MaterialType[\"hair\"] = \"hair\";\n})(MaterialType || (MaterialType = {}));\n// 混合模式\nvar MaterialBlending;\n(function (MaterialBlending) {\n MaterialBlending[MaterialBlending[\"opaque\"] = 100] = \"opaque\";\n MaterialBlending[MaterialBlending[\"masked\"] = 101] = \"masked\";\n MaterialBlending[MaterialBlending[\"translucent\"] = 102] = \"translucent\";\n MaterialBlending[MaterialBlending[\"additive\"] = 103] = \"additive\";\n})(MaterialBlending || (MaterialBlending = {}));\n\n/**\n * 3D渲染模式:将渲染过程中的中间结果输出,主要用于排查渲染效果问题,支持 pbr 和 unlit 材质\n */\nvar RenderMode3D;\n(function (RenderMode3D) {\n /**\n * 正常渲染\n */\n RenderMode3D[\"none\"] = \"none\";\n /**\n * 纹理坐标\n */\n RenderMode3D[\"uv\"] = \"uv\";\n /**\n * 世界坐标法线\n */\n RenderMode3D[\"normal\"] = \"normal\";\n /**\n * 基础颜色\n */\n RenderMode3D[\"basecolor\"] = \"basecolor\";\n /**\n * 基础颜色 Alpha\n */\n RenderMode3D[\"alpha\"] = \"alpha\";\n /**\n * 金属度\n */\n RenderMode3D[\"metallic\"] = \"metallic\";\n /**\n * 粗超度\n */\n RenderMode3D[\"roughness\"] = \"roughness\";\n /**\n * 环境遮蔽\n */\n RenderMode3D[\"ao\"] = \"ao\";\n /**\n * 自发光\n */\n RenderMode3D[\"emissive\"] = \"emissive\";\n})(RenderMode3D || (RenderMode3D = {}));\n\nvar TextOverflow;\n(function (TextOverflow) {\n /**\n * display 模式下,会显示所有文本,存在文本超过边界框的情况。\n */\n TextOverflow[TextOverflow[\"display\"] = 0] = \"display\";\n /**\n * clip 模式下,当文本内容超出边界框时,多余的会被截断。\n */\n TextOverflow[TextOverflow[\"clip\"] = 1] = \"clip\";\n /**\n * ellipsis 模式下,会使用(...)来代替超出边界框的内容。\n */\n TextOverflow[TextOverflow[\"ellipsis\"] = 2] = \"ellipsis\";\n})(TextOverflow || (TextOverflow = {}));\nvar TextBaseline;\n(function (TextBaseline) {\n /**\n * 文本顶对齐。\n */\n TextBaseline[TextBaseline[\"top\"] = 0] = \"top\";\n /**\n * 文本垂直居中对齐。\n */\n TextBaseline[TextBaseline[\"middle\"] = 1] = \"middle\";\n /**\n * 文本底对齐。\n */\n TextBaseline[TextBaseline[\"bottom\"] = 2] = \"bottom\";\n})(TextBaseline || (TextBaseline = {}));\nvar TextAlignment;\n(function (TextAlignment) {\n /**\n * text alignment starts from(x,y) to right direction\n * 从(x,y)开始第一个字符,向右边延伸\n */\n TextAlignment[TextAlignment[\"left\"] = 0] = \"left\";\n /**\n * (x,y) is middle position of text, where (left + right)/2 =(x,y)\n * (x,y) 为文字中间位置,(最左位置 + 最右位置)/2 = (x,y)\n */\n TextAlignment[TextAlignment[\"middle\"] = 1] = \"middle\";\n /**\n * text alignment ends with(x,y) from left direction\n * 从(x,y)结束最后一个字符,向左边延伸\n */\n TextAlignment[TextAlignment[\"right\"] = 2] = \"right\";\n})(TextAlignment || (TextAlignment = {}));\n/**\n * 文本字重\n */\nvar TextWeight;\n(function (TextWeight) {\n /**\n * 正常\n */\n TextWeight[\"normal\"] = \"normal\";\n /**\n * 粗体\n */\n TextWeight[\"bold\"] = \"bold\";\n /**\n * 瘦体\n */\n TextWeight[\"lighter\"] = \"lighter\";\n})(TextWeight || (TextWeight = {}));\n/**\n * 文本样式\n */\nvar FontStyle;\n(function (FontStyle) {\n /**\n * 正常\n */\n FontStyle[\"normal\"] = \"normal\";\n /**\n * 斜体\n */\n FontStyle[\"italic\"] = \"italic\";\n /**\n * 倾斜体\n */\n FontStyle[\"oblique\"] = \"oblique\";\n})(FontStyle || (FontStyle = {}));\n\nexport { BezierKeyframeType, BlendingMode, BloomFilterThresholdAvgColor, CAMERA_CLIP_MODE_NORMAL, CAMERA_CLIP_MODE_VERTICAL, CameraClipMode, CompositionEndBehavior, END_BEHAVIOR_DESTROY, END_BEHAVIOR_DESTROY_CHILDREN, END_BEHAVIOR_FORWARD, END_BEHAVIOR_FREEZE, END_BEHAVIOR_PAUSE, END_BEHAVIOR_PAUSE_AND_DESTROY, END_BEHAVIOR_RESTART, FontStyle, InteractBehavior, InteractType, ItemEndBehavior, ItemType, MESSAGE_ITEM_PHRASE_BEGIN, MESSAGE_ITEM_PHRASE_END, MaskMode, MaterialBlending, MaterialType, ModelBoundingType, ParentItemEndBehavior, ParticleInteractionBehavior, ParticleOrigin, PluginType, RenderLevel, RenderMode, RenderMode3D, ShapeArcMode, ShapeType, SideMode, TextAlignment, TextBaseline, TextOverflow, TextWeight, ValueType };\n//# sourceMappingURL=index.mjs.map\n","/*!\n * Name: @galacean/effects-specification\n * Description: Galacean Effects JSON Specification\n * Author: Ant Group CO., Ltd.\n * Version: v1.0.1\n */\n\n/*********************************************/\n/* 元素属性参数类型 */\n/*********************************************/\n/**\n * 渲染等级\n */\nvar RenderLevel;\n(function (RenderLevel) {\n RenderLevel[\"S\"] = \"S\";\n RenderLevel[\"APlus\"] = \"A+\";\n RenderLevel[\"A\"] = \"A\";\n RenderLevel[\"BPlus\"] = \"B+\";\n RenderLevel[\"B\"] = \"B\";\n})(RenderLevel || (RenderLevel = {}));\n/**\n * 混合模式\n */\nvar BlendingMode;\n(function (BlendingMode) {\n /**\n * 普通混合模式\n */\n BlendingMode[BlendingMode[\"ALPHA\"] = 0] = \"ALPHA\";\n /**\n * 叠加混合模式\n */\n BlendingMode[BlendingMode[\"ADD\"] = 1] = \"ADD\";\n /**\n * 相乘混合模式\n */\n BlendingMode[BlendingMode[\"MULTIPLY\"] = 2] = \"MULTIPLY\";\n /**\n * 亮度混合模式\n */\n BlendingMode[BlendingMode[\"BRIGHTNESS\"] = 3] = \"BRIGHTNESS\";\n /**\n * 减色混合模式\n */\n BlendingMode[BlendingMode[\"SUBTRACTION\"] = 4] = \"SUBTRACTION\";\n /**\n * 强光混合模式\n */\n BlendingMode[BlendingMode[\"STRONG_LIGHT\"] = 5] = \"STRONG_LIGHT\";\n /**\n * 弱光混合模式\n */\n BlendingMode[BlendingMode[\"WEAK_LIGHT\"] = 6] = \"WEAK_LIGHT\";\n /**\n * 亮度叠加混合模式\n */\n BlendingMode[BlendingMode[\"SUPERPOSITION\"] = 7] = \"SUPERPOSITION\";\n})(BlendingMode || (BlendingMode = {}));\n/**\n * 单双面模式\n */\nvar SideMode;\n(function (SideMode) {\n /**\n * 双面模式\n */\n SideMode[SideMode[\"DOUBLE\"] = 1032] = \"DOUBLE\";\n /**\n * 正面模式\n */\n SideMode[SideMode[\"FRONT\"] = 1028] = \"FRONT\";\n /**\n * 背面模式\n */\n SideMode[SideMode[\"BACK\"] = 1029] = \"BACK\";\n})(SideMode || (SideMode = {}));\n/**\n * 蒙版模式\n */\nvar MaskMode;\n(function (MaskMode) {\n /**\n * 无蒙版\n */\n MaskMode[MaskMode[\"NONE\"] = 0] = \"NONE\";\n /**\n * 蒙版\n */\n MaskMode[MaskMode[\"MASK\"] = 1] = \"MASK\";\n /**\n * 被遮挡\n */\n MaskMode[MaskMode[\"OBSCURED\"] = 2] = \"OBSCURED\";\n /**\n * 被反向遮挡\n */\n MaskMode[MaskMode[\"REVERSE_OBSCURED\"] = 3] = \"REVERSE_OBSCURED\";\n})(MaskMode || (MaskMode = {}));\n/**\n * 发射器形状\n */\nvar ShapeType;\n(function (ShapeType) {\n /**\n * 没有类型\n */\n ShapeType[ShapeType[\"NONE\"] = 0] = \"NONE\";\n /**\n * 圆球\n */\n ShapeType[ShapeType[\"SPHERE\"] = 1] = \"SPHERE\";\n /**\n * 圆锥\n */\n ShapeType[ShapeType[\"CONE\"] = 2] = \"CONE\";\n /**\n * 半球\n */\n ShapeType[ShapeType[\"HEMISPHERE\"] = 3] = \"HEMISPHERE\";\n /**\n * 圆\n */\n ShapeType[ShapeType[\"CIRCLE\"] = 4] = \"CIRCLE\";\n /**\n * 圆环\n */\n ShapeType[ShapeType[\"DONUT\"] = 5] = \"DONUT\";\n /**\n * 矩形\n */\n ShapeType[ShapeType[\"RECTANGLE\"] = 6] = \"RECTANGLE\";\n /**\n * 矩形框\n */\n ShapeType[ShapeType[\"RECTANGLE_EDGE\"] = 7] = \"RECTANGLE_EDGE\";\n /**\n * 直线\n */\n ShapeType[ShapeType[\"EDGE\"] = 8] = \"EDGE\";\n /**\n * 贴图\n */\n ShapeType[ShapeType[\"TEXTURE\"] = 9] = \"TEXTURE\";\n})(ShapeType || (ShapeType = {}));\n/**\n * 插件类型\n */\nvar PluginType;\n(function (PluginType) {\n /**\n * 陀螺仪\n */\n PluginType[PluginType[\"GYROSCOPE\"] = 0] = \"GYROSCOPE\";\n /**\n * Spine\n */\n PluginType[PluginType[\"SPINE\"] = 1] = \"SPINE\";\n})(PluginType || (PluginType = {}));\n/**\n * 交互类型\n */\nvar InteractType;\n(function (InteractType) {\n /**\n * 点击\n */\n InteractType[InteractType[\"CLICK\"] = 0] = \"CLICK\";\n /**\n * 消息\n * 前端收到 onMessageItem 回调\n */\n InteractType[InteractType[\"MESSAGE\"] = 1] = \"MESSAGE\";\n /**\n * 拖拽\n */\n InteractType[InteractType[\"DRAG\"] = 2] = \"DRAG\";\n})(InteractType || (InteractType = {}));\n/**\n * 交互行为\n */\nvar InteractBehavior;\n(function (InteractBehavior) {\n /**\n * 无\n */\n InteractBehavior[InteractBehavior[\"NONE\"] = 0] = \"NONE\";\n /**\n * 通知\n */\n InteractBehavior[InteractBehavior[\"NOTIFY\"] = 1] = \"NOTIFY\";\n /**\n * 重置播放器\n */\n InteractBehavior[InteractBehavior[\"RESUME_PLAYER\"] = 2] = \"RESUME_PLAYER\";\n /**\n * 清除元素\n */\n InteractBehavior[InteractBehavior[\"REMOVE\"] = 3] = \"REMOVE\";\n /**\n * 暂停播放器\n */\n InteractBehavior[InteractBehavior[\"PAUSE\"] = 4] = \"PAUSE\";\n})(InteractBehavior || (InteractBehavior = {}));\n/**\n * 元素类型\n */\nvar ItemType;\n(function (ItemType) {\n /**\n * 错误元素\n */\n ItemType[\"base\"] = \"0\";\n /**\n * 图层元素\n */\n ItemType[\"sprite\"] = \"1\";\n /**\n * 粒子元素\n */\n ItemType[\"particle\"] = \"2\";\n /**\n * 空节点元素\n */\n ItemType[\"null\"] = \"3\";\n /**\n * 交互元素\n */\n ItemType[\"interact\"] = \"4\";\n /**\n * 插件元素\n */\n ItemType[\"plugin\"] = \"5\";\n /**\n * 相机元素\n */\n ItemType[\"camera\"] = \"6\";\n /**\n * 预合成元素\n */\n ItemType[\"composition\"] = \"7\";\n /**\n * 滤镜图层\n */\n ItemType[\"filter\"] = \"8\";\n /**\n * Spine 元素\n */\n ItemType[\"spine\"] = \"spine\";\n /**\n * Mesh 元素\n */\n ItemType[\"mesh\"] = \"mesh\";\n /**\n * 节点树元素\n */\n ItemType[\"tree\"] = \"tree\";\n /**\n * 文本元素\n */\n ItemType[\"text\"] = \"text\";\n /**\n * 灯光元素\n */\n ItemType[\"light\"] = \"light\";\n /**\n * 天空盒元素\n */\n ItemType[\"skybox\"] = \"skybox\";\n})(ItemType || (ItemType = {}));\n/**\n * 渲染模式\n */\nvar RenderMode;\n(function (RenderMode) {\n /**\n * 广告牌模式\n */\n RenderMode[RenderMode[\"BILLBOARD\"] = 0] = \"BILLBOARD\";\n /**\n * 网格模式\n */\n RenderMode[RenderMode[\"MESH\"] = 1] = \"MESH\";\n /**\n * 垂直广告牌模式\n */\n RenderMode[RenderMode[\"VERTICAL_BILLBOARD\"] = 2] = \"VERTICAL_BILLBOARD\";\n /**\n * 水平广告牌模式\n */\n RenderMode[RenderMode[\"HORIZONTAL_BILLBOARD\"] = 3] = \"HORIZONTAL_BILLBOARD\";\n})(RenderMode || (RenderMode = {}));\n/**\n * 变换中心\n */\nvar ParticleOrigin;\n(function (ParticleOrigin) {\n /**\n * 水平和垂直中点\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_CENTER\"] = 0] = \"PARTICLE_ORIGIN_CENTER\";\n /**\n * 水平左侧 垂直顶部\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_LEFT_TOP\"] = 1] = \"PARTICLE_ORIGIN_LEFT_TOP\";\n /**\n * 水平左侧 垂直中间\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_LEFT_CENTER\"] = 2] = \"PARTICLE_ORIGIN_LEFT_CENTER\";\n /**\n * 水平左侧 垂直底部\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_LEFT_BOTTOM\"] = 3] = \"PARTICLE_ORIGIN_LEFT_BOTTOM\";\n /**\n * 水平中间 垂直顶部\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_CENTER_TOP\"] = 4] = \"PARTICLE_ORIGIN_CENTER_TOP\";\n /**\n * 水平中间 垂直底部\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_CENTER_BOTTOM\"] = 5] = \"PARTICLE_ORIGIN_CENTER_BOTTOM\";\n /**\n * 水平右侧 垂直顶部\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_RIGHT_TOP\"] = 6] = \"PARTICLE_ORIGIN_RIGHT_TOP\";\n /**\n * 水平右侧 垂直中间\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_RIGHT_CENTER\"] = 7] = \"PARTICLE_ORIGIN_RIGHT_CENTER\";\n /**\n * 水平右侧 垂直底部\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_RIGHT_BOTTOM\"] = 8] = \"PARTICLE_ORIGIN_RIGHT_BOTTOM\";\n})(ParticleOrigin || (ParticleOrigin = {}));\n\nvar END_BEHAVIOR_DESTROY = 0;\nvar END_BEHAVIOR_PAUSE = 1;\nvar END_BEHAVIOR_FORWARD = 2;\nvar END_BEHAVIOR_PAUSE_AND_DESTROY = 3;\nvar END_BEHAVIOR_FREEZE = 4;\nvar END_BEHAVIOR_RESTART = 5;\nvar END_BEHAVIOR_DESTROY_CHILDREN = 6;\nvar CAMERA_CLIP_MODE_VERTICAL = 1;\nvar CAMERA_CLIP_MODE_NORMAL = 0;\n\nvar CameraClipMode;\n(function (CameraClipMode) {\n /**\n * 剪裁上下\n */\n CameraClipMode[CameraClipMode[\"portrait\"] = CAMERA_CLIP_MODE_VERTICAL] = \"portrait\";\n /**\n * 剪裁左右\n */\n CameraClipMode[CameraClipMode[\"landscape\"] = CAMERA_CLIP_MODE_NORMAL] = \"landscape\";\n})(CameraClipMode || (CameraClipMode = {}));\n/**\n * 结束行为\n */\nvar CompositionEndBehavior;\n(function (CompositionEndBehavior) {\n /**\n * 销毁\n */\n CompositionEndBehavior[CompositionEndBehavior[\"destroy\"] = END_BEHAVIOR_DESTROY] = \"destroy\";\n /**\n * 暂停\n */\n CompositionEndBehavior[CompositionEndBehavior[\"pause\"] = END_BEHAVIOR_PAUSE] = \"pause\";\n /**\n * 重播\n */\n CompositionEndBehavior[CompositionEndBehavior[\"restart\"] = END_BEHAVIOR_RESTART] = \"restart\";\n /**\n * 无限播放\n */\n CompositionEndBehavior[CompositionEndBehavior[\"forward\"] = END_BEHAVIOR_FORWARD] = \"forward\";\n /**\n * 销毁并保留最后一帧\n */\n CompositionEndBehavior[CompositionEndBehavior[\"pause_destroy\"] = END_BEHAVIOR_PAUSE_AND_DESTROY] = \"pause_destroy\";\n})(CompositionEndBehavior || (CompositionEndBehavior = {}));\n\n/*********************************************/\n/* 基本数值属性参数 */\n/*********************************************/\nvar ValueType;\n(function (ValueType) {\n /**\n * 常数\n */\n ValueType[ValueType[\"CONSTANT\"] = 0] = \"CONSTANT\";\n /**\n * 二维常数向量\n */\n ValueType[ValueType[\"CONSTANT_VEC2\"] = 1] = \"CONSTANT_VEC2\";\n /**\n * 三维常数向量\n */\n ValueType[ValueType[\"CONSTANT_VEC3\"] = 2] = \"CONSTANT_VEC3\";\n /**\n * 四维常数向量\n */\n ValueType[ValueType[\"CONSTANT_VEC4\"] = 3] = \"CONSTANT_VEC4\";\n /**\n * 随机数\n */\n ValueType[ValueType[\"RANDOM\"] = 4] = \"RANDOM\";\n /**\n * 直线\n */\n ValueType[ValueType[\"LINE\"] = 5] = \"LINE\";\n /**\n * 曲线\n */\n ValueType[ValueType[\"CURVE\"] = 6] = \"CURVE\";\n /**\n * 贝塞尔路径\n */\n ValueType[ValueType[\"BEZIER_PATH\"] = 7] = \"BEZIER_PATH\";\n /**\n * 颜色\n */\n ValueType[ValueType[\"RGBA_COLOR\"] = 8] = \"RGBA_COLOR\";\n /**\n * 渐变色\n */\n ValueType[ValueType[\"GRADIENT_COLOR\"] = 9] = \"GRADIENT_COLOR\";\n /**\n * 蒙版形状点集\n */\n ValueType[ValueType[\"SHAPE_POINTS\"] = 10] = \"SHAPE_POINTS\";\n /**\n * 蒙版形状切分\n */\n ValueType[ValueType[\"SHAPE_SPLITS\"] = 11] = \"SHAPE_SPLITS\";\n /**\n *直线路径\n */\n ValueType[ValueType[\"LINEAR_PATH\"] = 12] = \"LINEAR_PATH\";\n /**\n * 多色\n */\n ValueType[ValueType[\"COLORS\"] = 13] = \"COLORS\";\n /**\n * 二进制指针\n */\n ValueType[ValueType[\"BINARY\"] = 20] = \"BINARY\";\n /**\n * 贝塞尔曲线\n */\n ValueType[ValueType[\"BEZIER_CURVE\"] = 21] = \"BEZIER_CURVE\";\n /**\n * 贝塞尔曲线路径\n */\n ValueType[ValueType[\"BEZIER_CURVE_PATH\"] = 22] = \"BEZIER_CURVE_PATH\";\n})(ValueType || (ValueType = {}));\n/**\n * 关键帧类型\n */\nvar BezierKeyframeType;\n(function (BezierKeyframeType) {\n BezierKeyframeType[BezierKeyframeType[\"AUTO\"] = 0] = \"AUTO\";\n BezierKeyframeType[BezierKeyframeType[\"EASE\"] = 1] = \"EASE\";\n BezierKeyframeType[BezierKeyframeType[\"EASE_IN\"] = 2] = \"EASE_IN\";\n BezierKeyframeType[BezierKeyframeType[\"EASE_OUT\"] = 3] = \"EASE_OUT\";\n BezierKeyframeType[BezierKeyframeType[\"LINE\"] = 4] = \"LINE\";\n BezierKeyframeType[BezierKeyframeType[\"HOLD\"] = 5] = \"HOLD\";\n BezierKeyframeType[BezierKeyframeType[\"LINE_OUT\"] = 6] = \"LINE_OUT\";\n})(BezierKeyframeType || (BezierKeyframeType = {}));\n\nvar ItemEndBehavior;\n(function (ItemEndBehavior) {\n ItemEndBehavior[ItemEndBehavior[\"destroy\"] = END_BEHAVIOR_DESTROY] = \"destroy\";\n ItemEndBehavior[ItemEndBehavior[\"loop\"] = END_BEHAVIOR_RESTART] = \"loop\";\n ItemEndBehavior[ItemEndBehavior[\"freeze\"] = END_BEHAVIOR_FREEZE] = \"freeze\";\n})(ItemEndBehavior || (ItemEndBehavior = {}));\nvar ParentItemEndBehavior;\n(function (ParentItemEndBehavior) {\n ParentItemEndBehavior[ParentItemEndBehavior[\"destroyChildren\"] = END_BEHAVIOR_DESTROY_CHILDREN] = \"destroyChildren\";\n})(ParentItemEndBehavior || (ParentItemEndBehavior = {}));\n\n/**\n * 粒子交互行为\n */\nvar ParticleInteractionBehavior;\n(function (ParticleInteractionBehavior) {\n /**\n * 无\n */\n ParticleInteractionBehavior[ParticleInteractionBehavior[\"none\"] = 0] = \"none\";\n /**\n * 移出粒子\n */\n ParticleInteractionBehavior[ParticleInteractionBehavior[\"removeParticle\"] = 1] = \"removeParticle\";\n})(ParticleInteractionBehavior || (ParticleInteractionBehavior = {}));\n\nvar ShapeArcMode;\n(function (ShapeArcMode) {\n /**\n * 随机\n */\n ShapeArcMode[ShapeArcMode[\"RANDOM\"] = 0] = \"RANDOM\";\n /**\n * 单向循环\n */\n ShapeArcMode[ShapeArcMode[\"UNIDIRECTIONAL_CYCLE\"] = 1] = \"UNIDIRECTIONAL_CYCLE\";\n /**\n * 双向循环\n */\n ShapeArcMode[ShapeArcMode[\"BIDIRECTIONAL_CYCLE\"] = 2] = \"BIDIRECTIONAL_CYCLE\";\n /**\n * 均匀爆发\n */\n ShapeArcMode[ShapeArcMode[\"UNIFORM_BURST\"] = 3] = \"UNIFORM_BURST\";\n})(ShapeArcMode || (ShapeArcMode = {}));\n\nvar ModelBoundingType;\n(function (ModelBoundingType) {\n ModelBoundingType[ModelBoundingType[\"box\"] = 2] = \"box\";\n ModelBoundingType[ModelBoundingType[\"sphere\"] = 3] = \"sphere\";\n})(ModelBoundingType || (ModelBoundingType = {}));\n\n// 材质类型\nvar MaterialType;\n(function (MaterialType) {\n MaterialType[\"unlit\"] = \"unlit\";\n MaterialType[\"pbr\"] = \"pbr\";\n // 头发材质,在 pbr 材质基础上扩展\n MaterialType[\"hair\"] = \"hair\";\n})(MaterialType || (MaterialType = {}));\n// 混合模式\nvar MaterialBlending;\n(function (MaterialBlending) {\n MaterialBlending[MaterialBlending[\"opaque\"] = 100] = \"opaque\";\n MaterialBlending[MaterialBlending[\"masked\"] = 101] = \"masked\";\n MaterialBlending[MaterialBlending[\"translucent\"] = 102] = \"translucent\";\n MaterialBlending[MaterialBlending[\"additive\"] = 103] = \"additive\";\n})(MaterialBlending || (MaterialBlending = {}));\n\n/**\n * 3D渲染模式:将渲染过程中的中间结果输出,主要用于排查渲染效果问题,支持 pbr 和 unlit 材质\n */\nvar RenderMode3D;\n(function (RenderMode3D) {\n /**\n * 正常渲染\n */\n RenderMode3D[\"none\"] = \"none\";\n /**\n * 纹理坐标\n */\n RenderMode3D[\"uv\"] = \"uv\";\n /**\n * 世界坐标法线\n */\n RenderMode3D[\"normal\"] = \"normal\";\n /**\n * 基础颜色\n */\n RenderMode3D[\"basecolor\"] = \"basecolor\";\n /**\n * 基础颜色 Alpha\n */\n RenderMode3D[\"alpha\"] = \"alpha\";\n /**\n * 金属度\n */\n RenderMode3D[\"metallic\"] = \"metallic\";\n /**\n * 粗超度\n */\n RenderMode3D[\"roughness\"] = \"roughness\";\n /**\n * 环境遮蔽\n */\n RenderMode3D[\"ao\"] = \"ao\";\n /**\n * 自发光\n */\n RenderMode3D[\"emissive\"] = \"emissive\";\n})(RenderMode3D || (RenderMode3D = {}));\n\nvar TextOverflow;\n(function (TextOverflow) {\n /**\n * display 模式下,会显示所有文本,存在文本超过边界框的情况。\n */\n TextOverflow[TextOverflow[\"display\"] = 0] = \"display\";\n /**\n * clip 模式下,当文本内容超出边界框时,多余的会被截断。\n */\n TextOverflow[TextOverflow[\"clip\"] = 1] = \"clip\";\n /**\n * ellipsis 模式下,会使用(...)来代替超出边界框的内容。\n */\n TextOverflow[TextOverflow[\"ellipsis\"] = 2] = \"ellipsis\";\n})(TextOverflow || (TextOverflow = {}));\nvar TextBaseline;\n(function (TextBaseline) {\n /**\n * 文本顶对齐。\n */\n TextBaseline[TextBaseline[\"top\"] = 0] = \"top\";\n /**\n * 文本垂直居中对齐。\n */\n TextBaseline[TextBaseline[\"middle\"] = 1] = \"middle\";\n /**\n * 文本底对齐。\n */\n TextBaseline[TextBaseline[\"bottom\"] = 2] = \"bottom\";\n})(TextBaseline || (TextBaseline = {}));\nvar TextAlignment;\n(function (TextAlignment) {\n /**\n * text alignment starts from(x,y) to right direction\n * 从(x,y)开始第一个字符,向右边延伸\n */\n TextAlignment[TextAlignment[\"left\"] = 0] = \"left\";\n /**\n * (x,y) is middle position of text, where (left + right)/2 =(x,y)\n * (x,y) 为文字中间位置,(最左位置 + 最右位置)/2 = (x,y)\n */\n TextAlignment[TextAlignment[\"middle\"] = 1] = \"middle\";\n /**\n * text alignment ends with(x,y) from left direction\n * 从(x,y)结束最后一个字符,向左边延伸\n */\n TextAlignment[TextAlignment[\"right\"] = 2] = \"right\";\n})(TextAlignment || (TextAlignment = {}));\n/**\n * 文本字重\n */\nvar TextWeight;\n(function (TextWeight) {\n /**\n * 正常\n */\n TextWeight[\"normal\"] = \"normal\";\n /**\n * 粗体\n */\n TextWeight[\"bold\"] = \"bold\";\n /**\n * 瘦体\n */\n TextWeight[\"lighter\"] = \"lighter\";\n})(TextWeight || (TextWeight = {}));\n/**\n * 文本样式\n */\nvar FontStyle;\n(function (FontStyle) {\n /**\n * 正常\n */\n FontStyle[\"normal\"] = \"normal\";\n /**\n * 斜体\n */\n FontStyle[\"italic\"] = \"italic\";\n /**\n * 倾斜体\n */\n FontStyle[\"oblique\"] = \"oblique\";\n})(FontStyle || (FontStyle = {}));\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nfunction __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nfunction arrAdd(arr, item) {\n if (!arr.includes(item)) {\n arr.push(item);\n return true;\n }\n}\n/**\n * @deprecated 请直接使用 Array.prototype.forEach 或 for...of\n * @param object\n * @param callback\n * @returns the mutated input object\n */\nfunction forEach(object, callback, thisObj) {\n if (object) {\n for (var name_1 in object) {\n if (Object.hasOwnProperty.call(object, name_1)) {\n callback.call(thisObj, object[name_1], name_1);\n }\n }\n }\n return object;\n}\nfunction ensureFixedNumber(a) {\n if (Number.isFinite(a)) {\n return [ValueType.CONSTANT, a];\n }\n if (a) {\n if (a[0] === 'lines') {\n return [ValueType.LINE, a[1]];\n }\n if (a[0] === 'curve') {\n return [ValueType.CURVE, a[1]];\n }\n if (a[0] === 'static') {\n return [ValueType.CONSTANT, a[1]];\n }\n }\n}\nfunction ensureFixedNumberWithRandom(a, p) {\n if (Array.isArray(a) && a[0] === 'random') {\n return [ValueType.CONSTANT, a[1][p]];\n }\n return ensureFixedNumber(a);\n}\nfunction ensureRGBAValue(a) {\n if (a && a[0] === 'color') {\n return colorToArr(a[1], true);\n }\n return [1, 1, 1, 1];\n}\nfunction ensureColorExpression(a, normalized) {\n if (a) {\n if (a[0] === 'colors') {\n return [ValueType.COLORS, a[1].map(function (color) { return colorToArr(color, normalized); })];\n }\n else if (a[0] === 'gradient') {\n return ensureGradient(a[1], normalized);\n }\n else if (a[0] === 'color') {\n return [ValueType.RGBA_COLOR, colorToArr(a[1], normalized)];\n }\n }\n}\nfunction ensureNumberExpression(a) {\n if (a && a[0] === 'random') {\n return [ValueType.RANDOM, a[1]];\n }\n return ensureFixedNumber(a);\n}\nfunction ensureValueGetter(a) {\n if (Array.isArray(a) && typeof a[0] === 'string') {\n return ensureNumberExpression(a) || ensureFixedVec3(a) || ensureColorExpression(a) || a;\n }\n return a;\n}\nfunction ensureGradient(a, normalized) {\n if (a) {\n var stops_1 = [];\n Object.getOwnPropertyNames(a).forEach(function (p) {\n var stop = parsePercent(p);\n var color = colorToArr(a[p], normalized);\n stops_1.push([stop, color[0], color[1], color[2], color[3]]);\n });\n stops_1 = stops_1.sort(function (a, b) { return a[0] - b[0]; });\n return [ValueType.GRADIENT_COLOR, stops_1];\n }\n}\nfunction colorToArr(hex, normalized) {\n var ret;\n if (typeof hex === 'string') {\n hex = hex.replace(/[\\s\\t\\r\\n]/g, '');\n var m = /rgba?\\(([.\\d]+),([.\\d]+),([.\\d]+),?([.\\d]+)?\\)/.exec(hex);\n if (m) {\n var a = +m[4];\n ret = [+m[1], +m[2], +m[3], isNaN(a) ? 255 : Math.round(a * 255)];\n }\n else if (/^#[a-f\\d]{3}$/i.test(hex)) {\n ret = [parseInt(hex[1] + hex[1], 16), parseInt(hex[2] + hex[2], 16), parseInt(hex[3] + hex[3], 16), 255];\n // eslint-disable-next-line no-cond-assign\n }\n else if (m = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)) {\n ret = [parseInt(m[1], 16), parseInt(m[2], 16), parseInt(m[3], 16), 255] || [0, 0, 0, 255];\n }\n }\n else if (hex instanceof Array) {\n ret = [hex[0], hex[1], hex[2], isNaN(hex[3]) ? 255 : Math.round(hex[3] * 255)];\n }\n if (normalized) {\n // @ts-expect-error\n ret = normalizeColor(ret);\n }\n // @ts-expect-error\n return ret;\n}\nfunction normalizeColor(a) {\n if (Array.isArray(a)) {\n return a.map(function (i) { return Number.isFinite(i / 255) ? Number((i / 255).toFixed(6)) : 0; });\n }\n}\nfunction parsePercent(c) {\n var match = /^(-)?([\\d+.]+)%$/.exec(c);\n if (match) {\n return +match[2] / 100 * (match[1] ? -1 : 1);\n }\n return +c;\n}\nfunction getGradientColor(color, normalized) {\n if (Array.isArray(color)) {\n // @ts-expect-error\n return (color[0] === 'gradient' || color[0] === 'color') && ensureGradient(color[1], normalized);\n }\n else {\n return ensureGradient(color, normalized);\n }\n}\nfunction ensureFixedVec3(a) {\n if (a) {\n if (a.length === 3) {\n return [ValueType.CONSTANT_VEC3, a];\n }\n if (a[0] === 'path') {\n return [ValueType.LINEAR_PATH, a[1]];\n }\n if (a[0] === 'bezier') {\n return [ValueType.BEZIER_PATH, a[1]];\n }\n }\n}\nfunction objectValueToNumber(o) {\n var e_1, _a;\n try {\n for (var _b = __values(Object.keys(o)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n o[key] = Number(o[key]);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return o;\n}\nfunction deleteEmptyValue(o) {\n var e_2, _a;\n try {\n for (var _b = __values(Object.keys(o)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n if (o[key] === undefined) {\n delete o[key];\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return o;\n}\nvar cos = Math.cos;\nvar sin = Math.sin;\nvar d2r = Math.PI / 180;\nvar r2d = 180 / Math.PI;\nfunction quatFromXYZRotation(out, x, y, z) {\n var c1 = cos((x * d2r) / 2);\n var c2 = cos((y * d2r) / 2);\n var c3 = cos((z * d2r) / 2);\n var s1 = sin((x * d2r) / 2);\n var s2 = sin((y * d2r) / 2);\n var s3 = sin((z * d2r) / 2);\n out[0] = s1 * c2 * c3 + c1 * s2 * s3;\n out[1] = c1 * s2 * c3 - s1 * c2 * s3;\n out[2] = c1 * c2 * s3 + s1 * s2 * c3;\n out[3] = c1 * c2 * c3 - s1 * s2 * s3;\n return out;\n}\nfunction clamp(v, min, max) {\n return v > max ? max : (v < min ? min : v);\n}\nfunction rotationZYXFromQuat(out, quat) {\n var x = quat[0];\n var y = quat[1];\n var z = quat[2];\n var w = quat[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var m11 = 1 - yy - zz, m12 = yx - wz;\n var m21 = yx + wz, m22 = 1 - xx - zz;\n var m31 = zx - wy, m32 = zy + wx, m33 = 1 - xx - yy;\n out[1] = Math.asin(clamp(-m31, -1, 1)) * r2d;\n if (Math.abs(m31) < 0.9999999) {\n out[0] = Math.atan2(m32, m33) * r2d;\n out[2] = Math.atan2(m21, m11) * r2d;\n }\n else {\n out[0] = 0;\n out[2] = Math.atan2(-m12, m22) * r2d;\n }\n return out;\n}\n\nfunction getStandardParticleContent(particle) {\n var _a;\n var options = particle.options;\n var transform = particle.transform;\n var shape = {\n type: ShapeType.NONE,\n };\n if (particle.shape) {\n var shapeType = (_a = particle.shape.shape) === null || _a === void 0 ? void 0 : _a.replace(/([A-Z])/g, '_$1').toUpperCase().replace(/^_/, '');\n shape = __assign(__assign({}, particle.shape), { type: ShapeType[shapeType] });\n if (particle.shape.upDirection) {\n var _b = __read(particle.shape.upDirection, 3), x = _b[0], y = _b[1], z = _b[2];\n if (x === 0 && y === 0 && z === 0) {\n delete shape.upDirection;\n }\n }\n }\n if (options.startTurbulence) {\n shape.turbulenceX = ensureNumberExpression(options.turbulenceX);\n shape.turbulenceY = ensureNumberExpression(options.turbulenceY);\n shape.turbulenceZ = ensureNumberExpression(options.turbulenceZ);\n }\n var emission = particle.emission;\n if (emission.bursts && emission.bursts.length > 0) {\n emission.bursts = emission.bursts.map(function (b) { return objectValueToNumber(b); });\n }\n if (emission.burstOffsets && emission.burstOffsets.length > 0) {\n emission.burstOffsets = emission.burstOffsets.map(function (b) { return objectValueToNumber(b); });\n }\n if (emission.rateOverTime) {\n emission.rateOverTime = ensureNumberExpression(emission.rateOverTime);\n }\n var ret = {\n renderer: particle.renderer,\n shape: shape,\n splits: particle.splits,\n emission: emission,\n options: {\n startLifetime: ensureNumberExpression(options.startLifetime),\n start3DSize: !!options.start3DSize,\n startSize: ensureNumberExpression(options.startSize),\n startSizeX: ensureNumberExpression(options.startSizeX),\n startSizeY: ensureNumberExpression(options.startSizeY),\n sizeAspect: ensureNumberExpression(options.sizeAspect),\n maxCount: options.maxCount,\n startDelay: ensureNumberExpression(options.startDelay),\n startColor: ensureColorExpression(options.startColor, true),\n startRotationZ: ensureNumberExpression(options.startRotation || options.startRotationZ),\n particleFollowParent: options.particleFollowParent,\n },\n };\n if (options.start3DRotation) {\n ret.options.startRotationX = ensureNumberExpression(options.startRotationX);\n ret.options.startRotationY = ensureNumberExpression(options.startRotationY);\n }\n if (particle.filter) {\n var filter_1 = {};\n forEach(particle.filter, function (val, key) {\n // @ts-expect-error\n filter_1[key] = ensureValueGetter(val);\n });\n ret.filter = filter_1;\n }\n if (transform && transform.path) {\n ret.emitterTransform = {\n path: ensureFixedVec3(transform.path),\n };\n }\n var sizeOverLifetime = particle.sizeOverLifetime;\n if (sizeOverLifetime) {\n if (sizeOverLifetime.separateAxes) {\n ret.sizeOverLifetime = {\n separateAxes: true,\n x: ensureNumberExpression(sizeOverLifetime.x),\n y: ensureNumberExpression(sizeOverLifetime.y),\n };\n }\n else {\n ret.sizeOverLifetime = {\n size: ensureNumberExpression(sizeOverLifetime.size),\n };\n }\n }\n var velocityOverLifetime = particle.velocityOverLifetime || {};\n var sol = velocityOverLifetime.speedOverLifetime;\n if (sol) {\n sol = ensureFixedNumber(sol);\n }\n else {\n sol = undefined;\n }\n ret.positionOverLifetime = {\n gravity: options.gravity,\n gravityOverLifetime: ensureFixedNumber(options.gravityModifier),\n startSpeed: ensureNumberExpression(options.startSpeed),\n speedOverLifetime: sol,\n asMovement: velocityOverLifetime.asMovement,\n linearX: ensureNumberExpression(velocityOverLifetime.linearX),\n linearY: ensureNumberExpression(velocityOverLifetime.linearY),\n linearZ: ensureNumberExpression(velocityOverLifetime.linearZ),\n asRotation: velocityOverLifetime.asRotation,\n orbCenter: velocityOverLifetime.orbCenter,\n orbitalX: ensureNumberExpression(velocityOverLifetime.orbitalX),\n orbitalY: ensureNumberExpression(velocityOverLifetime.orbitalY),\n orbitalZ: ensureNumberExpression(velocityOverLifetime.orbitalZ),\n forceTarget: velocityOverLifetime.forceTarget,\n target: velocityOverLifetime.target,\n forceCurve: ensureFixedNumber(velocityOverLifetime.forceCurve),\n };\n deleteEmptyValue(ret.positionOverLifetime);\n var rotationOverLifetime = particle.rotationOverLifetime;\n if (rotationOverLifetime) {\n ret.rotationOverLifetime = {\n separateAxes: rotationOverLifetime.separateAxes,\n asRotation: rotationOverLifetime.asRotation,\n z: ensureNumberExpression(rotationOverLifetime.separateAxes ? rotationOverLifetime.z : rotationOverLifetime.angularVelocity),\n };\n if (rotationOverLifetime.separateAxes) {\n ret.rotationOverLifetime.y = ensureFixedNumber(rotationOverLifetime.y);\n ret.rotationOverLifetime.x = ensureFixedNumber(rotationOverLifetime.x);\n }\n }\n var colorOverLifetime = particle.colorOverLifetime;\n if (colorOverLifetime) {\n var col = ret.colorOverLifetime = {\n opacity: ensureFixedNumber(colorOverLifetime.opacity),\n };\n if (colorOverLifetime.color) {\n col.color = getGradientColor(colorOverLifetime.color);\n }\n }\n var textureSheetAnimation = particle.textureSheetAnimation;\n if (textureSheetAnimation) {\n ret.textureSheetAnimation = {\n row: textureSheetAnimation.row,\n col: textureSheetAnimation.col,\n total: textureSheetAnimation.total,\n animate: textureSheetAnimation.animate,\n cycles: ensureFixedNumber(textureSheetAnimation.cycles),\n animationDelay: ensureFixedNumberWithRandom(textureSheetAnimation.animationDelay, 0),\n animationDuration: ensureFixedNumberWithRandom(textureSheetAnimation.animationDuration, 0),\n };\n }\n var trials = particle.trails;\n if (trials) {\n ret.trails = {\n lifetime: ensureNumberExpression(trials.lifetime),\n dieWithParticles: trials.dieWithParticles,\n maxPointPerTrail: trials.maxPointPerTrail,\n minimumVertexDistance: trials.minimumVertexDistance,\n widthOverTrail: ensureFixedNumber(trials.widthOverTrail),\n colorOverTrail: trials.colorOverTrail && getGradientColor(trials.colorOverTrail, false),\n blending: trials.blending,\n colorOverLifetime: trials.colorOverLifetime && getGradientColor(trials.colorOverLifetime, false),\n inheritParticleColor: trials.inheritParticleColor,\n occlusion: trials.occlusion,\n transparentOcclusion: trials.transparentOcclusion,\n orderOffset: trials.orderOffset,\n sizeAffectsLifetime: trials.sizeAffectsLifetime,\n sizeAffectsWidth: trials.sizeAffectsWidth,\n texture: trials.texture,\n parentAffectsPosition: trials.parentAffectsPosition,\n opacityOverLifetime: ensureNumberExpression(trials.opacityOverLifetime),\n };\n }\n ret.trails && deleteEmptyValue(ret.trails);\n var interaction = particle.interaction;\n if (interaction) {\n ret.interaction = {\n behavior: interaction.behavior,\n radius: interaction.radius,\n multiple: interaction.multiple,\n };\n }\n return ret;\n}\n\nfunction getStandardNullContent(sprite, transform) {\n var _a;\n var opt = sprite.options;\n var velocityOverLifetime = sprite.velocityOverLifetime || {};\n var positionOverLifetime = {\n path: ensureFixedVec3((_a = sprite.transform) === null || _a === void 0 ? void 0 : _a.path),\n gravity: opt.gravity,\n gravityOverLifetime: ensureFixedNumber(opt.gravityModifier),\n direction: opt.direction,\n startSpeed: opt.startSpeed,\n asMovement: velocityOverLifetime.asMovement,\n linearX: ensureFixedNumber(velocityOverLifetime.linearX),\n linearY: ensureFixedNumber(velocityOverLifetime.linearY),\n linearZ: ensureFixedNumber(velocityOverLifetime.linearZ),\n asRotation: velocityOverLifetime.asRotation,\n orbCenter: velocityOverLifetime.orbCenter,\n orbitalX: ensureFixedNumber(velocityOverLifetime.orbitalX),\n orbitalY: ensureFixedNumber(velocityOverLifetime.orbitalY),\n orbitalZ: ensureFixedNumber(velocityOverLifetime.orbitalZ),\n speedOverLifetime: ensureFixedNumber(velocityOverLifetime.speedOverLifetime),\n };\n deleteEmptyValue(positionOverLifetime);\n var ret = {\n options: {\n startColor: ensureRGBAValue(opt.startColor),\n },\n positionOverLifetime: positionOverLifetime,\n };\n if (opt.startSize) {\n transform.scale = [opt.startSize, opt.startSize / (opt.sizeAspect || 1), 1];\n }\n if (opt.startRotation) {\n if (!transform.rotation) {\n transform.rotation = [0, 0, opt.startRotation];\n }\n else {\n transform.rotation[2] += opt.startRotation;\n }\n }\n var rotationOverLifetime = sprite.rotationOverLifetime;\n if (rotationOverLifetime) {\n var rot = ret.rotationOverLifetime = {\n separateAxes: rotationOverLifetime.separateAxes,\n asRotation: rotationOverLifetime.asRotation,\n };\n if (rot.separateAxes) {\n rot.x = ensureFixedNumber(rotationOverLifetime.x);\n rot.y = ensureFixedNumber(rotationOverLifetime.y);\n rot.z = ensureFixedNumber(rotationOverLifetime.z);\n }\n else {\n rot.z = ensureFixedNumber(rotationOverLifetime.angularVelocity);\n }\n }\n var colorOverLifetime = sprite.colorOverLifetime;\n if (colorOverLifetime) {\n var col = ret.colorOverLifetime = {\n opacity: ensureFixedNumber(colorOverLifetime.opacity),\n };\n if (colorOverLifetime.color) {\n col.color = getGradientColor(colorOverLifetime.color);\n }\n }\n var sizeOverLifetime = sprite.sizeOverLifetime;\n if (sizeOverLifetime) {\n ret.sizeOverLifetime = {\n separateAxes: sizeOverLifetime.separateAxes,\n size: ensureFixedNumber(sizeOverLifetime.size),\n x: ensureFixedNumber(sizeOverLifetime.x),\n y: ensureFixedNumber(sizeOverLifetime.y),\n z: ensureFixedNumber(sizeOverLifetime.z),\n };\n }\n return ret;\n}\nfunction getStandardSpriteContent(sprite, transform) {\n var ret = getStandardNullContent(sprite, transform);\n var texAni = sprite.textureSheetAnimation;\n if (texAni) {\n ret.textureSheetAnimation = {\n row: texAni.row,\n col: texAni.col,\n total: texAni.total || undefined,\n animate: texAni.animate,\n };\n }\n ret.renderer = sprite.renderer;\n if (sprite.splits) {\n ret.splits = sprite.splits;\n }\n if (sprite.interaction) {\n ret.interaction = sprite.interaction;\n }\n return ret;\n}\n\nfunction getStandardInteractContent(ui) {\n var options = ui.options;\n var option;\n switch (options.type) {\n case 'click': {\n option = {\n type: InteractType.CLICK,\n showPreview: options.showPreview,\n previewColor: options.previewColor && ensureRGBAValue(options.previewColor),\n behavior: options.behavior || InteractBehavior.NOTIFY,\n };\n break;\n }\n case 'drag': {\n option = {\n type: InteractType.DRAG,\n enableInEditor: !!options.enableInEditor,\n dxRange: options.dxRange,\n dyRange: options.dyRange,\n target: options.target,\n };\n break;\n }\n case 'message': {\n option = {\n type: InteractType.MESSAGE,\n };\n break;\n }\n }\n var ret = {\n // @ts-expect-error\n options: option,\n };\n return ret;\n}\n\nfunction getStandardCameraContent(model) {\n var _a, _b;\n var opt = model.options;\n var ret = {\n options: {\n fov: opt.fov,\n far: opt.far,\n near: opt.near,\n clipMode: opt.clipMode,\n },\n };\n var velocityOverLifetime = model.velocityOverLifetime;\n if (velocityOverLifetime || ((_a = model.transform) === null || _a === void 0 ? void 0 : _a.path)) {\n var positionOverLifetime = {\n path: ensureFixedVec3((_b = model.transform) === null || _b === void 0 ? void 0 : _b.path),\n linearX: ensureFixedNumber(velocityOverLifetime === null || velocityOverLifetime === void 0 ? void 0 : velocityOverLifetime.translateX),\n linearY: ensureFixedNumber(velocityOverLifetime === null || velocityOverLifetime === void 0 ? void 0 : velocityOverLifetime.translateY),\n linearZ: ensureFixedNumber(velocityOverLifetime === null || velocityOverLifetime === void 0 ? void 0 : velocityOverLifetime.translateZ),\n };\n deleteEmptyValue(positionOverLifetime);\n ret.positionOverLifetime = positionOverLifetime;\n }\n var rol = model.rotationOverLifetime;\n if (rol) {\n var rotationOverLifetime = {\n separateAxes: rol.separateAxes,\n x: ensureFixedNumber(rol === null || rol === void 0 ? void 0 : rol.rotateX),\n y: ensureFixedNumber(rol === null || rol === void 0 ? void 0 : rol.rotateY),\n z: rol.separateAxes ? ensureFixedNumber(rol === null || rol === void 0 ? void 0 : rol.rotateZ) : ensureFixedNumber(rol.rotation),\n };\n deleteEmptyValue(rotationOverLifetime);\n ret.rotationOverLifetime = rotationOverLifetime;\n }\n return ret;\n}\n\nvar convertParams = [\n 'strength',\n 'bloomAddon',\n 'colorAddon',\n 'period',\n 'waveMovement',\n 'colorThreshold',\n 'xOpacity',\n 'yOpacity',\n 'feather',\n];\nvar pathParams = [\n 'path', 'position',\n];\nfunction getStandardFilterContent(filter) {\n var ret = {};\n forEach(filter, function (val, key) {\n if (convertParams.includes(key)) {\n ret[key] = ensureFixedNumber(val);\n }\n else if (pathParams.includes(key)) {\n ret[key] = ensureFixedVec3(val);\n }\n else {\n ret[key] = val;\n }\n });\n return ret;\n}\n\n/**\n * 2.1 以下版本数据适配(mars-player@2.4.0 及以上版本支持 2.1 以下数据的适配)\n */\nfunction version21Migration(json) {\n json.compositions.forEach(function (composition) {\n composition.items.forEach(function (item) {\n if (item.type === ItemType.null) {\n if (item.endBehavior === ItemEndBehavior.destroy) {\n item.endBehavior = ItemEndBehavior.freeze;\n }\n }\n });\n });\n json.version = '2.1';\n return json;\n}\n/**\n * 2.2 以下版本数据适配(mars-player@2.5.0 及以上版本支持 2.2 以下数据的适配)\n */\nfunction version22Migration(json) {\n var _a;\n var singleVersion = (_a = json.version) === null || _a === void 0 ? void 0 : _a.split('.');\n if (!singleVersion || Number(singleVersion[0]) > 2 || (Number(singleVersion[0]) === 2 && Number(singleVersion[1]) >= 2)) {\n return json;\n }\n json.compositions.forEach(function (composition) {\n composition.items.forEach(function (item) {\n if (item.type === ItemType.mesh || item.type === ItemType.light) {\n item.endBehavior = item.endBehavior === 1 ? ItemEndBehavior.destroy : item.endBehavior;\n }\n });\n });\n return json;\n}\n\nvar v0 = /^(\\d+)\\.(\\d+)\\.(\\d+)(-(\\w+)\\.\\d+)?$/;\nvar standardVersion = /^(\\d+)\\.(\\d+)$/;\nvar reverseParticle = false;\nfunction getStandardJSON(json) {\n var _a, _b;\n if (!json || typeof json !== 'object') {\n throw Error('expect a json object');\n }\n // 修正老版本数据中,meshItem以及lightItem结束行为错误问题\n version22Migration(json);\n if (v0.test(json.version)) {\n reverseParticle = ((_a = (/^(\\d+)/).exec(json.version)) === null || _a === void 0 ? void 0 : _a[0]) === '0';\n return version21Migration(getStandardJSONFromV0(json));\n }\n var mainVersion = (_b = standardVersion.exec(json.version)) === null || _b === void 0 ? void 0 : _b[1];\n if (mainVersion) {\n if (Number(mainVersion) < 2) {\n return version21Migration(json);\n }\n return json;\n }\n throw Error('invalid json version ' + json.version);\n}\nvar currentVersion = '1.0';\nfunction getStandardJSONFromV0(json) {\n var _a, _b;\n currentVersion = '1.0';\n var plugins = json.plugins || [];\n if ((_a = json.bins) === null || _a === void 0 ? void 0 : _a.length) {\n currentVersion = '1.3';\n }\n var requires = (json.requires || []).slice();\n var images = json.images.map(function (img, index) { return getStandardImage(img, index, json.imageTags || []); });\n var textures = json.textures || images.map(function (img, i) { return ({ source: i, flipY: true }); });\n var ret = {\n plugins: plugins,\n shapes: json.shapes || [],\n type: 'ge',\n version: currentVersion,\n playerVersion: (_b = json.playerVersion) !== null && _b !== void 0 ? _b : {\n web: '',\n native: '',\n },\n compositionId: json.compositionId + '',\n compositions: json.compositions.map(function (comp) { return getStandardComposition(comp, { plugins: plugins, requires: requires }); }),\n images: images,\n imgUsage: json._imgs,\n binUsage: json.binUsage,\n spines: json.spines,\n requires: json.requires,\n textures: textures,\n bins: (json.bins || []).slice(),\n };\n if (json._textures) {\n ret._textures = json._textures;\n }\n return ret;\n}\nfunction getStandardImage(image, index, imageTags) {\n var renderLevel = imageTags[index];\n var oriY = image.oriY;\n if (typeof image === 'string') {\n return {\n renderLevel: renderLevel,\n url: image,\n oriY: oriY,\n };\n }\n else if (image.template) {\n return {\n url: image.url,\n template: image.template,\n webp: image.webp,\n renderLevel: renderLevel,\n oriY: oriY,\n };\n }\n else if (image.compressed) {\n return {\n url: image.url,\n oriY: oriY,\n compressed: {\n astc: image.compressed.android,\n pvrtc: image.compressed.iOS,\n },\n webp: image.webp,\n renderLevel: renderLevel,\n };\n }\n else if (image.url) {\n return {\n url: image.url,\n type: image.type,\n webp: image.webp,\n renderLevel: renderLevel,\n oriY: oriY,\n loop: image.loop,\n };\n }\n else if (image && image.sourceType) {\n return image;\n }\n throw Error('invalid image type');\n}\nfunction getStandardComposition(composition, opt) {\n var _a;\n if (opt === void 0) { opt = {}; }\n var ret = {\n id: composition.id + '',\n camera: Object.assign({ clipMode: CAMERA_CLIP_MODE_NORMAL }, composition.camera),\n duration: composition.duration,\n endBehavior: composition.endBehavior,\n items: composition.items.map(function (item) { return getStandardItem(item, opt); }),\n name: composition.name,\n };\n var startTime = composition.startTime || composition.st;\n if (startTime) {\n ret.startTime = startTime;\n }\n var previewSize = (_a = composition.meta) === null || _a === void 0 ? void 0 : _a.previewSize;\n if (previewSize && previewSize[0] === previewSize[1] && previewSize[0] === 0) {\n previewSize = undefined;\n }\n if (previewSize) {\n ret.previewSize = previewSize;\n }\n return ret;\n}\nvar tempQuat = [0, 0, 0, 1];\nvar stdAnchor = 0.5;\nfunction getStandardItem(item, opt) {\n var _a, _b, _c;\n if (opt === void 0) { opt = {}; }\n var type = ItemType.base;\n var transform;\n var originContent;\n var content;\n var endBehavior = item.endBehavior;\n var renderLevel;\n var pluginName;\n var duration = NaN;\n var pn;\n if (item.content) {\n type = item.type || ItemType.plugin;\n pn = item.pn;\n pluginName = item.pluginName;\n content = item.content;\n originContent = item.content;\n if (isNaN(pn) && !pluginName) {\n pluginName = content.options.type;\n }\n if (item.duration) {\n duration = item.duration;\n }\n transform = item.transform || getTransform(originContent.transform);\n if (type === ItemType.filter) {\n if (currentVersion < '1.1') {\n currentVersion = '1.1';\n }\n content = getStandardSpriteContent(originContent, transform);\n // @ts-expect-error\n content.filter = getStandardFilterContent(originContent.filter);\n }\n }\n else if (item.particle) {\n type = ItemType.particle;\n originContent = item.particle;\n transform = getTransform(originContent.transform, reverseParticle, true);\n content = getStandardParticleContent(originContent);\n }\n else if (item.sprite) {\n type = ItemType.sprite;\n originContent = item.sprite;\n transform = getTransform(originContent.transform, false, true);\n content = getStandardSpriteContent(originContent, transform);\n }\n else if (item.cal) {\n type = ItemType.null;\n originContent = item.cal;\n transform = getTransform(originContent.transform, false, true);\n content = getStandardNullContent(originContent, transform);\n }\n else if (item.ui) {\n type = ItemType.interact;\n originContent = item.ui;\n transform = getTransform(originContent.transform);\n content = getStandardInteractContent(originContent);\n transform.scale = [originContent.options.width || 1, originContent.options.height || 1, 1];\n }\n else if (item.model) {\n originContent = item.model;\n if (item.model.options.type === 1) {\n type = ItemType.camera;\n transform = getTransform(originContent.transform);\n content = getStandardCameraContent(originContent);\n }\n }\n if ((_a = content.renderer) === null || _a === void 0 ? void 0 : _a.anchor) {\n var anchor = new Float32Array(content.renderer.anchor);\n if (anchor[0] == stdAnchor && anchor[1] == stdAnchor) {\n delete content.renderer.anchor;\n }\n else if (opt.requires) {\n arrAdd(opt.requires, 'anchor');\n }\n }\n if (originContent) {\n var looping = (_b = originContent.options) === null || _b === void 0 ? void 0 : _b.looping;\n if (looping) {\n if (Array.isArray(looping)) {\n endBehavior = looping[1] ? ItemEndBehavior.loop : ItemEndBehavior.destroy;\n }\n else {\n endBehavior = ItemEndBehavior.loop;\n }\n }\n else {\n endBehavior = endBehavior || ((_c = originContent === null || originContent === void 0 ? void 0 : originContent.options) === null || _c === void 0 ? void 0 : _c.endBehavior) || ItemEndBehavior.destroy;\n }\n if (originContent.options.renderLevel) {\n renderLevel = originContent.options.renderLevel;\n }\n if (isNaN(duration)) {\n duration = originContent.options.duration;\n }\n }\n var ret = {\n type: type,\n name: item.name,\n delay: item.delay,\n duration: duration,\n id: item.id + '',\n // @ts-expect-error\n transform: transform,\n endBehavior: endBehavior,\n // @ts-expect-error\n renderLevel: renderLevel,\n content: content,\n };\n // @ts-expect-error\n if (pluginName) {\n if (opt.plugins) {\n arrAdd(opt.plugins, pluginName);\n ret.pn = opt.plugins.indexOf(pluginName);\n }\n else {\n ret.pluginName = pluginName;\n }\n // @ts-expect-error\n }\n else if (Number.isInteger(pn)) {\n // @ts-expect-error\n ret.pn = pn;\n }\n if (item.parentId) {\n ret.parentId = item.parentId + '';\n }\n return ret;\n function getTransform(originTransform, inverseRotation, changeOrder) {\n if (originTransform) {\n var transform_1 = {};\n var rotation = originTransform.rotation;\n if (rotation) {\n if (inverseRotation) {\n transform_1.rotation = [-rotation[0], -rotation[1], -rotation[2]];\n }\n else {\n transform_1.rotation = [rotation[0], rotation[1], rotation[2]];\n }\n if (changeOrder) {\n var q = quatFromXYZRotation(tempQuat, transform_1.rotation[0], transform_1.rotation[1], transform_1.rotation[2]);\n transform_1.rotation = rotationZYXFromQuat([], q);\n }\n }\n var position = originTransform.position;\n if (position) {\n transform_1.position = originTransform.position;\n }\n if (Array.isArray(originTransform.scale)) {\n transform_1.scale = [originTransform.scale[0] || 1, originTransform.scale[1] || 1, originTransform.scale[2] || 1];\n }\n return transform_1;\n }\n return {};\n }\n}\n\nexport { arrAdd, colorToArr, deleteEmptyValue, ensureColorExpression, ensureFixedNumber, ensureFixedNumberWithRandom, ensureFixedVec3, ensureGradient, ensureNumberExpression, ensureRGBAValue, ensureValueGetter, forEach, getGradientColor, getStandardComposition, getStandardImage, getStandardItem, getStandardJSON, normalizeColor, objectValueToNumber, parsePercent, quatFromXYZRotation, rotationZYXFromQuat };\n//# sourceMappingURL=fallback.mjs.map\n"],"names":["getRandomValues","rnds8","Uint8Array","rng","crypto","bind","Error","byteToHex","i","push","toString","slice","native","randomUUID","v4","options","buf","offset","rnds","random","arr","unsafeStringify","DEG2RAD","Math","PI","RAD2DEG","NumberEpsilon","clamp","value","min","max","fixedMin","isNaN","Infinity","fixedMax","lower","upper","EulerOrder","Vector2","x","y","this","prototype","set","setZero","setFromNumber","num","setFromArray","array","_a","_b","copyFrom","src","clone","setElement","index","console","error","getElement","add","right","Array","addVectors","left","subtract","subtractVectors","multiply","multiplyVectors","divide","scale","v","sum","floor","ceil","round","abs","negate","length","sqrt","lengthSquared","normalize","setLength","lerp","other","alpha","lerpVectors","v1","v2","dot","cross","distance","dx","dy","distanceSquared","equals","isZero","eps","toArray","fill","fromNumber","fromArray","ONE","ZERO","Vector3","z","_c","addScaledVector","s","crossVectors","ax","ay","az","bx","by","bz","reflect","normal","dz","toVector2","applyEuler","euler","out","rotateVector3","applyQuaternion","q","applyMatrix","m","transformPoint","applyNormalMatrix","transformNormal","applyProjectionMatrix","projectPoint","X","Y","Z","Quaternion","w","setFromEuler","toQuaternion","setFromAxisAngle","axis","angle","halfAngle","sin","tempVec0","cos","setFromRotationMatrix","te","elements","m11","m12","m13","m21","m22","m23","m31","m32","m33","trace","setFromUnitVectors","from","to","r","Number","EPSILON","quat","angleTo","acos","rotateTowards","step","t","slerp","identity","invert","conjugate","l","multiplyQuaternions","premultiply","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","cosHalfTheta","sqrSinHalfTheta","sinHalfTheta","halfTheta","atan2","ratioA","ratioB","slerpQuaternions","qa","qb","qx","qy","qz","qw","vx","vy","vz","ix","iy","iz","iw","res","quaternion","toVector4","vec","toEuler","setFromQuaternion","toMatrix4","mat","compose","fromEuler","fromAxisAngle","fromRotationMatrix","fromUnitVectors","__read","o","n","Symbol","iterator","e","call","ar","next","done","__spreadArray","pack","arguments","concat","Matrix4","m41","m42","m43","m14","m24","m34","m44","setFromRowMajorData","setFromColumnVectors","c1","c2","c3","c4","setFromMatrix3","me","setFromScale","setFromTranslation","setFromRotationX","theta","c","setFromRotationY","setFromRotationZ","setFromRotationAxis","tx","ty","setFromShear","setFromBasis","xAxis","yAxis","zAxis","isIdentity","getColumnVector","lookAt","eye","target","up","vX","vY","tempVec1","vZ","tempVec2","addScaledMatrix","re","multiplyMatrices","ae","be","a11","a12","a13","a14","a21","a22","a23","a24","a31","a32","a33","a34","a41","a42","a43","a44","b11","b12","b13","b14","b21","b22","b23","b24","b31","b32","b33","b34","b41","b42","b43","b44","multiplyScalar","determinant","transpose","t11","t12","t13","t14","det","detInv","extractBasis","translation","rotation","anchor","x2","y2","z2","xx","xy","xz","yy","yz","zz","wx","wy","wz","sx","sy","sz","decompose","tempMat0","invSX","invSY","invSZ","getTranslation","getScale","hypot","getTransform","orthographic","top","bottom","near","far","a","b","tz","perspective","fov","aspect","reverse","f","tan","nf","transformVector4","matrix","fromIdentity","fromLookAt","fromPerspective","fromColumnVectors","fromMatrix3","fromScale","fromTranslation","fromRotationX","fromRotationY","fromRotationZ","fromRotationAxis","fromQuaternion","fromShear","fromBasis","fromRowMajorData","IDENTITY","Euler","order","DEFAULT_ORDER","setFromRotationMatrix4","XYZ","asin","YXZ","ZXY","ZYX","YZX","XZY","setFromVector3","_d","addEulers","reorder","newOrder","tempQuat0","toVector3","s1","s2","s3","cosX","sinX","cosY","sinY","cosZ","sinZ","cosXcosZ","cosXsinZ","sinXcosZ","sinXsinZ","cosYcosZ","cosYsinZ","sinYcosZ","sinYsinZ","cosXcosY","cosXsinY","sinXcosY","sinXsinY","fromRotationMatrix4","fromVector3","Vector4","Ray","origin","direction","ray","recast","at","ret","intersectBox","box","tmin","tmax","tymin","tymax","tzmin","tzmax","ox","oy","oz","bxmin","bymin","bzmin","bxmax","bymax","bzmax","invdirx","invdiry","invdirz","intersectPlane","plane","denominator","undefined","intersectSphere","sphere","center","vector","tca","d2","radius2","radius","thc","t0","t1","intersectTriangle","triangle","backfaceCulling","sign","p0","p1","p2","edge1","edge2","diff","tempVec3","DdN","DdQxE2","DdE1xQ","QdN","RenderLevel","BlendingMode","SideMode","MaskMode","ShapeType","PluginType","InteractType","InteractBehavior","ItemType","RenderMode","ParticleOrigin","CameraClipMode","CompositionEndBehavior","ValueType","BezierKeyframeType","ItemEndBehavior","ParentItemEndBehavior","ParticleInteractionBehavior","ShapeArcMode","ModelBoundingType","MaterialType","MaterialBlending","RenderMode3D","TextOverflow","TextBaseline","TextAlignment","TextWeight","FontStyle","SuppressedError"],"mappings":"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"}