@galacean/effects-threejs 2.0.0-alpha.2 → 2.0.0-alpha.3

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":["../../../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/matrix3.js","../../../node_modules/.pnpm/@galacean+effects-math@1.0.1/node_modules/@galacean/effects-math/es/core/ray.js","../../../node_modules/.pnpm/@galacean+effects-math@1.0.1/node_modules/@galacean/effects-math/es/core/color.js","../../../node_modules/.pnpm/@galacean+effects-math@1.0.1/node_modules/@galacean/effects-math/es/core/box3.js","../../../node_modules/.pnpm/@galacean+effects-math@1.0.1/node_modules/@galacean/effects-math/es/core/sphere.js","../../../node_modules/.pnpm/@galacean+effects-specification@1.0.1/node_modules/@galacean/effects-specification/dist/index.mjs","../../effects-core/src/libs/earcut.js","../../../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","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 { isEqual } from './utils';\n/**\n * 三维矩阵(列优先矩阵)\n */\nvar Matrix3 = /** @class */ (function () {\n /**\n * 构造函数,初始值为零矩阵\n * @param [m11=1] - 第 1 行,第 1 列\n * @param [m21=0] - 第 2 行,第 1 列\n * @param [m31=0] - 第 3 行,第 1 列\n * @param [m12=0] - 第 1 行,第 2 列\n * @param [m22=1] - 第 2 行,第 2 列\n * @param [m32=0] - 第 3 行,第 2 列\n * @param [m13=0] - 第 1 行,第 3 列\n * @param [m23=0] - 第 2 行,第 3 列\n * @param [m33=1] - 第 3 行,第 3 列\n */\n function Matrix3(m11, m21, m31, m12, m22, m32, m13, m23, m33) {\n if (m11 === void 0) { m11 = 1; }\n if (m21 === void 0) { m21 = 0; }\n if (m31 === void 0) { m31 = 0; }\n if (m12 === void 0) { m12 = 0; }\n if (m22 === void 0) { m22 = 1; }\n if (m32 === void 0) { m32 = 0; }\n if (m13 === void 0) { m13 = 0; }\n if (m23 === void 0) { m23 = 0; }\n if (m33 === void 0) { m33 = 1; }\n this.elements = [\n m11, m21, m31,\n m12, m22, m32,\n m13, m23, m33,\n ];\n }\n /**\n * 设置矩阵\n * @param m11 - 第 1 行,第 1 列\n * @param m21 - 第 2 行,第 1 列\n * @param m31 - 第 3 行,第 1 列\n * @param m12 - 第 1 行,第 2 列\n * @param m22 - 第 2 行,第 2 列\n * @param m32 - 第 3 行,第 2 列\n * @param m13 - 第 1 行,第 3 列\n * @param m23 - 第 2 行,第 3 列\n * @param m33 - 第 3 行,第 3 列\n * @returns\n */\n Matrix3.prototype.set = function (m11, m21, m31, m12, m22, m32, m13, m23, m33) {\n var e = this.elements;\n e[0] = m11;\n e[3] = m12;\n e[6] = m13;\n e[1] = m21;\n e[4] = m22;\n e[7] = m23;\n e[2] = m31;\n e[5] = m32;\n e[8] = m33;\n return this;\n };\n /**\n * 设置矩阵通过行优先数据\n * @param m11 - 第 1 行,第 1 列\n * @param m12 - 第 1 行,第 2 列\n * @param m13 - 第 1 行,第 3 列\n * @param m21 - 第 2 行,第 1 列\n * @param m22 - 第 2 行,第 2 列\n * @param m23 - 第 2 行,第 3 列\n * @param m31 - 第 3 行,第 1 列\n * @param m32 - 第 3 行,第 2 列\n * @param m33 - 第 3 行,第 3 列\n * @returns 矩阵\n */\n Matrix3.prototype.setFromRowMajorData = function (m11, m12, m13, m21, m22, m23, m31, m32, m33) {\n var e = this.elements;\n e[0] = m11;\n e[3] = m12;\n e[6] = m13;\n e[1] = m21;\n e[4] = m22;\n e[7] = m23;\n e[2] = m31;\n e[5] = m32;\n e[8] = m33;\n return this;\n };\n /**\n * 通过列向量设置矩阵\n * @param c1 - 第一列\n * @param c2 - 第二列\n * @param c3 - 第三列\n * @returns 矩阵\n */\n Matrix3.prototype.setFromColumnVectors = function (c1, c2, c3) {\n return this.set(c1.x, c1.y, c1.z, c2.x, c2.y, c2.z, c3.x, c3.y, c3.z);\n };\n /**\n * 通过四阶矩阵设置三阶矩阵\n * @param m - 四阶矩阵\n * @returns 矩阵\n */\n Matrix3.prototype.setFromMatrix4 = function (m) {\n var me = m.elements;\n return this.set(me[0], me[1], me[2], me[4], me[5], me[6], me[8], me[9], me[10]);\n };\n /**\n * 通过数组设置矩阵\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns 矩阵\n */\n Matrix3.prototype.setFromArray = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n for (var i = 0; i < 9; i++) {\n this.elements[i] = array[offset + i];\n }\n return this;\n };\n /**\n * 通过四元数设置矩阵\n * @param quat - 四元数\n * @returns 矩阵\n */\n Matrix3.prototype.setFromQuaternion = function (quat) {\n var x = quat.x, y = quat.y, z = quat.z, w = quat.w;\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 te = this.elements;\n te[0] = 1 - (yy + zz);\n te[1] = xy + wz;\n te[2] = xz - wy;\n te[3] = xy - wz;\n te[4] = 1 - (xx + zz);\n te[5] = yz + wx;\n te[6] = xz + wy;\n te[7] = yz - wx;\n te[8] = 1 - (xx + yy);\n return this;\n };\n /**\n * 矩阵清零\n * @returns 零矩阵\n */\n Matrix3.prototype.setZero = function () {\n for (var i = 0; i < 9; i++) {\n this.elements[i] = 0;\n }\n return this;\n };\n /**\n * 矩阵单位化\n * @returns 单位矩阵\n */\n Matrix3.prototype.identity = function () {\n return this.set(1, 0, 0, 0, 1, 0, 0, 0, 1);\n };\n /**\n * 矩阵克隆\n * @returns 克隆结果\n */\n Matrix3.prototype.clone = function () {\n var e = this.elements;\n return new Matrix3(e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8]);\n };\n /**\n * 矩阵复制\n * @param m - 复制对象\n * @returns 复制结果\n */\n Matrix3.prototype.copyFrom = function (m) {\n this.elements = __spreadArray([], __read(m.elements), false);\n return this;\n };\n /**\n * 得到列向量\n * @param i - 列向量索引,从 0 开始\n * @returns 列向量\n */\n Matrix3.prototype.getColumnVector = function (i, v) {\n return v.set(this.elements[i * 3], this.elements[i * 3 + 1], this.elements[i * 3 + 2]);\n };\n /**\n * 矩阵缩放\n * @param sx - x 轴缩放分量\n * @param sy - y 轴缩放分量\n * @returns 缩放结果\n */\n Matrix3.prototype.scale = function (sx, sy) {\n var e = this.elements;\n e[0] *= sx;\n e[3] *= sx;\n e[6] *= sx;\n e[1] *= sy;\n e[4] *= sy;\n e[7] *= sy;\n return this;\n };\n /**\n * 矩阵旋转\n * @param theta - 旋转角度(弧度)\n * @returns 旋转结果\n */\n Matrix3.prototype.rotate = function (theta) {\n var c = Math.cos(theta);\n var s = Math.sin(theta);\n var e = this.elements;\n var m11 = e[0], m12 = e[3], m13 = e[6];\n var m21 = e[1], m22 = e[4], m23 = e[7];\n e[0] = c * m11 + s * m21;\n e[3] = c * m12 + s * m22;\n e[6] = c * m13 + s * m23;\n e[1] = -s * m11 + c * m21;\n e[4] = -s * m12 + c * m22;\n e[7] = -s * m13 + c * m23;\n return this;\n };\n /**\n * 矩阵平移\n * @param x - x 轴平移分量\n * @param y - y 轴平移分量\n * @returns 平移结果\n */\n Matrix3.prototype.translate = function (x, y) {\n var e = this.elements;\n e[0] += x * e[2];\n e[3] += x * e[5];\n e[6] += x * e[8];\n e[1] += y * e[2];\n e[4] += y * e[5];\n e[7] += y * e[8];\n return this;\n };\n /**\n * 矩阵右乘\n * @param right - 相乘矩阵\n * @returns 右乘结果\n */\n Matrix3.prototype.multiply = function (right) {\n if (typeof right === 'number') {\n for (var i = 0; i < 9; 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 Matrix3.prototype.premultiply = function (left) {\n return this.multiplyMatrices(left, this);\n };\n /**\n * 矩阵乘法\n * @param left - 矩阵\n * @param right - 矩阵\n * @returns 相乘结果\n */\n Matrix3.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[3], a13 = ae[6];\n var a21 = ae[1], a22 = ae[4], a23 = ae[7];\n var a31 = ae[2], a32 = ae[5], a33 = ae[8];\n var b11 = be[0], b12 = be[3], b13 = be[6];\n var b21 = be[1], b22 = be[4], b23 = be[7];\n var b31 = be[2], b32 = be[5], b33 = be[8];\n te[0] = a11 * b11 + a12 * b21 + a13 * b31;\n te[3] = a11 * b12 + a12 * b22 + a13 * b32;\n te[6] = a11 * b13 + a12 * b23 + a13 * b33;\n te[1] = a21 * b11 + a22 * b21 + a23 * b31;\n te[4] = a21 * b12 + a22 * b22 + a23 * b32;\n te[7] = a21 * b13 + a22 * b23 + a23 * b33;\n te[2] = a31 * b11 + a32 * b21 + a33 * b31;\n te[5] = a31 * b12 + a32 * b22 + a33 * b32;\n te[8] = a31 * b13 + a32 * b23 + a33 * b33;\n return this;\n };\n /**\n * 矩阵求行列式值\n * @returns 行列式结果\n */\n Matrix3.prototype.determinant = function () {\n var e = this.elements;\n var m11 = e[0], m21 = e[3], m31 = e[6];\n var m12 = e[1], m22 = e[4], m32 = e[7];\n var m13 = e[2], m23 = e[5], m33 = e[8];\n return (m11 * (m22 * m33 - m23 * m32) +\n m12 * (m23 * m31 - m21 * m33) +\n m13 * (m21 * m32 - m22 * m31));\n };\n /**\n * 矩阵求逆\n * @returns 逆矩阵\n */\n Matrix3.prototype.invert = function () {\n var e = this.elements;\n var m11 = e[0], m12 = e[3], m13 = e[6];\n var m21 = e[1], m22 = e[4], m23 = e[7];\n var m31 = e[2], m32 = e[5], m33 = e[8];\n var t11 = m33 * m22 - m32 * m23;\n var t12 = m32 * m13 - m33 * m12;\n var t13 = m23 * m12 - m22 * m13;\n var det = m11 * t11 + m21 * t12 + m31 * t13;\n if (det === 0) {\n return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n var detInv = 1 / det;\n e[0] = t11 * detInv;\n e[1] = (m31 * m23 - m33 * m21) * detInv;\n e[2] = (m32 * m21 - m31 * m22) * detInv;\n e[3] = t12 * detInv;\n e[4] = (m33 * m11 - m31 * m13) * detInv;\n e[5] = (m31 * m12 - m32 * m11) * detInv;\n e[6] = t13 * detInv;\n e[7] = (m21 * m13 - m23 * m11) * detInv;\n e[8] = (m22 * m11 - m21 * m12) * detInv;\n return this;\n };\n /**\n * 矩阵转置\n * @returns 转置结果\n */\n Matrix3.prototype.transpose = function () {\n var t;\n var m = this.elements;\n t = m[1];\n m[1] = m[3];\n m[3] = t;\n t = m[2];\n m[2] = m[6];\n m[6] = t;\n t = m[5];\n m[5] = m[7];\n m[7] = t;\n return this;\n };\n /**\n * 对点进行矩阵变换\n * @param v - 输入点\n * @param out - 输出点,如果没有会覆盖输入的数据\n * @returns 变换后的结果\n */\n Matrix3.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[3] * y + e[6] * z;\n res.y = e[1] * x + e[4] * y + e[7] * z;\n res.z = e[2] * x + e[5] * y + e[8] * z;\n return res;\n };\n /**\n * 对法向量进行矩阵变换\n * @param v - 输入向量\n * @param out - 输出向量,如果没有会覆盖输入的数据\n * @returns 变换后的结果\n */\n Matrix3.prototype.transformNormal = function (v, out) {\n return this.transformPoint(v, out).normalize();\n };\n /**\n * 矩阵判等\n * @param matrix - 矩阵\n * @returns 判等结果\n */\n Matrix3.prototype.equals = function (matrix) {\n var te = this.elements;\n var me = matrix.elements;\n for (var i = 0; i < 9; i++) {\n if (!isEqual(te[i], me[i])) {\n return false;\n }\n }\n return true;\n };\n /**\n * 矩阵转为数组\n * @returns\n */\n Matrix3.prototype.toArray = function () {\n return __spreadArray([], __read(this.elements), false);\n };\n Matrix3.prototype.fill = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n var e = this.elements;\n array[offset] = e[0];\n array[offset + 1] = e[1];\n array[offset + 2] = e[2];\n array[offset + 3] = e[3];\n array[offset + 4] = e[4];\n array[offset + 5] = e[5];\n array[offset + 6] = e[6];\n array[offset + 7] = e[7];\n array[offset + 8] = e[8];\n };\n /**\n * 创建单位阵\n * @returns 单位矩阵\n */\n Matrix3.fromIdentity = function () {\n return new Matrix3(1, 0, 0, 0, 1, 0, 0, 0, 1);\n };\n /**\n * 通过列向量创建矩阵\n * @param c1 - 第一列\n * @param c2 - 第二列\n * @param c3 - 第三列\n * @returns 矩阵\n */\n Matrix3.fromColumnVectors = function (c1, c2, c3) {\n return new Matrix3().setFromColumnVectors(c1, c2, c3);\n };\n /**\n * 通过四阶矩阵创建矩阵(获取空间变换矩阵旋转缩放部分)\n * @param m - 四阶矩阵\n * @returns 矩阵\n */\n Matrix3.fromMatrix4 = function (m) {\n return new Matrix3().setFromMatrix4(m);\n };\n /**\n * 通过数组创建矩阵\n * @param array - 数组(列优先)\n * @param [offset=0] - 起始偏移值\n * @returns 矩阵\n */\n Matrix3.fromArray = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n return new Matrix3().setFromArray(array, offset);\n };\n /**\n * 通过四元数创建矩阵\n * @param quat - 四元数\n * @returns 矩阵\n */\n Matrix3.fromQuaternion = function (quat) {\n return new Matrix3().setFromQuaternion(quat);\n };\n /**\n * 设置矩阵通过行优先数据\n * @param m11 - 第 1 行,第 1 列\n * @param m12 - 第 1 行,第 2 列\n * @param m13 - 第 1 行,第 3 列\n * @param m21 - 第 2 行,第 1 列\n * @param m22 - 第 2 行,第 2 列\n * @param m23 - 第 2 行,第 3 列\n * @param m31 - 第 3 行,第 1 列\n * @param m32 - 第 3 行,第 2 列\n * @param m33 - 第 3 行,第 3 列\n * @returns 矩阵\n */\n Matrix3.fromRowMajorData = function (m11, m12, m13, m21, m22, m23, m31, m32, m33) {\n return new Matrix3(m11, m21, m31, m12, m22, m32, m13, m23, m33);\n };\n return Matrix3;\n}());\nexport { Matrix3 };\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","import { Vector4 } from './vector4';\nexport var Color = /** @class */ (function () {\n /**\n * 构造函数,默认值为黑色\n * @param [r=0]\n * @param [g=0]\n * @param [b=0]\n * @param [a=0]\n */\n function Color(r, g, b, a) {\n if (r === void 0) { r = 0; }\n if (g === void 0) { g = 0; }\n if (b === void 0) { b = 0; }\n if (a === void 0) { a = 0; }\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n }\n /**\n * 设置颜色\n * @param r - r 分量\n * @param g - g 分量\n * @param b - b 分量\n * @param a - a 分量\n * @returns\n */\n Color.prototype.set = function (r, g, b, a) {\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n return this;\n };\n /**\n * 设置零颜色\n * @returns\n */\n Color.prototype.setZero = function () {\n this.r = 0;\n this.g = 0;\n this.b = 0;\n this.a = 0;\n return this;\n };\n /**\n * 通过标量数值设置颜色\n * @param num - 数值\n * @returns\n */\n Color.prototype.setFromNumber = function (num) {\n this.r = num;\n this.g = num;\n this.b = num;\n this.a = num;\n return this;\n };\n /**\n * 通过Vector4创建颜色\n * @param v - Vector4\n * @returns\n */\n Color.prototype.setFromVector4 = function (v) {\n this.r = v.x;\n this.g = v.y;\n this.b = v.z;\n this.a = v.w;\n return this;\n };\n /**\n * 通过数组创建颜色\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns\n */\n Color.prototype.setFromArray = function (array, offset) {\n var _a, _b, _c, _d;\n if (offset === void 0) { offset = 0; }\n this.r = (_a = array[offset]) !== null && _a !== void 0 ? _a : 0;\n this.g = (_b = array[offset + 1]) !== null && _b !== void 0 ? _b : 0;\n this.b = (_c = array[offset + 2]) !== null && _c !== void 0 ? _c : 0;\n this.a = (_d = array[offset + 3]) !== null && _d !== void 0 ? _d : 0;\n return this;\n };\n Color.prototype.setFromHSV = function (hue, saturation, value, alpha) {\n if (alpha === void 0) { alpha = 1; }\n var chroma = value * saturation;\n var h = hue / 60;\n var x = chroma * (1 - Math.abs((h % 2) - 1));\n var r = 0;\n var g = 0;\n var b = 0;\n if (h >= 0 && h <= 1) {\n r = chroma;\n g = x;\n }\n else if (h >= 1 && h <= 2) {\n r = x;\n g = chroma;\n }\n else if (h >= 2 && h <= 3) {\n g = chroma;\n b = x;\n }\n else if (h >= 3 && h <= 4) {\n g = x;\n b = chroma;\n }\n else if (h >= 4 && h <= 5) {\n r = x;\n b = chroma;\n }\n else if (h >= 5 && h <= 6) {\n r = chroma;\n b = x;\n }\n var m = value - chroma;\n return this.set(r + m, g + m, b + m, alpha);\n };\n Color.prototype.setFromHexString = function (hex) {\n if (hex.substring(0, 1) !== '#' || (hex.length !== 9 && hex.length !== 7)) {\n return this;\n }\n var r = parseInt(hex.substring(1, 3), 16) / 255.0;\n var g = parseInt(hex.substring(3, 5), 16) / 255.0;\n var b = parseInt(hex.substring(5, 7), 16) / 255.0;\n var a = hex.length === 9 ? parseInt(hex.substring(7, 9), 16) / 255.0 : 1.0;\n return this.set(r, g, b, a);\n };\n /**\n * 拷贝颜色\n * @param v - 复制对象\n * @returns 拷贝结果\n */\n Color.prototype.copyFrom = function (v) {\n this.r = v.r;\n this.g = v.g;\n this.b = v.b;\n this.a = v.a;\n return this;\n };\n /**\n * 克隆颜色\n * @returns 克隆结果\n */\n Color.prototype.clone = function () {\n return new Color(this.r, this.g, this.b, this.a);\n };\n /**\n * 根据下标设置颜色分量\n * @param index - 下标值\n * @param value - 分量值\n * @returns\n */\n Color.prototype.setElement = function (index, value) {\n switch (index) {\n case 0:\n this.r = value;\n break;\n case 1:\n this.g = value;\n break;\n case 2:\n this.b = value;\n break;\n case 3:\n this.a = 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 Color.prototype.getElement = function (index) {\n switch (index) {\n case 0: return this.r;\n case 1: return this.g;\n case 2: return this.b;\n case 3: return this.a;\n default: console.error('index is out of range: ' + index);\n }\n return 0;\n };\n /**\n * 颜色相加\n * @param right - 相加对象,颜色 | 数字\n * @returns 相加结果\n */\n Color.prototype.add = function (right) {\n if (typeof right === 'number') {\n this.r += right;\n this.g += right;\n this.b += right;\n this.a += right;\n }\n else if (right instanceof Array) {\n this.r += right[0];\n this.g += right[1];\n this.b += right[2];\n this.a += right[3];\n }\n else {\n this.r += right.r;\n this.g += right.g;\n this.b += right.b;\n this.a += right.a;\n }\n return this;\n };\n /**\n * 颜色相减\n * @param right - 相减对象,颜色 | 数字\n * @returns 相减结果\n */\n Color.prototype.subtract = function (right) {\n if (typeof right === 'number') {\n this.r -= right;\n this.g -= right;\n this.b -= right;\n this.a -= right;\n }\n else if (right instanceof Array) {\n this.r -= right[0];\n this.g -= right[1];\n this.b -= right[2];\n this.a -= right[3];\n }\n else {\n this.r -= right.r;\n this.g -= right.g;\n this.b -= right.b;\n this.a -= right.a;\n }\n return this;\n };\n /**\n * 颜色相乘\n * @param right - 相乘对象,对象 | 数字\n * @returns 颜色\n */\n Color.prototype.multiply = function (right) {\n if (typeof right === 'number') {\n this.r *= right;\n this.g *= right;\n this.b *= right;\n this.a *= right;\n }\n else if (right instanceof Array) {\n this.r *= right[0];\n this.g *= right[1];\n this.b *= right[2];\n this.a *= right[3];\n }\n else {\n this.r *= right.r;\n this.g *= right.g;\n this.b *= right.b;\n this.a *= right.a;\n }\n return this;\n };\n /**\n * 颜色相除\n * @param right - 相除对象,对象 | 数字\n * @returns 颜色\n */\n Color.prototype.divide = function (right) {\n if (typeof right === 'number') {\n this.r /= right;\n this.g /= right;\n this.b /= right;\n this.a /= right;\n }\n else if (right instanceof Array) {\n this.r /= right[0];\n this.g /= right[1];\n this.b /= right[2];\n this.a /= right[3];\n }\n else {\n this.r /= right.r;\n this.g /= right.g;\n this.b /= right.b;\n this.a /= right.a;\n }\n return this;\n };\n /**\n * 颜色缩放\n * @param v - 数字\n * @returns 缩放结果\n */\n Color.prototype.scale = function (v) {\n this.r *= v;\n this.g *= v;\n this.b *= v;\n this.a *= v;\n return this;\n };\n /**\n * 颜色求最小值\n * @param v - 颜色或数值\n * @returns 最小值\n */\n Color.prototype.min = function (v) {\n if (typeof v === 'number') {\n this.r = Math.min(this.r, v);\n this.g = Math.min(this.g, v);\n this.b = Math.min(this.b, v);\n this.a = Math.min(this.a, v);\n }\n else {\n this.r = Math.min(this.r, v.r);\n this.g = Math.min(this.g, v.g);\n this.b = Math.min(this.b, v.b);\n this.a = Math.min(this.a, v.a);\n }\n return this;\n };\n /**\n * 颜色求最大值\n * @param v - 颜色或数值\n * @returns 最大值\n */\n Color.prototype.max = function (v) {\n if (typeof v === 'number') {\n this.r = Math.max(this.r, v);\n this.g = Math.max(this.g, v);\n this.b = Math.max(this.b, v);\n this.a = Math.max(this.a, v);\n }\n else {\n this.r = Math.max(this.r, v.r);\n this.g = Math.max(this.g, v.g);\n this.b = Math.max(this.b, v.b);\n this.a = Math.max(this.a, v.a);\n }\n return this;\n };\n /**\n * 颜色阈值约束\n * @param min - 最小值\n * @param max - 最大值\n * @returns 颜色\n */\n Color.prototype.clamp = function (min, max) {\n return this.max(min).min(max);\n };\n /**\n * 颜色求线性插值\n * @param v - 颜色\n * @param alpha - 插值比例\n * @returns 插值结果\n */\n Color.prototype.lerp = function (v, alpha) {\n this.r += (v.r - this.r) * alpha;\n this.g += (v.g - this.g) * alpha;\n this.b += (v.b - this.b) * alpha;\n this.a += (v.a - this.a) * alpha;\n return this;\n };\n /**\n * 计算颜色亮度值\n * @returns 亮度值\n */\n Color.prototype.luminance = function () {\n return this.r * 0.3 + this.g * 0.59 + this.b * 0.11;\n };\n /**\n * 颜色判等\n * @param v - 颜色\n * @returns 判等结果\n */\n Color.prototype.equals = function (v) {\n return v.r === this.r && v.g === this.g && v.b === this.b && v.a === this.a;\n };\n Color.prototype.toLinear = function () {\n this.r = Color.gammaToLinear(this.r);\n this.g = Color.gammaToLinear(this.g);\n this.b = Color.gammaToLinear(this.b);\n return this;\n };\n Color.prototype.toGamma = function () {\n this.r = Color.linearToGamma(this.r);\n this.g = Color.linearToGamma(this.g);\n this.b = Color.linearToGamma(this.b);\n return this;\n };\n /**\n * 颜色转数组\n * @returns 数组\n */\n Color.prototype.toArray = function () {\n return [this.r, this.g, this.b, this.a];\n };\n Color.prototype.toVector4 = function () {\n return new Vector4(this.r, this.g, this.b, this.a);\n };\n /**\n * RGB 颜色空间转 HSV\n * @param result HSV 值\n */\n Color.prototype.toHSV = function () {\n var _a;\n var r = (_a = this, _a.r), g = _a.g, b = _a.b, a = _a.a;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var v = max;\n var dm = max - min;\n var h = 0;\n var s = 0;\n if (max !== 0) {\n s = dm / max;\n }\n if (max != min) {\n if (max == r) {\n h = (g - b) / dm;\n if (g < b) {\n h += 6;\n }\n }\n else if (max == g) {\n h = (b - r) / dm + 2;\n }\n else if (max == b) {\n h = (r - g) / dm + 4;\n }\n h *= 60;\n }\n return new Color(h, s, v, a);\n };\n Color.prototype.toHexString = function (includeAlpha) {\n if (includeAlpha === void 0) { includeAlpha = true; }\n var R = Color.ToHex(Math.round(this.r * 255));\n var G = Color.ToHex(Math.round(this.g * 255));\n var B = Color.ToHex(Math.round(this.b * 255));\n var A = Color.ToHex(Math.round(this.a * 255));\n if (includeAlpha) {\n return '#' + R + G + B + A;\n }\n else {\n return '#' + R + G + B;\n }\n };\n Color.prototype.fill = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n array[offset] = this.r;\n array[offset + 1] = this.g;\n array[offset + 2] = this.b;\n array[offset + 3] = this.a;\n };\n /**\n * 通过标量数值创建颜色\n * @param num - 数值\n * @returns\n */\n Color.fromNumber = function (num) {\n return new Color().setFromNumber(num);\n };\n /**\n * 通过数组创建颜色\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns\n */\n Color.fromArray = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n return new Color().setFromArray(array, offset);\n };\n /**\n * 通过 hex 字符串创建颜色\n * @param hex - hex 字符串\n * @returns\n */\n Color.fromHexString = function (hex) {\n return new Color().setFromHexString(hex);\n };\n Color.fromHSV = function (hue, saturation, value, alpha) {\n if (alpha === void 0) { alpha = 1; }\n return new Color().setFromHSV(hue, saturation, value, alpha);\n };\n /**\n * 颜色值从 Gamma 空间转到线性空间\n * @param v - Gamma 空间颜色值\n * @returns 线性空间颜色值\n */\n Color.gammaToLinear = function (v) {\n if (v <= 0.0) {\n return 0.0;\n }\n else if (v <= 0.04045) {\n return v / 12.92;\n }\n else if (v < 1.0) {\n return Math.pow((v + 0.055) / 1.055, 2.4);\n }\n else {\n return Math.pow(v, 2.4);\n }\n };\n /**\n * 颜色值从线性空间转到 Gamma 空间\n * @param value - 线性空间颜色值\n * @returns Gamma 空间颜色值\n */\n Color.linearToGamma = function (value) {\n if (value <= 0.0) {\n return 0.0;\n }\n else if (value < 0.0031308) {\n return 12.92 * value;\n }\n else if (value < 1.0) {\n return 1.055 * Math.pow(value, 0.41666) - 0.055;\n }\n else {\n return Math.pow(value, 0.41666);\n }\n };\n Color.ToHex = function (i) {\n var str = i.toString(16);\n if (i <= 15) {\n return ('0' + str).toUpperCase();\n }\n return str.toUpperCase();\n };\n /**\n * 颜色的常量\n */\n Color.BLACK = new Color(0, 0, 0, 1); // 纯黑色\n Color.BLUE = new Color(0, 0, 1, 1); // 纯蓝色\n Color.CLEAR = new Color(0, 0, 0, 0); // 完全透明\n Color.CYAN = new Color(0, 1, 1, 1); // 青色\n Color.GRAY = new Color(0.5, 0.5, 0.5, 1); // 灰色\n Color.GREEN = new Color(0, 1, 0, 1); // 纯绿色\n Color.MAGENTA = new Color(1, 0, 1, 1); // 洋红色\n Color.RED = new Color(1, 0, 0, 1); // 纯红色\n Color.WHITE = new Color(1, 1, 1, 1); // 纯白色\n Color.YELLOW = new Color(1, 0.92, 0.016, 1); // 黄色\n return Color;\n}());\n","import { Vector3 } from './vector3';\n/**\n * 三维包围盒\n */\nvar Box3 = /** @class */ (function () {\n /**\n * 构造函数,传入值为空时表示空包围盒\n * @param [min=new Vector3(Infinity)] - 最小角点\n * @param [max=new Vector3(-Infinity)] - 最大角点\n */\n function Box3(min, max) {\n if (min === void 0) { min = new Vector3(Infinity, Infinity, Infinity); }\n if (max === void 0) { max = new Vector3(-Infinity, -Infinity, -Infinity); }\n this.min = min.clone();\n this.max = max.clone();\n }\n /**\n * 设置三维包围盒的值\n * @param min - 三维包围盒最小点\n * @param max - 三维包围盒最大点\n * @returns\n */\n Box3.prototype.set = function (min, max) {\n this.min.copyFrom(min);\n this.max.copyFrom(max);\n return this;\n };\n /**\n * 通过数组构建三维包围盒\n * @param array - 数组集合(每三个数视为一个三维空间点)\n * @returns 三维包围盒\n */\n Box3.prototype.setFromArray = function (array) {\n var minX = Number(Infinity);\n var minY = Number(Infinity);\n var minZ = Number(Infinity);\n var maxX = -Infinity;\n var maxY = -Infinity;\n var maxZ = -Infinity;\n for (var i = 0, l = array.length; i < l; i += 3) {\n var x = array[i];\n var y = array[i + 1];\n var z = array[i + 2];\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (z < minZ) {\n minZ = z;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n if (z > maxZ) {\n maxZ = z;\n }\n }\n this.min.set(minX, minY, minZ);\n this.max.set(maxX, maxY, maxZ);\n return this;\n };\n /**\n * 通过三维空间点构建三维包围盒\n * @param points - 三维空间点集合\n * @returns 三维包围盒\n */\n Box3.prototype.setFromPoints = function (points) {\n this.makeEmpty();\n for (var i = 0, il = points.length; i < il; i++) {\n this.expandByPoint(points[i]);\n }\n return this;\n };\n /**\n * 通过三维空间点(包围盒中心)和大小确定包围盒\n * @param center - 三维包围盒中心点\n * @param size - 三维包围盒大小值\n * @returns 三维包围盒\n */\n Box3.prototype.setFromCenterAndSize = function (center, size) {\n var halfSize = size.clone().multiply(0.5);\n this.min.copyFrom(center).subtract(halfSize);\n this.max.copyFrom(center).add(halfSize);\n return this;\n };\n // TODO\n /**\n * 通过实体构建包围盒\n * @param object - 构件实体\n * @returns 三维包围盒\n */\n Box3.prototype.setFromObject = function (object) {\n this.makeEmpty();\n return this.expandByObject(object);\n };\n /**\n * 克隆三维包围盒\n * @returns 克隆结果\n */\n Box3.prototype.clone = function () {\n return new Box3().copyFrom(this);\n };\n /**\n * 复制三维包围盒\n * @param box - 复制对象\n * @returns 复制结果\n */\n Box3.prototype.copyFrom = function (box) {\n this.min.copyFrom(box.min);\n this.max.copyFrom(box.max);\n return this;\n };\n /**\n * 三维包围盒置空\n * @returns 置空结果\n */\n Box3.prototype.makeEmpty = function () {\n this.min.x = this.min.y = this.min.z = Number(Infinity);\n this.max.x = this.max.y = this.max.z = -Infinity;\n return this;\n };\n /**\n * 三维包围盒判空\n * @returns 判空结果\n */\n Box3.prototype.isEmpty = function () {\n // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n return this.max.x < this.min.x\n || this.max.y < this.min.y\n || this.max.z < this.min.z;\n };\n /**\n * 获取三维包围盒中心\n * @param [target=new Vector3()]\n * @returns\n */\n Box3.prototype.getCenter = function (target) {\n if (target === void 0) { target = new Vector3(); }\n return this.isEmpty() ? target.set(0, 0, 0) : target.addVectors(this.min, this.max).multiply(0.5);\n };\n /**\n * 获取三维包围盒大小\n * @param [target=new Vector3()] - 结果保存对象\n * @returns 三维包围盒大小\n */\n Box3.prototype.getSize = function (target) {\n if (target === void 0) { target = new Vector3(); }\n return this.isEmpty() ? target.set(0, 0, 0) : target.subtractVectors(this.max, this.min);\n };\n /**\n * 通过三维空间点扩展三维包围盒\n * @param point - 三维空间点\n * @returns 扩展结果\n */\n Box3.prototype.expandByPoint = function (point) {\n this.min.min(point);\n this.max.max(point);\n return this;\n };\n /**\n * 通过三维向量扩展三维包围盒\n * @param vector - 三维向量\n * @returns 扩展结果\n */\n Box3.prototype.expandByVector = function (vector) {\n this.min.subtract(vector);\n this.max.add(vector);\n return this;\n };\n /**\n * 通过实数扩展三维包围盒\n * @param scalar - 扩展大小\n * @returns 扩展结果\n */\n Box3.prototype.expandByScalar = function (scalar) {\n this.min.add(-scalar);\n this.max.add(scalar);\n return this;\n };\n /**\n * 通过包围盒扩展三维包围盒\n * @param box\n * @returns\n */\n Box3.prototype.expandByBox = function (box) {\n this.min.min(box.min);\n this.max.max(box.max);\n return this;\n };\n // TODO\n /**\n * 通过实体扩展三维包围盒\n * @param object - 构件实体\n * @returns 扩展结果\n */\n Box3.prototype.expandByObject = function (object) {\n // Computes the world-axis-aligned bounding box of an object (including its children),\n // accounting for both the object's, and children's, world transforms\n object.updateWorldMatrix(false, false);\n var geometry = object.geometry;\n if (geometry !== undefined) {\n if (geometry.boundingBox === null) {\n geometry.computeBoundingBox();\n }\n var box3 = new Box3();\n box3.copyFrom(geometry.boundingBox);\n box3.applyMatrix4(object.matrixWorld);\n this.union(box3);\n }\n var children = object.children;\n for (var i = 0, l = children.length; i < l; i++) {\n this.expandByObject(children[i]);\n }\n return this;\n };\n /**\n * 判断三维包围盒相交关系(if this intersect other)\n * @param point - 三维空间点\n * @returns 点包含判断结果\n */\n Box3.prototype.containsPoint = function (point) {\n return !(point.x < this.min.x\n || point.x > this.max.x\n || point.y < this.min.y\n || point.y > this.max.y\n || point.z < this.min.z\n || point.z > this.max.z);\n };\n /**\n * 判断三维包围盒与三维包围盒的包含关系\n * @param other - 三维包围盒\n * @returns 包围盒包含结果(true 表示包含 other, false 表示不包含 other)\n */\n Box3.prototype.containsBox = function (other) {\n return this.min.x <= other.min.x\n && this.max.x >= other.max.x\n && this.min.y <= other.min.y\n && this.max.y >= other.max.y\n && this.min.z <= other.min.z\n && this.max.z >= other.max.z;\n };\n // TODO\n /**\n * 获取点在三维包围盒的比例位置\n * @param point - 三维空间点\n * @param [target=new Vector3()] - 结果保存对象\n * @returns 点在包围盒比例位置\n */\n Box3.prototype.getParameter = function (point, target) {\n if (target === void 0) { target = new Vector3(); }\n // This can potentially have a divide by zero if the box\n // has a size dimension of 0.\n return target.set((point.x - this.min.x) / (this.max.x - this.min.x), (point.y - this.min.y) / (this.max.y - this.min.y), (point.z - this.min.z) / (this.max.z - this.min.z));\n };\n /**\n * 判断三维包围盒相交关系(if this intersect other)\n * @param other - 三维包围盒\n * @returns 相交判断结果\n */\n Box3.prototype.intersectsBox = function (other) {\n // using 6 splitting planes to rule out intersections.\n return !(other.max.x < this.min.x || other.min.x > this.max.x\n || other.max.y < this.min.y || other.min.y > this.max.y\n || other.max.z < this.min.z || other.min.z > this.max.z);\n };\n /**\n * 判断三维包围盒和球是否相交\n * @param sphere\n * @returns\n */\n Box3.prototype.intersectsSphere = function (sphere) {\n // Find the point on the AABB closest to the sphere center.\n var vector = new Vector3();\n this.clampPoint(sphere.center, vector);\n // If that point is inside the sphere, the AABB and sphere intersect.\n return vector.distanceSquared(sphere.center) <= (sphere.radius * sphere.radius);\n };\n /**\n * 求点与三维包围盒的最近点\n * @param point - 三维空间点\n * @param [target=new Vector3()] - 结果存放对象\n * @returns 计算结果\n */\n Box3.prototype.clampPoint = function (point, target) {\n if (target === void 0) { target = new Vector3(); }\n return target.copyFrom(point).clamp(this.min, this.max);\n };\n /**\n * 三维空间点到三维包围盒的距离\n * @param point - 三维包围盒\n * @returns 距离结果\n */\n Box3.prototype.distanceToPoint = function (point) {\n var clampedPoint = point.clone().clamp(this.min, this.max);\n return clampedPoint.subtract(point).length();\n };\n /**\n * 三维包围盒求交集\n * @param box - 三维包围盒\n * @returns 求交结果\n */\n Box3.prototype.intersect = function (box) {\n this.min.max(box.min);\n this.max.min(box.max);\n // ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n if (this.isEmpty()) {\n this.makeEmpty();\n }\n return this;\n };\n /**\n * 三维包围盒求并集\n * @param box - 三维包围盒\n * @returns 求并结果\n */\n Box3.prototype.union = function (box) {\n this.min.min(box.min);\n this.max.max(box.max);\n return this;\n };\n /**\n * 通过三维变换矩阵变化三维包围盒\n * @param matrix - 三维变换矩阵\n * @returns 变换结果\n */\n Box3.prototype.applyMatrix4 = function (matrix, center) {\n if (center === void 0) { center = new Vector3(); }\n // transform of empty box is an empty box.\n if (this.isEmpty()) {\n return this;\n }\n var points = this.getOBBPoints(matrix, center);\n this.setFromPoints(points);\n return this;\n };\n Box3.prototype.getOBBPoints = function (matrix, center) {\n if (center === void 0) { center = new Vector3(); }\n // transform of empty box is an empty box.\n if (this.isEmpty()) {\n return [];\n }\n var points = [];\n // NOTE: I am using a binary pattern to specify all 2^3 combinations below\n points[0] = new Vector3(this.min.x, this.min.y, this.min.z); // 000\n points[1] = new Vector3(this.min.x, this.min.y, this.max.z); // 001\n points[2] = new Vector3(this.min.x, this.max.y, this.min.z); // 010\n points[3] = new Vector3(this.min.x, this.max.y, this.max.z); // 011\n points[4] = new Vector3(this.max.x, this.min.y, this.min.z); // 100\n points[5] = new Vector3(this.max.x, this.min.y, this.max.z); // 101\n points[6] = new Vector3(this.max.x, this.max.y, this.min.z); // 110\n points[7] = new Vector3(this.max.x, this.max.y, this.max.z); // 111\n points.forEach(function (p) {\n p.subtract(center);\n p.applyMatrix(matrix);\n p.add(center);\n });\n return points;\n };\n /**\n * 通过包围盒获取包围球\n * @param target\n * @returns\n */\n Box3.prototype.getBoundingSphere = function (target) {\n this.getCenter(target.center);\n var vector = new Vector3();\n target.radius = this.getSize(vector).length() * 0.5;\n return target;\n };\n /**\n * 三维包围盒位移\n * @param offset - 三维位移向量\n * @returns 位移结果\n */\n Box3.prototype.translate = function (offset) {\n this.min.add(offset);\n this.max.add(offset);\n return this;\n };\n /**\n * 三维包围盒判等\n * @param other - 三维包围盒\n * @returns 判等结果\n */\n Box3.prototype.equals = function (other) {\n return other.min.equals(this.min) && other.max.equals(this.max);\n };\n return Box3;\n}());\nexport { Box3 };\n","import { Box3 } from './box3';\nimport { Vector3 } from './vector3';\n/**\n * 球\n */\nvar Sphere = /** @class */ (function () {\n /**\n * 构造函数\n * @param [center=Vector3.ZERO] - 球心,默认值为(0, 0, 0)\n * @param [radius=-1] - 半径\n */\n function Sphere(center, radius) {\n if (center === void 0) { center = Vector3.ZERO; }\n if (radius === void 0) { radius = -1; }\n this.center = center.clone();\n this.radius = radius;\n }\n /**\n * 通过参数设置球\n * @param center - 球心\n * @param radius - 半径\n * @returns\n */\n Sphere.prototype.set = function (center, radius) {\n this.center.copyFrom(center);\n this.radius = radius;\n return this;\n };\n /**\n * 通过空间点与球心设置球\n * @param points - 三维空间点\n * @param [optionalCenter] - 指定球心\n * @returns\n */\n Sphere.prototype.setFromPoints = function (points, optionalCenter) {\n var center = this.center;\n if (optionalCenter !== undefined) {\n center.copyFrom(optionalCenter);\n var maxRadiusSq = 0;\n for (var i = 0; i < points.length; i++) {\n maxRadiusSq = Math.max(maxRadiusSq, center.distanceSquared(points[i]));\n }\n this.radius = Math.sqrt(maxRadiusSq);\n }\n else {\n var box = new Box3().setFromPoints(points);\n box.getCenter(center);\n this.radius = box.getSize().length() / 2;\n }\n return this;\n };\n /**\n * 复制球\n * @param sphere - 球信息\n * @returns 复制结果\n */\n Sphere.prototype.copyFrom = function (sphere) {\n this.center.copyFrom(sphere.center);\n this.radius = sphere.radius;\n return this;\n };\n /**\n * 球判空\n * @returns 判空结果\n */\n Sphere.prototype.isEmpty = function () {\n return this.radius < 0;\n };\n /**\n * 球置空\n * @returns 置空结果\n */\n Sphere.prototype.makeEmpty = function () {\n this.center.set(0, 0, 0);\n this.radius = -1;\n return this;\n };\n /**\n * 三维空间点包围判断\n * @param point - 三维空间点\n * @returns 空间点包含判断\n */\n Sphere.prototype.containsPoint = function (point) {\n return point.distanceSquared(this.center) <= (this.radius * this.radius);\n };\n /**\n * 空间点与球表面的最短距离\n * @param point - 三维空间点\n * @returns 距离结果\n */\n Sphere.prototype.distanceToPoint = function (point) {\n return (point.distance(this.center) - this.radius);\n };\n /**\n * 与球相交判断\n * @param sphere - 球\n * @returns 相交判断结果\n */\n Sphere.prototype.intersectsSphere = function (sphere) {\n var radiusSum = this.radius + sphere.radius;\n return sphere.center.distanceSquared(this.center) <= (radiusSum * radiusSum);\n };\n /**\n * 与包围盒相交判断\n * @param box - 三维包围盒\n * @returns 相交判断结果\n */\n Sphere.prototype.intersectsBox = function (box) {\n return box.intersectsSphere(this);\n };\n /**\n * 收敛空间点在球范围内\n * 注:乘法的效率要比开方高很多\n * @param point - 三维空间点\n * @param [target] - 结果保存对象\n * @returns 收敛结果\n */\n Sphere.prototype.clampPoint = function (point, target) {\n var deltaLengthSq = this.center.distanceSquared(point);\n if (target === undefined) {\n target = new Vector3();\n }\n target.copyFrom(point);\n if (deltaLengthSq > (this.radius * this.radius)) {\n target.subtract(this.center).normalize();\n target.multiply(this.radius).add(this.center);\n }\n return target;\n };\n /**\n * 根据包围盒获取球\n * @param target - 包围盒\n * @returns 球\n */\n Sphere.prototype.getBoundingBox = function (target) {\n if (target === undefined) {\n target = new Box3();\n }\n if (this.isEmpty()) {\n // Empty sphere produces empty bounding box\n target.makeEmpty();\n return target;\n }\n target.set(this.center, this.center);\n target.expandByScalar(this.radius);\n return target;\n };\n /**\n * 球空间变换\n * @param matrix - 空间变化矩阵\n * @returns 变换结果\n */\n Sphere.prototype.applyMatrix4 = function (matrix) {\n var mt = matrix.elements;\n var scaleXSq = mt[0] * mt[0] + mt[1] * mt[1] + mt[2] * mt[2];\n var scaleYSq = mt[4] * mt[4] + mt[5] * mt[5] + mt[6] * mt[6];\n var scaleZSq = mt[8] * mt[8] + mt[9] * mt[9] + mt[10] * mt[10];\n var maxScale = Math.sqrt(Math.max(scaleXSq, scaleYSq, scaleZSq));\n this.center.applyMatrix(matrix);\n this.radius = this.radius * maxScale;\n return this;\n };\n /**\n * 球位移\n * @param offset - 位移信息\n * @returns 位移结果\n */\n Sphere.prototype.translate = function (offset) {\n this.center.add(offset);\n return this;\n };\n /**\n * 通过三维空间点对球进行扩展\n * @param point - 扩展点\n * @returns 扩展结果\n */\n Sphere.prototype.expandByPoint = function (point) {\n var vector = new Vector3().subtractVectors(point, this.center);\n var lengthSquared = vector.lengthSquared();\n if (lengthSquared > (this.radius * this.radius)) {\n var length_1 = Math.sqrt(lengthSquared);\n var missingRadiusHalf = (length_1 - this.radius) * 0.5;\n // Nudge this sphere towards the target point. Add half the missing distance to radius,\n // and the other half to position. This gives a tighter enclosure, instead of if\n // the whole missing distance were just added to radius.\n this.center.add(vector.multiply(missingRadiusHalf / length_1));\n this.radius += missingRadiusHalf;\n }\n return this;\n };\n /**\n * 包围球求并集\n * @param sphere - 包围球\n * @returns 求并结果\n */\n Sphere.prototype.union = function (sphere) {\n // To enclose another sphere into this sphere, we only need to enclose two points:\n // 1) Enclose the farthest point on the other sphere into this sphere.\n // 2) Enclose the opposite point of the farthest point into this sphere.\n var v1 = new Vector3();\n var toFarthestPoint = new Vector3();\n toFarthestPoint.subtractVectors(sphere.center, this.center).normalize().multiply(sphere.radius);\n this.expandByPoint(v1.copyFrom(sphere.center).add(toFarthestPoint));\n this.expandByPoint(v1.copyFrom(sphere.center).subtract(toFarthestPoint));\n return this;\n };\n /**\n * 包围球求交集\n * @param other - 其它包围球\n * @returns 求交结果\n */\n Sphere.prototype.intersect = function (other) {\n var vector = new Vector3().subtractVectors(this.center, other.center);\n var distance = vector.length();\n var radiusSum = this.radius + other.radius;\n if (distance > radiusSum) {\n return this.makeEmpty();\n }\n this.center = this.center.add(vector.normalize().multiply(distance / 2));\n this.radius = this.radius + other.radius - distance;\n return this;\n };\n /**\n * 包围球判等\n * @param sphere - 包围球\n * @returns 判等结果\n */\n Sphere.prototype.equals = function (sphere) {\n return sphere.center.equals(this.center) && (sphere.radius === this.radius);\n };\n /**\n * 包围球克隆\n * @returns 克隆结果\n */\n Sphere.prototype.clone = function () {\n return new Sphere().copyFrom(this);\n };\n return Sphere;\n}());\nexport { Sphere };\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 * Earcut.js from: https://github.com/mapbox/earcut/tree/v2.2.2\n */\n\nexport function earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n var minX, minY, maxX, maxY, x, y, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 1 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nexport function linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nexport function filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n var stop = ear,\n prev, next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim);\n triangles.push(ear.i / dim);\n triangles.push(next.i / dim);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nexport function isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var p = ear.next.next;\n\n while (p !== ear.prev) {\n if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nexport function isEarHashed(ear, minX, minY, invSize) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // triangle bbox; min & max are calculated like this for speed\n var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),\n minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),\n maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),\n maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(minTX, minTY, minX, minY, invSize),\n maxZ = zOrder(maxTX, maxTY, minX, minY, invSize);\n\n var p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p !== ear.prev && p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n !== ear.prev && n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p !== ear.prev && p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n !== ear.prev && n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim);\n triangles.push(p.i / dim);\n triangles.push(b.i / dim);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize);\n earcutLinked(c, triangles, dim, minX, minY, invSize);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nexport function eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i, len, start, end, list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n eliminateHole(queue[i], outerNode);\n outerNode = filterPoints(outerNode, outerNode.next);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n outerNode = findHoleBridge(hole, outerNode);\n if (outerNode) {\n var b = splitPolygon(outerNode, hole);\n\n // filter collinear points around the cuts\n filterPoints(outerNode, outerNode.next);\n filterPoints(b, b.next);\n }\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n if (x === hx) {\n if (hy === p.y) return p;\n if (hy === p.next.y) return p.next;\n }\n m = p.x < p.next.x ? p : p.next;\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n if (hx === qx) return m; // hole touches outer segment; pick leftmost endpoint\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nexport function indexCurve(start, minX, minY, invSize) {\n var p = start;\n do {\n if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i, p, q, e, tail, numMerges, pSize, qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = 32767 * (x - minX) * invSize;\n y = 32767 * (y - minY) * invSize;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&\n (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&\n (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nexport function isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nexport function equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nexport function intersects(p1, q1, p2, q2) {\n var o1 = sign(area(p1, q1, p2));\n var o2 = sign(area(p1, q1, q2));\n var o3 = sign(area(p2, q2, p1));\n var o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nexport function locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nexport function splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nexport function removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nexport function Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = null;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = {vertices: [], holes: [], dimensions: dim},\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\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;\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","PI2","Math","PI","DEG2RAD","RAD2DEG","NumberEpsilon","isEqual","a","b","abs","Infinity","lerp","x","y","t","clamp","value","min","max","fixedMin","isNaN","fixedMax","lower","upper","EulerOrder","Vector2","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","negate","length","sqrt","lengthSquared","normalize","setLength","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","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","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","Matrix3","setFromMatrix4","rotate","translate","fromMatrix4","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","Color","g","setFromVector4","setFromHSV","hue","saturation","chroma","h","setFromHexString","hex","substring","parseInt","luminance","toLinear","gammaToLinear","toGamma","linearToGamma","toHSV","dm","toHexString","includeAlpha","R","ToHex","G","B","A","fromHexString","fromHSV","pow","str","toUpperCase","BLACK","BLUE","CLEAR","CYAN","GRAY","GREEN","MAGENTA","RED","WHITE","YELLOW","Box3","minX","minY","minZ","maxX","maxY","maxZ","setFromPoints","points","makeEmpty","il","expandByPoint","setFromCenterAndSize","size","halfSize","setFromObject","object","expandByObject","isEmpty","getCenter","getSize","point","expandByVector","expandByScalar","scalar","expandByBox","updateWorldMatrix","geometry","boundingBox","computeBoundingBox","box3","applyMatrix4","matrixWorld","union","children","containsPoint","containsBox","getParameter","intersectsBox","intersectsSphere","clampPoint","distanceToPoint","intersect","getOBBPoints","forEach","p","getBoundingSphere","Sphere","optionalCenter","maxRadiusSq","radiusSum","deltaLengthSq","getBoundingBox","mt","scaleXSq","scaleYSq","scaleZSq","maxScale","length_1","missingRadiusHalf","toFarthestPoint","lambda","dt","exp","degrees","radians","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","linkedList","data","start","end","dim","clockwise","last","j","signedArea","insertNode","removeNode","filterPoints","again","steiner","area","prev","isEar","ear","pointInTriangle","isEarHashed","invSize","minTX","minTY","maxTX","maxTY","zOrder","prevZ","nextZ","compareX","eliminateHole","hole","outerNode","hx","hy","stop","mx","my","tanMin","locallyInside","sectorContainsSector","findHoleBridge","splitPolygon","getLeftmost","leftmost","cx","cy","px","py","isValidDiagonal","intersects","intersectsPolygon","inside","middleInside","q1","q2","o1","o2","o3","o4","onSegment","a2","Node","b2","an","bp","holeIndices","len","list","queue","sort","tail","numMerges","pSize","qSize","inSize","sortLinked","CAMERA_CLIP_MODE_NORMAL","__assign","Object","assign","hasOwnProperty","apply","__values","TypeError","arrAdd","item","includes","callback","thisObj","name_1","ensureFixedNumber","isFinite","CONSTANT","LINE","CURVE","ensureFixedNumberWithRandom","isArray","ensureRGBAValue","colorToArr","ensureColorExpression","normalized","COLORS","map","color","ensureGradient","RGBA_COLOR","ensureNumberExpression","RANDOM","stops_1","getOwnPropertyNames","match","exec","parsePercent","GRADIENT_COLOR","replace","test","toFixed","normalizeColor","getGradientColor","ensureFixedVec3","CONSTANT_VEC3","LINEAR_PATH","BEZIER_PATH","objectValueToNumber","e_1","keys","key","e_1_1","return","deleteEmptyValue","e_2","e_2_1","SuppressedError","d2r","r2d","getStandardParticleContent","particle","transform","shape","type","NONE","shapeType","upDirection","startTurbulence","turbulenceX","turbulenceY","turbulenceZ","emission","bursts","burstOffsets","rateOverTime","renderer","splits","startLifetime","start3DSize","startSize","startSizeX","startSizeY","sizeAspect","maxCount","startDelay","startColor","startRotationZ","startRotation","particleFollowParent","start3DRotation","startRotationX","startRotationY","filter","filter_1","val","path","emitterTransform","sizeOverLifetime","separateAxes","velocityOverLifetime","sol","speedOverLifetime","positionOverLifetime","gravity","gravityOverLifetime","gravityModifier","startSpeed","asMovement","linearX","linearY","linearZ","asRotation","orbCenter","orbitalX","orbitalY","orbitalZ","forceTarget","forceCurve","rotationOverLifetime","angularVelocity","colorOverLifetime","col","opacity","textureSheetAnimation","row","total","animate","cycles","animationDelay","animationDuration","trials","trails","lifetime","dieWithParticles","maxPointPerTrail","minimumVertexDistance","widthOverTrail","colorOverTrail","blending","inheritParticleColor","occlusion","transparentOcclusion","orderOffset","sizeAffectsLifetime","sizeAffectsWidth","texture","parentAffectsPosition","opacityOverLifetime","interaction","behavior","multiple","getStandardNullContent","sprite","opt","rot","getStandardSpriteContent","texAni","convertParams","pathParams","version21Migration","json","compositions","composition","items","null","endBehavior","destroy","freeze","version","v0","standardVersion","reverseParticle","getStandardJSON","singleVersion","split","mesh","light","version22Migration","currentVersion","plugins","bins","requires","images","img","getStandardImage","imageTags","textures","source","flipY","shapes","playerVersion","web","compositionId","comp","getStandardComposition","imgUsage","_imgs","binUsage","spines","_textures","getStandardJSONFromV0","mainVersion","image","renderLevel","oriY","url","template","webp","compressed","astc","android","pvrtc","iOS","loop","sourceType","id","camera","clipMode","duration","getStandardItem","name","startTime","st","previewSize","meta","tempQuat","stdAnchor","originContent","content","pluginName","pn","base","NaN","plugin","getStandardFilterContent","cal","ui","interact","option","CLICK","showPreview","previewColor","NOTIFY","DRAG","enableInEditor","dxRange","dyRange","MESSAGE","getStandardInteractContent","width","height","model","translateX","translateY","translateZ","rol","rotateX","rotateY","rotateZ","getStandardCameraContent","Float32Array","looping","delay","indexOf","isInteger","parentId","originTransform","inverseRotation","changeOrder","transform_1","yx","rotationZYXFromQuat","position"],"mappings":"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"}
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/matrix3.js","../../../node_modules/.pnpm/@galacean+effects-math@1.0.1/node_modules/@galacean/effects-math/es/core/ray.js","../../../node_modules/.pnpm/@galacean+effects-math@1.0.1/node_modules/@galacean/effects-math/es/core/color.js","../../../node_modules/.pnpm/@galacean+effects-math@1.0.1/node_modules/@galacean/effects-math/es/core/box3.js","../../../node_modules/.pnpm/@galacean+effects-math@1.0.1/node_modules/@galacean/effects-math/es/core/sphere.js","../../../node_modules/.pnpm/@galacean+effects-specification@1.0.1/node_modules/@galacean/effects-specification/dist/index.mjs","../../effects-core/src/libs/earcut.js","../../../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","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 { isEqual } from './utils';\n/**\n * 三维矩阵(列优先矩阵)\n */\nvar Matrix3 = /** @class */ (function () {\n /**\n * 构造函数,初始值为零矩阵\n * @param [m11=1] - 第 1 行,第 1 列\n * @param [m21=0] - 第 2 行,第 1 列\n * @param [m31=0] - 第 3 行,第 1 列\n * @param [m12=0] - 第 1 行,第 2 列\n * @param [m22=1] - 第 2 行,第 2 列\n * @param [m32=0] - 第 3 行,第 2 列\n * @param [m13=0] - 第 1 行,第 3 列\n * @param [m23=0] - 第 2 行,第 3 列\n * @param [m33=1] - 第 3 行,第 3 列\n */\n function Matrix3(m11, m21, m31, m12, m22, m32, m13, m23, m33) {\n if (m11 === void 0) { m11 = 1; }\n if (m21 === void 0) { m21 = 0; }\n if (m31 === void 0) { m31 = 0; }\n if (m12 === void 0) { m12 = 0; }\n if (m22 === void 0) { m22 = 1; }\n if (m32 === void 0) { m32 = 0; }\n if (m13 === void 0) { m13 = 0; }\n if (m23 === void 0) { m23 = 0; }\n if (m33 === void 0) { m33 = 1; }\n this.elements = [\n m11, m21, m31,\n m12, m22, m32,\n m13, m23, m33,\n ];\n }\n /**\n * 设置矩阵\n * @param m11 - 第 1 行,第 1 列\n * @param m21 - 第 2 行,第 1 列\n * @param m31 - 第 3 行,第 1 列\n * @param m12 - 第 1 行,第 2 列\n * @param m22 - 第 2 行,第 2 列\n * @param m32 - 第 3 行,第 2 列\n * @param m13 - 第 1 行,第 3 列\n * @param m23 - 第 2 行,第 3 列\n * @param m33 - 第 3 行,第 3 列\n * @returns\n */\n Matrix3.prototype.set = function (m11, m21, m31, m12, m22, m32, m13, m23, m33) {\n var e = this.elements;\n e[0] = m11;\n e[3] = m12;\n e[6] = m13;\n e[1] = m21;\n e[4] = m22;\n e[7] = m23;\n e[2] = m31;\n e[5] = m32;\n e[8] = m33;\n return this;\n };\n /**\n * 设置矩阵通过行优先数据\n * @param m11 - 第 1 行,第 1 列\n * @param m12 - 第 1 行,第 2 列\n * @param m13 - 第 1 行,第 3 列\n * @param m21 - 第 2 行,第 1 列\n * @param m22 - 第 2 行,第 2 列\n * @param m23 - 第 2 行,第 3 列\n * @param m31 - 第 3 行,第 1 列\n * @param m32 - 第 3 行,第 2 列\n * @param m33 - 第 3 行,第 3 列\n * @returns 矩阵\n */\n Matrix3.prototype.setFromRowMajorData = function (m11, m12, m13, m21, m22, m23, m31, m32, m33) {\n var e = this.elements;\n e[0] = m11;\n e[3] = m12;\n e[6] = m13;\n e[1] = m21;\n e[4] = m22;\n e[7] = m23;\n e[2] = m31;\n e[5] = m32;\n e[8] = m33;\n return this;\n };\n /**\n * 通过列向量设置矩阵\n * @param c1 - 第一列\n * @param c2 - 第二列\n * @param c3 - 第三列\n * @returns 矩阵\n */\n Matrix3.prototype.setFromColumnVectors = function (c1, c2, c3) {\n return this.set(c1.x, c1.y, c1.z, c2.x, c2.y, c2.z, c3.x, c3.y, c3.z);\n };\n /**\n * 通过四阶矩阵设置三阶矩阵\n * @param m - 四阶矩阵\n * @returns 矩阵\n */\n Matrix3.prototype.setFromMatrix4 = function (m) {\n var me = m.elements;\n return this.set(me[0], me[1], me[2], me[4], me[5], me[6], me[8], me[9], me[10]);\n };\n /**\n * 通过数组设置矩阵\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns 矩阵\n */\n Matrix3.prototype.setFromArray = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n for (var i = 0; i < 9; i++) {\n this.elements[i] = array[offset + i];\n }\n return this;\n };\n /**\n * 通过四元数设置矩阵\n * @param quat - 四元数\n * @returns 矩阵\n */\n Matrix3.prototype.setFromQuaternion = function (quat) {\n var x = quat.x, y = quat.y, z = quat.z, w = quat.w;\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 te = this.elements;\n te[0] = 1 - (yy + zz);\n te[1] = xy + wz;\n te[2] = xz - wy;\n te[3] = xy - wz;\n te[4] = 1 - (xx + zz);\n te[5] = yz + wx;\n te[6] = xz + wy;\n te[7] = yz - wx;\n te[8] = 1 - (xx + yy);\n return this;\n };\n /**\n * 矩阵清零\n * @returns 零矩阵\n */\n Matrix3.prototype.setZero = function () {\n for (var i = 0; i < 9; i++) {\n this.elements[i] = 0;\n }\n return this;\n };\n /**\n * 矩阵单位化\n * @returns 单位矩阵\n */\n Matrix3.prototype.identity = function () {\n return this.set(1, 0, 0, 0, 1, 0, 0, 0, 1);\n };\n /**\n * 矩阵克隆\n * @returns 克隆结果\n */\n Matrix3.prototype.clone = function () {\n var e = this.elements;\n return new Matrix3(e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8]);\n };\n /**\n * 矩阵复制\n * @param m - 复制对象\n * @returns 复制结果\n */\n Matrix3.prototype.copyFrom = function (m) {\n this.elements = __spreadArray([], __read(m.elements), false);\n return this;\n };\n /**\n * 得到列向量\n * @param i - 列向量索引,从 0 开始\n * @returns 列向量\n */\n Matrix3.prototype.getColumnVector = function (i, v) {\n return v.set(this.elements[i * 3], this.elements[i * 3 + 1], this.elements[i * 3 + 2]);\n };\n /**\n * 矩阵缩放\n * @param sx - x 轴缩放分量\n * @param sy - y 轴缩放分量\n * @returns 缩放结果\n */\n Matrix3.prototype.scale = function (sx, sy) {\n var e = this.elements;\n e[0] *= sx;\n e[3] *= sx;\n e[6] *= sx;\n e[1] *= sy;\n e[4] *= sy;\n e[7] *= sy;\n return this;\n };\n /**\n * 矩阵旋转\n * @param theta - 旋转角度(弧度)\n * @returns 旋转结果\n */\n Matrix3.prototype.rotate = function (theta) {\n var c = Math.cos(theta);\n var s = Math.sin(theta);\n var e = this.elements;\n var m11 = e[0], m12 = e[3], m13 = e[6];\n var m21 = e[1], m22 = e[4], m23 = e[7];\n e[0] = c * m11 + s * m21;\n e[3] = c * m12 + s * m22;\n e[6] = c * m13 + s * m23;\n e[1] = -s * m11 + c * m21;\n e[4] = -s * m12 + c * m22;\n e[7] = -s * m13 + c * m23;\n return this;\n };\n /**\n * 矩阵平移\n * @param x - x 轴平移分量\n * @param y - y 轴平移分量\n * @returns 平移结果\n */\n Matrix3.prototype.translate = function (x, y) {\n var e = this.elements;\n e[0] += x * e[2];\n e[3] += x * e[5];\n e[6] += x * e[8];\n e[1] += y * e[2];\n e[4] += y * e[5];\n e[7] += y * e[8];\n return this;\n };\n /**\n * 矩阵右乘\n * @param right - 相乘矩阵\n * @returns 右乘结果\n */\n Matrix3.prototype.multiply = function (right) {\n if (typeof right === 'number') {\n for (var i = 0; i < 9; 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 Matrix3.prototype.premultiply = function (left) {\n return this.multiplyMatrices(left, this);\n };\n /**\n * 矩阵乘法\n * @param left - 矩阵\n * @param right - 矩阵\n * @returns 相乘结果\n */\n Matrix3.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[3], a13 = ae[6];\n var a21 = ae[1], a22 = ae[4], a23 = ae[7];\n var a31 = ae[2], a32 = ae[5], a33 = ae[8];\n var b11 = be[0], b12 = be[3], b13 = be[6];\n var b21 = be[1], b22 = be[4], b23 = be[7];\n var b31 = be[2], b32 = be[5], b33 = be[8];\n te[0] = a11 * b11 + a12 * b21 + a13 * b31;\n te[3] = a11 * b12 + a12 * b22 + a13 * b32;\n te[6] = a11 * b13 + a12 * b23 + a13 * b33;\n te[1] = a21 * b11 + a22 * b21 + a23 * b31;\n te[4] = a21 * b12 + a22 * b22 + a23 * b32;\n te[7] = a21 * b13 + a22 * b23 + a23 * b33;\n te[2] = a31 * b11 + a32 * b21 + a33 * b31;\n te[5] = a31 * b12 + a32 * b22 + a33 * b32;\n te[8] = a31 * b13 + a32 * b23 + a33 * b33;\n return this;\n };\n /**\n * 矩阵求行列式值\n * @returns 行列式结果\n */\n Matrix3.prototype.determinant = function () {\n var e = this.elements;\n var m11 = e[0], m21 = e[3], m31 = e[6];\n var m12 = e[1], m22 = e[4], m32 = e[7];\n var m13 = e[2], m23 = e[5], m33 = e[8];\n return (m11 * (m22 * m33 - m23 * m32) +\n m12 * (m23 * m31 - m21 * m33) +\n m13 * (m21 * m32 - m22 * m31));\n };\n /**\n * 矩阵求逆\n * @returns 逆矩阵\n */\n Matrix3.prototype.invert = function () {\n var e = this.elements;\n var m11 = e[0], m12 = e[3], m13 = e[6];\n var m21 = e[1], m22 = e[4], m23 = e[7];\n var m31 = e[2], m32 = e[5], m33 = e[8];\n var t11 = m33 * m22 - m32 * m23;\n var t12 = m32 * m13 - m33 * m12;\n var t13 = m23 * m12 - m22 * m13;\n var det = m11 * t11 + m21 * t12 + m31 * t13;\n if (det === 0) {\n return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n var detInv = 1 / det;\n e[0] = t11 * detInv;\n e[1] = (m31 * m23 - m33 * m21) * detInv;\n e[2] = (m32 * m21 - m31 * m22) * detInv;\n e[3] = t12 * detInv;\n e[4] = (m33 * m11 - m31 * m13) * detInv;\n e[5] = (m31 * m12 - m32 * m11) * detInv;\n e[6] = t13 * detInv;\n e[7] = (m21 * m13 - m23 * m11) * detInv;\n e[8] = (m22 * m11 - m21 * m12) * detInv;\n return this;\n };\n /**\n * 矩阵转置\n * @returns 转置结果\n */\n Matrix3.prototype.transpose = function () {\n var t;\n var m = this.elements;\n t = m[1];\n m[1] = m[3];\n m[3] = t;\n t = m[2];\n m[2] = m[6];\n m[6] = t;\n t = m[5];\n m[5] = m[7];\n m[7] = t;\n return this;\n };\n /**\n * 对点进行矩阵变换\n * @param v - 输入点\n * @param out - 输出点,如果没有会覆盖输入的数据\n * @returns 变换后的结果\n */\n Matrix3.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[3] * y + e[6] * z;\n res.y = e[1] * x + e[4] * y + e[7] * z;\n res.z = e[2] * x + e[5] * y + e[8] * z;\n return res;\n };\n /**\n * 对法向量进行矩阵变换\n * @param v - 输入向量\n * @param out - 输出向量,如果没有会覆盖输入的数据\n * @returns 变换后的结果\n */\n Matrix3.prototype.transformNormal = function (v, out) {\n return this.transformPoint(v, out).normalize();\n };\n /**\n * 矩阵判等\n * @param matrix - 矩阵\n * @returns 判等结果\n */\n Matrix3.prototype.equals = function (matrix) {\n var te = this.elements;\n var me = matrix.elements;\n for (var i = 0; i < 9; i++) {\n if (!isEqual(te[i], me[i])) {\n return false;\n }\n }\n return true;\n };\n /**\n * 矩阵转为数组\n * @returns\n */\n Matrix3.prototype.toArray = function () {\n return __spreadArray([], __read(this.elements), false);\n };\n Matrix3.prototype.fill = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n var e = this.elements;\n array[offset] = e[0];\n array[offset + 1] = e[1];\n array[offset + 2] = e[2];\n array[offset + 3] = e[3];\n array[offset + 4] = e[4];\n array[offset + 5] = e[5];\n array[offset + 6] = e[6];\n array[offset + 7] = e[7];\n array[offset + 8] = e[8];\n };\n /**\n * 创建单位阵\n * @returns 单位矩阵\n */\n Matrix3.fromIdentity = function () {\n return new Matrix3(1, 0, 0, 0, 1, 0, 0, 0, 1);\n };\n /**\n * 通过列向量创建矩阵\n * @param c1 - 第一列\n * @param c2 - 第二列\n * @param c3 - 第三列\n * @returns 矩阵\n */\n Matrix3.fromColumnVectors = function (c1, c2, c3) {\n return new Matrix3().setFromColumnVectors(c1, c2, c3);\n };\n /**\n * 通过四阶矩阵创建矩阵(获取空间变换矩阵旋转缩放部分)\n * @param m - 四阶矩阵\n * @returns 矩阵\n */\n Matrix3.fromMatrix4 = function (m) {\n return new Matrix3().setFromMatrix4(m);\n };\n /**\n * 通过数组创建矩阵\n * @param array - 数组(列优先)\n * @param [offset=0] - 起始偏移值\n * @returns 矩阵\n */\n Matrix3.fromArray = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n return new Matrix3().setFromArray(array, offset);\n };\n /**\n * 通过四元数创建矩阵\n * @param quat - 四元数\n * @returns 矩阵\n */\n Matrix3.fromQuaternion = function (quat) {\n return new Matrix3().setFromQuaternion(quat);\n };\n /**\n * 设置矩阵通过行优先数据\n * @param m11 - 第 1 行,第 1 列\n * @param m12 - 第 1 行,第 2 列\n * @param m13 - 第 1 行,第 3 列\n * @param m21 - 第 2 行,第 1 列\n * @param m22 - 第 2 行,第 2 列\n * @param m23 - 第 2 行,第 3 列\n * @param m31 - 第 3 行,第 1 列\n * @param m32 - 第 3 行,第 2 列\n * @param m33 - 第 3 行,第 3 列\n * @returns 矩阵\n */\n Matrix3.fromRowMajorData = function (m11, m12, m13, m21, m22, m23, m31, m32, m33) {\n return new Matrix3(m11, m21, m31, m12, m22, m32, m13, m23, m33);\n };\n return Matrix3;\n}());\nexport { Matrix3 };\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","import { Vector4 } from './vector4';\nexport var Color = /** @class */ (function () {\n /**\n * 构造函数,默认值为黑色\n * @param [r=0]\n * @param [g=0]\n * @param [b=0]\n * @param [a=0]\n */\n function Color(r, g, b, a) {\n if (r === void 0) { r = 0; }\n if (g === void 0) { g = 0; }\n if (b === void 0) { b = 0; }\n if (a === void 0) { a = 0; }\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n }\n /**\n * 设置颜色\n * @param r - r 分量\n * @param g - g 分量\n * @param b - b 分量\n * @param a - a 分量\n * @returns\n */\n Color.prototype.set = function (r, g, b, a) {\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n return this;\n };\n /**\n * 设置零颜色\n * @returns\n */\n Color.prototype.setZero = function () {\n this.r = 0;\n this.g = 0;\n this.b = 0;\n this.a = 0;\n return this;\n };\n /**\n * 通过标量数值设置颜色\n * @param num - 数值\n * @returns\n */\n Color.prototype.setFromNumber = function (num) {\n this.r = num;\n this.g = num;\n this.b = num;\n this.a = num;\n return this;\n };\n /**\n * 通过Vector4创建颜色\n * @param v - Vector4\n * @returns\n */\n Color.prototype.setFromVector4 = function (v) {\n this.r = v.x;\n this.g = v.y;\n this.b = v.z;\n this.a = v.w;\n return this;\n };\n /**\n * 通过数组创建颜色\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns\n */\n Color.prototype.setFromArray = function (array, offset) {\n var _a, _b, _c, _d;\n if (offset === void 0) { offset = 0; }\n this.r = (_a = array[offset]) !== null && _a !== void 0 ? _a : 0;\n this.g = (_b = array[offset + 1]) !== null && _b !== void 0 ? _b : 0;\n this.b = (_c = array[offset + 2]) !== null && _c !== void 0 ? _c : 0;\n this.a = (_d = array[offset + 3]) !== null && _d !== void 0 ? _d : 0;\n return this;\n };\n Color.prototype.setFromHSV = function (hue, saturation, value, alpha) {\n if (alpha === void 0) { alpha = 1; }\n var chroma = value * saturation;\n var h = hue / 60;\n var x = chroma * (1 - Math.abs((h % 2) - 1));\n var r = 0;\n var g = 0;\n var b = 0;\n if (h >= 0 && h <= 1) {\n r = chroma;\n g = x;\n }\n else if (h >= 1 && h <= 2) {\n r = x;\n g = chroma;\n }\n else if (h >= 2 && h <= 3) {\n g = chroma;\n b = x;\n }\n else if (h >= 3 && h <= 4) {\n g = x;\n b = chroma;\n }\n else if (h >= 4 && h <= 5) {\n r = x;\n b = chroma;\n }\n else if (h >= 5 && h <= 6) {\n r = chroma;\n b = x;\n }\n var m = value - chroma;\n return this.set(r + m, g + m, b + m, alpha);\n };\n Color.prototype.setFromHexString = function (hex) {\n if (hex.substring(0, 1) !== '#' || (hex.length !== 9 && hex.length !== 7)) {\n return this;\n }\n var r = parseInt(hex.substring(1, 3), 16) / 255.0;\n var g = parseInt(hex.substring(3, 5), 16) / 255.0;\n var b = parseInt(hex.substring(5, 7), 16) / 255.0;\n var a = hex.length === 9 ? parseInt(hex.substring(7, 9), 16) / 255.0 : 1.0;\n return this.set(r, g, b, a);\n };\n /**\n * 拷贝颜色\n * @param v - 复制对象\n * @returns 拷贝结果\n */\n Color.prototype.copyFrom = function (v) {\n this.r = v.r;\n this.g = v.g;\n this.b = v.b;\n this.a = v.a;\n return this;\n };\n /**\n * 克隆颜色\n * @returns 克隆结果\n */\n Color.prototype.clone = function () {\n return new Color(this.r, this.g, this.b, this.a);\n };\n /**\n * 根据下标设置颜色分量\n * @param index - 下标值\n * @param value - 分量值\n * @returns\n */\n Color.prototype.setElement = function (index, value) {\n switch (index) {\n case 0:\n this.r = value;\n break;\n case 1:\n this.g = value;\n break;\n case 2:\n this.b = value;\n break;\n case 3:\n this.a = 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 Color.prototype.getElement = function (index) {\n switch (index) {\n case 0: return this.r;\n case 1: return this.g;\n case 2: return this.b;\n case 3: return this.a;\n default: console.error('index is out of range: ' + index);\n }\n return 0;\n };\n /**\n * 颜色相加\n * @param right - 相加对象,颜色 | 数字\n * @returns 相加结果\n */\n Color.prototype.add = function (right) {\n if (typeof right === 'number') {\n this.r += right;\n this.g += right;\n this.b += right;\n this.a += right;\n }\n else if (right instanceof Array) {\n this.r += right[0];\n this.g += right[1];\n this.b += right[2];\n this.a += right[3];\n }\n else {\n this.r += right.r;\n this.g += right.g;\n this.b += right.b;\n this.a += right.a;\n }\n return this;\n };\n /**\n * 颜色相减\n * @param right - 相减对象,颜色 | 数字\n * @returns 相减结果\n */\n Color.prototype.subtract = function (right) {\n if (typeof right === 'number') {\n this.r -= right;\n this.g -= right;\n this.b -= right;\n this.a -= right;\n }\n else if (right instanceof Array) {\n this.r -= right[0];\n this.g -= right[1];\n this.b -= right[2];\n this.a -= right[3];\n }\n else {\n this.r -= right.r;\n this.g -= right.g;\n this.b -= right.b;\n this.a -= right.a;\n }\n return this;\n };\n /**\n * 颜色相乘\n * @param right - 相乘对象,对象 | 数字\n * @returns 颜色\n */\n Color.prototype.multiply = function (right) {\n if (typeof right === 'number') {\n this.r *= right;\n this.g *= right;\n this.b *= right;\n this.a *= right;\n }\n else if (right instanceof Array) {\n this.r *= right[0];\n this.g *= right[1];\n this.b *= right[2];\n this.a *= right[3];\n }\n else {\n this.r *= right.r;\n this.g *= right.g;\n this.b *= right.b;\n this.a *= right.a;\n }\n return this;\n };\n /**\n * 颜色相除\n * @param right - 相除对象,对象 | 数字\n * @returns 颜色\n */\n Color.prototype.divide = function (right) {\n if (typeof right === 'number') {\n this.r /= right;\n this.g /= right;\n this.b /= right;\n this.a /= right;\n }\n else if (right instanceof Array) {\n this.r /= right[0];\n this.g /= right[1];\n this.b /= right[2];\n this.a /= right[3];\n }\n else {\n this.r /= right.r;\n this.g /= right.g;\n this.b /= right.b;\n this.a /= right.a;\n }\n return this;\n };\n /**\n * 颜色缩放\n * @param v - 数字\n * @returns 缩放结果\n */\n Color.prototype.scale = function (v) {\n this.r *= v;\n this.g *= v;\n this.b *= v;\n this.a *= v;\n return this;\n };\n /**\n * 颜色求最小值\n * @param v - 颜色或数值\n * @returns 最小值\n */\n Color.prototype.min = function (v) {\n if (typeof v === 'number') {\n this.r = Math.min(this.r, v);\n this.g = Math.min(this.g, v);\n this.b = Math.min(this.b, v);\n this.a = Math.min(this.a, v);\n }\n else {\n this.r = Math.min(this.r, v.r);\n this.g = Math.min(this.g, v.g);\n this.b = Math.min(this.b, v.b);\n this.a = Math.min(this.a, v.a);\n }\n return this;\n };\n /**\n * 颜色求最大值\n * @param v - 颜色或数值\n * @returns 最大值\n */\n Color.prototype.max = function (v) {\n if (typeof v === 'number') {\n this.r = Math.max(this.r, v);\n this.g = Math.max(this.g, v);\n this.b = Math.max(this.b, v);\n this.a = Math.max(this.a, v);\n }\n else {\n this.r = Math.max(this.r, v.r);\n this.g = Math.max(this.g, v.g);\n this.b = Math.max(this.b, v.b);\n this.a = Math.max(this.a, v.a);\n }\n return this;\n };\n /**\n * 颜色阈值约束\n * @param min - 最小值\n * @param max - 最大值\n * @returns 颜色\n */\n Color.prototype.clamp = function (min, max) {\n return this.max(min).min(max);\n };\n /**\n * 颜色求线性插值\n * @param v - 颜色\n * @param alpha - 插值比例\n * @returns 插值结果\n */\n Color.prototype.lerp = function (v, alpha) {\n this.r += (v.r - this.r) * alpha;\n this.g += (v.g - this.g) * alpha;\n this.b += (v.b - this.b) * alpha;\n this.a += (v.a - this.a) * alpha;\n return this;\n };\n /**\n * 计算颜色亮度值\n * @returns 亮度值\n */\n Color.prototype.luminance = function () {\n return this.r * 0.3 + this.g * 0.59 + this.b * 0.11;\n };\n /**\n * 颜色判等\n * @param v - 颜色\n * @returns 判等结果\n */\n Color.prototype.equals = function (v) {\n return v.r === this.r && v.g === this.g && v.b === this.b && v.a === this.a;\n };\n Color.prototype.toLinear = function () {\n this.r = Color.gammaToLinear(this.r);\n this.g = Color.gammaToLinear(this.g);\n this.b = Color.gammaToLinear(this.b);\n return this;\n };\n Color.prototype.toGamma = function () {\n this.r = Color.linearToGamma(this.r);\n this.g = Color.linearToGamma(this.g);\n this.b = Color.linearToGamma(this.b);\n return this;\n };\n /**\n * 颜色转数组\n * @returns 数组\n */\n Color.prototype.toArray = function () {\n return [this.r, this.g, this.b, this.a];\n };\n Color.prototype.toVector4 = function () {\n return new Vector4(this.r, this.g, this.b, this.a);\n };\n /**\n * RGB 颜色空间转 HSV\n * @param result HSV 值\n */\n Color.prototype.toHSV = function () {\n var _a;\n var r = (_a = this, _a.r), g = _a.g, b = _a.b, a = _a.a;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var v = max;\n var dm = max - min;\n var h = 0;\n var s = 0;\n if (max !== 0) {\n s = dm / max;\n }\n if (max != min) {\n if (max == r) {\n h = (g - b) / dm;\n if (g < b) {\n h += 6;\n }\n }\n else if (max == g) {\n h = (b - r) / dm + 2;\n }\n else if (max == b) {\n h = (r - g) / dm + 4;\n }\n h *= 60;\n }\n return new Color(h, s, v, a);\n };\n Color.prototype.toHexString = function (includeAlpha) {\n if (includeAlpha === void 0) { includeAlpha = true; }\n var R = Color.ToHex(Math.round(this.r * 255));\n var G = Color.ToHex(Math.round(this.g * 255));\n var B = Color.ToHex(Math.round(this.b * 255));\n var A = Color.ToHex(Math.round(this.a * 255));\n if (includeAlpha) {\n return '#' + R + G + B + A;\n }\n else {\n return '#' + R + G + B;\n }\n };\n Color.prototype.fill = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n array[offset] = this.r;\n array[offset + 1] = this.g;\n array[offset + 2] = this.b;\n array[offset + 3] = this.a;\n };\n /**\n * 通过标量数值创建颜色\n * @param num - 数值\n * @returns\n */\n Color.fromNumber = function (num) {\n return new Color().setFromNumber(num);\n };\n /**\n * 通过数组创建颜色\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns\n */\n Color.fromArray = function (array, offset) {\n if (offset === void 0) { offset = 0; }\n return new Color().setFromArray(array, offset);\n };\n /**\n * 通过 hex 字符串创建颜色\n * @param hex - hex 字符串\n * @returns\n */\n Color.fromHexString = function (hex) {\n return new Color().setFromHexString(hex);\n };\n Color.fromHSV = function (hue, saturation, value, alpha) {\n if (alpha === void 0) { alpha = 1; }\n return new Color().setFromHSV(hue, saturation, value, alpha);\n };\n /**\n * 颜色值从 Gamma 空间转到线性空间\n * @param v - Gamma 空间颜色值\n * @returns 线性空间颜色值\n */\n Color.gammaToLinear = function (v) {\n if (v <= 0.0) {\n return 0.0;\n }\n else if (v <= 0.04045) {\n return v / 12.92;\n }\n else if (v < 1.0) {\n return Math.pow((v + 0.055) / 1.055, 2.4);\n }\n else {\n return Math.pow(v, 2.4);\n }\n };\n /**\n * 颜色值从线性空间转到 Gamma 空间\n * @param value - 线性空间颜色值\n * @returns Gamma 空间颜色值\n */\n Color.linearToGamma = function (value) {\n if (value <= 0.0) {\n return 0.0;\n }\n else if (value < 0.0031308) {\n return 12.92 * value;\n }\n else if (value < 1.0) {\n return 1.055 * Math.pow(value, 0.41666) - 0.055;\n }\n else {\n return Math.pow(value, 0.41666);\n }\n };\n Color.ToHex = function (i) {\n var str = i.toString(16);\n if (i <= 15) {\n return ('0' + str).toUpperCase();\n }\n return str.toUpperCase();\n };\n /**\n * 颜色的常量\n */\n Color.BLACK = new Color(0, 0, 0, 1); // 纯黑色\n Color.BLUE = new Color(0, 0, 1, 1); // 纯蓝色\n Color.CLEAR = new Color(0, 0, 0, 0); // 完全透明\n Color.CYAN = new Color(0, 1, 1, 1); // 青色\n Color.GRAY = new Color(0.5, 0.5, 0.5, 1); // 灰色\n Color.GREEN = new Color(0, 1, 0, 1); // 纯绿色\n Color.MAGENTA = new Color(1, 0, 1, 1); // 洋红色\n Color.RED = new Color(1, 0, 0, 1); // 纯红色\n Color.WHITE = new Color(1, 1, 1, 1); // 纯白色\n Color.YELLOW = new Color(1, 0.92, 0.016, 1); // 黄色\n return Color;\n}());\n","import { Vector3 } from './vector3';\n/**\n * 三维包围盒\n */\nvar Box3 = /** @class */ (function () {\n /**\n * 构造函数,传入值为空时表示空包围盒\n * @param [min=new Vector3(Infinity)] - 最小角点\n * @param [max=new Vector3(-Infinity)] - 最大角点\n */\n function Box3(min, max) {\n if (min === void 0) { min = new Vector3(Infinity, Infinity, Infinity); }\n if (max === void 0) { max = new Vector3(-Infinity, -Infinity, -Infinity); }\n this.min = min.clone();\n this.max = max.clone();\n }\n /**\n * 设置三维包围盒的值\n * @param min - 三维包围盒最小点\n * @param max - 三维包围盒最大点\n * @returns\n */\n Box3.prototype.set = function (min, max) {\n this.min.copyFrom(min);\n this.max.copyFrom(max);\n return this;\n };\n /**\n * 通过数组构建三维包围盒\n * @param array - 数组集合(每三个数视为一个三维空间点)\n * @returns 三维包围盒\n */\n Box3.prototype.setFromArray = function (array) {\n var minX = Number(Infinity);\n var minY = Number(Infinity);\n var minZ = Number(Infinity);\n var maxX = -Infinity;\n var maxY = -Infinity;\n var maxZ = -Infinity;\n for (var i = 0, l = array.length; i < l; i += 3) {\n var x = array[i];\n var y = array[i + 1];\n var z = array[i + 2];\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (z < minZ) {\n minZ = z;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n if (z > maxZ) {\n maxZ = z;\n }\n }\n this.min.set(minX, minY, minZ);\n this.max.set(maxX, maxY, maxZ);\n return this;\n };\n /**\n * 通过三维空间点构建三维包围盒\n * @param points - 三维空间点集合\n * @returns 三维包围盒\n */\n Box3.prototype.setFromPoints = function (points) {\n this.makeEmpty();\n for (var i = 0, il = points.length; i < il; i++) {\n this.expandByPoint(points[i]);\n }\n return this;\n };\n /**\n * 通过三维空间点(包围盒中心)和大小确定包围盒\n * @param center - 三维包围盒中心点\n * @param size - 三维包围盒大小值\n * @returns 三维包围盒\n */\n Box3.prototype.setFromCenterAndSize = function (center, size) {\n var halfSize = size.clone().multiply(0.5);\n this.min.copyFrom(center).subtract(halfSize);\n this.max.copyFrom(center).add(halfSize);\n return this;\n };\n // TODO\n /**\n * 通过实体构建包围盒\n * @param object - 构件实体\n * @returns 三维包围盒\n */\n Box3.prototype.setFromObject = function (object) {\n this.makeEmpty();\n return this.expandByObject(object);\n };\n /**\n * 克隆三维包围盒\n * @returns 克隆结果\n */\n Box3.prototype.clone = function () {\n return new Box3().copyFrom(this);\n };\n /**\n * 复制三维包围盒\n * @param box - 复制对象\n * @returns 复制结果\n */\n Box3.prototype.copyFrom = function (box) {\n this.min.copyFrom(box.min);\n this.max.copyFrom(box.max);\n return this;\n };\n /**\n * 三维包围盒置空\n * @returns 置空结果\n */\n Box3.prototype.makeEmpty = function () {\n this.min.x = this.min.y = this.min.z = Number(Infinity);\n this.max.x = this.max.y = this.max.z = -Infinity;\n return this;\n };\n /**\n * 三维包围盒判空\n * @returns 判空结果\n */\n Box3.prototype.isEmpty = function () {\n // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n return this.max.x < this.min.x\n || this.max.y < this.min.y\n || this.max.z < this.min.z;\n };\n /**\n * 获取三维包围盒中心\n * @param [target=new Vector3()]\n * @returns\n */\n Box3.prototype.getCenter = function (target) {\n if (target === void 0) { target = new Vector3(); }\n return this.isEmpty() ? target.set(0, 0, 0) : target.addVectors(this.min, this.max).multiply(0.5);\n };\n /**\n * 获取三维包围盒大小\n * @param [target=new Vector3()] - 结果保存对象\n * @returns 三维包围盒大小\n */\n Box3.prototype.getSize = function (target) {\n if (target === void 0) { target = new Vector3(); }\n return this.isEmpty() ? target.set(0, 0, 0) : target.subtractVectors(this.max, this.min);\n };\n /**\n * 通过三维空间点扩展三维包围盒\n * @param point - 三维空间点\n * @returns 扩展结果\n */\n Box3.prototype.expandByPoint = function (point) {\n this.min.min(point);\n this.max.max(point);\n return this;\n };\n /**\n * 通过三维向量扩展三维包围盒\n * @param vector - 三维向量\n * @returns 扩展结果\n */\n Box3.prototype.expandByVector = function (vector) {\n this.min.subtract(vector);\n this.max.add(vector);\n return this;\n };\n /**\n * 通过实数扩展三维包围盒\n * @param scalar - 扩展大小\n * @returns 扩展结果\n */\n Box3.prototype.expandByScalar = function (scalar) {\n this.min.add(-scalar);\n this.max.add(scalar);\n return this;\n };\n /**\n * 通过包围盒扩展三维包围盒\n * @param box\n * @returns\n */\n Box3.prototype.expandByBox = function (box) {\n this.min.min(box.min);\n this.max.max(box.max);\n return this;\n };\n // TODO\n /**\n * 通过实体扩展三维包围盒\n * @param object - 构件实体\n * @returns 扩展结果\n */\n Box3.prototype.expandByObject = function (object) {\n // Computes the world-axis-aligned bounding box of an object (including its children),\n // accounting for both the object's, and children's, world transforms\n object.updateWorldMatrix(false, false);\n var geometry = object.geometry;\n if (geometry !== undefined) {\n if (geometry.boundingBox === null) {\n geometry.computeBoundingBox();\n }\n var box3 = new Box3();\n box3.copyFrom(geometry.boundingBox);\n box3.applyMatrix4(object.matrixWorld);\n this.union(box3);\n }\n var children = object.children;\n for (var i = 0, l = children.length; i < l; i++) {\n this.expandByObject(children[i]);\n }\n return this;\n };\n /**\n * 判断三维包围盒相交关系(if this intersect other)\n * @param point - 三维空间点\n * @returns 点包含判断结果\n */\n Box3.prototype.containsPoint = function (point) {\n return !(point.x < this.min.x\n || point.x > this.max.x\n || point.y < this.min.y\n || point.y > this.max.y\n || point.z < this.min.z\n || point.z > this.max.z);\n };\n /**\n * 判断三维包围盒与三维包围盒的包含关系\n * @param other - 三维包围盒\n * @returns 包围盒包含结果(true 表示包含 other, false 表示不包含 other)\n */\n Box3.prototype.containsBox = function (other) {\n return this.min.x <= other.min.x\n && this.max.x >= other.max.x\n && this.min.y <= other.min.y\n && this.max.y >= other.max.y\n && this.min.z <= other.min.z\n && this.max.z >= other.max.z;\n };\n // TODO\n /**\n * 获取点在三维包围盒的比例位置\n * @param point - 三维空间点\n * @param [target=new Vector3()] - 结果保存对象\n * @returns 点在包围盒比例位置\n */\n Box3.prototype.getParameter = function (point, target) {\n if (target === void 0) { target = new Vector3(); }\n // This can potentially have a divide by zero if the box\n // has a size dimension of 0.\n return target.set((point.x - this.min.x) / (this.max.x - this.min.x), (point.y - this.min.y) / (this.max.y - this.min.y), (point.z - this.min.z) / (this.max.z - this.min.z));\n };\n /**\n * 判断三维包围盒相交关系(if this intersect other)\n * @param other - 三维包围盒\n * @returns 相交判断结果\n */\n Box3.prototype.intersectsBox = function (other) {\n // using 6 splitting planes to rule out intersections.\n return !(other.max.x < this.min.x || other.min.x > this.max.x\n || other.max.y < this.min.y || other.min.y > this.max.y\n || other.max.z < this.min.z || other.min.z > this.max.z);\n };\n /**\n * 判断三维包围盒和球是否相交\n * @param sphere\n * @returns\n */\n Box3.prototype.intersectsSphere = function (sphere) {\n // Find the point on the AABB closest to the sphere center.\n var vector = new Vector3();\n this.clampPoint(sphere.center, vector);\n // If that point is inside the sphere, the AABB and sphere intersect.\n return vector.distanceSquared(sphere.center) <= (sphere.radius * sphere.radius);\n };\n /**\n * 求点与三维包围盒的最近点\n * @param point - 三维空间点\n * @param [target=new Vector3()] - 结果存放对象\n * @returns 计算结果\n */\n Box3.prototype.clampPoint = function (point, target) {\n if (target === void 0) { target = new Vector3(); }\n return target.copyFrom(point).clamp(this.min, this.max);\n };\n /**\n * 三维空间点到三维包围盒的距离\n * @param point - 三维包围盒\n * @returns 距离结果\n */\n Box3.prototype.distanceToPoint = function (point) {\n var clampedPoint = point.clone().clamp(this.min, this.max);\n return clampedPoint.subtract(point).length();\n };\n /**\n * 三维包围盒求交集\n * @param box - 三维包围盒\n * @returns 求交结果\n */\n Box3.prototype.intersect = function (box) {\n this.min.max(box.min);\n this.max.min(box.max);\n // ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n if (this.isEmpty()) {\n this.makeEmpty();\n }\n return this;\n };\n /**\n * 三维包围盒求并集\n * @param box - 三维包围盒\n * @returns 求并结果\n */\n Box3.prototype.union = function (box) {\n this.min.min(box.min);\n this.max.max(box.max);\n return this;\n };\n /**\n * 通过三维变换矩阵变化三维包围盒\n * @param matrix - 三维变换矩阵\n * @returns 变换结果\n */\n Box3.prototype.applyMatrix4 = function (matrix, center) {\n if (center === void 0) { center = new Vector3(); }\n // transform of empty box is an empty box.\n if (this.isEmpty()) {\n return this;\n }\n var points = this.getOBBPoints(matrix, center);\n this.setFromPoints(points);\n return this;\n };\n Box3.prototype.getOBBPoints = function (matrix, center) {\n if (center === void 0) { center = new Vector3(); }\n // transform of empty box is an empty box.\n if (this.isEmpty()) {\n return [];\n }\n var points = [];\n // NOTE: I am using a binary pattern to specify all 2^3 combinations below\n points[0] = new Vector3(this.min.x, this.min.y, this.min.z); // 000\n points[1] = new Vector3(this.min.x, this.min.y, this.max.z); // 001\n points[2] = new Vector3(this.min.x, this.max.y, this.min.z); // 010\n points[3] = new Vector3(this.min.x, this.max.y, this.max.z); // 011\n points[4] = new Vector3(this.max.x, this.min.y, this.min.z); // 100\n points[5] = new Vector3(this.max.x, this.min.y, this.max.z); // 101\n points[6] = new Vector3(this.max.x, this.max.y, this.min.z); // 110\n points[7] = new Vector3(this.max.x, this.max.y, this.max.z); // 111\n points.forEach(function (p) {\n p.subtract(center);\n p.applyMatrix(matrix);\n p.add(center);\n });\n return points;\n };\n /**\n * 通过包围盒获取包围球\n * @param target\n * @returns\n */\n Box3.prototype.getBoundingSphere = function (target) {\n this.getCenter(target.center);\n var vector = new Vector3();\n target.radius = this.getSize(vector).length() * 0.5;\n return target;\n };\n /**\n * 三维包围盒位移\n * @param offset - 三维位移向量\n * @returns 位移结果\n */\n Box3.prototype.translate = function (offset) {\n this.min.add(offset);\n this.max.add(offset);\n return this;\n };\n /**\n * 三维包围盒判等\n * @param other - 三维包围盒\n * @returns 判等结果\n */\n Box3.prototype.equals = function (other) {\n return other.min.equals(this.min) && other.max.equals(this.max);\n };\n return Box3;\n}());\nexport { Box3 };\n","import { Box3 } from './box3';\nimport { Vector3 } from './vector3';\n/**\n * 球\n */\nvar Sphere = /** @class */ (function () {\n /**\n * 构造函数\n * @param [center=Vector3.ZERO] - 球心,默认值为(0, 0, 0)\n * @param [radius=-1] - 半径\n */\n function Sphere(center, radius) {\n if (center === void 0) { center = Vector3.ZERO; }\n if (radius === void 0) { radius = -1; }\n this.center = center.clone();\n this.radius = radius;\n }\n /**\n * 通过参数设置球\n * @param center - 球心\n * @param radius - 半径\n * @returns\n */\n Sphere.prototype.set = function (center, radius) {\n this.center.copyFrom(center);\n this.radius = radius;\n return this;\n };\n /**\n * 通过空间点与球心设置球\n * @param points - 三维空间点\n * @param [optionalCenter] - 指定球心\n * @returns\n */\n Sphere.prototype.setFromPoints = function (points, optionalCenter) {\n var center = this.center;\n if (optionalCenter !== undefined) {\n center.copyFrom(optionalCenter);\n var maxRadiusSq = 0;\n for (var i = 0; i < points.length; i++) {\n maxRadiusSq = Math.max(maxRadiusSq, center.distanceSquared(points[i]));\n }\n this.radius = Math.sqrt(maxRadiusSq);\n }\n else {\n var box = new Box3().setFromPoints(points);\n box.getCenter(center);\n this.radius = box.getSize().length() / 2;\n }\n return this;\n };\n /**\n * 复制球\n * @param sphere - 球信息\n * @returns 复制结果\n */\n Sphere.prototype.copyFrom = function (sphere) {\n this.center.copyFrom(sphere.center);\n this.radius = sphere.radius;\n return this;\n };\n /**\n * 球判空\n * @returns 判空结果\n */\n Sphere.prototype.isEmpty = function () {\n return this.radius < 0;\n };\n /**\n * 球置空\n * @returns 置空结果\n */\n Sphere.prototype.makeEmpty = function () {\n this.center.set(0, 0, 0);\n this.radius = -1;\n return this;\n };\n /**\n * 三维空间点包围判断\n * @param point - 三维空间点\n * @returns 空间点包含判断\n */\n Sphere.prototype.containsPoint = function (point) {\n return point.distanceSquared(this.center) <= (this.radius * this.radius);\n };\n /**\n * 空间点与球表面的最短距离\n * @param point - 三维空间点\n * @returns 距离结果\n */\n Sphere.prototype.distanceToPoint = function (point) {\n return (point.distance(this.center) - this.radius);\n };\n /**\n * 与球相交判断\n * @param sphere - 球\n * @returns 相交判断结果\n */\n Sphere.prototype.intersectsSphere = function (sphere) {\n var radiusSum = this.radius + sphere.radius;\n return sphere.center.distanceSquared(this.center) <= (radiusSum * radiusSum);\n };\n /**\n * 与包围盒相交判断\n * @param box - 三维包围盒\n * @returns 相交判断结果\n */\n Sphere.prototype.intersectsBox = function (box) {\n return box.intersectsSphere(this);\n };\n /**\n * 收敛空间点在球范围内\n * 注:乘法的效率要比开方高很多\n * @param point - 三维空间点\n * @param [target] - 结果保存对象\n * @returns 收敛结果\n */\n Sphere.prototype.clampPoint = function (point, target) {\n var deltaLengthSq = this.center.distanceSquared(point);\n if (target === undefined) {\n target = new Vector3();\n }\n target.copyFrom(point);\n if (deltaLengthSq > (this.radius * this.radius)) {\n target.subtract(this.center).normalize();\n target.multiply(this.radius).add(this.center);\n }\n return target;\n };\n /**\n * 根据包围盒获取球\n * @param target - 包围盒\n * @returns 球\n */\n Sphere.prototype.getBoundingBox = function (target) {\n if (target === undefined) {\n target = new Box3();\n }\n if (this.isEmpty()) {\n // Empty sphere produces empty bounding box\n target.makeEmpty();\n return target;\n }\n target.set(this.center, this.center);\n target.expandByScalar(this.radius);\n return target;\n };\n /**\n * 球空间变换\n * @param matrix - 空间变化矩阵\n * @returns 变换结果\n */\n Sphere.prototype.applyMatrix4 = function (matrix) {\n var mt = matrix.elements;\n var scaleXSq = mt[0] * mt[0] + mt[1] * mt[1] + mt[2] * mt[2];\n var scaleYSq = mt[4] * mt[4] + mt[5] * mt[5] + mt[6] * mt[6];\n var scaleZSq = mt[8] * mt[8] + mt[9] * mt[9] + mt[10] * mt[10];\n var maxScale = Math.sqrt(Math.max(scaleXSq, scaleYSq, scaleZSq));\n this.center.applyMatrix(matrix);\n this.radius = this.radius * maxScale;\n return this;\n };\n /**\n * 球位移\n * @param offset - 位移信息\n * @returns 位移结果\n */\n Sphere.prototype.translate = function (offset) {\n this.center.add(offset);\n return this;\n };\n /**\n * 通过三维空间点对球进行扩展\n * @param point - 扩展点\n * @returns 扩展结果\n */\n Sphere.prototype.expandByPoint = function (point) {\n var vector = new Vector3().subtractVectors(point, this.center);\n var lengthSquared = vector.lengthSquared();\n if (lengthSquared > (this.radius * this.radius)) {\n var length_1 = Math.sqrt(lengthSquared);\n var missingRadiusHalf = (length_1 - this.radius) * 0.5;\n // Nudge this sphere towards the target point. Add half the missing distance to radius,\n // and the other half to position. This gives a tighter enclosure, instead of if\n // the whole missing distance were just added to radius.\n this.center.add(vector.multiply(missingRadiusHalf / length_1));\n this.radius += missingRadiusHalf;\n }\n return this;\n };\n /**\n * 包围球求并集\n * @param sphere - 包围球\n * @returns 求并结果\n */\n Sphere.prototype.union = function (sphere) {\n // To enclose another sphere into this sphere, we only need to enclose two points:\n // 1) Enclose the farthest point on the other sphere into this sphere.\n // 2) Enclose the opposite point of the farthest point into this sphere.\n var v1 = new Vector3();\n var toFarthestPoint = new Vector3();\n toFarthestPoint.subtractVectors(sphere.center, this.center).normalize().multiply(sphere.radius);\n this.expandByPoint(v1.copyFrom(sphere.center).add(toFarthestPoint));\n this.expandByPoint(v1.copyFrom(sphere.center).subtract(toFarthestPoint));\n return this;\n };\n /**\n * 包围球求交集\n * @param other - 其它包围球\n * @returns 求交结果\n */\n Sphere.prototype.intersect = function (other) {\n var vector = new Vector3().subtractVectors(this.center, other.center);\n var distance = vector.length();\n var radiusSum = this.radius + other.radius;\n if (distance > radiusSum) {\n return this.makeEmpty();\n }\n this.center = this.center.add(vector.normalize().multiply(distance / 2));\n this.radius = this.radius + other.radius - distance;\n return this;\n };\n /**\n * 包围球判等\n * @param sphere - 包围球\n * @returns 判等结果\n */\n Sphere.prototype.equals = function (sphere) {\n return sphere.center.equals(this.center) && (sphere.radius === this.radius);\n };\n /**\n * 包围球克隆\n * @returns 克隆结果\n */\n Sphere.prototype.clone = function () {\n return new Sphere().copyFrom(this);\n };\n return Sphere;\n}());\nexport { Sphere };\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 * Earcut.js from: https://github.com/mapbox/earcut/tree/v2.2.2\n */\n\nexport function earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n var minX, minY, maxX, maxY, x, y, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 1 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nexport function linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nexport function filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n var stop = ear,\n prev, next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim);\n triangles.push(ear.i / dim);\n triangles.push(next.i / dim);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nexport function isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var p = ear.next.next;\n\n while (p !== ear.prev) {\n if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nexport function isEarHashed(ear, minX, minY, invSize) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // triangle bbox; min & max are calculated like this for speed\n var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),\n minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),\n maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),\n maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(minTX, minTY, minX, minY, invSize),\n maxZ = zOrder(maxTX, maxTY, minX, minY, invSize);\n\n var p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p !== ear.prev && p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n !== ear.prev && n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p !== ear.prev && p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n !== ear.prev && n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim);\n triangles.push(p.i / dim);\n triangles.push(b.i / dim);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize);\n earcutLinked(c, triangles, dim, minX, minY, invSize);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nexport function eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i, len, start, end, list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n eliminateHole(queue[i], outerNode);\n outerNode = filterPoints(outerNode, outerNode.next);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n outerNode = findHoleBridge(hole, outerNode);\n if (outerNode) {\n var b = splitPolygon(outerNode, hole);\n\n // filter collinear points around the cuts\n filterPoints(outerNode, outerNode.next);\n filterPoints(b, b.next);\n }\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n if (x === hx) {\n if (hy === p.y) return p;\n if (hy === p.next.y) return p.next;\n }\n m = p.x < p.next.x ? p : p.next;\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n if (hx === qx) return m; // hole touches outer segment; pick leftmost endpoint\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nexport function indexCurve(start, minX, minY, invSize) {\n var p = start;\n do {\n if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i, p, q, e, tail, numMerges, pSize, qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = 32767 * (x - minX) * invSize;\n y = 32767 * (y - minY) * invSize;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&\n (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&\n (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nexport function isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nexport function equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nexport function intersects(p1, q1, p2, q2) {\n var o1 = sign(area(p1, q1, p2));\n var o2 = sign(area(p1, q1, q2));\n var o3 = sign(area(p2, q2, p1));\n var o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nexport function locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nexport function splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nexport function removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nexport function Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = null;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = {vertices: [], holes: [], dimensions: dim},\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\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;\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","PI2","Math","PI","DEG2RAD","RAD2DEG","NumberEpsilon","isEqual","a","b","abs","Infinity","lerp","x","y","t","clamp","value","min","max","fixedMin","isNaN","fixedMax","lower","upper","EulerOrder","Vector2","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","negate","length","sqrt","lengthSquared","normalize","setLength","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","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","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","Matrix3","setFromMatrix4","rotate","translate","fromMatrix4","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","Color","g","setFromVector4","setFromHSV","hue","saturation","chroma","h","setFromHexString","hex","substring","parseInt","luminance","toLinear","gammaToLinear","toGamma","linearToGamma","toHSV","dm","toHexString","includeAlpha","R","ToHex","G","B","A","fromHexString","fromHSV","pow","str","toUpperCase","BLACK","BLUE","CLEAR","CYAN","GRAY","GREEN","MAGENTA","RED","WHITE","YELLOW","Box3","minX","minY","minZ","maxX","maxY","maxZ","setFromPoints","points","makeEmpty","il","expandByPoint","setFromCenterAndSize","size","halfSize","setFromObject","object","expandByObject","isEmpty","getCenter","getSize","point","expandByVector","expandByScalar","scalar","expandByBox","updateWorldMatrix","geometry","boundingBox","computeBoundingBox","box3","applyMatrix4","matrixWorld","union","children","containsPoint","containsBox","getParameter","intersectsBox","intersectsSphere","clampPoint","distanceToPoint","intersect","getOBBPoints","forEach","p","getBoundingSphere","Sphere","optionalCenter","maxRadiusSq","radiusSum","deltaLengthSq","getBoundingBox","mt","scaleXSq","scaleYSq","scaleZSq","maxScale","length_1","missingRadiusHalf","toFarthestPoint","lambda","dt","exp","degrees","radians","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","linkedList","data","start","end","dim","clockwise","last","j","signedArea","insertNode","removeNode","filterPoints","again","steiner","area","prev","isEar","ear","pointInTriangle","isEarHashed","invSize","minTX","minTY","maxTX","maxTY","zOrder","prevZ","nextZ","compareX","eliminateHole","hole","outerNode","hx","hy","stop","mx","my","tanMin","locallyInside","sectorContainsSector","findHoleBridge","splitPolygon","getLeftmost","leftmost","cx","cy","px","py","isValidDiagonal","intersects","intersectsPolygon","inside","middleInside","q1","q2","o1","o2","o3","o4","onSegment","a2","Node","b2","an","bp","holeIndices","len","list","queue","sort","tail","numMerges","pSize","qSize","inSize","sortLinked","CAMERA_CLIP_MODE_NORMAL","__assign","Object","assign","hasOwnProperty","apply","__values","TypeError","arrAdd","item","includes","callback","thisObj","name_1","ensureFixedNumber","isFinite","CONSTANT","LINE","CURVE","ensureFixedNumberWithRandom","isArray","ensureRGBAValue","colorToArr","ensureColorExpression","normalized","COLORS","map","color","ensureGradient","RGBA_COLOR","ensureNumberExpression","RANDOM","stops_1","getOwnPropertyNames","match","exec","parsePercent","GRADIENT_COLOR","replace","test","toFixed","normalizeColor","getGradientColor","ensureFixedVec3","CONSTANT_VEC3","LINEAR_PATH","BEZIER_PATH","objectValueToNumber","e_1","keys","key","e_1_1","return","deleteEmptyValue","e_2","e_2_1","SuppressedError","d2r","r2d","getStandardParticleContent","particle","transform","shape","type","NONE","shapeType","upDirection","startTurbulence","turbulenceX","turbulenceY","turbulenceZ","emission","bursts","burstOffsets","rateOverTime","renderer","splits","startLifetime","start3DSize","startSize","startSizeX","startSizeY","sizeAspect","maxCount","startDelay","startColor","startRotationZ","startRotation","particleFollowParent","start3DRotation","startRotationX","startRotationY","filter","filter_1","val","path","emitterTransform","sizeOverLifetime","separateAxes","velocityOverLifetime","sol","speedOverLifetime","positionOverLifetime","gravity","gravityOverLifetime","gravityModifier","startSpeed","asMovement","linearX","linearY","linearZ","asRotation","orbCenter","orbitalX","orbitalY","orbitalZ","forceTarget","forceCurve","rotationOverLifetime","angularVelocity","colorOverLifetime","col","opacity","textureSheetAnimation","row","total","animate","cycles","animationDelay","animationDuration","trials","trails","lifetime","dieWithParticles","maxPointPerTrail","minimumVertexDistance","widthOverTrail","colorOverTrail","blending","inheritParticleColor","occlusion","transparentOcclusion","orderOffset","sizeAffectsLifetime","sizeAffectsWidth","texture","parentAffectsPosition","opacityOverLifetime","interaction","behavior","multiple","getStandardNullContent","sprite","opt","rot","getStandardSpriteContent","texAni","convertParams","pathParams","version21Migration","json","compositions","composition","items","null","endBehavior","destroy","freeze","version","v0","standardVersion","reverseParticle","getStandardJSON","singleVersion","split","mesh","light","version22Migration","currentVersion","plugins","bins","requires","images","img","getStandardImage","imageTags","textures","source","flipY","shapes","playerVersion","web","compositionId","comp","getStandardComposition","imgUsage","_imgs","binUsage","spines","_textures","getStandardJSONFromV0","mainVersion","image","renderLevel","oriY","url","template","webp","compressed","astc","android","pvrtc","iOS","loop","sourceType","id","camera","clipMode","duration","getStandardItem","name","startTime","st","previewSize","meta","tempQuat","stdAnchor","originContent","content","pluginName","pn","base","NaN","plugin","getStandardFilterContent","cal","ui","interact","option","CLICK","showPreview","previewColor","NOTIFY","DRAG","enableInEditor","dxRange","dyRange","MESSAGE","getStandardInteractContent","width","height","model","translateX","translateY","translateZ","rol","rotateX","rotateY","rotateZ","getStandardCameraContent","Float32Array","looping","delay","indexOf","isInteger","parentId","originTransform","inverseRotation","changeOrder","transform_1","yx","rotationZYXFromQuat","position"],"mappings":"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"}