belowjs 1.2.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -0
- package/README.md +4 -4
- package/dist/belowjs.css +1 -1
- package/dist/belowjs.js +1286 -637
- package/package.json +3 -2
package/dist/belowjs.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as u from "three";
|
|
2
|
-
import { Controls as
|
|
3
|
-
class
|
|
2
|
+
import { Controls as Oi, Vector3 as R, MOUSE as Ce, TOUCH as pe, Quaternion as Ue, Spherical as Dt, Vector2 as V, Ray as Hi, Plane as qi, MathUtils as Bt, TrianglesDrawMode as ji, TriangleFanDrawMode as ht, TriangleStripDrawMode as li, Loader as yt, LoaderUtils as ve, FileLoader as le, MeshPhysicalMaterial as ee, Color as re, LinearSRGBColorSpace as Y, SRGBColorSpace as se, SpotLight as Ki, PointLight as zi, DirectionalLight as Yi, Matrix4 as Ie, InstancedMesh as ci, InstancedBufferAttribute as Ji, Object3D as Oe, TextureLoader as Wi, ImageBitmapLoader as Xi, BufferAttribute as Re, InterleavedBuffer as Zi, InterleavedBufferAttribute as Ae, LinearMipmapLinearFilter as He, NearestMipmapLinearFilter as $i, LinearMipmapNearestFilter as es, NearestMipmapNearestFilter as ts, LinearFilter as he, NearestFilter as hi, RepeatWrapping as dt, MirroredRepeatWrapping as is, ClampToEdgeWrapping as ss, PointsMaterial as os, Material as ze, LineBasicMaterial as ns, MeshStandardMaterial as wt, DoubleSide as rs, MeshBasicMaterial as fe, PropertyBinding as as, BufferGeometry as di, SkinnedMesh as As, Mesh as Qt, LineSegments as ls, Line as cs, LineLoop as hs, Points as ds, Group as Ye, PerspectiveCamera as gs, OrthographicCamera as us, Skeleton as ps, AnimationClip as fs, Bone as ms, InterpolateDiscrete as bs, InterpolateLinear as gi, Texture as Tt, VectorKeyframeTrack as Lt, NumberKeyframeTrack as Ft, QuaternionKeyframeTrack as kt, ColorManagement as gt, FrontSide as Cs, Interpolant as Es, Box3 as qe, Sphere as St, CompressedCubeTexture as Is, CompressedArrayTexture as Bs, CompressedTexture as ui, NoColorSpace as _t, RGBA_BPTC_Format as ut, RGBA_S3TC_DXT5_Format as pt, RGBA_S3TC_DXT3_Format as Gt, RGB_S3TC_DXT1_Format as Pt, RGBA_S3TC_DXT1_Format as ft, RGBA_ASTC_6x6_Format as Nt, RGBA_ASTC_4x4_Format as Ge, RGBA_ETC2_EAC_Format as pi, RGB_ETC2_Format as fi, RedFormat as Me, RGFormat as xe, RGBAFormat as me, UnsignedByteType as z, HalfFloatType as be, FloatType as De, DataTexture as ys, Data3DTexture as ws, RGB_PVRTC_4BPPV1_Format as Qs, RGB_ETC1_Format as Ss, RGBA_PVRTC_4BPPV1_Format as Ms, RGB_BPTC_UNSIGNED_Format as xs, SphereGeometry as mi, BoxGeometry as vs, DynamicDrawUsage as Rs, InstancedBufferGeometry as Ds, Float32BufferAttribute as Ut, InstancedInterleavedBuffer as mt, WireframeGeometry as Ts, ShaderMaterial as Ls, ShaderLib as Pe, UniformsUtils as bi, UniformsLib as Ne, Vector4 as Te, Line3 as Fs } from "three";
|
|
3
|
+
class je {
|
|
4
4
|
/**
|
|
5
5
|
* Creates a new EventSystem instance
|
|
6
6
|
*/
|
|
@@ -96,7 +96,7 @@ class yt {
|
|
|
96
96
|
return this.events = {}, this;
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
|
-
class
|
|
99
|
+
class Ke {
|
|
100
100
|
/**
|
|
101
101
|
* @param {object} schema - Defines validation rules for each configuration key.
|
|
102
102
|
*/
|
|
@@ -116,7 +116,7 @@ class qe {
|
|
|
116
116
|
const o = this.schema[s], n = i[s];
|
|
117
117
|
if (o.type === "object" && o.schema) {
|
|
118
118
|
const r = n ?? o.default;
|
|
119
|
-
t[s] = new
|
|
119
|
+
t[s] = new Ke(o.schema).validate(r || {});
|
|
120
120
|
} else if (n == null)
|
|
121
121
|
t[s] = o.default;
|
|
122
122
|
else if (this.isTypeValid(n, o.type))
|
|
@@ -143,7 +143,7 @@ class qe {
|
|
|
143
143
|
return Array.isArray(t) ? t.some((s) => i(e, s)) : i(e, t);
|
|
144
144
|
}
|
|
145
145
|
}
|
|
146
|
-
class
|
|
146
|
+
class ks {
|
|
147
147
|
constructor(e = {}) {
|
|
148
148
|
this.config = e, this.scene = new u.Scene(), this.init();
|
|
149
149
|
}
|
|
@@ -164,7 +164,7 @@ class Ds {
|
|
|
164
164
|
this.scene.clear();
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
|
-
const
|
|
167
|
+
const Vt = { type: "change" }, Mt = { type: "start" }, Ci = { type: "end" }, Le = new Hi(), Ot = new qi(), _s = Math.cos(70 * Bt.DEG2RAD), k = new R(), U = 2 * Math.PI, x = {
|
|
168
168
|
NONE: -1,
|
|
169
169
|
ROTATE: 0,
|
|
170
170
|
DOLLY: 1,
|
|
@@ -173,8 +173,8 @@ const Nt = { type: "change" }, St = { type: "start" }, gi = { type: "end" }, Te
|
|
|
173
173
|
TOUCH_PAN: 4,
|
|
174
174
|
TOUCH_DOLLY_PAN: 5,
|
|
175
175
|
TOUCH_DOLLY_ROTATE: 6
|
|
176
|
-
},
|
|
177
|
-
class
|
|
176
|
+
}, Je = 1e-6;
|
|
177
|
+
class Gs extends Oi {
|
|
178
178
|
/**
|
|
179
179
|
* Constructs a new controls instance.
|
|
180
180
|
*
|
|
@@ -182,7 +182,7 @@ class Ls extends Gi {
|
|
|
182
182
|
* @param {?HTMLDOMElement} domElement - The HTML element used for event listeners.
|
|
183
183
|
*/
|
|
184
184
|
constructor(e, t = null) {
|
|
185
|
-
super(e, t), this.state = x.NONE, this.target = new
|
|
185
|
+
super(e, t), this.state = x.NONE, this.target = new R(), this.cursor = new R(), this.minDistance = 0, this.maxDistance = 1 / 0, this.minZoom = 0, this.maxZoom = 1 / 0, this.minTargetRadius = 0, this.maxTargetRadius = 1 / 0, this.minPolarAngle = 0, this.maxPolarAngle = Math.PI, this.minAzimuthAngle = -1 / 0, this.maxAzimuthAngle = 1 / 0, this.enableDamping = !1, this.dampingFactor = 0.05, this.enableZoom = !0, this.zoomSpeed = 1, this.enableRotate = !0, this.rotateSpeed = 1, this.keyRotateSpeed = 1, this.enablePan = !0, this.panSpeed = 1, this.screenSpacePanning = !0, this.keyPanSpeed = 7, this.zoomToCursor = !1, this.autoRotate = !1, this.autoRotateSpeed = 2, this.keys = { LEFT: "ArrowLeft", UP: "ArrowUp", RIGHT: "ArrowRight", BOTTOM: "ArrowDown" }, this.mouseButtons = { LEFT: Ce.ROTATE, MIDDLE: Ce.DOLLY, RIGHT: Ce.PAN }, this.touches = { ONE: pe.ROTATE, TWO: pe.DOLLY_PAN }, this.target0 = this.target.clone(), this.position0 = this.object.position.clone(), this.zoom0 = this.object.zoom, this._domElementKeyEvents = null, this._lastPosition = new R(), this._lastQuaternion = new Ue(), this._lastTargetPosition = new R(), this._quat = new Ue().setFromUnitVectors(e.up, new R(0, 1, 0)), this._quatInverse = this._quat.clone().invert(), this._spherical = new Dt(), this._sphericalDelta = new Dt(), this._scale = 1, this._panOffset = new R(), this._rotateStart = new V(), this._rotateEnd = new V(), this._rotateDelta = new V(), this._panStart = new V(), this._panEnd = new V(), this._panDelta = new V(), this._dollyStart = new V(), this._dollyEnd = new V(), this._dollyDelta = new V(), this._dollyDirection = new R(), this._mouse = new V(), this._performCursorZoom = !1, this._pointers = [], this._pointerPositions = {}, this._controlActive = !1, this._onPointerMove = Ns.bind(this), this._onPointerDown = Ps.bind(this), this._onPointerUp = Us.bind(this), this._onContextMenu = zs.bind(this), this._onMouseWheel = Hs.bind(this), this._onKeyDown = qs.bind(this), this._onTouchStart = js.bind(this), this._onTouchMove = Ks.bind(this), this._onMouseDown = Vs.bind(this), this._onMouseMove = Os.bind(this), this._interceptControlDown = Ys.bind(this), this._interceptControlUp = Js.bind(this), this.domElement !== null && this.connect(this.domElement), this.update();
|
|
186
186
|
}
|
|
187
187
|
connect(e) {
|
|
188
188
|
super.connect(e), this.domElement.addEventListener("pointerdown", this._onPointerDown), this.domElement.addEventListener("pointercancel", this._onPointerUp), this.domElement.addEventListener("contextmenu", this._onContextMenu), this.domElement.addEventListener("wheel", this._onMouseWheel, { passive: !1 }), this.domElement.getRootNode().addEventListener("keydown", this._interceptControlDown, { passive: !0, capture: !0 }), this.domElement.style.touchAction = "none";
|
|
@@ -243,7 +243,7 @@ class Ls extends Gi {
|
|
|
243
243
|
* was called, or the initial state.
|
|
244
244
|
*/
|
|
245
245
|
reset() {
|
|
246
|
-
this.target.copy(this.target0), this.object.position.copy(this.position0), this.object.zoom = this.zoom0, this.object.updateProjectionMatrix(), this.dispatchEvent(
|
|
246
|
+
this.target.copy(this.target0), this.object.position.copy(this.position0), this.object.zoom = this.zoom0, this.object.updateProjectionMatrix(), this.dispatchEvent(Vt), this.update(), this.state = x.NONE;
|
|
247
247
|
}
|
|
248
248
|
update(e = null) {
|
|
249
249
|
const t = this.object.position;
|
|
@@ -265,20 +265,20 @@ class Ls extends Gi {
|
|
|
265
265
|
const A = r - n;
|
|
266
266
|
this.object.position.addScaledVector(this._dollyDirection, A), this.object.updateMatrixWorld(), o = !!A;
|
|
267
267
|
} else if (this.object.isOrthographicCamera) {
|
|
268
|
-
const r = new
|
|
268
|
+
const r = new R(this._mouse.x, this._mouse.y, 0);
|
|
269
269
|
r.unproject(this.object);
|
|
270
270
|
const A = this.object.zoom;
|
|
271
271
|
this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / this._scale)), this.object.updateProjectionMatrix(), o = A !== this.object.zoom;
|
|
272
|
-
const a = new
|
|
272
|
+
const a = new R(this._mouse.x, this._mouse.y, 0);
|
|
273
273
|
a.unproject(this.object), this.object.position.sub(a).add(r), this.object.updateMatrixWorld(), n = k.length();
|
|
274
274
|
} else
|
|
275
275
|
console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."), this.zoomToCursor = !1;
|
|
276
|
-
n !== null && (this.screenSpacePanning ? this.target.set(0, 0, -1).transformDirection(this.object.matrix).multiplyScalar(n).add(this.object.position) : (
|
|
276
|
+
n !== null && (this.screenSpacePanning ? this.target.set(0, 0, -1).transformDirection(this.object.matrix).multiplyScalar(n).add(this.object.position) : (Le.origin.copy(this.object.position), Le.direction.set(0, 0, -1).transformDirection(this.object.matrix), Math.abs(this.object.up.dot(Le.direction)) < _s ? this.object.lookAt(this.target) : (Ot.setFromNormalAndCoplanarPoint(this.object.up, this.target), Le.intersectPlane(Ot, this.target))));
|
|
277
277
|
} else if (this.object.isOrthographicCamera) {
|
|
278
278
|
const n = this.object.zoom;
|
|
279
279
|
this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / this._scale)), n !== this.object.zoom && (this.object.updateProjectionMatrix(), o = !0);
|
|
280
280
|
}
|
|
281
|
-
return this._scale = 1, this._performCursorZoom = !1, o || this._lastPosition.distanceToSquared(this.object.position) >
|
|
281
|
+
return this._scale = 1, this._performCursorZoom = !1, o || this._lastPosition.distanceToSquared(this.object.position) > Je || 8 * (1 - this._lastQuaternion.dot(this.object.quaternion)) > Je || this._lastTargetPosition.distanceToSquared(this.target) > Je ? (this.dispatchEvent(Vt), this._lastPosition.copy(this.object.position), this._lastQuaternion.copy(this.object.quaternion), this._lastTargetPosition.copy(this.target), !0) : !1;
|
|
282
282
|
}
|
|
283
283
|
_getAutoRotationAngle(e) {
|
|
284
284
|
return e !== null ? U / 60 * this.autoRotateSpeed * e : U / 60 / 60 * this.autoRotateSpeed;
|
|
@@ -446,7 +446,7 @@ class Ls extends Gi {
|
|
|
446
446
|
}
|
|
447
447
|
_trackPointer(e) {
|
|
448
448
|
let t = this._pointerPositions[e.pointerId];
|
|
449
|
-
t === void 0 && (t = new
|
|
449
|
+
t === void 0 && (t = new V(), this._pointerPositions[e.pointerId] = t), t.set(e.pageX, e.pageY);
|
|
450
450
|
}
|
|
451
451
|
_getSecondPointerPosition(e) {
|
|
452
452
|
const t = e.pointerId === this._pointers[0] ? this._pointers[1] : this._pointers[0];
|
|
@@ -470,16 +470,16 @@ class Ls extends Gi {
|
|
|
470
470
|
return e.ctrlKey && !this._controlActive && (i.deltaY *= 10), i;
|
|
471
471
|
}
|
|
472
472
|
}
|
|
473
|
-
function
|
|
473
|
+
function Ps(c) {
|
|
474
474
|
this.enabled !== !1 && (this._pointers.length === 0 && (this.domElement.setPointerCapture(c.pointerId), this.domElement.addEventListener("pointermove", this._onPointerMove), this.domElement.addEventListener("pointerup", this._onPointerUp)), !this._isTrackingPointer(c) && (this._addPointer(c), c.pointerType === "touch" ? this._onTouchStart(c) : this._onMouseDown(c)));
|
|
475
475
|
}
|
|
476
|
-
function
|
|
476
|
+
function Ns(c) {
|
|
477
477
|
this.enabled !== !1 && (c.pointerType === "touch" ? this._onTouchMove(c) : this._onMouseMove(c));
|
|
478
478
|
}
|
|
479
|
-
function
|
|
479
|
+
function Us(c) {
|
|
480
480
|
switch (this._removePointer(c), this._pointers.length) {
|
|
481
481
|
case 0:
|
|
482
|
-
this.domElement.releasePointerCapture(c.pointerId), this.domElement.removeEventListener("pointermove", this._onPointerMove), this.domElement.removeEventListener("pointerup", this._onPointerUp), this.dispatchEvent(
|
|
482
|
+
this.domElement.releasePointerCapture(c.pointerId), this.domElement.removeEventListener("pointermove", this._onPointerMove), this.domElement.removeEventListener("pointerup", this._onPointerUp), this.dispatchEvent(Ci), this.state = x.NONE;
|
|
483
483
|
break;
|
|
484
484
|
case 1:
|
|
485
485
|
const e = this._pointers[0], t = this._pointerPositions[e];
|
|
@@ -487,7 +487,7 @@ function ks(c) {
|
|
|
487
487
|
break;
|
|
488
488
|
}
|
|
489
489
|
}
|
|
490
|
-
function
|
|
490
|
+
function Vs(c) {
|
|
491
491
|
let e;
|
|
492
492
|
switch (c.button) {
|
|
493
493
|
case 0:
|
|
@@ -528,9 +528,9 @@ function _s(c) {
|
|
|
528
528
|
default:
|
|
529
529
|
this.state = x.NONE;
|
|
530
530
|
}
|
|
531
|
-
this.state !== x.NONE && this.dispatchEvent(
|
|
531
|
+
this.state !== x.NONE && this.dispatchEvent(Mt);
|
|
532
532
|
}
|
|
533
|
-
function
|
|
533
|
+
function Os(c) {
|
|
534
534
|
switch (this.state) {
|
|
535
535
|
case x.ROTATE:
|
|
536
536
|
if (this.enableRotate === !1) return;
|
|
@@ -546,13 +546,13 @@ function Gs(c) {
|
|
|
546
546
|
break;
|
|
547
547
|
}
|
|
548
548
|
}
|
|
549
|
-
function
|
|
550
|
-
this.enabled === !1 || this.enableZoom === !1 || this.state !== x.NONE || (c.preventDefault(), this.dispatchEvent(
|
|
549
|
+
function Hs(c) {
|
|
550
|
+
this.enabled === !1 || this.enableZoom === !1 || this.state !== x.NONE || (c.preventDefault(), this.dispatchEvent(Mt), this._handleMouseWheel(this._customWheelEvent(c)), this.dispatchEvent(Ci));
|
|
551
551
|
}
|
|
552
|
-
function
|
|
552
|
+
function qs(c) {
|
|
553
553
|
this.enabled !== !1 && this._handleKeyDown(c);
|
|
554
554
|
}
|
|
555
|
-
function
|
|
555
|
+
function js(c) {
|
|
556
556
|
switch (this._trackPointer(c), this._pointers.length) {
|
|
557
557
|
case 1:
|
|
558
558
|
switch (this.touches.ONE) {
|
|
@@ -585,9 +585,9 @@ function Us(c) {
|
|
|
585
585
|
default:
|
|
586
586
|
this.state = x.NONE;
|
|
587
587
|
}
|
|
588
|
-
this.state !== x.NONE && this.dispatchEvent(
|
|
588
|
+
this.state !== x.NONE && this.dispatchEvent(Mt);
|
|
589
589
|
}
|
|
590
|
-
function
|
|
590
|
+
function Ks(c) {
|
|
591
591
|
switch (this._trackPointer(c), this.state) {
|
|
592
592
|
case x.TOUCH_ROTATE:
|
|
593
593
|
if (this.enableRotate === !1) return;
|
|
@@ -609,16 +609,16 @@ function Hs(c) {
|
|
|
609
609
|
this.state = x.NONE;
|
|
610
610
|
}
|
|
611
611
|
}
|
|
612
|
-
function
|
|
612
|
+
function zs(c) {
|
|
613
613
|
this.enabled !== !1 && c.preventDefault();
|
|
614
614
|
}
|
|
615
|
-
function
|
|
615
|
+
function Ys(c) {
|
|
616
616
|
c.key === "Control" && (this._controlActive = !0, this.domElement.getRootNode().addEventListener("keyup", this._interceptControlUp, { passive: !0, capture: !0 }));
|
|
617
617
|
}
|
|
618
|
-
function
|
|
618
|
+
function Js(c) {
|
|
619
619
|
c.key === "Control" && (this._controlActive = !1, this.domElement.getRootNode().removeEventListener("keyup", this._interceptControlUp, { passive: !0, capture: !0 }));
|
|
620
620
|
}
|
|
621
|
-
class
|
|
621
|
+
class Ws extends je {
|
|
622
622
|
/**
|
|
623
623
|
* Creates a new Camera instance
|
|
624
624
|
*
|
|
@@ -639,7 +639,7 @@ class js extends yt {
|
|
|
639
639
|
}
|
|
640
640
|
initControls(e) {
|
|
641
641
|
if (!this.controls) {
|
|
642
|
-
this.controls = new
|
|
642
|
+
this.controls = new Gs(this.camera, e);
|
|
643
643
|
const t = this.config.desktop || {};
|
|
644
644
|
this.controls.enableDamping = t.enableDamping ?? !0, this.controls.dampingFactor = t.dampingFactor ?? 0.08, this.controls.maxDistance = t.maxDistance ?? 100, this.controls.minDistance = t.minDistance ?? 0.5, this.controls.addEventListener("change", () => {
|
|
645
645
|
this.emit("change");
|
|
@@ -739,9 +739,9 @@ class js extends yt {
|
|
|
739
739
|
}
|
|
740
740
|
}
|
|
741
741
|
function Ht(c, e) {
|
|
742
|
-
if (e ===
|
|
742
|
+
if (e === ji)
|
|
743
743
|
return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."), c;
|
|
744
|
-
if (e ===
|
|
744
|
+
if (e === ht || e === li) {
|
|
745
745
|
let t = c.getIndex();
|
|
746
746
|
if (t === null) {
|
|
747
747
|
const n = [], r = c.getAttribute("position");
|
|
@@ -753,7 +753,7 @@ function Ht(c, e) {
|
|
|
753
753
|
return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."), c;
|
|
754
754
|
}
|
|
755
755
|
const i = t.count - 2, s = [];
|
|
756
|
-
if (e ===
|
|
756
|
+
if (e === ht)
|
|
757
757
|
for (let n = 1; n <= i; n++)
|
|
758
758
|
s.push(t.getX(0)), s.push(t.getX(n)), s.push(t.getX(n + 1));
|
|
759
759
|
else
|
|
@@ -765,7 +765,7 @@ function Ht(c, e) {
|
|
|
765
765
|
} else
|
|
766
766
|
return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:", e), c;
|
|
767
767
|
}
|
|
768
|
-
class
|
|
768
|
+
class xt extends yt {
|
|
769
769
|
/**
|
|
770
770
|
* Constructs a new glTF loader.
|
|
771
771
|
*
|
|
@@ -773,39 +773,39 @@ class ui extends Et {
|
|
|
773
773
|
*/
|
|
774
774
|
constructor(e) {
|
|
775
775
|
super(e), this.dracoLoader = null, this.ktx2Loader = null, this.meshoptDecoder = null, this.pluginCallbacks = [], this.register(function(t) {
|
|
776
|
-
return new
|
|
776
|
+
return new to(t);
|
|
777
777
|
}), this.register(function(t) {
|
|
778
|
-
return new
|
|
778
|
+
return new io(t);
|
|
779
779
|
}), this.register(function(t) {
|
|
780
|
-
return new
|
|
780
|
+
return new ho(t);
|
|
781
781
|
}), this.register(function(t) {
|
|
782
|
-
return new
|
|
782
|
+
return new go(t);
|
|
783
783
|
}), this.register(function(t) {
|
|
784
|
-
return new
|
|
784
|
+
return new uo(t);
|
|
785
785
|
}), this.register(function(t) {
|
|
786
|
-
return new
|
|
786
|
+
return new oo(t);
|
|
787
787
|
}), this.register(function(t) {
|
|
788
|
-
return new
|
|
788
|
+
return new no(t);
|
|
789
789
|
}), this.register(function(t) {
|
|
790
|
-
return new
|
|
790
|
+
return new ro(t);
|
|
791
791
|
}), this.register(function(t) {
|
|
792
|
-
return new
|
|
792
|
+
return new ao(t);
|
|
793
793
|
}), this.register(function(t) {
|
|
794
|
-
return new
|
|
794
|
+
return new eo(t);
|
|
795
795
|
}), this.register(function(t) {
|
|
796
|
-
return new
|
|
796
|
+
return new Ao(t);
|
|
797
797
|
}), this.register(function(t) {
|
|
798
|
-
return new
|
|
798
|
+
return new so(t);
|
|
799
799
|
}), this.register(function(t) {
|
|
800
|
-
return new
|
|
800
|
+
return new co(t);
|
|
801
801
|
}), this.register(function(t) {
|
|
802
|
-
return new
|
|
802
|
+
return new lo(t);
|
|
803
803
|
}), this.register(function(t) {
|
|
804
|
-
return new
|
|
804
|
+
return new Zs(t);
|
|
805
805
|
}), this.register(function(t) {
|
|
806
|
-
return new
|
|
806
|
+
return new po(t);
|
|
807
807
|
}), this.register(function(t) {
|
|
808
|
-
return new
|
|
808
|
+
return new fo(t);
|
|
809
809
|
});
|
|
810
810
|
}
|
|
811
811
|
/**
|
|
@@ -823,10 +823,10 @@ class ui extends Et {
|
|
|
823
823
|
if (this.resourcePath !== "")
|
|
824
824
|
n = this.resourcePath;
|
|
825
825
|
else if (this.path !== "") {
|
|
826
|
-
const a =
|
|
827
|
-
n =
|
|
826
|
+
const a = ve.extractUrlBase(e);
|
|
827
|
+
n = ve.resolveURL(a, this.path);
|
|
828
828
|
} else
|
|
829
|
-
n =
|
|
829
|
+
n = ve.extractUrlBase(e);
|
|
830
830
|
this.manager.itemStart(e);
|
|
831
831
|
const r = function(a) {
|
|
832
832
|
s ? s(a) : console.error(a), o.manager.itemError(e), o.manager.itemEnd(e);
|
|
@@ -905,9 +905,9 @@ class ui extends Et {
|
|
|
905
905
|
if (typeof e == "string")
|
|
906
906
|
o = JSON.parse(e);
|
|
907
907
|
else if (e instanceof ArrayBuffer)
|
|
908
|
-
if (A.decode(new Uint8Array(e, 0, 4)) ===
|
|
908
|
+
if (A.decode(new Uint8Array(e, 0, 4)) === Ei) {
|
|
909
909
|
try {
|
|
910
|
-
n[S.KHR_BINARY_GLTF] = new
|
|
910
|
+
n[S.KHR_BINARY_GLTF] = new mo(e);
|
|
911
911
|
} catch (h) {
|
|
912
912
|
s && s(h);
|
|
913
913
|
return;
|
|
@@ -921,7 +921,7 @@ class ui extends Et {
|
|
|
921
921
|
s && s(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));
|
|
922
922
|
return;
|
|
923
923
|
}
|
|
924
|
-
const a = new
|
|
924
|
+
const a = new Ro(o, {
|
|
925
925
|
path: t || this.resourcePath || "",
|
|
926
926
|
crossOrigin: this.crossOrigin,
|
|
927
927
|
requestHeader: this.requestHeader,
|
|
@@ -939,16 +939,16 @@ class ui extends Et {
|
|
|
939
939
|
const h = o.extensionsUsed[l], d = o.extensionsRequired || [];
|
|
940
940
|
switch (h) {
|
|
941
941
|
case S.KHR_MATERIALS_UNLIT:
|
|
942
|
-
n[h] = new
|
|
942
|
+
n[h] = new $s();
|
|
943
943
|
break;
|
|
944
944
|
case S.KHR_DRACO_MESH_COMPRESSION:
|
|
945
|
-
n[h] = new
|
|
945
|
+
n[h] = new bo(o, this.dracoLoader);
|
|
946
946
|
break;
|
|
947
947
|
case S.KHR_TEXTURE_TRANSFORM:
|
|
948
|
-
n[h] = new
|
|
948
|
+
n[h] = new Co();
|
|
949
949
|
break;
|
|
950
950
|
case S.KHR_MESH_QUANTIZATION:
|
|
951
|
-
n[h] = new
|
|
951
|
+
n[h] = new Eo();
|
|
952
952
|
break;
|
|
953
953
|
default:
|
|
954
954
|
d.indexOf(h) >= 0 && r[h] === void 0 && console.warn('THREE.GLTFLoader: Unknown extension "' + h + '".');
|
|
@@ -971,7 +971,7 @@ class ui extends Et {
|
|
|
971
971
|
});
|
|
972
972
|
}
|
|
973
973
|
}
|
|
974
|
-
function
|
|
974
|
+
function Xs() {
|
|
975
975
|
let c = {};
|
|
976
976
|
return {
|
|
977
977
|
get: function(e) {
|
|
@@ -1012,7 +1012,7 @@ const S = {
|
|
|
1012
1012
|
EXT_MESHOPT_COMPRESSION: "EXT_meshopt_compression",
|
|
1013
1013
|
EXT_MESH_GPU_INSTANCING: "EXT_mesh_gpu_instancing"
|
|
1014
1014
|
};
|
|
1015
|
-
class
|
|
1015
|
+
class Zs {
|
|
1016
1016
|
constructor(e) {
|
|
1017
1017
|
this.parser = e, this.name = S.KHR_LIGHTS_PUNCTUAL, this.cache = { refs: {}, uses: {} };
|
|
1018
1018
|
}
|
|
@@ -1034,13 +1034,13 @@ class zs {
|
|
|
1034
1034
|
const h = A.range !== void 0 ? A.range : 0;
|
|
1035
1035
|
switch (A.type) {
|
|
1036
1036
|
case "directional":
|
|
1037
|
-
a = new
|
|
1037
|
+
a = new Yi(l), a.target.position.set(0, 0, -1), a.add(a.target);
|
|
1038
1038
|
break;
|
|
1039
1039
|
case "point":
|
|
1040
|
-
a = new
|
|
1040
|
+
a = new zi(l), a.distance = h;
|
|
1041
1041
|
break;
|
|
1042
1042
|
case "spot":
|
|
1043
|
-
a = new
|
|
1043
|
+
a = new Ki(l), a.distance = h, A.spot = A.spot || {}, A.spot.innerConeAngle = A.spot.innerConeAngle !== void 0 ? A.spot.innerConeAngle : 0, A.spot.outerConeAngle = A.spot.outerConeAngle !== void 0 ? A.spot.outerConeAngle : Math.PI / 4, a.angle = A.spot.outerConeAngle, a.penumbra = 1 - A.spot.innerConeAngle / A.spot.outerConeAngle, a.target.position.set(0, 0, -1), a.add(a.target);
|
|
1044
1044
|
break;
|
|
1045
1045
|
default:
|
|
1046
1046
|
throw new Error("THREE.GLTFLoader: Unexpected light type: " + A.type);
|
|
@@ -1058,7 +1058,7 @@ class zs {
|
|
|
1058
1058
|
});
|
|
1059
1059
|
}
|
|
1060
1060
|
}
|
|
1061
|
-
class
|
|
1061
|
+
class $s {
|
|
1062
1062
|
constructor() {
|
|
1063
1063
|
this.name = S.KHR_MATERIALS_UNLIT;
|
|
1064
1064
|
}
|
|
@@ -1079,7 +1079,7 @@ class Ys {
|
|
|
1079
1079
|
return Promise.all(s);
|
|
1080
1080
|
}
|
|
1081
1081
|
}
|
|
1082
|
-
class
|
|
1082
|
+
class eo {
|
|
1083
1083
|
constructor(e) {
|
|
1084
1084
|
this.parser = e, this.name = S.KHR_MATERIALS_EMISSIVE_STRENGTH;
|
|
1085
1085
|
}
|
|
@@ -1091,7 +1091,7 @@ class Js {
|
|
|
1091
1091
|
return o !== void 0 && (t.emissiveIntensity = o), Promise.resolve();
|
|
1092
1092
|
}
|
|
1093
1093
|
}
|
|
1094
|
-
class
|
|
1094
|
+
class to {
|
|
1095
1095
|
constructor(e) {
|
|
1096
1096
|
this.parser = e, this.name = S.KHR_MATERIALS_CLEARCOAT;
|
|
1097
1097
|
}
|
|
@@ -1106,12 +1106,12 @@ class Ws {
|
|
|
1106
1106
|
const o = [], n = s.extensions[this.name];
|
|
1107
1107
|
if (n.clearcoatFactor !== void 0 && (t.clearcoat = n.clearcoatFactor), n.clearcoatTexture !== void 0 && o.push(i.assignTexture(t, "clearcoatMap", n.clearcoatTexture)), n.clearcoatRoughnessFactor !== void 0 && (t.clearcoatRoughness = n.clearcoatRoughnessFactor), n.clearcoatRoughnessTexture !== void 0 && o.push(i.assignTexture(t, "clearcoatRoughnessMap", n.clearcoatRoughnessTexture)), n.clearcoatNormalTexture !== void 0 && (o.push(i.assignTexture(t, "clearcoatNormalMap", n.clearcoatNormalTexture)), n.clearcoatNormalTexture.scale !== void 0)) {
|
|
1108
1108
|
const r = n.clearcoatNormalTexture.scale;
|
|
1109
|
-
t.clearcoatNormalScale = new
|
|
1109
|
+
t.clearcoatNormalScale = new V(r, r);
|
|
1110
1110
|
}
|
|
1111
1111
|
return Promise.all(o);
|
|
1112
1112
|
}
|
|
1113
1113
|
}
|
|
1114
|
-
class
|
|
1114
|
+
class io {
|
|
1115
1115
|
constructor(e) {
|
|
1116
1116
|
this.parser = e, this.name = S.KHR_MATERIALS_DISPERSION;
|
|
1117
1117
|
}
|
|
@@ -1127,7 +1127,7 @@ class Xs {
|
|
|
1127
1127
|
return t.dispersion = o.dispersion !== void 0 ? o.dispersion : 0, Promise.resolve();
|
|
1128
1128
|
}
|
|
1129
1129
|
}
|
|
1130
|
-
class
|
|
1130
|
+
class so {
|
|
1131
1131
|
constructor(e) {
|
|
1132
1132
|
this.parser = e, this.name = S.KHR_MATERIALS_IRIDESCENCE;
|
|
1133
1133
|
}
|
|
@@ -1143,7 +1143,7 @@ class Zs {
|
|
|
1143
1143
|
return n.iridescenceFactor !== void 0 && (t.iridescence = n.iridescenceFactor), n.iridescenceTexture !== void 0 && o.push(i.assignTexture(t, "iridescenceMap", n.iridescenceTexture)), n.iridescenceIor !== void 0 && (t.iridescenceIOR = n.iridescenceIor), t.iridescenceThicknessRange === void 0 && (t.iridescenceThicknessRange = [100, 400]), n.iridescenceThicknessMinimum !== void 0 && (t.iridescenceThicknessRange[0] = n.iridescenceThicknessMinimum), n.iridescenceThicknessMaximum !== void 0 && (t.iridescenceThicknessRange[1] = n.iridescenceThicknessMaximum), n.iridescenceThicknessTexture !== void 0 && o.push(i.assignTexture(t, "iridescenceThicknessMap", n.iridescenceThicknessTexture)), Promise.all(o);
|
|
1144
1144
|
}
|
|
1145
1145
|
}
|
|
1146
|
-
class
|
|
1146
|
+
class oo {
|
|
1147
1147
|
constructor(e) {
|
|
1148
1148
|
this.parser = e, this.name = S.KHR_MATERIALS_SHEEN;
|
|
1149
1149
|
}
|
|
@@ -1165,7 +1165,7 @@ class $s {
|
|
|
1165
1165
|
return n.sheenRoughnessFactor !== void 0 && (t.sheenRoughness = n.sheenRoughnessFactor), n.sheenColorTexture !== void 0 && o.push(i.assignTexture(t, "sheenColorMap", n.sheenColorTexture, se)), n.sheenRoughnessTexture !== void 0 && o.push(i.assignTexture(t, "sheenRoughnessMap", n.sheenRoughnessTexture)), Promise.all(o);
|
|
1166
1166
|
}
|
|
1167
1167
|
}
|
|
1168
|
-
class
|
|
1168
|
+
class no {
|
|
1169
1169
|
constructor(e) {
|
|
1170
1170
|
this.parser = e, this.name = S.KHR_MATERIALS_TRANSMISSION;
|
|
1171
1171
|
}
|
|
@@ -1181,7 +1181,7 @@ class eo {
|
|
|
1181
1181
|
return n.transmissionFactor !== void 0 && (t.transmission = n.transmissionFactor), n.transmissionTexture !== void 0 && o.push(i.assignTexture(t, "transmissionMap", n.transmissionTexture)), Promise.all(o);
|
|
1182
1182
|
}
|
|
1183
1183
|
}
|
|
1184
|
-
class
|
|
1184
|
+
class ro {
|
|
1185
1185
|
constructor(e) {
|
|
1186
1186
|
this.parser = e, this.name = S.KHR_MATERIALS_VOLUME;
|
|
1187
1187
|
}
|
|
@@ -1199,7 +1199,7 @@ class to {
|
|
|
1199
1199
|
return t.attenuationColor = new re().setRGB(r[0], r[1], r[2], Y), Promise.all(o);
|
|
1200
1200
|
}
|
|
1201
1201
|
}
|
|
1202
|
-
class
|
|
1202
|
+
class ao {
|
|
1203
1203
|
constructor(e) {
|
|
1204
1204
|
this.parser = e, this.name = S.KHR_MATERIALS_IOR;
|
|
1205
1205
|
}
|
|
@@ -1215,7 +1215,7 @@ class io {
|
|
|
1215
1215
|
return t.ior = o.ior !== void 0 ? o.ior : 1.5, Promise.resolve();
|
|
1216
1216
|
}
|
|
1217
1217
|
}
|
|
1218
|
-
class
|
|
1218
|
+
class Ao {
|
|
1219
1219
|
constructor(e) {
|
|
1220
1220
|
this.parser = e, this.name = S.KHR_MATERIALS_SPECULAR;
|
|
1221
1221
|
}
|
|
@@ -1233,7 +1233,7 @@ class so {
|
|
|
1233
1233
|
return t.specularColor = new re().setRGB(r[0], r[1], r[2], Y), n.specularColorTexture !== void 0 && o.push(i.assignTexture(t, "specularColorMap", n.specularColorTexture, se)), Promise.all(o);
|
|
1234
1234
|
}
|
|
1235
1235
|
}
|
|
1236
|
-
class
|
|
1236
|
+
class lo {
|
|
1237
1237
|
constructor(e) {
|
|
1238
1238
|
this.parser = e, this.name = S.EXT_MATERIALS_BUMP;
|
|
1239
1239
|
}
|
|
@@ -1249,7 +1249,7 @@ class oo {
|
|
|
1249
1249
|
return t.bumpScale = n.bumpFactor !== void 0 ? n.bumpFactor : 1, n.bumpTexture !== void 0 && o.push(i.assignTexture(t, "bumpMap", n.bumpTexture)), Promise.all(o);
|
|
1250
1250
|
}
|
|
1251
1251
|
}
|
|
1252
|
-
class
|
|
1252
|
+
class co {
|
|
1253
1253
|
constructor(e) {
|
|
1254
1254
|
this.parser = e, this.name = S.KHR_MATERIALS_ANISOTROPY;
|
|
1255
1255
|
}
|
|
@@ -1265,7 +1265,7 @@ class no {
|
|
|
1265
1265
|
return n.anisotropyStrength !== void 0 && (t.anisotropy = n.anisotropyStrength), n.anisotropyRotation !== void 0 && (t.anisotropyRotation = n.anisotropyRotation), n.anisotropyTexture !== void 0 && o.push(i.assignTexture(t, "anisotropyMap", n.anisotropyTexture)), Promise.all(o);
|
|
1266
1266
|
}
|
|
1267
1267
|
}
|
|
1268
|
-
class
|
|
1268
|
+
class ho {
|
|
1269
1269
|
constructor(e) {
|
|
1270
1270
|
this.parser = e, this.name = S.KHR_TEXTURE_BASISU;
|
|
1271
1271
|
}
|
|
@@ -1282,7 +1282,7 @@ class ro {
|
|
|
1282
1282
|
return t.loadTextureImage(e, o.source, n);
|
|
1283
1283
|
}
|
|
1284
1284
|
}
|
|
1285
|
-
class
|
|
1285
|
+
class go {
|
|
1286
1286
|
constructor(e) {
|
|
1287
1287
|
this.parser = e, this.name = S.EXT_TEXTURE_WEBP;
|
|
1288
1288
|
}
|
|
@@ -1299,7 +1299,7 @@ class ao {
|
|
|
1299
1299
|
return i.loadTextureImage(e, n.source, A);
|
|
1300
1300
|
}
|
|
1301
1301
|
}
|
|
1302
|
-
class
|
|
1302
|
+
class uo {
|
|
1303
1303
|
constructor(e) {
|
|
1304
1304
|
this.parser = e, this.name = S.EXT_TEXTURE_AVIF;
|
|
1305
1305
|
}
|
|
@@ -1316,7 +1316,7 @@ class Ao {
|
|
|
1316
1316
|
return i.loadTextureImage(e, n.source, A);
|
|
1317
1317
|
}
|
|
1318
1318
|
}
|
|
1319
|
-
class
|
|
1319
|
+
class po {
|
|
1320
1320
|
constructor(e) {
|
|
1321
1321
|
this.name = S.EXT_MESHOPT_COMPRESSION, this.parser = e;
|
|
1322
1322
|
}
|
|
@@ -1342,7 +1342,7 @@ class lo {
|
|
|
1342
1342
|
return null;
|
|
1343
1343
|
}
|
|
1344
1344
|
}
|
|
1345
|
-
class
|
|
1345
|
+
class fo {
|
|
1346
1346
|
constructor(e) {
|
|
1347
1347
|
this.name = S.EXT_MESH_GPU_INSTANCING, this.parser = e;
|
|
1348
1348
|
}
|
|
@@ -1360,44 +1360,44 @@ class co {
|
|
|
1360
1360
|
return r.length < 1 ? null : (r.push(this.parser.createNodeMesh(e)), Promise.all(r).then((a) => {
|
|
1361
1361
|
const l = a.pop(), h = l.isGroup ? l.children : [l], d = a[0].count, g = [];
|
|
1362
1362
|
for (const p of h) {
|
|
1363
|
-
const C = new
|
|
1363
|
+
const C = new Ie(), E = new R(), f = new Ue(), m = new R(1, 1, 1), I = new ci(p.geometry, p.material, d);
|
|
1364
1364
|
for (let b = 0; b < d; b++)
|
|
1365
|
-
A.TRANSLATION &&
|
|
1365
|
+
A.TRANSLATION && E.fromBufferAttribute(A.TRANSLATION, b), A.ROTATION && f.fromBufferAttribute(A.ROTATION, b), A.SCALE && m.fromBufferAttribute(A.SCALE, b), I.setMatrixAt(b, C.compose(E, f, m));
|
|
1366
1366
|
for (const b in A)
|
|
1367
1367
|
if (b === "_COLOR_0") {
|
|
1368
1368
|
const B = A[b];
|
|
1369
|
-
|
|
1369
|
+
I.instanceColor = new Ji(B.array, B.itemSize, B.normalized);
|
|
1370
1370
|
} else b !== "TRANSLATION" && b !== "ROTATION" && b !== "SCALE" && p.geometry.setAttribute(b, A[b]);
|
|
1371
|
-
|
|
1371
|
+
Oe.prototype.copy.call(I, p), this.parser.assignFinalMaterial(I), g.push(I);
|
|
1372
1372
|
}
|
|
1373
1373
|
return l.isGroup ? (l.clear(), l.add(...g), l) : g[0];
|
|
1374
1374
|
}));
|
|
1375
1375
|
}
|
|
1376
1376
|
}
|
|
1377
|
-
const
|
|
1378
|
-
class
|
|
1377
|
+
const Ei = "glTF", Qe = 12, qt = { JSON: 1313821514, BIN: 5130562 };
|
|
1378
|
+
class mo {
|
|
1379
1379
|
constructor(e) {
|
|
1380
1380
|
this.name = S.KHR_BINARY_GLTF, this.content = null, this.body = null;
|
|
1381
|
-
const t = new DataView(e, 0,
|
|
1381
|
+
const t = new DataView(e, 0, Qe), i = new TextDecoder();
|
|
1382
1382
|
if (this.header = {
|
|
1383
1383
|
magic: i.decode(new Uint8Array(e.slice(0, 4))),
|
|
1384
1384
|
version: t.getUint32(4, !0),
|
|
1385
1385
|
length: t.getUint32(8, !0)
|
|
1386
|
-
}, this.header.magic !==
|
|
1386
|
+
}, this.header.magic !== Ei)
|
|
1387
1387
|
throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");
|
|
1388
1388
|
if (this.header.version < 2)
|
|
1389
1389
|
throw new Error("THREE.GLTFLoader: Legacy binary file detected.");
|
|
1390
|
-
const s = this.header.length -
|
|
1390
|
+
const s = this.header.length - Qe, o = new DataView(e, Qe);
|
|
1391
1391
|
let n = 0;
|
|
1392
1392
|
for (; n < s; ) {
|
|
1393
1393
|
const r = o.getUint32(n, !0);
|
|
1394
1394
|
n += 4;
|
|
1395
1395
|
const A = o.getUint32(n, !0);
|
|
1396
|
-
if (n += 4, A ===
|
|
1397
|
-
const a = new Uint8Array(e,
|
|
1396
|
+
if (n += 4, A === qt.JSON) {
|
|
1397
|
+
const a = new Uint8Array(e, Qe + n, r);
|
|
1398
1398
|
this.content = i.decode(a);
|
|
1399
|
-
} else if (A ===
|
|
1400
|
-
const a =
|
|
1399
|
+
} else if (A === qt.BIN) {
|
|
1400
|
+
const a = Qe + n;
|
|
1401
1401
|
this.body = e.slice(a, a + r);
|
|
1402
1402
|
}
|
|
1403
1403
|
n += r;
|
|
@@ -1406,7 +1406,7 @@ class ho {
|
|
|
1406
1406
|
throw new Error("THREE.GLTFLoader: JSON content not found.");
|
|
1407
1407
|
}
|
|
1408
1408
|
}
|
|
1409
|
-
class
|
|
1409
|
+
class bo {
|
|
1410
1410
|
constructor(e, t) {
|
|
1411
1411
|
if (!t)
|
|
1412
1412
|
throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");
|
|
@@ -1415,13 +1415,13 @@ class go {
|
|
|
1415
1415
|
decodePrimitive(e, t) {
|
|
1416
1416
|
const i = this.json, s = this.dracoLoader, o = e.extensions[this.name].bufferView, n = e.extensions[this.name].attributes, r = {}, A = {}, a = {};
|
|
1417
1417
|
for (const l in n) {
|
|
1418
|
-
const h =
|
|
1418
|
+
const h = bt[l] || l.toLowerCase();
|
|
1419
1419
|
r[h] = n[l];
|
|
1420
1420
|
}
|
|
1421
1421
|
for (const l in e.attributes) {
|
|
1422
|
-
const h =
|
|
1422
|
+
const h = bt[l] || l.toLowerCase();
|
|
1423
1423
|
if (n[l] !== void 0) {
|
|
1424
|
-
const d = i.accessors[e.attributes[l]], g =
|
|
1424
|
+
const d = i.accessors[e.attributes[l]], g = Ee[d.componentType];
|
|
1425
1425
|
a[h] = g.name, A[h] = d.normalized === !0;
|
|
1426
1426
|
}
|
|
1427
1427
|
}
|
|
@@ -1429,8 +1429,8 @@ class go {
|
|
|
1429
1429
|
return new Promise(function(h, d) {
|
|
1430
1430
|
s.decodeDracoFile(l, function(g) {
|
|
1431
1431
|
for (const p in g.attributes) {
|
|
1432
|
-
const C = g.attributes[p],
|
|
1433
|
-
|
|
1432
|
+
const C = g.attributes[p], E = A[p];
|
|
1433
|
+
E !== void 0 && (C.normalized = E);
|
|
1434
1434
|
}
|
|
1435
1435
|
h(g);
|
|
1436
1436
|
}, r, a, Y, d);
|
|
@@ -1438,7 +1438,7 @@ class go {
|
|
|
1438
1438
|
});
|
|
1439
1439
|
}
|
|
1440
1440
|
}
|
|
1441
|
-
class
|
|
1441
|
+
class Co {
|
|
1442
1442
|
constructor() {
|
|
1443
1443
|
this.name = S.KHR_TEXTURE_TRANSFORM;
|
|
1444
1444
|
}
|
|
@@ -1446,12 +1446,12 @@ class uo {
|
|
|
1446
1446
|
return (t.texCoord === void 0 || t.texCoord === e.channel) && t.offset === void 0 && t.rotation === void 0 && t.scale === void 0 || (e = e.clone(), t.texCoord !== void 0 && (e.channel = t.texCoord), t.offset !== void 0 && e.offset.fromArray(t.offset), t.rotation !== void 0 && (e.rotation = t.rotation), t.scale !== void 0 && e.repeat.fromArray(t.scale), e.needsUpdate = !0), e;
|
|
1447
1447
|
}
|
|
1448
1448
|
}
|
|
1449
|
-
class
|
|
1449
|
+
class Eo {
|
|
1450
1450
|
constructor() {
|
|
1451
1451
|
this.name = S.KHR_MESH_QUANTIZATION;
|
|
1452
1452
|
}
|
|
1453
1453
|
}
|
|
1454
|
-
class
|
|
1454
|
+
class Ii extends Es {
|
|
1455
1455
|
constructor(e, t, i, s) {
|
|
1456
1456
|
super(e, t, i, s);
|
|
1457
1457
|
}
|
|
@@ -1462,19 +1462,19 @@ class fi extends fs {
|
|
|
1462
1462
|
return t;
|
|
1463
1463
|
}
|
|
1464
1464
|
interpolate_(e, t, i, s) {
|
|
1465
|
-
const o = this.resultBuffer, n = this.sampleValues, r = this.valueSize, A = r * 2, a = r * 3, l = s - t, h = (i - t) / l, d = h * h, g = d * h, p = e * a, C = p - a,
|
|
1465
|
+
const o = this.resultBuffer, n = this.sampleValues, r = this.valueSize, A = r * 2, a = r * 3, l = s - t, h = (i - t) / l, d = h * h, g = d * h, p = e * a, C = p - a, E = -2 * g + 3 * d, f = g - d, m = 1 - E, I = f - d + h;
|
|
1466
1466
|
for (let b = 0; b !== r; b++) {
|
|
1467
|
-
const B = n[C + b + r],
|
|
1468
|
-
o[b] = m * B +
|
|
1467
|
+
const B = n[C + b + r], y = n[C + b + A] * l, w = n[p + b + r], L = n[p + b] * l;
|
|
1468
|
+
o[b] = m * B + I * y + E * w + f * L;
|
|
1469
1469
|
}
|
|
1470
1470
|
return o;
|
|
1471
1471
|
}
|
|
1472
1472
|
}
|
|
1473
|
-
const
|
|
1474
|
-
class
|
|
1473
|
+
const Io = new Ue();
|
|
1474
|
+
class Bo extends Ii {
|
|
1475
1475
|
interpolate_(e, t, i, s) {
|
|
1476
1476
|
const o = super.interpolate_(e, t, i, s);
|
|
1477
|
-
return
|
|
1477
|
+
return Io.fromArray(o).normalize().toArray(o), o;
|
|
1478
1478
|
}
|
|
1479
1479
|
}
|
|
1480
1480
|
const j = {
|
|
@@ -1485,25 +1485,25 @@ const j = {
|
|
|
1485
1485
|
TRIANGLES: 4,
|
|
1486
1486
|
TRIANGLE_STRIP: 5,
|
|
1487
1487
|
TRIANGLE_FAN: 6
|
|
1488
|
-
},
|
|
1488
|
+
}, Ee = {
|
|
1489
1489
|
5120: Int8Array,
|
|
1490
1490
|
5121: Uint8Array,
|
|
1491
1491
|
5122: Int16Array,
|
|
1492
1492
|
5123: Uint16Array,
|
|
1493
1493
|
5125: Uint32Array,
|
|
1494
1494
|
5126: Float32Array
|
|
1495
|
-
},
|
|
1496
|
-
9728:
|
|
1495
|
+
}, jt = {
|
|
1496
|
+
9728: hi,
|
|
1497
1497
|
9729: he,
|
|
1498
|
-
9984:
|
|
1499
|
-
9985:
|
|
1500
|
-
9986:
|
|
1501
|
-
9987:
|
|
1502
|
-
},
|
|
1503
|
-
33071:
|
|
1504
|
-
33648:
|
|
1505
|
-
10497:
|
|
1506
|
-
},
|
|
1498
|
+
9984: ts,
|
|
1499
|
+
9985: es,
|
|
1500
|
+
9986: $i,
|
|
1501
|
+
9987: He
|
|
1502
|
+
}, Kt = {
|
|
1503
|
+
33071: ss,
|
|
1504
|
+
33648: is,
|
|
1505
|
+
10497: dt
|
|
1506
|
+
}, We = {
|
|
1507
1507
|
SCALAR: 1,
|
|
1508
1508
|
VEC2: 2,
|
|
1509
1509
|
VEC3: 3,
|
|
@@ -1511,7 +1511,7 @@ const j = {
|
|
|
1511
1511
|
MAT2: 4,
|
|
1512
1512
|
MAT3: 9,
|
|
1513
1513
|
MAT4: 16
|
|
1514
|
-
},
|
|
1514
|
+
}, bt = {
|
|
1515
1515
|
POSITION: "position",
|
|
1516
1516
|
NORMAL: "normal",
|
|
1517
1517
|
TANGENT: "tangent",
|
|
@@ -1527,26 +1527,26 @@ const j = {
|
|
|
1527
1527
|
translation: "position",
|
|
1528
1528
|
rotation: "quaternion",
|
|
1529
1529
|
weights: "morphTargetInfluences"
|
|
1530
|
-
},
|
|
1530
|
+
}, yo = {
|
|
1531
1531
|
CUBICSPLINE: void 0,
|
|
1532
1532
|
// We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each
|
|
1533
1533
|
// keyframe track will be initialized with a default interpolation type, then modified.
|
|
1534
|
-
LINEAR:
|
|
1535
|
-
STEP:
|
|
1536
|
-
},
|
|
1534
|
+
LINEAR: gi,
|
|
1535
|
+
STEP: bs
|
|
1536
|
+
}, Xe = {
|
|
1537
1537
|
OPAQUE: "OPAQUE",
|
|
1538
1538
|
MASK: "MASK",
|
|
1539
1539
|
BLEND: "BLEND"
|
|
1540
1540
|
};
|
|
1541
|
-
function
|
|
1542
|
-
return c.DefaultMaterial === void 0 && (c.DefaultMaterial = new
|
|
1541
|
+
function wo(c) {
|
|
1542
|
+
return c.DefaultMaterial === void 0 && (c.DefaultMaterial = new wt({
|
|
1543
1543
|
color: 16777215,
|
|
1544
1544
|
emissive: 0,
|
|
1545
1545
|
metalness: 1,
|
|
1546
1546
|
roughness: 1,
|
|
1547
1547
|
transparent: !1,
|
|
1548
1548
|
depthTest: !0,
|
|
1549
|
-
side:
|
|
1549
|
+
side: Cs
|
|
1550
1550
|
})), c.DefaultMaterial;
|
|
1551
1551
|
}
|
|
1552
1552
|
function ae(c, e, t) {
|
|
@@ -1556,7 +1556,7 @@ function ae(c, e, t) {
|
|
|
1556
1556
|
function ie(c, e) {
|
|
1557
1557
|
e.extras !== void 0 && (typeof e.extras == "object" ? Object.assign(c.userData, e.extras) : console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + e.extras));
|
|
1558
1558
|
}
|
|
1559
|
-
function
|
|
1559
|
+
function Qo(c, e, t) {
|
|
1560
1560
|
let i = !1, s = !1, o = !1;
|
|
1561
1561
|
for (let a = 0, l = e.length; a < l; a++) {
|
|
1562
1562
|
const h = e[a];
|
|
@@ -1588,7 +1588,7 @@ function Io(c, e, t) {
|
|
|
1588
1588
|
return i && (c.morphAttributes.position = l), s && (c.morphAttributes.normal = h), o && (c.morphAttributes.color = d), c.morphTargetsRelative = !0, c;
|
|
1589
1589
|
});
|
|
1590
1590
|
}
|
|
1591
|
-
function
|
|
1591
|
+
function So(c, e) {
|
|
1592
1592
|
if (c.updateMorphTargets(), e.weights !== void 0)
|
|
1593
1593
|
for (let t = 0, i = e.weights.length; t < i; t++)
|
|
1594
1594
|
c.morphTargetInfluences[t] = e.weights[t];
|
|
@@ -1602,22 +1602,22 @@ function Eo(c, e) {
|
|
|
1602
1602
|
console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.");
|
|
1603
1603
|
}
|
|
1604
1604
|
}
|
|
1605
|
-
function
|
|
1605
|
+
function Mo(c) {
|
|
1606
1606
|
let e;
|
|
1607
1607
|
const t = c.extensions && c.extensions[S.KHR_DRACO_MESH_COMPRESSION];
|
|
1608
|
-
if (t ? e = "draco:" + t.bufferView + ":" + t.indices + ":" +
|
|
1608
|
+
if (t ? e = "draco:" + t.bufferView + ":" + t.indices + ":" + Ze(t.attributes) : e = c.indices + ":" + Ze(c.attributes) + ":" + c.mode, c.targets !== void 0)
|
|
1609
1609
|
for (let i = 0, s = c.targets.length; i < s; i++)
|
|
1610
|
-
e += ":" +
|
|
1610
|
+
e += ":" + Ze(c.targets[i]);
|
|
1611
1611
|
return e;
|
|
1612
1612
|
}
|
|
1613
|
-
function
|
|
1613
|
+
function Ze(c) {
|
|
1614
1614
|
let e = "";
|
|
1615
1615
|
const t = Object.keys(c).sort();
|
|
1616
1616
|
for (let i = 0, s = t.length; i < s; i++)
|
|
1617
1617
|
e += t[i] + ":" + c[t[i]] + ";";
|
|
1618
1618
|
return e;
|
|
1619
1619
|
}
|
|
1620
|
-
function
|
|
1620
|
+
function Ct(c) {
|
|
1621
1621
|
switch (c) {
|
|
1622
1622
|
case Int8Array:
|
|
1623
1623
|
return 1 / 127;
|
|
@@ -1631,13 +1631,13 @@ function mt(c) {
|
|
|
1631
1631
|
throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.");
|
|
1632
1632
|
}
|
|
1633
1633
|
}
|
|
1634
|
-
function
|
|
1634
|
+
function xo(c) {
|
|
1635
1635
|
return c.search(/\.jpe?g($|\?)/i) > 0 || c.search(/^data\:image\/jpeg/) === 0 ? "image/jpeg" : c.search(/\.webp($|\?)/i) > 0 || c.search(/^data\:image\/webp/) === 0 ? "image/webp" : c.search(/\.ktx2($|\?)/i) > 0 || c.search(/^data\:image\/ktx2/) === 0 ? "image/ktx2" : "image/png";
|
|
1636
1636
|
}
|
|
1637
|
-
const
|
|
1638
|
-
class
|
|
1637
|
+
const vo = new Ie();
|
|
1638
|
+
class Ro {
|
|
1639
1639
|
constructor(e = {}, t = {}) {
|
|
1640
|
-
this.json = e, this.extensions = {}, this.plugins = {}, this.options = t, this.cache = new
|
|
1640
|
+
this.json = e, this.extensions = {}, this.plugins = {}, this.options = t, this.cache = new Xs(), this.associations = /* @__PURE__ */ new Map(), this.primitiveCache = {}, this.nodeCache = {}, this.meshCache = { refs: {}, uses: {} }, this.cameraCache = { refs: {}, uses: {} }, this.lightCache = { refs: {}, uses: {} }, this.sourceCache = {}, this.textureCache = {}, this.nodeNamesUsed = {};
|
|
1641
1641
|
let i = !1, s = -1, o = !1, n = -1;
|
|
1642
1642
|
if (typeof navigator < "u") {
|
|
1643
1643
|
const r = navigator.userAgent;
|
|
@@ -1645,7 +1645,7 @@ class yo {
|
|
|
1645
1645
|
const A = r.match(/Version\/(\d+)/);
|
|
1646
1646
|
s = i && A ? parseInt(A[1], 10) : -1, o = r.indexOf("Firefox") > -1, n = o ? r.match(/Firefox\/([0-9]+)\./)[1] : -1;
|
|
1647
1647
|
}
|
|
1648
|
-
typeof createImageBitmap > "u" || i && s < 17 || o && n < 98 ? this.textureLoader = new
|
|
1648
|
+
typeof createImageBitmap > "u" || i && s < 17 || o && n < 98 ? this.textureLoader = new Wi(this.options.manager) : this.textureLoader = new Xi(this.options.manager), this.textureLoader.setCrossOrigin(this.options.crossOrigin), this.textureLoader.setRequestHeader(this.options.requestHeader), this.fileLoader = new le(this.options.manager), this.fileLoader.setResponseType("arraybuffer"), this.options.crossOrigin === "use-credentials" && this.fileLoader.setWithCredentials(!0);
|
|
1649
1649
|
}
|
|
1650
1650
|
setExtensions(e) {
|
|
1651
1651
|
this.extensions = e;
|
|
@@ -1856,7 +1856,7 @@ class yo {
|
|
|
1856
1856
|
return Promise.resolve(this.extensions[S.KHR_BINARY_GLTF].body);
|
|
1857
1857
|
const s = this.options;
|
|
1858
1858
|
return new Promise(function(o, n) {
|
|
1859
|
-
i.load(
|
|
1859
|
+
i.load(ve.resolveURL(t.uri, s.path), o, void 0, function() {
|
|
1860
1860
|
n(new Error('THREE.GLTFLoader: Failed to load buffer "' + t.uri + '".'));
|
|
1861
1861
|
});
|
|
1862
1862
|
});
|
|
@@ -1885,29 +1885,29 @@ class yo {
|
|
|
1885
1885
|
loadAccessor(e) {
|
|
1886
1886
|
const t = this, i = this.json, s = this.json.accessors[e];
|
|
1887
1887
|
if (s.bufferView === void 0 && s.sparse === void 0) {
|
|
1888
|
-
const n =
|
|
1889
|
-
return Promise.resolve(new
|
|
1888
|
+
const n = We[s.type], r = Ee[s.componentType], A = s.normalized === !0, a = new r(s.count * n);
|
|
1889
|
+
return Promise.resolve(new Re(a, n, A));
|
|
1890
1890
|
}
|
|
1891
1891
|
const o = [];
|
|
1892
1892
|
return s.bufferView !== void 0 ? o.push(this.getDependency("bufferView", s.bufferView)) : o.push(null), s.sparse !== void 0 && (o.push(this.getDependency("bufferView", s.sparse.indices.bufferView)), o.push(this.getDependency("bufferView", s.sparse.values.bufferView))), Promise.all(o).then(function(n) {
|
|
1893
|
-
const r = n[0], A =
|
|
1894
|
-
let C,
|
|
1893
|
+
const r = n[0], A = We[s.type], a = Ee[s.componentType], l = a.BYTES_PER_ELEMENT, h = l * A, d = s.byteOffset || 0, g = s.bufferView !== void 0 ? i.bufferViews[s.bufferView].byteStride : void 0, p = s.normalized === !0;
|
|
1894
|
+
let C, E;
|
|
1895
1895
|
if (g && g !== h) {
|
|
1896
1896
|
const f = Math.floor(d / g), m = "InterleavedBuffer:" + s.bufferView + ":" + s.componentType + ":" + f + ":" + s.count;
|
|
1897
|
-
let
|
|
1898
|
-
|
|
1897
|
+
let I = t.cache.get(m);
|
|
1898
|
+
I || (C = new a(r, f * g, s.count * g / l), I = new Zi(C, g / l), t.cache.add(m, I)), E = new Ae(I, A, d % g / l, p);
|
|
1899
1899
|
} else
|
|
1900
|
-
r === null ? C = new a(s.count * A) : C = new a(r, d, s.count * A),
|
|
1900
|
+
r === null ? C = new a(s.count * A) : C = new a(r, d, s.count * A), E = new Re(C, A, p);
|
|
1901
1901
|
if (s.sparse !== void 0) {
|
|
1902
|
-
const f =
|
|
1903
|
-
r !== null && (
|
|
1904
|
-
for (let w = 0,
|
|
1905
|
-
const
|
|
1906
|
-
if (
|
|
1902
|
+
const f = We.SCALAR, m = Ee[s.sparse.indices.componentType], I = s.sparse.indices.byteOffset || 0, b = s.sparse.values.byteOffset || 0, B = new m(n[1], I, s.sparse.count * f), y = new a(n[2], b, s.sparse.count * A);
|
|
1903
|
+
r !== null && (E = new Re(E.array.slice(), E.itemSize, E.normalized)), E.normalized = !1;
|
|
1904
|
+
for (let w = 0, L = B.length; w < L; w++) {
|
|
1905
|
+
const D = B[w];
|
|
1906
|
+
if (E.setX(D, y[w * A]), A >= 2 && E.setY(D, y[w * A + 1]), A >= 3 && E.setZ(D, y[w * A + 2]), A >= 4 && E.setW(D, y[w * A + 3]), A >= 5) throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.");
|
|
1907
1907
|
}
|
|
1908
|
-
|
|
1908
|
+
E.normalized = p;
|
|
1909
1909
|
}
|
|
1910
|
-
return
|
|
1910
|
+
return E;
|
|
1911
1911
|
});
|
|
1912
1912
|
}
|
|
1913
1913
|
/**
|
|
@@ -1933,7 +1933,7 @@ class yo {
|
|
|
1933
1933
|
const a = this.loadImageSource(t, i).then(function(l) {
|
|
1934
1934
|
l.flipY = !1, l.name = n.name || r.name || "", l.name === "" && typeof r.uri == "string" && r.uri.startsWith("data:image/") === !1 && (l.name = r.uri);
|
|
1935
1935
|
const d = (o.samplers || {})[n.sampler] || {};
|
|
1936
|
-
return l.magFilter =
|
|
1936
|
+
return l.magFilter = jt[d.magFilter] || he, l.minFilter = jt[d.minFilter] || He, l.wrapS = Kt[d.wrapS] || dt, l.wrapT = Kt[d.wrapT] || dt, l.generateMipmaps = !l.isCompressedTexture && l.minFilter !== hi && l.minFilter !== he, s.associations.set(l, { textures: e }), l;
|
|
1937
1937
|
}).catch(function() {
|
|
1938
1938
|
return null;
|
|
1939
1939
|
});
|
|
@@ -1957,12 +1957,12 @@ class yo {
|
|
|
1957
1957
|
return new Promise(function(d, g) {
|
|
1958
1958
|
let p = d;
|
|
1959
1959
|
t.isImageBitmapLoader === !0 && (p = function(C) {
|
|
1960
|
-
const
|
|
1961
|
-
|
|
1962
|
-
}), t.load(
|
|
1960
|
+
const E = new Tt(C);
|
|
1961
|
+
E.needsUpdate = !0, d(E);
|
|
1962
|
+
}), t.load(ve.resolveURL(h, o.path), p, void 0, g);
|
|
1963
1963
|
});
|
|
1964
1964
|
}).then(function(h) {
|
|
1965
|
-
return a === !0 && r.revokeObjectURL(A), ie(h, n), h.userData.mimeType = n.mimeType ||
|
|
1965
|
+
return a === !0 && r.revokeObjectURL(A), ie(h, n), h.userData.mimeType = n.mimeType || xo(n.uri), h;
|
|
1966
1966
|
}).catch(function(h) {
|
|
1967
1967
|
throw console.error("THREE.GLTFLoader: Couldn't load texture", A), h;
|
|
1968
1968
|
});
|
|
@@ -2009,11 +2009,11 @@ class yo {
|
|
|
2009
2009
|
if (e.isPoints) {
|
|
2010
2010
|
const r = "PointsMaterial:" + i.uuid;
|
|
2011
2011
|
let A = this.cache.get(r);
|
|
2012
|
-
A || (A = new
|
|
2012
|
+
A || (A = new os(), ze.prototype.copy.call(A, i), A.color.copy(i.color), A.map = i.map, A.sizeAttenuation = !1, this.cache.add(r, A)), i = A;
|
|
2013
2013
|
} else if (e.isLine) {
|
|
2014
2014
|
const r = "LineBasicMaterial:" + i.uuid;
|
|
2015
2015
|
let A = this.cache.get(r);
|
|
2016
|
-
A || (A = new
|
|
2016
|
+
A || (A = new ns(), ze.prototype.copy.call(A, i), A.color.copy(i.color), A.map = i.map, this.cache.add(r, A)), i = A;
|
|
2017
2017
|
}
|
|
2018
2018
|
if (s || o || n) {
|
|
2019
2019
|
let r = "ClonedMaterial:" + i.uuid + ":";
|
|
@@ -2024,7 +2024,7 @@ class yo {
|
|
|
2024
2024
|
e.material = i;
|
|
2025
2025
|
}
|
|
2026
2026
|
getMaterialType() {
|
|
2027
|
-
return
|
|
2027
|
+
return wt;
|
|
2028
2028
|
}
|
|
2029
2029
|
/**
|
|
2030
2030
|
* Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials
|
|
@@ -2052,9 +2052,9 @@ class yo {
|
|
|
2052
2052
|
return d.extendMaterialParams && d.extendMaterialParams(e, r);
|
|
2053
2053
|
})));
|
|
2054
2054
|
}
|
|
2055
|
-
o.doubleSided === !0 && (r.side =
|
|
2056
|
-
const l = o.alphaMode ||
|
|
2057
|
-
if (l ===
|
|
2055
|
+
o.doubleSided === !0 && (r.side = rs);
|
|
2056
|
+
const l = o.alphaMode || Xe.OPAQUE;
|
|
2057
|
+
if (l === Xe.BLEND ? (r.transparent = !0, r.depthWrite = !1) : (r.transparent = !1, l === Xe.MASK && (r.alphaTest = o.alphaCutoff !== void 0 ? o.alphaCutoff : 0.5)), o.normalTexture !== void 0 && n !== fe && (a.push(t.assignTexture(r, "normalMap", o.normalTexture)), r.normalScale = new V(1, 1), o.normalTexture.scale !== void 0)) {
|
|
2058
2058
|
const h = o.normalTexture.scale;
|
|
2059
2059
|
r.normalScale.set(h, h);
|
|
2060
2060
|
}
|
|
@@ -2075,7 +2075,7 @@ class yo {
|
|
|
2075
2075
|
* @return {string}
|
|
2076
2076
|
*/
|
|
2077
2077
|
createUniqueName(e) {
|
|
2078
|
-
const t =
|
|
2078
|
+
const t = as.sanitizeNodeName(e || "");
|
|
2079
2079
|
return t in this.nodeNamesUsed ? t + "_" + ++this.nodeNamesUsed[t] : (this.nodeNamesUsed[t] = 0, t);
|
|
2080
2080
|
}
|
|
2081
2081
|
/**
|
|
@@ -2091,17 +2091,17 @@ class yo {
|
|
|
2091
2091
|
const t = this, i = this.extensions, s = this.primitiveCache;
|
|
2092
2092
|
function o(r) {
|
|
2093
2093
|
return i[S.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(r, t).then(function(A) {
|
|
2094
|
-
return
|
|
2094
|
+
return zt(A, r, t);
|
|
2095
2095
|
});
|
|
2096
2096
|
}
|
|
2097
2097
|
const n = [];
|
|
2098
2098
|
for (let r = 0, A = e.length; r < A; r++) {
|
|
2099
|
-
const a = e[r], l =
|
|
2099
|
+
const a = e[r], l = Mo(a), h = s[l];
|
|
2100
2100
|
if (h)
|
|
2101
2101
|
n.push(h.promise);
|
|
2102
2102
|
else {
|
|
2103
2103
|
let d;
|
|
2104
|
-
a.extensions && a.extensions[S.KHR_DRACO_MESH_COMPRESSION] ? d = o(a) : d =
|
|
2104
|
+
a.extensions && a.extensions[S.KHR_DRACO_MESH_COMPRESSION] ? d = o(a) : d = zt(new di(), a, t), s[l] = { primitive: a, promise: d }, n.push(d);
|
|
2105
2105
|
}
|
|
2106
2106
|
}
|
|
2107
2107
|
return Promise.all(n);
|
|
@@ -2116,28 +2116,28 @@ class yo {
|
|
|
2116
2116
|
loadMesh(e) {
|
|
2117
2117
|
const t = this, i = this.json, s = this.extensions, o = i.meshes[e], n = o.primitives, r = [];
|
|
2118
2118
|
for (let A = 0, a = n.length; A < a; A++) {
|
|
2119
|
-
const l = n[A].material === void 0 ?
|
|
2119
|
+
const l = n[A].material === void 0 ? wo(this.cache) : this.getDependency("material", n[A].material);
|
|
2120
2120
|
r.push(l);
|
|
2121
2121
|
}
|
|
2122
2122
|
return r.push(t.loadGeometries(n)), Promise.all(r).then(function(A) {
|
|
2123
2123
|
const a = A.slice(0, A.length - 1), l = A[A.length - 1], h = [];
|
|
2124
2124
|
for (let g = 0, p = l.length; g < p; g++) {
|
|
2125
|
-
const C = l[g],
|
|
2125
|
+
const C = l[g], E = n[g];
|
|
2126
2126
|
let f;
|
|
2127
2127
|
const m = a[g];
|
|
2128
|
-
if (
|
|
2129
|
-
f = o.isSkinnedMesh === !0 ? new
|
|
2130
|
-
else if (
|
|
2131
|
-
f = new
|
|
2132
|
-
else if (
|
|
2133
|
-
f = new
|
|
2134
|
-
else if (
|
|
2135
|
-
f = new
|
|
2136
|
-
else if (
|
|
2137
|
-
f = new
|
|
2128
|
+
if (E.mode === j.TRIANGLES || E.mode === j.TRIANGLE_STRIP || E.mode === j.TRIANGLE_FAN || E.mode === void 0)
|
|
2129
|
+
f = o.isSkinnedMesh === !0 ? new As(C, m) : new Qt(C, m), f.isSkinnedMesh === !0 && f.normalizeSkinWeights(), E.mode === j.TRIANGLE_STRIP ? f.geometry = Ht(f.geometry, li) : E.mode === j.TRIANGLE_FAN && (f.geometry = Ht(f.geometry, ht));
|
|
2130
|
+
else if (E.mode === j.LINES)
|
|
2131
|
+
f = new ls(C, m);
|
|
2132
|
+
else if (E.mode === j.LINE_STRIP)
|
|
2133
|
+
f = new cs(C, m);
|
|
2134
|
+
else if (E.mode === j.LINE_LOOP)
|
|
2135
|
+
f = new hs(C, m);
|
|
2136
|
+
else if (E.mode === j.POINTS)
|
|
2137
|
+
f = new ds(C, m);
|
|
2138
2138
|
else
|
|
2139
|
-
throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " +
|
|
2140
|
-
Object.keys(f.geometry.morphAttributes).length > 0 &&
|
|
2139
|
+
throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + E.mode);
|
|
2140
|
+
Object.keys(f.geometry.morphAttributes).length > 0 && So(f, o), f.name = t.createUniqueName(o.name || "mesh_" + e), ie(f, o), E.extensions && ae(s, f, E), t.assignFinalMaterial(f), h.push(f);
|
|
2141
2141
|
}
|
|
2142
2142
|
for (let g = 0, p = h.length; g < p; g++)
|
|
2143
2143
|
t.associations.set(h[g], {
|
|
@@ -2146,7 +2146,7 @@ class yo {
|
|
|
2146
2146
|
});
|
|
2147
2147
|
if (h.length === 1)
|
|
2148
2148
|
return o.extensions && ae(s, h[0], o), h[0];
|
|
2149
|
-
const d = new
|
|
2149
|
+
const d = new Ye();
|
|
2150
2150
|
o.extensions && ae(s, d, o), t.associations.set(d, { meshes: e });
|
|
2151
2151
|
for (let g = 0, p = h.length; g < p; g++)
|
|
2152
2152
|
d.add(h[g]);
|
|
@@ -2167,7 +2167,7 @@ class yo {
|
|
|
2167
2167
|
console.warn("THREE.GLTFLoader: Missing camera parameters.");
|
|
2168
2168
|
return;
|
|
2169
2169
|
}
|
|
2170
|
-
return i.type === "perspective" ? t = new
|
|
2170
|
+
return i.type === "perspective" ? t = new gs(Bt.radToDeg(s.yfov), s.aspectRatio || 1, s.znear || 1, s.zfar || 2e6) : i.type === "orthographic" && (t = new us(-s.xmag, s.xmag, s.ymag, -s.ymag, s.znear, s.zfar)), i.name && (t.name = this.createUniqueName(i.name)), ie(t, i), Promise.resolve(t);
|
|
2171
2171
|
}
|
|
2172
2172
|
/**
|
|
2173
2173
|
* Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins
|
|
@@ -2186,12 +2186,12 @@ class yo {
|
|
|
2186
2186
|
const h = n[a];
|
|
2187
2187
|
if (h) {
|
|
2188
2188
|
r.push(h);
|
|
2189
|
-
const d = new
|
|
2189
|
+
const d = new Ie();
|
|
2190
2190
|
o !== null && d.fromArray(o.array, a * 16), A.push(d);
|
|
2191
2191
|
} else
|
|
2192
2192
|
console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', t.joints[a]);
|
|
2193
2193
|
}
|
|
2194
|
-
return new
|
|
2194
|
+
return new ps(r, A);
|
|
2195
2195
|
});
|
|
2196
2196
|
}
|
|
2197
2197
|
/**
|
|
@@ -2204,8 +2204,8 @@ class yo {
|
|
|
2204
2204
|
loadAnimation(e) {
|
|
2205
2205
|
const t = this.json, i = this, s = t.animations[e], o = s.name ? s.name : "animation_" + e, n = [], r = [], A = [], a = [], l = [];
|
|
2206
2206
|
for (let h = 0, d = s.channels.length; h < d; h++) {
|
|
2207
|
-
const g = s.channels[h], p = s.samplers[g.sampler], C = g.target,
|
|
2208
|
-
C.node !== void 0 && (n.push(this.getDependency("node",
|
|
2207
|
+
const g = s.channels[h], p = s.samplers[g.sampler], C = g.target, E = C.node, f = s.parameters !== void 0 ? s.parameters[p.input] : p.input, m = s.parameters !== void 0 ? s.parameters[p.output] : p.output;
|
|
2208
|
+
C.node !== void 0 && (n.push(this.getDependency("node", E)), r.push(this.getDependency("accessor", f)), A.push(this.getDependency("accessor", m)), a.push(p), l.push(C));
|
|
2209
2209
|
}
|
|
2210
2210
|
return Promise.all([
|
|
2211
2211
|
Promise.all(n),
|
|
@@ -2214,17 +2214,17 @@ class yo {
|
|
|
2214
2214
|
Promise.all(a),
|
|
2215
2215
|
Promise.all(l)
|
|
2216
2216
|
]).then(function(h) {
|
|
2217
|
-
const d = h[0], g = h[1], p = h[2], C = h[3],
|
|
2218
|
-
for (let m = 0,
|
|
2219
|
-
const b = d[m], B = g[m],
|
|
2217
|
+
const d = h[0], g = h[1], p = h[2], C = h[3], E = h[4], f = [];
|
|
2218
|
+
for (let m = 0, I = d.length; m < I; m++) {
|
|
2219
|
+
const b = d[m], B = g[m], y = p[m], w = C[m], L = E[m];
|
|
2220
2220
|
if (b === void 0) continue;
|
|
2221
2221
|
b.updateMatrix && b.updateMatrix();
|
|
2222
|
-
const
|
|
2223
|
-
if (
|
|
2224
|
-
for (let
|
|
2225
|
-
f.push(
|
|
2222
|
+
const D = i._createAnimationTracks(b, B, y, w, L);
|
|
2223
|
+
if (D)
|
|
2224
|
+
for (let Q = 0; Q < D.length; Q++)
|
|
2225
|
+
f.push(D[Q]);
|
|
2226
2226
|
}
|
|
2227
|
-
return new
|
|
2227
|
+
return new fs(o, void 0, f);
|
|
2228
2228
|
});
|
|
2229
2229
|
}
|
|
2230
2230
|
createNodeMesh(e) {
|
|
@@ -2257,7 +2257,7 @@ class yo {
|
|
|
2257
2257
|
]).then(function(a) {
|
|
2258
2258
|
const l = a[0], h = a[1], d = a[2];
|
|
2259
2259
|
d !== null && l.traverse(function(g) {
|
|
2260
|
-
g.isSkinnedMesh && g.bind(d,
|
|
2260
|
+
g.isSkinnedMesh && g.bind(d, vo);
|
|
2261
2261
|
});
|
|
2262
2262
|
for (let g = 0, p = h.length; g < p; g++)
|
|
2263
2263
|
l.add(h[g]);
|
|
@@ -2281,11 +2281,11 @@ class yo {
|
|
|
2281
2281
|
r.push(a);
|
|
2282
2282
|
}), this.nodeCache[e] = Promise.all(r).then(function(a) {
|
|
2283
2283
|
let l;
|
|
2284
|
-
if (o.isBone === !0 ? l = new
|
|
2284
|
+
if (o.isBone === !0 ? l = new ms() : a.length > 1 ? l = new Ye() : a.length === 1 ? l = a[0] : l = new Oe(), l !== a[0])
|
|
2285
2285
|
for (let h = 0, d = a.length; h < d; h++)
|
|
2286
2286
|
l.add(a[h]);
|
|
2287
2287
|
if (o.name && (l.userData.name = o.name, l.name = n), ie(l, o), o.extensions && ae(i, l, o), o.matrix !== void 0) {
|
|
2288
|
-
const h = new
|
|
2288
|
+
const h = new Ie();
|
|
2289
2289
|
h.fromArray(o.matrix), l.applyMatrix4(h);
|
|
2290
2290
|
} else
|
|
2291
2291
|
o.translation !== void 0 && l.position.fromArray(o.translation), o.rotation !== void 0 && l.quaternion.fromArray(o.rotation), o.scale !== void 0 && l.scale.fromArray(o.scale);
|
|
@@ -2306,7 +2306,7 @@ class yo {
|
|
|
2306
2306
|
* @return {Promise<Group>}
|
|
2307
2307
|
*/
|
|
2308
2308
|
loadScene(e) {
|
|
2309
|
-
const t = this.extensions, i = this.json.scenes[e], s = this, o = new
|
|
2309
|
+
const t = this.extensions, i = this.json.scenes[e], s = this, o = new Ye();
|
|
2310
2310
|
i.name && (o.name = s.createUniqueName(i.name)), ie(o, i), i.extensions && ae(t, o, i);
|
|
2311
2311
|
const n = i.nodes || [], r = [];
|
|
2312
2312
|
for (let A = 0, a = n.length; A < a; A++)
|
|
@@ -2317,7 +2317,7 @@ class yo {
|
|
|
2317
2317
|
const a = (l) => {
|
|
2318
2318
|
const h = /* @__PURE__ */ new Map();
|
|
2319
2319
|
for (const [d, g] of s.associations)
|
|
2320
|
-
(d instanceof
|
|
2320
|
+
(d instanceof ze || d instanceof Tt) && h.set(d, g);
|
|
2321
2321
|
return l.traverse((d) => {
|
|
2322
2322
|
const g = s.associations.get(d);
|
|
2323
2323
|
g != null && h.set(d, g);
|
|
@@ -2334,29 +2334,29 @@ class yo {
|
|
|
2334
2334
|
let a;
|
|
2335
2335
|
switch (ne[o.path]) {
|
|
2336
2336
|
case ne.weights:
|
|
2337
|
-
a =
|
|
2337
|
+
a = Ft;
|
|
2338
2338
|
break;
|
|
2339
2339
|
case ne.rotation:
|
|
2340
|
-
a =
|
|
2340
|
+
a = kt;
|
|
2341
2341
|
break;
|
|
2342
2342
|
case ne.translation:
|
|
2343
2343
|
case ne.scale:
|
|
2344
|
-
a =
|
|
2344
|
+
a = Lt;
|
|
2345
2345
|
break;
|
|
2346
2346
|
default:
|
|
2347
2347
|
switch (i.itemSize) {
|
|
2348
2348
|
case 1:
|
|
2349
|
-
a =
|
|
2349
|
+
a = Ft;
|
|
2350
2350
|
break;
|
|
2351
2351
|
case 2:
|
|
2352
2352
|
case 3:
|
|
2353
2353
|
default:
|
|
2354
|
-
a =
|
|
2354
|
+
a = Lt;
|
|
2355
2355
|
break;
|
|
2356
2356
|
}
|
|
2357
2357
|
break;
|
|
2358
2358
|
}
|
|
2359
|
-
const l = s.interpolation !== void 0 ?
|
|
2359
|
+
const l = s.interpolation !== void 0 ? yo[s.interpolation] : gi, h = this._getArrayFromAccessor(i);
|
|
2360
2360
|
for (let d = 0, g = A.length; d < g; d++) {
|
|
2361
2361
|
const p = new a(
|
|
2362
2362
|
A[d] + "." + ne[o.path],
|
|
@@ -2371,7 +2371,7 @@ class yo {
|
|
|
2371
2371
|
_getArrayFromAccessor(e) {
|
|
2372
2372
|
let t = e.array;
|
|
2373
2373
|
if (e.normalized) {
|
|
2374
|
-
const i =
|
|
2374
|
+
const i = Ct(t.constructor), s = new Float32Array(t.length);
|
|
2375
2375
|
for (let o = 0, n = t.length; o < n; o++)
|
|
2376
2376
|
s[o] = t[o] * i;
|
|
2377
2377
|
t = s;
|
|
@@ -2380,21 +2380,21 @@ class yo {
|
|
|
2380
2380
|
}
|
|
2381
2381
|
_createCubicSplineTrackInterpolant(e) {
|
|
2382
2382
|
e.createInterpolant = function(i) {
|
|
2383
|
-
const s = this instanceof
|
|
2383
|
+
const s = this instanceof kt ? Bo : Ii;
|
|
2384
2384
|
return new s(this.times, this.values, this.getValueSize() / 3, i);
|
|
2385
2385
|
}, e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = !0;
|
|
2386
2386
|
}
|
|
2387
2387
|
}
|
|
2388
|
-
function
|
|
2389
|
-
const i = e.attributes, s = new
|
|
2388
|
+
function Do(c, e, t) {
|
|
2389
|
+
const i = e.attributes, s = new qe();
|
|
2390
2390
|
if (i.POSITION !== void 0) {
|
|
2391
2391
|
const r = t.json.accessors[i.POSITION], A = r.min, a = r.max;
|
|
2392
2392
|
if (A !== void 0 && a !== void 0) {
|
|
2393
2393
|
if (s.set(
|
|
2394
|
-
new
|
|
2395
|
-
new
|
|
2394
|
+
new R(A[0], A[1], A[2]),
|
|
2395
|
+
new R(a[0], a[1], a[2])
|
|
2396
2396
|
), r.normalized) {
|
|
2397
|
-
const l =
|
|
2397
|
+
const l = Ct(Ee[r.componentType]);
|
|
2398
2398
|
s.min.multiplyScalar(l), s.max.multiplyScalar(l);
|
|
2399
2399
|
}
|
|
2400
2400
|
} else {
|
|
@@ -2405,14 +2405,14 @@ function So(c, e, t) {
|
|
|
2405
2405
|
return;
|
|
2406
2406
|
const o = e.targets;
|
|
2407
2407
|
if (o !== void 0) {
|
|
2408
|
-
const r = new
|
|
2408
|
+
const r = new R(), A = new R();
|
|
2409
2409
|
for (let a = 0, l = o.length; a < l; a++) {
|
|
2410
2410
|
const h = o[a];
|
|
2411
2411
|
if (h.POSITION !== void 0) {
|
|
2412
2412
|
const d = t.json.accessors[h.POSITION], g = d.min, p = d.max;
|
|
2413
2413
|
if (g !== void 0 && p !== void 0) {
|
|
2414
2414
|
if (A.setX(Math.max(Math.abs(g[0]), Math.abs(p[0]))), A.setY(Math.max(Math.abs(g[1]), Math.abs(p[1]))), A.setZ(Math.max(Math.abs(g[2]), Math.abs(p[2]))), d.normalized) {
|
|
2415
|
-
const C =
|
|
2415
|
+
const C = Ct(Ee[d.componentType]);
|
|
2416
2416
|
A.multiplyScalar(C);
|
|
2417
2417
|
}
|
|
2418
2418
|
r.max(A);
|
|
@@ -2423,10 +2423,10 @@ function So(c, e, t) {
|
|
|
2423
2423
|
s.expandByVector(r);
|
|
2424
2424
|
}
|
|
2425
2425
|
c.boundingBox = s;
|
|
2426
|
-
const n = new
|
|
2426
|
+
const n = new St();
|
|
2427
2427
|
s.getCenter(n.center), n.radius = s.min.distanceTo(s.max) / 2, c.boundingSphere = n;
|
|
2428
2428
|
}
|
|
2429
|
-
function
|
|
2429
|
+
function zt(c, e, t) {
|
|
2430
2430
|
const i = e.attributes, s = [];
|
|
2431
2431
|
function o(n, r) {
|
|
2432
2432
|
return t.getDependency("accessor", n).then(function(A) {
|
|
@@ -2434,7 +2434,7 @@ function jt(c, e, t) {
|
|
|
2434
2434
|
});
|
|
2435
2435
|
}
|
|
2436
2436
|
for (const n in i) {
|
|
2437
|
-
const r =
|
|
2437
|
+
const r = bt[n] || n.toLowerCase();
|
|
2438
2438
|
r in c.attributes || s.push(o(i[n], r));
|
|
2439
2439
|
}
|
|
2440
2440
|
if (e.indices !== void 0 && !c.index) {
|
|
@@ -2443,12 +2443,12 @@ function jt(c, e, t) {
|
|
|
2443
2443
|
});
|
|
2444
2444
|
s.push(n);
|
|
2445
2445
|
}
|
|
2446
|
-
return
|
|
2447
|
-
return e.targets !== void 0 ?
|
|
2446
|
+
return gt.workingColorSpace !== Y && "COLOR_0" in i && console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${gt.workingColorSpace}" not supported.`), ie(c, e), Do(c, e, t), Promise.all(s).then(function() {
|
|
2447
|
+
return e.targets !== void 0 ? Qo(c, e.targets, t) : c;
|
|
2448
2448
|
});
|
|
2449
2449
|
}
|
|
2450
|
-
const
|
|
2451
|
-
class
|
|
2450
|
+
const $e = /* @__PURE__ */ new WeakMap();
|
|
2451
|
+
class To extends yt {
|
|
2452
2452
|
/**
|
|
2453
2453
|
* Constructs a new Draco loader.
|
|
2454
2454
|
*
|
|
@@ -2534,8 +2534,8 @@ class Mo extends Et {
|
|
|
2534
2534
|
}
|
|
2535
2535
|
decodeGeometry(e, t) {
|
|
2536
2536
|
const i = JSON.stringify(t);
|
|
2537
|
-
if (
|
|
2538
|
-
const A =
|
|
2537
|
+
if ($e.has(e)) {
|
|
2538
|
+
const A = $e.get(e);
|
|
2539
2539
|
if (A.key === i)
|
|
2540
2540
|
return A.promise;
|
|
2541
2541
|
if (e.byteLength === 0)
|
|
@@ -2549,16 +2549,16 @@ class Mo extends Et {
|
|
|
2549
2549
|
}))).then((A) => this._createGeometry(A.geometry));
|
|
2550
2550
|
return r.catch(() => !0).then(() => {
|
|
2551
2551
|
s && o && this._releaseTask(s, o);
|
|
2552
|
-
}),
|
|
2552
|
+
}), $e.set(e, {
|
|
2553
2553
|
key: i,
|
|
2554
2554
|
promise: r
|
|
2555
2555
|
}), r;
|
|
2556
2556
|
}
|
|
2557
2557
|
_createGeometry(e) {
|
|
2558
|
-
const t = new
|
|
2559
|
-
e.index && t.setIndex(new
|
|
2558
|
+
const t = new di();
|
|
2559
|
+
e.index && t.setIndex(new Re(e.index.array, 1));
|
|
2560
2560
|
for (let i = 0; i < e.attributes.length; i++) {
|
|
2561
|
-
const s = e.attributes[i], o = s.name, n = s.array, r = s.itemSize, A = new
|
|
2561
|
+
const s = e.attributes[i], o = s.name, n = s.array, r = s.itemSize, A = new Re(n, r);
|
|
2562
2562
|
o === "color" && (this._assignVertexColorSpace(A, s.vertexColorSpace), A.normalized = !(n instanceof Float32Array)), t.setAttribute(o, A);
|
|
2563
2563
|
}
|
|
2564
2564
|
return t;
|
|
@@ -2567,7 +2567,7 @@ class Mo extends Et {
|
|
|
2567
2567
|
if (t !== se) return;
|
|
2568
2568
|
const i = new re();
|
|
2569
2569
|
for (let s = 0, o = e.count; s < o; s++)
|
|
2570
|
-
i.fromBufferAttribute(e, s),
|
|
2570
|
+
i.fromBufferAttribute(e, s), gt.colorSpaceToWorking(i, se), e.setXYZ(s, i.r, i.g, i.b);
|
|
2571
2571
|
}
|
|
2572
2572
|
_loadLibrary(e, t) {
|
|
2573
2573
|
const i = new le(this.manager);
|
|
@@ -2584,7 +2584,7 @@ class Mo extends Et {
|
|
|
2584
2584
|
return e ? t.push(this._loadLibrary("draco_decoder.js", "text")) : (t.push(this._loadLibrary("draco_wasm_wrapper.js", "text")), t.push(this._loadLibrary("draco_decoder.wasm", "arraybuffer"))), this.decoderPending = Promise.all(t).then((i) => {
|
|
2585
2585
|
const s = i[0];
|
|
2586
2586
|
e || (this.decoderConfig.wasmBinary = i[1]);
|
|
2587
|
-
const o =
|
|
2587
|
+
const o = Lo.toString(), n = [
|
|
2588
2588
|
"/* draco decoder */",
|
|
2589
2589
|
s,
|
|
2590
2590
|
"",
|
|
@@ -2632,7 +2632,7 @@ class Mo extends Et {
|
|
|
2632
2632
|
return this.workerPool.length = 0, this.workerSourceURL !== "" && URL.revokeObjectURL(this.workerSourceURL), this;
|
|
2633
2633
|
}
|
|
2634
2634
|
}
|
|
2635
|
-
function
|
|
2635
|
+
function Lo() {
|
|
2636
2636
|
let c, e;
|
|
2637
2637
|
onmessage = function(n) {
|
|
2638
2638
|
const r = n.data;
|
|
@@ -2673,17 +2673,17 @@ function xo() {
|
|
|
2673
2673
|
if (!g.ok() || d.ptr === 0)
|
|
2674
2674
|
throw new Error("THREE.DRACOLoader: Decoding failed: " + g.error_msg());
|
|
2675
2675
|
const C = { index: null, attributes: [] };
|
|
2676
|
-
for (const
|
|
2677
|
-
const f = self[h[
|
|
2678
|
-
let m,
|
|
2676
|
+
for (const E in l) {
|
|
2677
|
+
const f = self[h[E]];
|
|
2678
|
+
let m, I;
|
|
2679
2679
|
if (a.useUniqueIDs)
|
|
2680
|
-
|
|
2680
|
+
I = l[E], m = r.GetAttributeByUniqueId(d, I);
|
|
2681
2681
|
else {
|
|
2682
|
-
if (
|
|
2683
|
-
m = r.GetAttribute(d,
|
|
2682
|
+
if (I = r.GetAttributeId(d, n[l[E]]), I === -1) continue;
|
|
2683
|
+
m = r.GetAttribute(d, I);
|
|
2684
2684
|
}
|
|
2685
|
-
const b = s(n, r, d,
|
|
2686
|
-
|
|
2685
|
+
const b = s(n, r, d, E, f, m);
|
|
2686
|
+
E === "color" && (b.vertexColorSpace = a.vertexColorSpace), C.attributes.push(b);
|
|
2687
2687
|
}
|
|
2688
2688
|
return p === n.TRIANGULAR_MESH && (C.index = i(n, r, d)), n.destroy(d), C;
|
|
2689
2689
|
}
|
|
@@ -2694,8 +2694,8 @@ function xo() {
|
|
|
2694
2694
|
return n._free(d), { array: g, itemSize: 1 };
|
|
2695
2695
|
}
|
|
2696
2696
|
function s(n, r, A, a, l, h) {
|
|
2697
|
-
const d = h.num_components(), p = A.num_points() * d, C = p * l.BYTES_PER_ELEMENT,
|
|
2698
|
-
r.GetAttributeDataArrayForAllPoints(A, h,
|
|
2697
|
+
const d = h.num_components(), p = A.num_points() * d, C = p * l.BYTES_PER_ELEMENT, E = o(n, l), f = n._malloc(C);
|
|
2698
|
+
r.GetAttributeDataArrayForAllPoints(A, h, E, C, f);
|
|
2699
2699
|
const m = new l(n.HEAPF32.buffer, f, p).slice();
|
|
2700
2700
|
return n._free(f), {
|
|
2701
2701
|
name: a,
|
|
@@ -2722,7 +2722,7 @@ function xo() {
|
|
|
2722
2722
|
}
|
|
2723
2723
|
}
|
|
2724
2724
|
}
|
|
2725
|
-
class
|
|
2725
|
+
class Fo {
|
|
2726
2726
|
/**
|
|
2727
2727
|
* Constructs a new Worker pool.
|
|
2728
2728
|
*
|
|
@@ -2788,13 +2788,13 @@ class vo {
|
|
|
2788
2788
|
this.workers.forEach((e) => e.terminate()), this.workersResolve.length = 0, this.workers.length = 0, this.queue.length = 0, this.workerStatus = 0;
|
|
2789
2789
|
}
|
|
2790
2790
|
}
|
|
2791
|
-
const
|
|
2792
|
-
class
|
|
2791
|
+
const ko = 0, Yt = 2, _o = 1, Jt = 2, Go = 0, Po = 1, No = 10, Uo = 0, Bi = 9, yi = 15, wi = 16, Qi = 22, Si = 37, Mi = 43, xi = 76, vi = 83, Ri = 97, Di = 100, Ti = 103, Li = 109, Vo = 131, Oo = 132, Ho = 133, qo = 134, jo = 137, Ko = 138, zo = 141, Yo = 142, Jo = 145, Wo = 146, Fi = 148, ki = 152, Xo = 157, Zo = 158, _i = 165, Gi = 166, vt = 1000066e3;
|
|
2792
|
+
class $o {
|
|
2793
2793
|
constructor() {
|
|
2794
2794
|
this.vkFormat = 0, this.typeSize = 1, this.pixelWidth = 0, this.pixelHeight = 0, this.pixelDepth = 0, this.layerCount = 0, this.faceCount = 1, this.supercompressionScheme = 0, this.levels = [], this.dataFormatDescriptor = [{ vendorId: 0, descriptorType: 0, descriptorBlockSize: 0, versionNumber: 2, colorModel: 0, colorPrimaries: 1, transferFunction: 2, flags: 0, texelBlockDimension: [0, 0, 0, 0], bytesPlane: [0, 0, 0, 0, 0, 0, 0, 0], samples: [] }], this.keyValue = {}, this.globalData = null;
|
|
2795
2795
|
}
|
|
2796
2796
|
}
|
|
2797
|
-
class
|
|
2797
|
+
class Se {
|
|
2798
2798
|
constructor(e, t, i, s) {
|
|
2799
2799
|
this._dataView = void 0, this._littleEndian = void 0, this._offset = void 0, this._dataView = new DataView(e.buffer, e.byteOffset + t, i), this._littleEndian = s, this._offset = 0;
|
|
2800
2800
|
}
|
|
@@ -2834,68 +2834,68 @@ class ye {
|
|
|
2834
2834
|
}
|
|
2835
2835
|
}
|
|
2836
2836
|
const N = [171, 75, 84, 88, 32, 50, 48, 187, 13, 10, 26, 10];
|
|
2837
|
-
function
|
|
2837
|
+
function Wt(c) {
|
|
2838
2838
|
return new TextDecoder().decode(c);
|
|
2839
2839
|
}
|
|
2840
|
-
function
|
|
2840
|
+
function en(c) {
|
|
2841
2841
|
const e = new Uint8Array(c.buffer, c.byteOffset, N.length);
|
|
2842
2842
|
if (e[0] !== N[0] || e[1] !== N[1] || e[2] !== N[2] || e[3] !== N[3] || e[4] !== N[4] || e[5] !== N[5] || e[6] !== N[6] || e[7] !== N[7] || e[8] !== N[8] || e[9] !== N[9] || e[10] !== N[10] || e[11] !== N[11]) throw new Error("Missing KTX 2.0 identifier.");
|
|
2843
|
-
const t = new
|
|
2843
|
+
const t = new $o(), i = 17 * Uint32Array.BYTES_PER_ELEMENT, s = new Se(c, N.length, i, !0);
|
|
2844
2844
|
t.vkFormat = s._nextUint32(), t.typeSize = s._nextUint32(), t.pixelWidth = s._nextUint32(), t.pixelHeight = s._nextUint32(), t.pixelDepth = s._nextUint32(), t.layerCount = s._nextUint32(), t.faceCount = s._nextUint32();
|
|
2845
2845
|
const o = s._nextUint32();
|
|
2846
2846
|
t.supercompressionScheme = s._nextUint32();
|
|
2847
|
-
const n = s._nextUint32(), r = s._nextUint32(), A = s._nextUint32(), a = s._nextUint32(), l = s._nextUint64(), h = s._nextUint64(), d = new
|
|
2847
|
+
const n = s._nextUint32(), r = s._nextUint32(), A = s._nextUint32(), a = s._nextUint32(), l = s._nextUint64(), h = s._nextUint64(), d = new Se(c, N.length + i, 3 * o * 8, !0);
|
|
2848
2848
|
for (let F = 0; F < o; F++) t.levels.push({ levelData: new Uint8Array(c.buffer, c.byteOffset + d._nextUint64(), d._nextUint64()), uncompressedByteLength: d._nextUint64() });
|
|
2849
|
-
const g = new
|
|
2849
|
+
const g = new Se(c, n, r, !0), p = { vendorId: g._skip(4)._nextUint16(), descriptorType: g._nextUint16(), versionNumber: g._nextUint16(), descriptorBlockSize: g._nextUint16(), colorModel: g._nextUint8(), colorPrimaries: g._nextUint8(), transferFunction: g._nextUint8(), flags: g._nextUint8(), texelBlockDimension: [g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8()], bytesPlane: [g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8()], samples: [] }, C = (p.descriptorBlockSize / 4 - 6) / 4;
|
|
2850
2850
|
for (let F = 0; F < C; F++) {
|
|
2851
|
-
const
|
|
2852
|
-
64 &
|
|
2851
|
+
const H = { bitOffset: g._nextUint16(), bitLength: g._nextUint8(), channelType: g._nextUint8(), samplePosition: [g._nextUint8(), g._nextUint8(), g._nextUint8(), g._nextUint8()], sampleLower: -1 / 0, sampleUpper: 1 / 0 };
|
|
2852
|
+
64 & H.channelType ? (H.sampleLower = g._nextInt32(), H.sampleUpper = g._nextInt32()) : (H.sampleLower = g._nextUint32(), H.sampleUpper = g._nextUint32()), p.samples[F] = H;
|
|
2853
2853
|
}
|
|
2854
2854
|
t.dataFormatDescriptor.length = 0, t.dataFormatDescriptor.push(p);
|
|
2855
|
-
const
|
|
2856
|
-
for (;
|
|
2857
|
-
const F =
|
|
2858
|
-
if (t.keyValue[oe] =
|
|
2859
|
-
const
|
|
2860
|
-
t.keyValue[oe] =
|
|
2855
|
+
const E = new Se(c, A, a, !0);
|
|
2856
|
+
for (; E._offset < a; ) {
|
|
2857
|
+
const F = E._nextUint32(), H = E._scan(F), oe = Wt(H);
|
|
2858
|
+
if (t.keyValue[oe] = E._nextUint8Array(F - H.byteLength - 1), oe.match(/^ktx/i)) {
|
|
2859
|
+
const we = Wt(t.keyValue[oe]);
|
|
2860
|
+
t.keyValue[oe] = we.substring(0, we.lastIndexOf("\0"));
|
|
2861
2861
|
}
|
|
2862
|
-
|
|
2862
|
+
E._skip(F % 4 ? 4 - F % 4 : 0);
|
|
2863
2863
|
}
|
|
2864
2864
|
if (h <= 0) return t;
|
|
2865
|
-
const f = new
|
|
2866
|
-
for (let F = 0; F < o; F++)
|
|
2867
|
-
const
|
|
2868
|
-
return t.globalData = { endpointCount: m, selectorCount:
|
|
2865
|
+
const f = new Se(c, l, h, !0), m = f._nextUint16(), I = f._nextUint16(), b = f._nextUint32(), B = f._nextUint32(), y = f._nextUint32(), w = f._nextUint32(), L = [];
|
|
2866
|
+
for (let F = 0; F < o; F++) L.push({ imageFlags: f._nextUint32(), rgbSliceByteOffset: f._nextUint32(), rgbSliceByteLength: f._nextUint32(), alphaSliceByteOffset: f._nextUint32(), alphaSliceByteLength: f._nextUint32() });
|
|
2867
|
+
const D = l + f._offset, Q = D + b, v = Q + B, M = v + y, J = new Uint8Array(c.buffer, c.byteOffset + D, b), W = new Uint8Array(c.buffer, c.byteOffset + Q, B), ye = new Uint8Array(c.buffer, c.byteOffset + v, y), q = new Uint8Array(c.buffer, c.byteOffset + M, w);
|
|
2868
|
+
return t.globalData = { endpointCount: m, selectorCount: I, imageDescs: L, endpointsData: J, selectorsData: W, tablesData: ye, extendedData: q }, t;
|
|
2869
2869
|
}
|
|
2870
|
-
let
|
|
2871
|
-
const
|
|
2872
|
-
|
|
2870
|
+
let et, te, Et;
|
|
2871
|
+
const tt = { env: { emscripten_notify_memory_growth: function(c) {
|
|
2872
|
+
Et = new Uint8Array(te.exports.memory.buffer);
|
|
2873
2873
|
} } };
|
|
2874
|
-
class
|
|
2874
|
+
class tn {
|
|
2875
2875
|
init() {
|
|
2876
|
-
return
|
|
2876
|
+
return et || (et = typeof fetch < "u" ? fetch("data:application/wasm;base64," + Xt).then((e) => e.arrayBuffer()).then((e) => WebAssembly.instantiate(e, tt)).then(this._init) : WebAssembly.instantiate(Buffer.from(Xt, "base64"), tt).then(this._init), et);
|
|
2877
2877
|
}
|
|
2878
2878
|
_init(e) {
|
|
2879
|
-
te = e.instance,
|
|
2879
|
+
te = e.instance, tt.env.emscripten_notify_memory_growth(0);
|
|
2880
2880
|
}
|
|
2881
2881
|
decode(e, t = 0) {
|
|
2882
2882
|
if (!te) throw new Error("ZSTDDecoder: Await .init() before decoding.");
|
|
2883
2883
|
const i = e.byteLength, s = te.exports.malloc(i);
|
|
2884
|
-
|
|
2885
|
-
const o = te.exports.malloc(t), n = te.exports.ZSTD_decompress(o, t, s, i), r =
|
|
2884
|
+
Et.set(e, s), t = t || Number(te.exports.ZSTD_findDecompressedSize(s, i));
|
|
2885
|
+
const o = te.exports.malloc(t), n = te.exports.ZSTD_decompress(o, t, s, i), r = Et.slice(o, o + n);
|
|
2886
2886
|
return te.exports.free(s), te.exports.free(o), r;
|
|
2887
2887
|
}
|
|
2888
2888
|
}
|
|
2889
|
-
const Jt = "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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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", Xo = "display-p3", Zo = "display-p3-linear", et = /* @__PURE__ */ new WeakMap();
|
|
2890
|
-
let
|
|
2891
|
-
class K extends
|
|
2889
|
+
const Xt = "AGFzbQEAAAABpQEVYAF/AX9gAn9/AGADf39/AX9gBX9/f39/AX9gAX8AYAJ/fwF/YAR/f39/AX9gA39/fwBgBn9/f39/fwF/YAd/f39/f39/AX9gAn9/AX5gAn5+AX5gAABgBX9/f39/AGAGf39/f39/AGAIf39/f39/f38AYAl/f39/f39/f38AYAABf2AIf39/f39/f38Bf2ANf39/f39/f39/f39/fwF/YAF/AX4CJwEDZW52H2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgABANpaAEFAAAFAgEFCwACAQABAgIFBQcAAwABDgsBAQcAEhMHAAUBDAQEAAANBwQCAgYCBAgDAwMDBgEACQkHBgICAAYGAgQUBwYGAwIGAAMCAQgBBwUGCgoEEQAEBAEIAwgDBQgDEA8IAAcABAUBcAECAgUEAQCAAgYJAX8BQaCgwAILB2AHBm1lbW9yeQIABm1hbGxvYwAoBGZyZWUAJgxaU1REX2lzRXJyb3IAaBlaU1REX2ZpbmREZWNvbXByZXNzZWRTaXplAFQPWlNURF9kZWNvbXByZXNzAEoGX3N0YXJ0ACQJBwEAQQELASQKussBaA8AIAAgACgCBCABajYCBAsZACAAKAIAIAAoAgRBH3F0QQAgAWtBH3F2CwgAIABBiH9LC34BBH9BAyEBIAAoAgQiA0EgTQRAIAAoAggiASAAKAIQTwRAIAAQDQ8LIAAoAgwiAiABRgRAQQFBAiADQSBJGw8LIAAgASABIAJrIANBA3YiBCABIARrIAJJIgEbIgJrIgQ2AgggACADIAJBA3RrNgIEIAAgBCgAADYCAAsgAQsUAQF/IAAgARACIQIgACABEAEgAgv3AQECfyACRQRAIABCADcCACAAQQA2AhAgAEIANwIIQbh/DwsgACABNgIMIAAgAUEEajYCECACQQRPBEAgACABIAJqIgFBfGoiAzYCCCAAIAMoAAA2AgAgAUF/ai0AACIBBEAgAEEIIAEQFGs2AgQgAg8LIABBADYCBEF/DwsgACABNgIIIAAgAS0AACIDNgIAIAJBfmoiBEEBTQRAIARBAWtFBEAgACABLQACQRB0IANyIgM2AgALIAAgAS0AAUEIdCADajYCAAsgASACakF/ai0AACIBRQRAIABBADYCBEFsDwsgAEEoIAEQFCACQQN0ams2AgQgAgsWACAAIAEpAAA3AAAgACABKQAINwAICy8BAX8gAUECdEGgHWooAgAgACgCAEEgIAEgACgCBGprQR9xdnEhAiAAIAEQASACCyEAIAFCz9bTvtLHq9lCfiAAfEIfiUKHla+vmLbem55/fgsdAQF/IAAoAgggACgCDEYEfyAAKAIEQSBGBUEACwuCBAEDfyACQYDAAE8EQCAAIAEgAhBnIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgA0F8aiIEIABJBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAsMACAAIAEpAAA3AAALQQECfyAAKAIIIgEgACgCEEkEQEEDDwsgACAAKAIEIgJBB3E2AgQgACABIAJBA3ZrIgE2AgggACABKAAANgIAQQALDAAgACABKAIANgAAC/cCAQJ/AkAgACABRg0AAkAgASACaiAASwRAIAAgAmoiBCABSw0BCyAAIAEgAhALDwsgACABc0EDcSEDAkACQCAAIAFJBEAgAwRAIAAhAwwDCyAAQQNxRQRAIAAhAwwCCyAAIQMDQCACRQ0EIAMgAS0AADoAACABQQFqIQEgAkF/aiECIANBAWoiA0EDcQ0ACwwBCwJAIAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEEdCAAbiECCyAAQQh2IgEgAkEYbCIAQYwIaigCAGwgAEGICGooAgBqIgJBA3YgAmogAEGACGooAgAgAEGECGooAgAgAWxqSQs3ACAAIAMgBCAFQYAQEDMiBRADBEAgBQ8LIAUgBEkEfyABIAIgAyAFaiAEIAVrIAAQMgVBuH8LC78DAQN/IwBBIGsiBSQAIAVBCGogAiADEAYiAhADRQRAIAAgAWoiB0F9aiEGIAUgBBAOIARBBGohAiAFLQACIQMDQEEAIAAgBkkgBUEIahAEGwRAIAAgAiAFQQhqIAMQAkECdGoiBC8BADsAACAFQQhqIAQtAAIQASAAIAQtAANqIgQgAiAFQQhqIAMQAkECdGoiAC8BADsAACAFQQhqIAAtAAIQASAEIAAtAANqIQAMAQUgB0F+aiEEA0AgBUEIahAEIAAgBEtyRQRAIAAgAiAFQQhqIAMQAkECdGoiBi8BADsAACAFQQhqIAYtAAIQASAAIAYtAANqIQAMAQsLA0AgACAES0UEQCAAIAIgBUEIaiADEAJBAnRqIgYvAQA7AAAgBUEIaiAGLQACEAEgACAGLQADaiEADAELCwJAIAAgB08NACAAIAIgBUEIaiADEAIiA0ECdGoiAC0AADoAACAALQADQQFGBEAgBUEIaiAALQACEAEMAQsgBSgCDEEfSw0AIAVBCGogAiADQQJ0ai0AAhABIAUoAgxBIUkNACAFQSA2AgwLIAFBbCAFQQhqEAobIQILCwsgBUEgaiQAIAILkgIBBH8jAEFAaiIJJAAgCSADQTQQCyEDAkAgBEECSA0AIAMgBEECdGooAgAhCSADQTxqIAgQIyADQQE6AD8gAyACOgA+QQAhBCADKAI8IQoDQCAEIAlGDQEgACAEQQJ0aiAKNgEAIARBAWohBAwAAAsAC0EAIQkDQCAGIAlGRQRAIAMgBSAJQQF0aiIKLQABIgtBAnRqIgwoAgAhBCADQTxqIAotAABBCHQgCGpB//8DcRAjIANBAjoAPyADIAcgC2siCiACajoAPiAEQQEgASAKa3RqIQogAygCPCELA0AgACAEQQJ0aiALNgEAIARBAWoiBCAKSQ0ACyAMIAo2AgAgCUEBaiEJDAELCyADQUBrJAALowIBCX8jAEHQAGsiCSQAIAlBEGogBUE0EAsaIAcgBmshDyAHIAFrIRADQAJAIAMgCkcEQEEBIAEgByACIApBAXRqIgYtAAEiDGsiCGsiC3QhDSAGLQAAIQ4gCUEQaiAMQQJ0aiIMKAIAIQYgCyAPTwRAIAAgBkECdGogCyAIIAUgCEE0bGogCCAQaiIIQQEgCEEBShsiCCACIAQgCEECdGooAgAiCEEBdGogAyAIayAHIA4QYyAGIA1qIQgMAgsgCUEMaiAOECMgCUEBOgAPIAkgCDoADiAGIA1qIQggCSgCDCELA0AgBiAITw0CIAAgBkECdGogCzYBACAGQQFqIQYMAAALAAsgCUHQAGokAA8LIAwgCDYCACAKQQFqIQoMAAALAAs0ACAAIAMgBCAFEDYiBRADBEAgBQ8LIAUgBEkEfyABIAIgAyAFaiAEIAVrIAAQNAVBuH8LCyMAIAA/AEEQdGtB//8DakEQdkAAQX9GBEBBAA8LQQAQAEEBCzsBAX8gAgRAA0AgACABIAJBgCAgAkGAIEkbIgMQCyEAIAFBgCBqIQEgAEGAIGohACACIANrIgINAAsLCwYAIAAQAwsLqBUJAEGICAsNAQAAAAEAAAACAAAAAgBBoAgLswYBAAAAAQAAAAIAAAACAAAAJgAAAIIAAAAhBQAASgAAAGcIAAAmAAAAwAEAAIAAAABJBQAASgAAAL4IAAApAAAALAIAAIAAAABJBQAASgAAAL4IAAAvAAAAygIAAIAAAACKBQAASgAAAIQJAAA1AAAAcwMAAIAAAACdBQAASgAAAKAJAAA9AAAAgQMAAIAAAADrBQAASwAAAD4KAABEAAAAngMAAIAAAABNBgAASwAAAKoKAABLAAAAswMAAIAAAADBBgAATQAAAB8NAABNAAAAUwQAAIAAAAAjCAAAUQAAAKYPAABUAAAAmQQAAIAAAABLCQAAVwAAALESAABYAAAA2gQAAIAAAABvCQAAXQAAACMUAABUAAAARQUAAIAAAABUCgAAagAAAIwUAABqAAAArwUAAIAAAAB2CQAAfAAAAE4QAAB8AAAA0gIAAIAAAABjBwAAkQAAAJAHAACSAAAAAAAAAAEAAAABAAAABQAAAA0AAAAdAAAAPQAAAH0AAAD9AAAA/QEAAP0DAAD9BwAA/Q8AAP0fAAD9PwAA/X8AAP3/AAD9/wEA/f8DAP3/BwD9/w8A/f8fAP3/PwD9/38A/f//AP3//wH9//8D/f//B/3//w/9//8f/f//P/3//38AAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACUAAAAnAAAAKQAAACsAAAAvAAAAMwAAADsAAABDAAAAUwAAAGMAAACDAAAAAwEAAAMCAAADBAAAAwgAAAMQAAADIAAAA0AAAAOAAAADAAEAQeAPC1EBAAAAAQAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAEAAAABQAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAQcQQC4sBAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABIAAAAUAAAAFgAAABgAAAAcAAAAIAAAACgAAAAwAAAAQAAAAIAAAAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAAAAQBBkBIL5gQBAAAAAQAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAAAEAAAAEAAAACAAAAAAAAAABAAEBBgAAAAAAAAQAAAAAEAAABAAAAAAgAAAFAQAAAAAAAAUDAAAAAAAABQQAAAAAAAAFBgAAAAAAAAUHAAAAAAAABQkAAAAAAAAFCgAAAAAAAAUMAAAAAAAABg4AAAAAAAEFEAAAAAAAAQUUAAAAAAABBRYAAAAAAAIFHAAAAAAAAwUgAAAAAAAEBTAAAAAgAAYFQAAAAAAABwWAAAAAAAAIBgABAAAAAAoGAAQAAAAADAYAEAAAIAAABAAAAAAAAAAEAQAAAAAAAAUCAAAAIAAABQQAAAAAAAAFBQAAACAAAAUHAAAAAAAABQgAAAAgAAAFCgAAAAAAAAULAAAAAAAABg0AAAAgAAEFEAAAAAAAAQUSAAAAIAABBRYAAAAAAAIFGAAAACAAAwUgAAAAAAADBSgAAAAAAAYEQAAAABAABgRAAAAAIAAHBYAAAAAAAAkGAAIAAAAACwYACAAAMAAABAAAAAAQAAAEAQAAACAAAAUCAAAAIAAABQMAAAAgAAAFBQAAACAAAAUGAAAAIAAABQgAAAAgAAAFCQAAACAAAAULAAAAIAAABQwAAAAAAAAGDwAAACAAAQUSAAAAIAABBRQAAAAgAAIFGAAAACAAAgUcAAAAIAADBSgAAAAgAAQFMAAAAAAAEAYAAAEAAAAPBgCAAAAAAA4GAEAAAAAADQYAIABBgBcLhwIBAAEBBQAAAAAAAAUAAAAAAAAGBD0AAAAAAAkF/QEAAAAADwX9fwAAAAAVBf3/HwAAAAMFBQAAAAAABwR9AAAAAAAMBf0PAAAAABIF/f8DAAAAFwX9/38AAAAFBR0AAAAAAAgE/QAAAAAADgX9PwAAAAAUBf3/DwAAAAIFAQAAABAABwR9AAAAAAALBf0HAAAAABEF/f8BAAAAFgX9/z8AAAAEBQ0AAAAQAAgE/QAAAAAADQX9HwAAAAATBf3/BwAAAAEFAQAAABAABgQ9AAAAAAAKBf0DAAAAABAF/f8AAAAAHAX9//8PAAAbBf3//wcAABoF/f//AwAAGQX9//8BAAAYBf3//wBBkBkLhgQBAAEBBgAAAAAAAAYDAAAAAAAABAQAAAAgAAAFBQAAAAAAAAUGAAAAAAAABQgAAAAAAAAFCQAAAAAAAAULAAAAAAAABg0AAAAAAAAGEAAAAAAAAAYTAAAAAAAABhYAAAAAAAAGGQAAAAAAAAYcAAAAAAAABh8AAAAAAAAGIgAAAAAAAQYlAAAAAAABBikAAAAAAAIGLwAAAAAAAwY7AAAAAAAEBlMAAAAAAAcGgwAAAAAACQYDAgAAEAAABAQAAAAAAAAEBQAAACAAAAUGAAAAAAAABQcAAAAgAAAFCQAAAAAAAAUKAAAAAAAABgwAAAAAAAAGDwAAAAAAAAYSAAAAAAAABhUAAAAAAAAGGAAAAAAAAAYbAAAAAAAABh4AAAAAAAAGIQAAAAAAAQYjAAAAAAABBicAAAAAAAIGKwAAAAAAAwYzAAAAAAAEBkMAAAAAAAUGYwAAAAAACAYDAQAAIAAABAQAAAAwAAAEBAAAABAAAAQFAAAAIAAABQcAAAAgAAAFCAAAACAAAAUKAAAAIAAABQsAAAAAAAAGDgAAAAAAAAYRAAAAAAAABhQAAAAAAAAGFwAAAAAAAAYaAAAAAAAABh0AAAAAAAAGIAAAAAAAEAYDAAEAAAAPBgOAAAAAAA4GA0AAAAAADQYDIAAAAAAMBgMQAAAAAAsGAwgAAAAACgYDBABBpB0L2QEBAAAAAwAAAAcAAAAPAAAAHwAAAD8AAAB/AAAA/wAAAP8BAAD/AwAA/wcAAP8PAAD/HwAA/z8AAP9/AAD//wAA//8BAP//AwD//wcA//8PAP//HwD//z8A//9/AP///wD///8B////A////wf///8P////H////z////9/AAAAAAEAAAACAAAABAAAAAAAAAACAAAABAAAAAgAAAAAAAAAAQAAAAIAAAABAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAcAAAAIAAAACQAAAAoAAAALAEGgIAsDwBBQ", sn = "display-p3", on = "display-p3-linear", it = /* @__PURE__ */ new WeakMap();
|
|
2890
|
+
let st = 0, ot;
|
|
2891
|
+
class K extends yt {
|
|
2892
2892
|
/**
|
|
2893
2893
|
* Constructs a new KTX2 loader.
|
|
2894
2894
|
*
|
|
2895
2895
|
* @param {LoadingManager} [manager] - The loading manager.
|
|
2896
2896
|
*/
|
|
2897
2897
|
constructor(e) {
|
|
2898
|
-
super(e), this.transcoderPath = "", this.transcoderBinary = null, this.transcoderPending = null, this.workerPool = new
|
|
2898
|
+
super(e), this.transcoderPath = "", this.transcoderBinary = null, this.transcoderPending = null, this.workerPool = new Fo(), this.workerSourceURL = "", this.workerConfig = null, typeof MSC_TRANSCODER < "u" && console.warn(
|
|
2899
2899
|
'THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.'
|
|
2900
2900
|
);
|
|
2901
2901
|
}
|
|
@@ -2990,9 +2990,9 @@ class K extends Et {
|
|
|
2990
2990
|
const a = new Worker(this.workerSourceURL), l = this.transcoderBinary.slice(0);
|
|
2991
2991
|
return a.postMessage({ type: "init", config: this.workerConfig, transcoderBinary: l }, [l]), a;
|
|
2992
2992
|
});
|
|
2993
|
-
}),
|
|
2993
|
+
}), st > 0 && console.warn(
|
|
2994
2994
|
"THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."
|
|
2995
|
-
),
|
|
2995
|
+
), st++;
|
|
2996
2996
|
}
|
|
2997
2997
|
return this.transcoderPending;
|
|
2998
2998
|
}
|
|
@@ -3024,8 +3024,8 @@ class K extends Et {
|
|
|
3024
3024
|
parse(e, t, i) {
|
|
3025
3025
|
if (this.workerConfig === null)
|
|
3026
3026
|
throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");
|
|
3027
|
-
if (
|
|
3028
|
-
return
|
|
3027
|
+
if (it.has(e))
|
|
3028
|
+
return it.get(e).promise.then(t).catch(i);
|
|
3029
3029
|
this._createTexture(e).then((s) => t ? t(s) : null).catch(i);
|
|
3030
3030
|
}
|
|
3031
3031
|
_createTextureFrom(e, t) {
|
|
@@ -3033,12 +3033,12 @@ class K extends Et {
|
|
|
3033
3033
|
if (i === "error") return Promise.reject(s);
|
|
3034
3034
|
let h;
|
|
3035
3035
|
if (t.faceCount === 6)
|
|
3036
|
-
h = new
|
|
3036
|
+
h = new Is(o, A, a);
|
|
3037
3037
|
else {
|
|
3038
3038
|
const d = o[0].mipmaps;
|
|
3039
|
-
h = t.layerCount > 1 ? new
|
|
3039
|
+
h = t.layerCount > 1 ? new Bs(d, n, r, t.layerCount, A, a) : new ui(d, n, r, A, a);
|
|
3040
3040
|
}
|
|
3041
|
-
return h.minFilter = o[0].mipmaps.length === 1 ? he :
|
|
3041
|
+
return h.minFilter = o[0].mipmaps.length === 1 ? he : He, h.magFilter = he, h.generateMipmaps = !1, h.needsUpdate = !0, h.colorSpace = Pi(t), h.premultiplyAlpha = !!(l & _o), h;
|
|
3042
3042
|
}
|
|
3043
3043
|
/**
|
|
3044
3044
|
* @private
|
|
@@ -3047,18 +3047,18 @@ class K extends Et {
|
|
|
3047
3047
|
* @return {Promise<CompressedTexture|CompressedArrayTexture|DataTexture|Data3DTexture>}
|
|
3048
3048
|
*/
|
|
3049
3049
|
async _createTexture(e, t = {}) {
|
|
3050
|
-
const i =
|
|
3051
|
-
if (!(i.vkFormat ===
|
|
3052
|
-
return
|
|
3050
|
+
const i = en(new Uint8Array(e)), s = i.vkFormat === vt && i.dataFormatDescriptor[0].colorModel === 167;
|
|
3051
|
+
if (!(i.vkFormat === Uo || s && !this.workerConfig.astcHDRSupported))
|
|
3052
|
+
return rn(i);
|
|
3053
3053
|
const n = t, r = this.init().then(() => this.workerPool.postMessage({ type: "transcode", buffer: e, taskConfig: n }, [e])).then((A) => this._createTextureFrom(A.data, i));
|
|
3054
|
-
return
|
|
3054
|
+
return it.set(e, { promise: r }), r;
|
|
3055
3055
|
}
|
|
3056
3056
|
/**
|
|
3057
3057
|
* Frees internal resources. This method should be called
|
|
3058
3058
|
* when the loader is no longer required.
|
|
3059
3059
|
*/
|
|
3060
3060
|
dispose() {
|
|
3061
|
-
this.workerPool.dispose(), this.workerSourceURL && URL.revokeObjectURL(this.workerSourceURL),
|
|
3061
|
+
this.workerPool.dispose(), this.workerSourceURL && URL.revokeObjectURL(this.workerSourceURL), st--;
|
|
3062
3062
|
}
|
|
3063
3063
|
}
|
|
3064
3064
|
K.BasisFormat = {
|
|
@@ -3091,15 +3091,15 @@ K.TranscoderFormat = {
|
|
|
3091
3091
|
K.EngineFormat = {
|
|
3092
3092
|
RGBAFormat: me,
|
|
3093
3093
|
RGBA_ASTC_4x4_Format: Ge,
|
|
3094
|
-
RGB_BPTC_UNSIGNED_Format:
|
|
3095
|
-
RGBA_BPTC_Format:
|
|
3096
|
-
RGBA_ETC2_EAC_Format:
|
|
3097
|
-
RGBA_PVRTC_4BPPV1_Format:
|
|
3098
|
-
RGBA_S3TC_DXT5_Format:
|
|
3099
|
-
RGB_ETC1_Format:
|
|
3100
|
-
RGB_ETC2_Format:
|
|
3101
|
-
RGB_PVRTC_4BPPV1_Format:
|
|
3102
|
-
RGBA_S3TC_DXT1_Format:
|
|
3094
|
+
RGB_BPTC_UNSIGNED_Format: xs,
|
|
3095
|
+
RGBA_BPTC_Format: ut,
|
|
3096
|
+
RGBA_ETC2_EAC_Format: pi,
|
|
3097
|
+
RGBA_PVRTC_4BPPV1_Format: Ms,
|
|
3098
|
+
RGBA_S3TC_DXT5_Format: pt,
|
|
3099
|
+
RGB_ETC1_Format: Ss,
|
|
3100
|
+
RGB_ETC2_Format: fi,
|
|
3101
|
+
RGB_PVRTC_4BPPV1_Format: Qs,
|
|
3102
|
+
RGBA_S3TC_DXT1_Format: ft
|
|
3103
3103
|
};
|
|
3104
3104
|
K.EngineType = {
|
|
3105
3105
|
UnsignedByteType: z,
|
|
@@ -3118,10 +3118,10 @@ K.BasisWorker = function() {
|
|
|
3118
3118
|
case "transcode":
|
|
3119
3119
|
e.then(() => {
|
|
3120
3120
|
try {
|
|
3121
|
-
const { faces:
|
|
3122
|
-
self.postMessage({ type: "transcode", id: C.id, data: { faces:
|
|
3123
|
-
} catch (
|
|
3124
|
-
console.error(
|
|
3121
|
+
const { faces: E, buffers: f, width: m, height: I, hasAlpha: b, format: B, type: y, dfdFlags: w } = A(C.buffer);
|
|
3122
|
+
self.postMessage({ type: "transcode", id: C.id, data: { faces: E, width: m, height: I, hasAlpha: b, format: B, type: y, dfdFlags: w } }, f);
|
|
3123
|
+
} catch (E) {
|
|
3124
|
+
console.error(E), self.postMessage({ type: "error", id: C.id, error: E.message });
|
|
3125
3125
|
}
|
|
3126
3126
|
});
|
|
3127
3127
|
break;
|
|
@@ -3136,11 +3136,11 @@ K.BasisWorker = function() {
|
|
|
3136
3136
|
}
|
|
3137
3137
|
function A(p) {
|
|
3138
3138
|
const C = new t.KTX2File(new Uint8Array(p));
|
|
3139
|
-
function
|
|
3139
|
+
function E() {
|
|
3140
3140
|
C.close(), C.delete();
|
|
3141
3141
|
}
|
|
3142
3142
|
if (!C.isValid())
|
|
3143
|
-
throw
|
|
3143
|
+
throw E(), new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");
|
|
3144
3144
|
let f;
|
|
3145
3145
|
if (C.isUASTC())
|
|
3146
3146
|
f = n.UASTC;
|
|
@@ -3150,32 +3150,32 @@ K.BasisWorker = function() {
|
|
|
3150
3150
|
f = n.UASTC_HDR;
|
|
3151
3151
|
else
|
|
3152
3152
|
throw new Error("THREE.KTX2Loader: Unknown Basis encoding");
|
|
3153
|
-
const m = C.getWidth(),
|
|
3154
|
-
if (!m || !
|
|
3155
|
-
throw
|
|
3153
|
+
const m = C.getWidth(), I = C.getHeight(), b = C.getLayers() || 1, B = C.getLevels(), y = C.getFaces(), w = C.getHasAlpha(), L = C.getDFDFlags(), { transcoderFormat: D, engineFormat: Q, engineType: v } = h(f, m, I, w);
|
|
3154
|
+
if (!m || !I || !B)
|
|
3155
|
+
throw E(), new Error("THREE.KTX2Loader: Invalid texture");
|
|
3156
3156
|
if (!C.startTranscoding())
|
|
3157
|
-
throw
|
|
3157
|
+
throw E(), new Error("THREE.KTX2Loader: .startTranscoding failed");
|
|
3158
3158
|
const M = [], J = [];
|
|
3159
|
-
for (let W = 0; W <
|
|
3160
|
-
const
|
|
3159
|
+
for (let W = 0; W < y; W++) {
|
|
3160
|
+
const ye = [];
|
|
3161
3161
|
for (let q = 0; q < B; q++) {
|
|
3162
3162
|
const F = [];
|
|
3163
|
-
let
|
|
3163
|
+
let H, oe;
|
|
3164
3164
|
for (let de = 0; de < b; de++) {
|
|
3165
3165
|
const ge = C.getImageLevelInfo(q, de, W);
|
|
3166
|
-
W === 0 && q === 0 && de === 0 && (ge.origWidth % 4 !== 0 || ge.origHeight % 4 !== 0) && console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."), B > 1 ? (
|
|
3167
|
-
let ue = new Uint8Array(C.getImageTranscodedSizeInBytes(q, de, 0,
|
|
3168
|
-
const
|
|
3169
|
-
if (v === s.HalfFloatType && (ue = new Uint16Array(ue.buffer, ue.byteOffset, ue.byteLength / Uint16Array.BYTES_PER_ELEMENT)), !
|
|
3170
|
-
throw
|
|
3166
|
+
W === 0 && q === 0 && de === 0 && (ge.origWidth % 4 !== 0 || ge.origHeight % 4 !== 0) && console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."), B > 1 ? (H = ge.origWidth, oe = ge.origHeight) : (H = ge.width, oe = ge.height);
|
|
3167
|
+
let ue = new Uint8Array(C.getImageTranscodedSizeInBytes(q, de, 0, D));
|
|
3168
|
+
const Vi = C.transcodeImage(ue, q, de, W, D, 0, -1, -1);
|
|
3169
|
+
if (v === s.HalfFloatType && (ue = new Uint16Array(ue.buffer, ue.byteOffset, ue.byteLength / Uint16Array.BYTES_PER_ELEMENT)), !Vi)
|
|
3170
|
+
throw E(), new Error("THREE.KTX2Loader: .transcodeImage failed.");
|
|
3171
3171
|
F.push(ue);
|
|
3172
3172
|
}
|
|
3173
|
-
const
|
|
3174
|
-
|
|
3173
|
+
const we = g(F);
|
|
3174
|
+
ye.push({ data: we, width: H, height: oe }), J.push(we.buffer);
|
|
3175
3175
|
}
|
|
3176
|
-
M.push({ mipmaps:
|
|
3176
|
+
M.push({ mipmaps: ye, width: m, height: I, format: Q, type: v });
|
|
3177
3177
|
}
|
|
3178
|
-
return
|
|
3178
|
+
return E(), { faces: M, buffers: J, width: m, height: I, hasAlpha: w, dfdFlags: L, format: Q, type: v };
|
|
3179
3179
|
}
|
|
3180
3180
|
const a = [
|
|
3181
3181
|
{
|
|
@@ -3274,13 +3274,13 @@ K.BasisWorker = function() {
|
|
|
3274
3274
|
[n.UASTC]: a.filter((p) => p.basisFormat.includes(n.UASTC)).sort((p, C) => p.priorityUASTC - C.priorityUASTC),
|
|
3275
3275
|
[n.UASTC_HDR]: a.filter((p) => p.basisFormat.includes(n.UASTC_HDR)).sort((p, C) => p.priorityHDR - C.priorityHDR)
|
|
3276
3276
|
};
|
|
3277
|
-
function h(p, C,
|
|
3277
|
+
function h(p, C, E, f) {
|
|
3278
3278
|
const m = l[p];
|
|
3279
|
-
for (let
|
|
3280
|
-
const b = m[
|
|
3281
|
-
if (b.if && !c[b.if] || !b.basisFormat.includes(p) || f && b.transcoderFormat.length < 2 || b.needsPowerOfTwo && !(d(C) && d(
|
|
3282
|
-
const B = b.transcoderFormat[f ? 1 : 0],
|
|
3283
|
-
return { transcoderFormat: B, engineFormat:
|
|
3279
|
+
for (let I = 0; I < m.length; I++) {
|
|
3280
|
+
const b = m[I];
|
|
3281
|
+
if (b.if && !c[b.if] || !b.basisFormat.includes(p) || f && b.transcoderFormat.length < 2 || b.needsPowerOfTwo && !(d(C) && d(E))) continue;
|
|
3282
|
+
const B = b.transcoderFormat[f ? 1 : 0], y = b.engineFormat[f ? 1 : 0], w = b.engineType[0];
|
|
3283
|
+
return { transcoderFormat: B, engineFormat: y, engineType: w };
|
|
3284
3284
|
}
|
|
3285
3285
|
throw new Error("THREE.KTX2Loader: Failed to identify transcoding target.");
|
|
3286
3286
|
}
|
|
@@ -3291,92 +3291,92 @@ K.BasisWorker = function() {
|
|
|
3291
3291
|
if (p.length === 1) return p[0];
|
|
3292
3292
|
let C = 0;
|
|
3293
3293
|
for (let m = 0; m < p.length; m++) {
|
|
3294
|
-
const
|
|
3295
|
-
C +=
|
|
3294
|
+
const I = p[m];
|
|
3295
|
+
C += I.byteLength;
|
|
3296
3296
|
}
|
|
3297
|
-
const
|
|
3297
|
+
const E = new Uint8Array(C);
|
|
3298
3298
|
let f = 0;
|
|
3299
3299
|
for (let m = 0; m < p.length; m++) {
|
|
3300
|
-
const
|
|
3301
|
-
|
|
3300
|
+
const I = p[m];
|
|
3301
|
+
E.set(I, f), f += I.byteLength;
|
|
3302
3302
|
}
|
|
3303
|
-
return
|
|
3303
|
+
return E;
|
|
3304
3304
|
}
|
|
3305
3305
|
};
|
|
3306
|
-
const
|
|
3307
|
-
[
|
|
3308
|
-
[
|
|
3309
|
-
[
|
|
3310
|
-
[
|
|
3311
|
-
[
|
|
3312
|
-
[
|
|
3313
|
-
[
|
|
3314
|
-
[
|
|
3315
|
-
[
|
|
3316
|
-
[
|
|
3317
|
-
[
|
|
3318
|
-
[
|
|
3319
|
-
[
|
|
3320
|
-
[
|
|
3321
|
-
[
|
|
3322
|
-
[
|
|
3323
|
-
[
|
|
3324
|
-
[
|
|
3325
|
-
[
|
|
3326
|
-
[
|
|
3327
|
-
[
|
|
3328
|
-
[
|
|
3329
|
-
[
|
|
3330
|
-
[
|
|
3331
|
-
[
|
|
3332
|
-
[
|
|
3333
|
-
[
|
|
3334
|
-
[
|
|
3335
|
-
[
|
|
3336
|
-
},
|
|
3337
|
-
[
|
|
3338
|
-
[
|
|
3339
|
-
[
|
|
3306
|
+
const nn = /* @__PURE__ */ new Set([me, xe, Me]), nt = {
|
|
3307
|
+
[Li]: me,
|
|
3308
|
+
[Ri]: me,
|
|
3309
|
+
[Si]: me,
|
|
3310
|
+
[Mi]: me,
|
|
3311
|
+
[Ti]: xe,
|
|
3312
|
+
[vi]: xe,
|
|
3313
|
+
[wi]: xe,
|
|
3314
|
+
[Qi]: xe,
|
|
3315
|
+
[Di]: Me,
|
|
3316
|
+
[xi]: Me,
|
|
3317
|
+
[yi]: Me,
|
|
3318
|
+
[Bi]: Me,
|
|
3319
|
+
[Fi]: fi,
|
|
3320
|
+
[ki]: pi,
|
|
3321
|
+
[vt]: Ge,
|
|
3322
|
+
[Zo]: Ge,
|
|
3323
|
+
[Xo]: Ge,
|
|
3324
|
+
[Gi]: Nt,
|
|
3325
|
+
[_i]: Nt,
|
|
3326
|
+
[Ho]: ft,
|
|
3327
|
+
[qo]: ft,
|
|
3328
|
+
[Vo]: Pt,
|
|
3329
|
+
[Oo]: Pt,
|
|
3330
|
+
[Ko]: Gt,
|
|
3331
|
+
[jo]: Gt,
|
|
3332
|
+
[Yo]: pt,
|
|
3333
|
+
[zo]: pt,
|
|
3334
|
+
[Wo]: ut,
|
|
3335
|
+
[Jo]: ut
|
|
3336
|
+
}, rt = {
|
|
3337
|
+
[Li]: De,
|
|
3338
|
+
[Ri]: be,
|
|
3339
|
+
[Si]: z,
|
|
3340
|
+
[Mi]: z,
|
|
3341
|
+
[Ti]: De,
|
|
3342
|
+
[vi]: be,
|
|
3343
|
+
[wi]: z,
|
|
3344
|
+
[Qi]: z,
|
|
3345
|
+
[Di]: De,
|
|
3346
|
+
[xi]: be,
|
|
3347
|
+
[yi]: z,
|
|
3340
3348
|
[Bi]: z,
|
|
3341
|
-
[
|
|
3342
|
-
[
|
|
3343
|
-
[
|
|
3344
|
-
[
|
|
3345
|
-
[
|
|
3346
|
-
[Qi]: be,
|
|
3347
|
-
[bi]: z,
|
|
3348
|
-
[mi]: z,
|
|
3349
|
-
[vi]: z,
|
|
3350
|
-
[Di]: z,
|
|
3351
|
-
[Mt]: be,
|
|
3352
|
-
[Li]: z,
|
|
3353
|
-
[Ri]: z
|
|
3349
|
+
[Fi]: z,
|
|
3350
|
+
[ki]: z,
|
|
3351
|
+
[vt]: be,
|
|
3352
|
+
[Gi]: z,
|
|
3353
|
+
[_i]: z
|
|
3354
3354
|
};
|
|
3355
|
-
async function
|
|
3355
|
+
async function rn(c) {
|
|
3356
3356
|
const { vkFormat: e } = c;
|
|
3357
|
-
if (
|
|
3357
|
+
if (nt[e] === void 0)
|
|
3358
3358
|
throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");
|
|
3359
3359
|
let t;
|
|
3360
|
-
c.supercompressionScheme ===
|
|
3361
|
-
const n = new
|
|
3360
|
+
c.supercompressionScheme === Yt && (ot || (ot = new Promise(async (o) => {
|
|
3361
|
+
const n = new tn();
|
|
3362
3362
|
await n.init(), o(n);
|
|
3363
|
-
})), t = await
|
|
3363
|
+
})), t = await ot);
|
|
3364
3364
|
const i = [];
|
|
3365
3365
|
for (let o = 0; o < c.levels.length; o++) {
|
|
3366
3366
|
const n = Math.max(1, c.pixelWidth >> o), r = Math.max(1, c.pixelHeight >> o), A = c.pixelDepth ? Math.max(1, c.pixelDepth >> o) : 0, a = c.levels[o];
|
|
3367
3367
|
let l;
|
|
3368
|
-
if (c.supercompressionScheme ===
|
|
3368
|
+
if (c.supercompressionScheme === ko)
|
|
3369
3369
|
l = a.levelData;
|
|
3370
|
-
else if (c.supercompressionScheme ===
|
|
3370
|
+
else if (c.supercompressionScheme === Yt)
|
|
3371
3371
|
l = t.decode(a.levelData, a.uncompressedByteLength);
|
|
3372
3372
|
else
|
|
3373
3373
|
throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");
|
|
3374
3374
|
let h;
|
|
3375
|
-
|
|
3375
|
+
rt[e] === De ? h = new Float32Array(
|
|
3376
3376
|
l.buffer,
|
|
3377
3377
|
l.byteOffset,
|
|
3378
3378
|
l.byteLength / Float32Array.BYTES_PER_ELEMENT
|
|
3379
|
-
) :
|
|
3379
|
+
) : rt[e] === be ? h = new Uint16Array(
|
|
3380
3380
|
l.buffer,
|
|
3381
3381
|
l.byteOffset,
|
|
3382
3382
|
l.byteLength / Uint16Array.BYTES_PER_ELEMENT
|
|
@@ -3388,19 +3388,19 @@ async function en(c) {
|
|
|
3388
3388
|
});
|
|
3389
3389
|
}
|
|
3390
3390
|
let s;
|
|
3391
|
-
if (
|
|
3392
|
-
s = c.pixelDepth === 0 ? new
|
|
3391
|
+
if (nn.has(nt[e]))
|
|
3392
|
+
s = c.pixelDepth === 0 ? new ys(i[0].data, c.pixelWidth, c.pixelHeight) : new ws(i[0].data, c.pixelWidth, c.pixelHeight, c.pixelDepth);
|
|
3393
3393
|
else {
|
|
3394
3394
|
if (c.pixelDepth > 0) throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");
|
|
3395
|
-
s = new
|
|
3395
|
+
s = new ui(i, c.pixelWidth, c.pixelHeight), s.minFilter = i.length === 1 ? he : He, s.magFilter = he;
|
|
3396
3396
|
}
|
|
3397
|
-
return s.mipmaps = i, s.type =
|
|
3397
|
+
return s.mipmaps = i, s.type = rt[e], s.format = nt[e], s.colorSpace = Pi(c), s.needsUpdate = !0, Promise.resolve(s);
|
|
3398
3398
|
}
|
|
3399
|
-
function
|
|
3399
|
+
function Pi(c) {
|
|
3400
3400
|
const e = c.dataFormatDescriptor[0];
|
|
3401
|
-
return e.colorPrimaries ===
|
|
3401
|
+
return e.colorPrimaries === Po ? e.transferFunction === Jt ? se : Y : e.colorPrimaries === No ? e.transferFunction === Jt ? sn : on : e.colorPrimaries === Go ? _t : (console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${e.colorPrimaries}"`), _t);
|
|
3402
3402
|
}
|
|
3403
|
-
var
|
|
3403
|
+
var an = function() {
|
|
3404
3404
|
var c = "b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q:Odkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq;w8Wqdbk;esezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9Uc;WFbGgocjdaocjd6EhDaicefhocbhqdnindndndnaeaq9nmbaDaeaq9RaqaDfae6Egkcsfglcl4cifcd4hxalc9WGgmTmecbhPawcjdfhsaohzinaraz9Rax6mvarazaxfgo9RcK6mvczhlcbhHinalgic9WfgOawcj;cbffhldndndndndnazaOco4fRbbaHcoG4ciGPlbedibkal9cb83ibalcwf9cb83ibxikalaoRblaoRbbgOco4gAaAciSgAE86bbawcj;cbfaifglcGfaoclfaAfgARbbaOcl4ciGgCaCciSgCE86bbalcVfaAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc7faAaCfgARbbaOciGgOaOciSgOE86bbalctfaAaOfgARbbaoRbegOco4gCaCciSgCE86bbalc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc93faAaCfgARbbaOciGgOaOciSgOE86bbalc94faAaOfgARbbaoRbdgOco4gCaCciSgCE86bbalc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc97faAaCfgARbbaOciGgOaOciSgOE86bbalc98faAaOfgORbbaoRbigoco4gAaAciSgAE86bbalc99faOaAfgORbbaocl4ciGgAaAciSgAE86bbalc9:faOaAfgORbbaocd4ciGgAaAciSgAE86bbalcufaOaAfglRbbaociGgoaociSgoE86bbalaofhoxdkalaoRbwaoRbbgOcl4gAaAcsSgAE86bbawcj;cbfaifglcGfaocwfaAfgARbbaOcsGgOaOcsSgOE86bbalcVfaAaOfgORbbaoRbegAcl4gCaCcsSgCE86bbalc7faOaCfgORbbaAcsGgAaAcsSgAE86bbalctfaOaAfgORbbaoRbdgAcl4gCaCcsSgCE86bbalc91faOaCfgORbbaAcsGgAaAcsSgAE86bbalc4faOaAfgORbbaoRbigAcl4gCaCcsSgCE86bbalc93faOaCfgORbbaAcsGgAaAcsSgAE86bbalc94faOaAfgORbbaoRblgAcl4gCaCcsSgCE86bbalc95faOaCfgORbbaAcsGgAaAcsSgAE86bbalc96faOaAfgORbbaoRbvgAcl4gCaCcsSgCE86bbalc97faOaCfgORbbaAcsGgAaAcsSgAE86bbalc98faOaAfgORbbaoRbogAcl4gCaCcsSgCE86bbalc99faOaCfgORbbaAcsGgAaAcsSgAE86bbalc9:faOaAfgORbbaoRbrgocl4gAaAcsSgAE86bbalcufaOaAfglRbbaocsGgoaocsSgoE86bbalaofhoxekalao8Pbb83bbalcwfaocwf8Pbb83bbaoczfhokdnaiam9pmbaHcdfhHaiczfhlarao9RcL0mekkaiam6mvaoTmvdnakTmbawaPfRbbhHawcj;cbfhlashiakhOinaialRbbgzce4cbazceG9R7aHfgH86bbaiadfhialcefhlaOcufgOmbkkascefhsaohzaPcefgPad9hmbxikkcbc99arao9Radcaadca0ESEhoxlkaoaxad2fhCdnakmbadhlinaoTmlarao9Rax6mlaoaxfhoalcufglmbkaChoxekcbhmawcjdfhAinarao9Rax6miawamfRbbhHawcj;cbfhlaAhiakhOinaialRbbgzce4cbazceG9R7aHfgH86bbaiadfhialcefhlaOcufgOmbkaAcefhAaoaxfhoamcefgmad9hmbkaChokabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqaombkc9:hoxekc9:hokavcj;ebf8Kjjjjbaok;cseHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhDaicefgqarfhidnaeTmbcmcsawceSEhkcbhxcbhmcbhPcbhwcbhlindnaiaD9nmbc9:hoxikdndnaqRbbgoc;Ve0mbavc;abfalaocu7gscl4fcsGcitfgzydlhrazydbhzdnaocsGgHak9pmbavawasfcsGcdtfydbaxaHEhoaHThsdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkaxasfhxcdhHavawcdtfaoBdbawasfhwcehsalhOxdkdndnaHcsSmbaHc987aHamffcefhoxekaicefhoai8SbbgHcFeGhsdndnaHcu9mmbaohixekaicvfhiascFbGhscrhHdninao8SbbgOcFbGaHtasVhsaOcu9kmeaocefhoaHcrfgHc8J9hmbxdkkaocefhikasce4cbasceG9R7amfhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhHavawcdtfaoBdbcehsawcefhwalhOaohmxekdnaocpe0mbaxcefgHavawaDaocsGfRbbgocl49RcsGcdtfydbaocz6gzEhravawao9RcsGcdtfydbaHazfgAaocsGgHEhoaHThCdndnadcd9hmbabaPcetfgHax87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHaxBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfaxBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgOaxBdlaOarBdbavawazfgwcsGcdtfaoBdbalcefcsGhOawaCfhwaxhzaAaCfhxxekaxcbaiRbbgOEgzaoc;:eSgHfhraOcsGhCaOcl4hAdndnaOcs0mbarcefhoxekarhoavawaA9RcsGcdtfydbhrkdndnaCmbaocefhxxekaohxavawaO9RcsGcdtfydbhokdndnaHTmbaicefhHxekaicdfhHai8SbegscFeGhzdnascu9kmbaicofhXazcFbGhzcrhidninaH8SbbgscFbGaitazVhzascu9kmeaHcefhHaicrfgic8J9hmbkaXhHxekaHcefhHkazce4cbazceG9R7amfgmhzkdndnaAcsSmbaHhsxekaHcefhsaH8SbbgicFeGhrdnaicu9kmbaHcvfhXarcFbGhrcrhidninas8SbbgHcFbGaitarVhraHcu9kmeascefhsaicrfgic8J9hmbkaXhsxekascefhskarce4cbarceG9R7amfgmhrkdndnaCcsSmbashixekascefhias8SbbgocFeGhHdnaocu9kmbascvfhXaHcFbGhHcrhodninai8SbbgscFbGaotaHVhHascu9kmeaicefhiaocrfgoc8J9hmbkaXhixekaicefhikaHce4cbaHceG9R7amfgmhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfazBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgXazBdlaXarBdbavawaOcz6aAcsSVfgwcsGcdtfaoBdbawaCTaCcsSVfhwalcefcsGhOkaqcefhqavc;abfaOcitfgOarBdlaOaoBdbavc;abfalasfcsGcitfgraoBdlarazBdbawcsGhwalaHfcsGhlaPcifgPae6mbkkcbc99aiaDSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;oiliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabaiavcefciGfcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavciGfgkcd7cetfaD87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavcufciGfcetfaD87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohvxekcjjjj94hvkabakcetfav87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklzNbb", e = "b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q:6dkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq:p9sqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk:N8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhlaicefhodnaeTmbadTmbalc;WFbGglcjdalcjd6EhwcbhDinawaeaD9RaDawfae6Egqcsfglc9WGgkci2hxakcethmalcl4cifcd4hPabaDad2fhsakc;ab6hzcbhHincbhOaohAdndninaraA9RaP6meavcj;cbfaOak2fhCaAaPfhocbhidnazmbarao9Rc;Gb6mbcbhlinaCalfhidndndndndnaAalco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklbaoczfhokdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklzaoczfhokdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklaaoczfhokdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WaoclfaYpQbfaXc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WaocwfaYpQbfaXc:q:yjjbfRbbfhoxekaiaopbbbpkl8Waoczfhokalc;abfhialcjefak0meaihlarao9Rc;Fb0mbkkdnaiak9pmbaici4hlinarao9RcK6miaCaifhXdndndndndnaAaico4fRbbalcoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpkbbxikaXaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkbbaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaXaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkbbaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaXaopbbbpkbbaoczfhokalcdfhlaiczfgiak6mbkkaoTmeaohAaOcefgOclSmdxbkkc9:hoxlkdnakTmbavcjdfaHfhiavaHfpbdbhYcbhXinaiavcj;cbfaXfglpblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLalakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEalamfpblbg3cep9Ta3aQp9op9Hp9rg3alaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfhiaXczfgXak6mbkkaHclfgHad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfgDae6mbkkcbc99arao9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk::seHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhDaicefgqarfhidnaeTmbcmcsawceSEhkcbhxcbhmcbhPcbhwcbhlindnaiaD9nmbc9:hoxikdndnaqRbbgoc;Ve0mbavc;abfalaocu7gscl4fcsGcitfgzydlhrazydbhzdnaocsGgHak9pmbavawasfcsGcdtfydbaxaHEhoaHThsdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkaxasfhxcdhHavawcdtfaoBdbawasfhwcehsalhOxdkdndnaHcsSmbaHc987aHamffcefhoxekaicefhoai8SbbgHcFeGhsdndnaHcu9mmbaohixekaicvfhiascFbGhscrhHdninao8SbbgOcFbGaHtasVhsaOcu9kmeaocefhoaHcrfgHc8J9hmbxdkkaocefhikasce4cbasceG9R7amfhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhHavawcdtfaoBdbcehsawcefhwalhOaohmxekdnaocpe0mbaxcefgHavawaDaocsGfRbbgocl49RcsGcdtfydbaocz6gzEhravawao9RcsGcdtfydbaHazfgAaocsGgHEhoaHThCdndnadcd9hmbabaPcetfgHax87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHaxBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfaxBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgOaxBdlaOarBdbavawazfgwcsGcdtfaoBdbalcefcsGhOawaCfhwaxhzaAaCfhxxekaxcbaiRbbgOEgzaoc;:eSgHfhraOcsGhCaOcl4hAdndnaOcs0mbarcefhoxekarhoavawaA9RcsGcdtfydbhrkdndnaCmbaocefhxxekaohxavawaO9RcsGcdtfydbhokdndnaHTmbaicefhHxekaicdfhHai8SbegscFeGhzdnascu9kmbaicofhXazcFbGhzcrhidninaH8SbbgscFbGaitazVhzascu9kmeaHcefhHaicrfgic8J9hmbkaXhHxekaHcefhHkazce4cbazceG9R7amfgmhzkdndnaAcsSmbaHhsxekaHcefhsaH8SbbgicFeGhrdnaicu9kmbaHcvfhXarcFbGhrcrhidninas8SbbgHcFbGaitarVhraHcu9kmeascefhsaicrfgic8J9hmbkaXhsxekascefhskarce4cbarceG9R7amfgmhrkdndnaCcsSmbashixekascefhias8SbbgocFeGhHdnaocu9kmbascvfhXaHcFbGhHcrhodninai8SbbgscFbGaotaHVhHascu9kmeaicefhiaocrfgoc8J9hmbkaXhixekaicefhikaHce4cbaHceG9R7amfgmhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfazBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgXazBdlaXarBdbavawaOcz6aAcsSVfgwcsGcdtfaoBdbawaCTaCcsSVfhwalcefcsGhOkaqcefhqavc;abfaOcitfgOarBdlaOaoBdbavc;abfalasfcsGcitfgraoBdlarazBdbawcsGhwalaHfcsGhlaPcifgPae6mbkkcbc99aiaDSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:wPliuo97eue978Jjjjjbca9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalaeSmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskdnalTmbcbhvabhdinadczfgxaxpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;Meawaqawamp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oaoarpmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalaeSmbaiaeciGgvcitgdfcbcaad9R;8kbaiabalcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;Meawaqawamp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oaoarpmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaDakp;Mearp;Keamp9oaqakp;Mearp;Keczp:Rep9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalaeSmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaDakp;Mearp;Keamp9oaqakp;Mearp;Keczp:Rep9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbadczfhdaeclfgeav6mbkkdnavalSmbaialciGgecdtgdVcbc;abad9R;8kbaiabavcdtfgvad;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepklbkavaiad;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz:Dbb", t = new Uint8Array([
|
|
3405
3405
|
0,
|
|
3406
3406
|
97,
|
|
@@ -3523,19 +3523,19 @@ var tn = function() {
|
|
|
3523
3523
|
o = f.instance, o.exports.__wasm_call_ctors();
|
|
3524
3524
|
});
|
|
3525
3525
|
function r(f) {
|
|
3526
|
-
for (var m = new Uint8Array(f.length),
|
|
3527
|
-
var b = f.charCodeAt(
|
|
3528
|
-
m[
|
|
3526
|
+
for (var m = new Uint8Array(f.length), I = 0; I < f.length; ++I) {
|
|
3527
|
+
var b = f.charCodeAt(I);
|
|
3528
|
+
m[I] = b > 96 ? b - 97 : b > 64 ? b - 39 : b + 4;
|
|
3529
3529
|
}
|
|
3530
|
-
for (var B = 0,
|
|
3531
|
-
m[B++] = m[
|
|
3530
|
+
for (var B = 0, I = 0; I < f.length; ++I)
|
|
3531
|
+
m[B++] = m[I] < 60 ? i[m[I]] : (m[I] - 60) * 64 + m[++I];
|
|
3532
3532
|
return m.buffer.slice(0, B);
|
|
3533
3533
|
}
|
|
3534
|
-
function A(f, m,
|
|
3535
|
-
var
|
|
3536
|
-
M.set(
|
|
3537
|
-
var J = m(
|
|
3538
|
-
if (J == 0 && w && w(
|
|
3534
|
+
function A(f, m, I, b, B, y, w) {
|
|
3535
|
+
var L = f.exports.sbrk, D = b + 3 & -4, Q = L(D * B), v = L(y.length), M = new Uint8Array(f.exports.memory.buffer);
|
|
3536
|
+
M.set(y, v);
|
|
3537
|
+
var J = m(Q, b, B, v, y.length);
|
|
3538
|
+
if (J == 0 && w && w(Q, D, B), I.set(M.subarray(Q, Q + b * B)), L(Q - L(0)), J != 0)
|
|
3539
3539
|
throw new Error("Malformed buffer data: " + J);
|
|
3540
3540
|
}
|
|
3541
3541
|
var a = {
|
|
@@ -3554,34 +3554,34 @@ var tn = function() {
|
|
|
3554
3554
|
pending: 0,
|
|
3555
3555
|
requests: {}
|
|
3556
3556
|
};
|
|
3557
|
-
return m.object.onmessage = function(
|
|
3558
|
-
var b =
|
|
3557
|
+
return m.object.onmessage = function(I) {
|
|
3558
|
+
var b = I.data;
|
|
3559
3559
|
m.pending -= b.count, m.requests[b.id][b.action](b.value), delete m.requests[b.id];
|
|
3560
3560
|
}, m;
|
|
3561
3561
|
}
|
|
3562
3562
|
function p(f) {
|
|
3563
|
-
for (var m = "self.ready = WebAssembly.instantiate(new Uint8Array([" + new Uint8Array(s) + "]), {}).then(function(result) { result.instance.exports.__wasm_call_ctors(); return result.instance; });self.onmessage = " +
|
|
3563
|
+
for (var m = "self.ready = WebAssembly.instantiate(new Uint8Array([" + new Uint8Array(s) + "]), {}).then(function(result) { result.instance.exports.__wasm_call_ctors(); return result.instance; });self.onmessage = " + E.name + ";" + A.toString() + E.toString(), I = new Blob([m], { type: "text/javascript" }), b = URL.createObjectURL(I), B = h.length; B < f; ++B)
|
|
3564
3564
|
h[B] = g(b);
|
|
3565
3565
|
for (var B = f; B < h.length; ++B)
|
|
3566
3566
|
h[B].object.postMessage({});
|
|
3567
3567
|
h.length = f, URL.revokeObjectURL(b);
|
|
3568
3568
|
}
|
|
3569
|
-
function C(f, m,
|
|
3570
|
-
for (var
|
|
3571
|
-
h[w].pending <
|
|
3572
|
-
return new Promise(function(
|
|
3573
|
-
var
|
|
3574
|
-
|
|
3569
|
+
function C(f, m, I, b, B) {
|
|
3570
|
+
for (var y = h[0], w = 1; w < h.length; ++w)
|
|
3571
|
+
h[w].pending < y.pending && (y = h[w]);
|
|
3572
|
+
return new Promise(function(L, D) {
|
|
3573
|
+
var Q = new Uint8Array(I), v = ++d;
|
|
3574
|
+
y.pending += f, y.requests[v] = { resolve: L, reject: D }, y.object.postMessage({ id: v, count: f, size: m, source: Q, mode: b, filter: B }, [Q.buffer]);
|
|
3575
3575
|
});
|
|
3576
3576
|
}
|
|
3577
|
-
function
|
|
3577
|
+
function E(f) {
|
|
3578
3578
|
var m = f.data;
|
|
3579
3579
|
if (!m.id)
|
|
3580
3580
|
return self.close();
|
|
3581
|
-
self.ready.then(function(
|
|
3581
|
+
self.ready.then(function(I) {
|
|
3582
3582
|
try {
|
|
3583
3583
|
var b = new Uint8Array(m.count * m.size);
|
|
3584
|
-
A(
|
|
3584
|
+
A(I, I.exports[m.mode], b, m.count, m.size, m.source, I.exports[m.filter]), self.postMessage({ id: m.id, count: m.count, action: "resolve", value: b }, [b.buffer]);
|
|
3585
3585
|
} catch (B) {
|
|
3586
3586
|
self.postMessage({ id: m.id, count: m.count, action: "reject", value: B });
|
|
3587
3587
|
}
|
|
@@ -3593,27 +3593,27 @@ var tn = function() {
|
|
|
3593
3593
|
useWorkers: function(f) {
|
|
3594
3594
|
p(f);
|
|
3595
3595
|
},
|
|
3596
|
-
decodeVertexBuffer: function(f, m,
|
|
3597
|
-
A(o, o.exports.meshopt_decodeVertexBuffer, f, m,
|
|
3596
|
+
decodeVertexBuffer: function(f, m, I, b, B) {
|
|
3597
|
+
A(o, o.exports.meshopt_decodeVertexBuffer, f, m, I, b, o.exports[a[B]]);
|
|
3598
3598
|
},
|
|
3599
|
-
decodeIndexBuffer: function(f, m,
|
|
3600
|
-
A(o, o.exports.meshopt_decodeIndexBuffer, f, m,
|
|
3599
|
+
decodeIndexBuffer: function(f, m, I, b) {
|
|
3600
|
+
A(o, o.exports.meshopt_decodeIndexBuffer, f, m, I, b);
|
|
3601
3601
|
},
|
|
3602
|
-
decodeIndexSequence: function(f, m,
|
|
3603
|
-
A(o, o.exports.meshopt_decodeIndexSequence, f, m,
|
|
3602
|
+
decodeIndexSequence: function(f, m, I, b) {
|
|
3603
|
+
A(o, o.exports.meshopt_decodeIndexSequence, f, m, I, b);
|
|
3604
3604
|
},
|
|
3605
|
-
decodeGltfBuffer: function(f, m,
|
|
3606
|
-
A(o, o.exports[l[B]], f, m,
|
|
3605
|
+
decodeGltfBuffer: function(f, m, I, b, B, y) {
|
|
3606
|
+
A(o, o.exports[l[B]], f, m, I, b, o.exports[a[y]]);
|
|
3607
3607
|
},
|
|
3608
|
-
decodeGltfBufferAsync: function(f, m,
|
|
3609
|
-
return h.length > 0 ? C(f, m,
|
|
3610
|
-
var
|
|
3611
|
-
return A(o, o.exports[l[b]],
|
|
3608
|
+
decodeGltfBufferAsync: function(f, m, I, b, B) {
|
|
3609
|
+
return h.length > 0 ? C(f, m, I, l[b], a[B]) : n.then(function() {
|
|
3610
|
+
var y = new Uint8Array(f * m);
|
|
3611
|
+
return A(o, o.exports[l[b]], y, f, m, I, o.exports[a[B]]), y;
|
|
3612
3612
|
});
|
|
3613
3613
|
}
|
|
3614
3614
|
};
|
|
3615
3615
|
}();
|
|
3616
|
-
function
|
|
3616
|
+
function An(c) {
|
|
3617
3617
|
if (!c) return;
|
|
3618
3618
|
(Array.isArray(c) ? c : [c]).forEach((t) => {
|
|
3619
3619
|
t && (Object.keys(t).forEach((i) => {
|
|
@@ -3622,26 +3622,26 @@ function sn(c) {
|
|
|
3622
3622
|
}), typeof t.dispose == "function" && t.dispose());
|
|
3623
3623
|
});
|
|
3624
3624
|
}
|
|
3625
|
-
function
|
|
3625
|
+
function at(c) {
|
|
3626
3626
|
!c || !c.traverse || c.traverse((e) => {
|
|
3627
|
-
e.geometry && e.geometry.dispose(), e.material &&
|
|
3627
|
+
e.geometry && e.geometry.dispose(), e.material && An(e.material);
|
|
3628
3628
|
});
|
|
3629
3629
|
}
|
|
3630
|
-
function
|
|
3630
|
+
function ln() {
|
|
3631
3631
|
u.Cache && typeof u.Cache.clear == "function" && u.Cache.clear();
|
|
3632
3632
|
}
|
|
3633
|
-
class
|
|
3633
|
+
class O {
|
|
3634
3634
|
constructor(e = null) {
|
|
3635
|
-
this.renderer = e, this.isIOSWebKit =
|
|
3635
|
+
this.renderer = e, this.isIOSWebKit = O.isIOSWebKit(), this.platformKey = O.getPlatformKey(), this.loader = new xt(), this.dracoLoader = new To(), this.ktx2Loader = null, this.loadQueue = Promise.resolve(), this.activeIOSLoad = !1, this.dracoLoader.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.5.6/"), this.isIOSWebKit && typeof this.dracoLoader.setWorkerLimit == "function" && this.dracoLoader.setWorkerLimit(1), this.loader.setDRACOLoader(this.dracoLoader), this.loader.setMeshoptDecoder(an), this.cache = /* @__PURE__ */ new Map(), this.ktx2SetupComplete = !1, this.setupKTX2Loader();
|
|
3636
3636
|
}
|
|
3637
3637
|
setupKTX2Loader() {
|
|
3638
3638
|
const e = this.platformKey;
|
|
3639
3639
|
try {
|
|
3640
|
-
if (!
|
|
3640
|
+
if (!O.sharedKTX2Loaders.has(e)) {
|
|
3641
3641
|
const t = new K();
|
|
3642
|
-
t.setTranscoderPath("https://cdn.jsdelivr.net/npm/three@0.177.0/examples/jsm/libs/basis/"), this.isIOSWebKit && typeof t.setWorkerLimit == "function" && t.setWorkerLimit(1),
|
|
3642
|
+
t.setTranscoderPath("https://cdn.jsdelivr.net/npm/three@0.177.0/examples/jsm/libs/basis/"), this.isIOSWebKit && typeof t.setWorkerLimit == "function" && t.setWorkerLimit(1), O.sharedKTX2Loaders.set(e, t), O.sharedKTX2SetupComplete.set(e, !1);
|
|
3643
3643
|
}
|
|
3644
|
-
this.ktx2Loader =
|
|
3644
|
+
this.ktx2Loader = O.sharedKTX2Loaders.get(e), this.loader.setKTX2Loader(this.ktx2Loader), this.ktx2SetupComplete = O.sharedKTX2SetupComplete.get(e) || !1, this.renderer && !this.ktx2SetupComplete && this.ensureKTX2Support();
|
|
3645
3645
|
} catch (t) {
|
|
3646
3646
|
console.warn("KTX2 loader setup failed, falling back to standard textures:", t), this.ktx2Loader = null;
|
|
3647
3647
|
}
|
|
@@ -3650,12 +3650,12 @@ class V {
|
|
|
3650
3650
|
if (!this.ktx2Loader || !this.renderer)
|
|
3651
3651
|
return;
|
|
3652
3652
|
const e = this.platformKey;
|
|
3653
|
-
if (
|
|
3653
|
+
if (O.sharedKTX2SetupComplete.get(e)) {
|
|
3654
3654
|
this.ktx2SetupComplete = !0;
|
|
3655
3655
|
return;
|
|
3656
3656
|
}
|
|
3657
3657
|
try {
|
|
3658
|
-
this.ktx2Loader.detectSupport(this.renderer),
|
|
3658
|
+
this.ktx2Loader.detectSupport(this.renderer), O.sharedKTX2SetupComplete.set(e, !0), this.ktx2SetupComplete = !0;
|
|
3659
3659
|
} catch (t) {
|
|
3660
3660
|
console.warn("Failed to set up KTX2 loader with renderer:", t);
|
|
3661
3661
|
}
|
|
@@ -3726,7 +3726,9 @@ class V {
|
|
|
3726
3726
|
flatShading: !1
|
|
3727
3727
|
});
|
|
3728
3728
|
r.map && (l.map = r.map), r.alphaMap && (l.alphaMap = r.alphaMap), r.aoMap && (l.aoMap = r.aoMap), typeof r.aoMapIntensity == "number" && (l.aoMapIntensity = r.aoMapIntensity), r.envMap && (l.envMap = r.envMap), typeof r.reflectivity == "number" && (l.reflectivity = r.reflectivity), typeof r.refractionRatio == "number" && (l.refractionRatio = r.refractionRatio), r.combine !== void 0 && (l.combine = r.combine), r.transparent !== void 0 && (l.transparent = r.transparent), typeof r.opacity == "number" && (l.opacity = r.opacity), r.normalMap && (l.normalMap = r.normalMap, l.normalScale = r.normalScale || new u.Vector2(1, 1)), l.map && i !== null && (l.map.anisotropy = i, l.map.needsUpdate = !0), l.normalMap && i !== null && (l.normalMap.anisotropy = i, l.normalMap.needsUpdate = !0), l.needsUpdate = !0, Array.isArray(o.material) ? o.material[A] = l : o.material = l, r !== l && typeof r?.dispose == "function" && r.dispose();
|
|
3729
|
-
} else (r.type === "MeshStandardMaterial" || r.type === "MeshPhysicalMaterial") && (
|
|
3729
|
+
} else (r.type === "MeshStandardMaterial" || r.type === "MeshPhysicalMaterial") && (i !== null && ["map", "normalMap", "roughnessMap", "metalnessMap", "aoMap", "emissiveMap"].forEach((h) => {
|
|
3730
|
+
r[h] && (r[h].anisotropy = i, r[h].needsUpdate = !0);
|
|
3731
|
+
}), r.needsUpdate = !0);
|
|
3730
3732
|
const a = Array.isArray(o.material) ? o.material[A] : o.material;
|
|
3731
3733
|
a && a.needsUpdate !== void 0 && (a.needsUpdate = !0);
|
|
3732
3734
|
}), o.geometry && (o.geometry.computeVertexNormals(), o.geometry.normalizeNormals(), n.some((A) => A.normalMap) && o.geometry.computeTangents());
|
|
@@ -3796,7 +3798,7 @@ class V {
|
|
|
3796
3798
|
}
|
|
3797
3799
|
releaseParserCaches(e) {
|
|
3798
3800
|
const t = e?.parser;
|
|
3799
|
-
t && (t.cache && typeof t.cache.removeAll == "function" && t.cache.removeAll(), t.associations && typeof t.associations.clear == "function" && t.associations.clear(), t.primitiveCache = {}, t.nodeCache = {}, t.meshCache = { refs: {}, uses: {} }, t.cameraCache = { refs: {}, uses: {} }, t.lightCache = { refs: {}, uses: {} }, t.sourceCache = {}, t.textureCache = {}, t.nodeNamesUsed = {}, t.json = null, t.extensions = null, t.plugins = null, t.options = null, t.textureLoader = null, e.parser = null,
|
|
3801
|
+
t && (t.cache && typeof t.cache.removeAll == "function" && t.cache.removeAll(), t.associations && typeof t.associations.clear == "function" && t.associations.clear(), t.primitiveCache = {}, t.nodeCache = {}, t.meshCache = { refs: {}, uses: {} }, t.cameraCache = { refs: {}, uses: {} }, t.lightCache = { refs: {}, uses: {} }, t.sourceCache = {}, t.textureCache = {}, t.nodeNamesUsed = {}, t.json = null, t.extensions = null, t.plugins = null, t.options = null, t.textureLoader = null, e.parser = null, ln());
|
|
3800
3802
|
}
|
|
3801
3803
|
dispose() {
|
|
3802
3804
|
this.dracoLoader && this.dracoLoader.dispose(), this.cache.forEach((e) => {
|
|
@@ -3810,12 +3812,12 @@ class V {
|
|
|
3810
3812
|
return !!(/iPhone|iPad|iPod/.test(t) || t === "MacIntel" && navigator.maxTouchPoints > 1 || /AppleWebKit/.test(e) && /Mobile/.test(e) && !/Chrome|CriOS|FxiOS/.test(e));
|
|
3811
3813
|
}
|
|
3812
3814
|
static getPlatformKey() {
|
|
3813
|
-
return
|
|
3815
|
+
return O.isIOSWebKit() ? "ios" : "default";
|
|
3814
3816
|
}
|
|
3815
3817
|
}
|
|
3816
|
-
|
|
3817
|
-
|
|
3818
|
-
class
|
|
3818
|
+
O.sharedKTX2Loaders = /* @__PURE__ */ new Map();
|
|
3819
|
+
O.sharedKTX2SetupComplete = /* @__PURE__ */ new Map();
|
|
3820
|
+
class Be {
|
|
3819
3821
|
/**
|
|
3820
3822
|
* Constructs a new VR button.
|
|
3821
3823
|
*
|
|
@@ -3869,7 +3871,7 @@ class Ee {
|
|
|
3869
3871
|
}
|
|
3870
3872
|
if ("xr" in navigator)
|
|
3871
3873
|
return i.id = "VRButton", i.style.display = "none", A(i), navigator.xr.isSessionSupported("immersive-vr").then(function(a) {
|
|
3872
|
-
a ? s() : n(), a &&
|
|
3874
|
+
a ? s() : n(), a && Be.xrSessionIsGranted && i.click();
|
|
3873
3875
|
}).catch(r), i;
|
|
3874
3876
|
{
|
|
3875
3877
|
const a = document.createElement("a");
|
|
@@ -3885,14 +3887,14 @@ class Ee {
|
|
|
3885
3887
|
if (typeof navigator < "u" && "xr" in navigator) {
|
|
3886
3888
|
if (/WebXRViewer\//i.test(navigator.userAgent)) return;
|
|
3887
3889
|
navigator.xr.addEventListener("sessiongranted", () => {
|
|
3888
|
-
|
|
3890
|
+
Be.xrSessionIsGranted = !0;
|
|
3889
3891
|
});
|
|
3890
3892
|
}
|
|
3891
3893
|
}
|
|
3892
3894
|
}
|
|
3893
|
-
|
|
3894
|
-
|
|
3895
|
-
class
|
|
3895
|
+
Be.xrSessionIsGranted = !1;
|
|
3896
|
+
Be.registerSessionGrantedListener();
|
|
3897
|
+
class cn {
|
|
3896
3898
|
constructor(e, t, i, s = null) {
|
|
3897
3899
|
this.renderer = e, this.camera = t, this.scene = i, this.container = s || document.body, this.isVRSupported = !1, this.isVRPresenting = !1, this.isQuest2 = !1, this.isQuest3 = !1, this.vrButton = null, this.onSessionStart = null, this.onSessionEnd = null;
|
|
3898
3900
|
}
|
|
@@ -3924,14 +3926,9 @@ class nn {
|
|
|
3924
3926
|
try {
|
|
3925
3927
|
this.waitForVRCSS().then(() => {
|
|
3926
3928
|
const e = {
|
|
3927
|
-
optionalFeatures:
|
|
3928
|
-
"hand-tracking",
|
|
3929
|
-
"local-floor",
|
|
3930
|
-
"bounded-floor",
|
|
3931
|
-
"layers"
|
|
3932
|
-
]
|
|
3929
|
+
optionalFeatures: this.getOptionalFeatures()
|
|
3933
3930
|
};
|
|
3934
|
-
this.vrButton =
|
|
3931
|
+
this.vrButton = Be.createButton(this.renderer, e), this.vrButton.innerHTML = '<span class="vr-icon">🥽</span>ENTER VR', this.vrButton.className = "vr-button--glass vr-button-available", this.vrButton.disabled = !1, this.vrButton.style.cssText = `
|
|
3935
3932
|
position: fixed !important;
|
|
3936
3933
|
bottom: 80px !important;
|
|
3937
3934
|
left: 50% !important;
|
|
@@ -3948,6 +3945,38 @@ class nn {
|
|
|
3948
3945
|
console.error("❌ VR button creation failed:", e);
|
|
3949
3946
|
}
|
|
3950
3947
|
}
|
|
3948
|
+
getOptionalFeatures() {
|
|
3949
|
+
const e = ["hand-tracking", "local-floor"];
|
|
3950
|
+
try {
|
|
3951
|
+
this.supportsBoundedFloor() && e.push("bounded-floor");
|
|
3952
|
+
} catch (t) {
|
|
3953
|
+
console.warn("VR optional feature detection failed:", t);
|
|
3954
|
+
}
|
|
3955
|
+
return e;
|
|
3956
|
+
}
|
|
3957
|
+
supportsBoundedFloor() {
|
|
3958
|
+
if (typeof navigator > "u" || this.isPolyfilledXR())
|
|
3959
|
+
return !1;
|
|
3960
|
+
const e = navigator.xr;
|
|
3961
|
+
return e ? Array.isArray(e.supportedReferenceSpaceTypes) ? e.supportedReferenceSpaceTypes.includes("bounded-floor") : typeof window < "u" && typeof window.XRBoundedReferenceSpace < "u" : !1;
|
|
3962
|
+
}
|
|
3963
|
+
isPolyfilledXR() {
|
|
3964
|
+
if (typeof window < "u" && typeof window.WebXRPolyfill < "u")
|
|
3965
|
+
return !0;
|
|
3966
|
+
if (typeof navigator > "u" || !navigator.xr)
|
|
3967
|
+
return !1;
|
|
3968
|
+
const e = navigator.xr, t = e.constructor && e.constructor.name;
|
|
3969
|
+
if (t && t.toLowerCase().includes("polyfill"))
|
|
3970
|
+
return !0;
|
|
3971
|
+
try {
|
|
3972
|
+
const i = e.requestSession && e.requestSession.toString();
|
|
3973
|
+
if (typeof i == "string" && !i.includes("[native code]"))
|
|
3974
|
+
return !0;
|
|
3975
|
+
} catch {
|
|
3976
|
+
return !0;
|
|
3977
|
+
}
|
|
3978
|
+
return !1;
|
|
3979
|
+
}
|
|
3951
3980
|
styleVRButton() {
|
|
3952
3981
|
const e = () => {
|
|
3953
3982
|
const t = document.querySelector("button.vr-button--glass") || document.querySelector("button") || this.vrButton;
|
|
@@ -4024,7 +4053,7 @@ class nn {
|
|
|
4024
4053
|
this.vrButton && this.vrButton.parentNode && this.vrButton.parentNode.removeChild(this.vrButton), this.isQuest2 = !1, this.isQuest3 = !1, this.isVRSupported = !1, this.isVRPresenting = !1;
|
|
4025
4054
|
}
|
|
4026
4055
|
}
|
|
4027
|
-
const
|
|
4056
|
+
const T = {
|
|
4028
4057
|
ComponentState: Object.freeze({
|
|
4029
4058
|
DEFAULT: "default",
|
|
4030
4059
|
TOUCHED: "touched",
|
|
@@ -4050,23 +4079,23 @@ const L = {
|
|
|
4050
4079
|
VISIBILITY: "visibility"
|
|
4051
4080
|
})
|
|
4052
4081
|
};
|
|
4053
|
-
async function
|
|
4082
|
+
async function Ni(c) {
|
|
4054
4083
|
const e = await fetch(c);
|
|
4055
4084
|
if (e.ok)
|
|
4056
4085
|
return e.json();
|
|
4057
4086
|
throw new Error(e.statusText);
|
|
4058
4087
|
}
|
|
4059
|
-
async function
|
|
4088
|
+
async function hn(c) {
|
|
4060
4089
|
if (!c)
|
|
4061
4090
|
throw new Error("No basePath supplied");
|
|
4062
|
-
return await
|
|
4091
|
+
return await Ni(`${c}/profilesList.json`);
|
|
4063
4092
|
}
|
|
4064
|
-
async function
|
|
4093
|
+
async function dn(c, e, t = null, i = !0) {
|
|
4065
4094
|
if (!c)
|
|
4066
4095
|
throw new Error("No xrInputSource supplied");
|
|
4067
4096
|
if (!e)
|
|
4068
4097
|
throw new Error("No basePath supplied");
|
|
4069
|
-
const s = await
|
|
4098
|
+
const s = await hn(e);
|
|
4070
4099
|
let o;
|
|
4071
4100
|
if (c.profiles.some((A) => {
|
|
4072
4101
|
const a = s[A];
|
|
@@ -4087,7 +4116,7 @@ async function an(c, e, t = null, i = !0) {
|
|
|
4087
4116
|
deprecated: !!A.deprecated
|
|
4088
4117
|
};
|
|
4089
4118
|
}
|
|
4090
|
-
const n = await
|
|
4119
|
+
const n = await Ni(o.profilePath);
|
|
4091
4120
|
let r;
|
|
4092
4121
|
if (i) {
|
|
4093
4122
|
let A;
|
|
@@ -4099,13 +4128,13 @@ async function an(c, e, t = null, i = !0) {
|
|
|
4099
4128
|
}
|
|
4100
4129
|
return { profile: n, assetPath: r };
|
|
4101
4130
|
}
|
|
4102
|
-
const
|
|
4131
|
+
const gn = {
|
|
4103
4132
|
xAxis: 0,
|
|
4104
4133
|
yAxis: 0,
|
|
4105
4134
|
button: 0,
|
|
4106
|
-
state:
|
|
4135
|
+
state: T.ComponentState.DEFAULT
|
|
4107
4136
|
};
|
|
4108
|
-
function
|
|
4137
|
+
function un(c = 0, e = 0) {
|
|
4109
4138
|
let t = c, i = e;
|
|
4110
4139
|
if (Math.sqrt(c * c + e * e) > 1) {
|
|
4111
4140
|
const n = Math.atan2(e, c);
|
|
@@ -4116,9 +4145,9 @@ function ln(c = 0, e = 0) {
|
|
|
4116
4145
|
normalizedYAxis: i * 0.5 + 0.5
|
|
4117
4146
|
};
|
|
4118
4147
|
}
|
|
4119
|
-
class
|
|
4148
|
+
class pn {
|
|
4120
4149
|
constructor(e) {
|
|
4121
|
-
this.componentProperty = e.componentProperty, this.states = e.states, this.valueNodeName = e.valueNodeName, this.valueNodeProperty = e.valueNodeProperty, this.valueNodeProperty ===
|
|
4150
|
+
this.componentProperty = e.componentProperty, this.states = e.states, this.valueNodeName = e.valueNodeName, this.valueNodeProperty = e.valueNodeProperty, this.valueNodeProperty === T.VisualResponseProperty.TRANSFORM && (this.minNodeName = e.minNodeName, this.maxNodeName = e.maxNodeName), this.value = 0, this.updateFromComponent(gn);
|
|
4122
4151
|
}
|
|
4123
4152
|
/**
|
|
4124
4153
|
* Computes the visual response's interpolation weight based on component state
|
|
@@ -4134,26 +4163,26 @@ class cn {
|
|
|
4134
4163
|
button: i,
|
|
4135
4164
|
state: s
|
|
4136
4165
|
}) {
|
|
4137
|
-
const { normalizedXAxis: o, normalizedYAxis: n } =
|
|
4166
|
+
const { normalizedXAxis: o, normalizedYAxis: n } = un(e, t);
|
|
4138
4167
|
switch (this.componentProperty) {
|
|
4139
|
-
case
|
|
4168
|
+
case T.ComponentProperty.X_AXIS:
|
|
4140
4169
|
this.value = this.states.includes(s) ? o : 0.5;
|
|
4141
4170
|
break;
|
|
4142
|
-
case
|
|
4171
|
+
case T.ComponentProperty.Y_AXIS:
|
|
4143
4172
|
this.value = this.states.includes(s) ? n : 0.5;
|
|
4144
4173
|
break;
|
|
4145
|
-
case
|
|
4174
|
+
case T.ComponentProperty.BUTTON:
|
|
4146
4175
|
this.value = this.states.includes(s) ? i : 0;
|
|
4147
4176
|
break;
|
|
4148
|
-
case
|
|
4149
|
-
this.valueNodeProperty ===
|
|
4177
|
+
case T.ComponentProperty.STATE:
|
|
4178
|
+
this.valueNodeProperty === T.VisualResponseProperty.VISIBILITY ? this.value = this.states.includes(s) : this.value = this.states.includes(s) ? 1 : 0;
|
|
4150
4179
|
break;
|
|
4151
4180
|
default:
|
|
4152
4181
|
throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`);
|
|
4153
4182
|
}
|
|
4154
4183
|
}
|
|
4155
4184
|
}
|
|
4156
|
-
class
|
|
4185
|
+
class fn {
|
|
4157
4186
|
/**
|
|
4158
4187
|
* @param {Object} componentId - Id of the component
|
|
4159
4188
|
* @param {Object} componentDescription - Description of the component to be created
|
|
@@ -4162,10 +4191,10 @@ class hn {
|
|
|
4162
4191
|
if (!e || !t || !t.visualResponses || !t.gamepadIndices || Object.keys(t.gamepadIndices).length === 0)
|
|
4163
4192
|
throw new Error("Invalid arguments supplied");
|
|
4164
4193
|
this.id = e, this.type = t.type, this.rootNodeName = t.rootNodeName, this.touchPointNodeName = t.touchPointNodeName, this.visualResponses = {}, Object.keys(t.visualResponses).forEach((i) => {
|
|
4165
|
-
const s = new
|
|
4194
|
+
const s = new pn(t.visualResponses[i]);
|
|
4166
4195
|
this.visualResponses[i] = s;
|
|
4167
4196
|
}), this.gamepadIndices = Object.assign({}, t.gamepadIndices), this.values = {
|
|
4168
|
-
state:
|
|
4197
|
+
state: T.ComponentState.DEFAULT,
|
|
4169
4198
|
button: this.gamepadIndices.button !== void 0 ? 0 : void 0,
|
|
4170
4199
|
xAxis: this.gamepadIndices.xAxis !== void 0 ? 0 : void 0,
|
|
4171
4200
|
yAxis: this.gamepadIndices.yAxis !== void 0 ? 0 : void 0
|
|
@@ -4179,16 +4208,16 @@ class hn {
|
|
|
4179
4208
|
* @param {Object} gamepad - The gamepad object from which the component data should be polled
|
|
4180
4209
|
*/
|
|
4181
4210
|
updateFromGamepad(e) {
|
|
4182
|
-
if (this.values.state =
|
|
4211
|
+
if (this.values.state = T.ComponentState.DEFAULT, this.gamepadIndices.button !== void 0 && e.buttons.length > this.gamepadIndices.button) {
|
|
4183
4212
|
const t = e.buttons[this.gamepadIndices.button];
|
|
4184
|
-
this.values.button = t.value, this.values.button = this.values.button < 0 ? 0 : this.values.button, this.values.button = this.values.button > 1 ? 1 : this.values.button, t.pressed || this.values.button === 1 ? this.values.state =
|
|
4213
|
+
this.values.button = t.value, this.values.button = this.values.button < 0 ? 0 : this.values.button, this.values.button = this.values.button > 1 ? 1 : this.values.button, t.pressed || this.values.button === 1 ? this.values.state = T.ComponentState.PRESSED : (t.touched || this.values.button > T.ButtonTouchThreshold) && (this.values.state = T.ComponentState.TOUCHED);
|
|
4185
4214
|
}
|
|
4186
|
-
this.gamepadIndices.xAxis !== void 0 && e.axes.length > this.gamepadIndices.xAxis && (this.values.xAxis = e.axes[this.gamepadIndices.xAxis], this.values.xAxis = this.values.xAxis < -1 ? -1 : this.values.xAxis, this.values.xAxis = this.values.xAxis > 1 ? 1 : this.values.xAxis, this.values.state ===
|
|
4215
|
+
this.gamepadIndices.xAxis !== void 0 && e.axes.length > this.gamepadIndices.xAxis && (this.values.xAxis = e.axes[this.gamepadIndices.xAxis], this.values.xAxis = this.values.xAxis < -1 ? -1 : this.values.xAxis, this.values.xAxis = this.values.xAxis > 1 ? 1 : this.values.xAxis, this.values.state === T.ComponentState.DEFAULT && Math.abs(this.values.xAxis) > T.AxisTouchThreshold && (this.values.state = T.ComponentState.TOUCHED)), this.gamepadIndices.yAxis !== void 0 && e.axes.length > this.gamepadIndices.yAxis && (this.values.yAxis = e.axes[this.gamepadIndices.yAxis], this.values.yAxis = this.values.yAxis < -1 ? -1 : this.values.yAxis, this.values.yAxis = this.values.yAxis > 1 ? 1 : this.values.yAxis, this.values.state === T.ComponentState.DEFAULT && Math.abs(this.values.yAxis) > T.AxisTouchThreshold && (this.values.state = T.ComponentState.TOUCHED)), Object.values(this.visualResponses).forEach((t) => {
|
|
4187
4216
|
t.updateFromComponent(this.values);
|
|
4188
4217
|
});
|
|
4189
4218
|
}
|
|
4190
4219
|
}
|
|
4191
|
-
class
|
|
4220
|
+
class mn {
|
|
4192
4221
|
/**
|
|
4193
4222
|
* @param {Object} xrInputSource - The XRInputSource to build the MotionController around
|
|
4194
4223
|
* @param {Object} profile - The best matched profile description for the supplied xrInputSource
|
|
@@ -4201,7 +4230,7 @@ class dn {
|
|
|
4201
4230
|
throw new Error("No profile supplied");
|
|
4202
4231
|
this.xrInputSource = e, this.assetUrl = i, this.id = t.profileId, this.layoutDescription = t.layouts[e.handedness], this.components = {}, Object.keys(this.layoutDescription.components).forEach((s) => {
|
|
4203
4232
|
const o = this.layoutDescription.components[s];
|
|
4204
|
-
this.components[s] = new
|
|
4233
|
+
this.components[s] = new fn(s, o);
|
|
4205
4234
|
}), this.updateFromGamepad();
|
|
4206
4235
|
}
|
|
4207
4236
|
get gripSpace() {
|
|
@@ -4228,8 +4257,8 @@ class dn {
|
|
|
4228
4257
|
});
|
|
4229
4258
|
}
|
|
4230
4259
|
}
|
|
4231
|
-
const
|
|
4232
|
-
class
|
|
4260
|
+
const bn = "https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles", Cn = "generic-trigger";
|
|
4261
|
+
class En extends Oe {
|
|
4233
4262
|
/**
|
|
4234
4263
|
* Constructs a new XR controller model.
|
|
4235
4264
|
*/
|
|
@@ -4258,7 +4287,7 @@ class pn extends Bt {
|
|
|
4258
4287
|
super.updateMatrixWorld(e), this.motionController && (this.motionController.updateFromGamepad(), Object.values(this.motionController.components).forEach((t) => {
|
|
4259
4288
|
Object.values(t.visualResponses).forEach((i) => {
|
|
4260
4289
|
const { valueNode: s, minNode: o, maxNode: n, value: r, valueNodeProperty: A } = i;
|
|
4261
|
-
s && (A ===
|
|
4290
|
+
s && (A === T.VisualResponseProperty.VISIBILITY ? s.visible = r : A === T.VisualResponseProperty.TRANSFORM && (s.quaternion.slerpQuaternions(
|
|
4262
4291
|
o.quaternion,
|
|
4263
4292
|
n.quaternion,
|
|
4264
4293
|
r
|
|
@@ -4271,18 +4300,18 @@ class pn extends Bt {
|
|
|
4271
4300
|
}));
|
|
4272
4301
|
}
|
|
4273
4302
|
}
|
|
4274
|
-
function
|
|
4303
|
+
function In(c, e) {
|
|
4275
4304
|
Object.values(c.components).forEach((t) => {
|
|
4276
4305
|
const { type: i, touchPointNodeName: s, visualResponses: o } = t;
|
|
4277
|
-
if (i ===
|
|
4306
|
+
if (i === T.ComponentType.TOUCHPAD)
|
|
4278
4307
|
if (t.touchPointNode = e.getObjectByName(s), t.touchPointNode) {
|
|
4279
|
-
const n = new
|
|
4308
|
+
const n = new mi(1e-3), r = new fe({ color: 255 }), A = new Qt(n, r);
|
|
4280
4309
|
t.touchPointNode.add(A);
|
|
4281
4310
|
} else
|
|
4282
4311
|
console.warn(`Could not find touch dot, ${t.touchPointNodeName}, in touchpad component ${t.id}`);
|
|
4283
4312
|
Object.values(o).forEach((n) => {
|
|
4284
4313
|
const { valueNodeName: r, minNodeName: A, maxNodeName: a, valueNodeProperty: l } = n;
|
|
4285
|
-
if (l ===
|
|
4314
|
+
if (l === T.VisualResponseProperty.TRANSFORM) {
|
|
4286
4315
|
if (n.minNode = e.getObjectByName(A), n.maxNode = e.getObjectByName(a), !n.minNode) {
|
|
4287
4316
|
console.warn(`Could not find ${A} in the model`);
|
|
4288
4317
|
return;
|
|
@@ -4296,12 +4325,12 @@ function fn(c, e) {
|
|
|
4296
4325
|
});
|
|
4297
4326
|
});
|
|
4298
4327
|
}
|
|
4299
|
-
function
|
|
4300
|
-
|
|
4328
|
+
function Zt(c, e) {
|
|
4329
|
+
In(c.motionController, e), c.envMap && e.traverse((t) => {
|
|
4301
4330
|
t.isMesh && (t.material.envMap = c.envMap, t.material.needsUpdate = !0);
|
|
4302
4331
|
}), c.add(e);
|
|
4303
4332
|
}
|
|
4304
|
-
class
|
|
4333
|
+
class Bn {
|
|
4305
4334
|
/**
|
|
4306
4335
|
* Constructs a new XR controller model factory.
|
|
4307
4336
|
*
|
|
@@ -4309,7 +4338,7 @@ class mn {
|
|
|
4309
4338
|
* @param {?Function} [onLoad=null] - A callback that is executed when a controller model has been loaded.
|
|
4310
4339
|
*/
|
|
4311
4340
|
constructor(e = null, t = null) {
|
|
4312
|
-
this.gltfLoader = e, this.path =
|
|
4341
|
+
this.gltfLoader = e, this.path = bn, this._assetCache = {}, this.onLoad = t, this.gltfLoader || (this.gltfLoader = new xt());
|
|
4313
4342
|
}
|
|
4314
4343
|
/**
|
|
4315
4344
|
* Sets the path to the model repository.
|
|
@@ -4327,26 +4356,26 @@ class mn {
|
|
|
4327
4356
|
* @return {XRControllerModel} The XR controller model.
|
|
4328
4357
|
*/
|
|
4329
4358
|
createControllerModel(e) {
|
|
4330
|
-
const t = new
|
|
4359
|
+
const t = new En();
|
|
4331
4360
|
let i = null;
|
|
4332
4361
|
return e.addEventListener("connected", (s) => {
|
|
4333
4362
|
const o = s.data;
|
|
4334
|
-
o.targetRayMode !== "tracked-pointer" || !o.gamepad || o.hand ||
|
|
4335
|
-
t.motionController = new
|
|
4363
|
+
o.targetRayMode !== "tracked-pointer" || !o.gamepad || o.hand || dn(o, this.path, Cn).then(({ profile: n, assetPath: r }) => {
|
|
4364
|
+
t.motionController = new mn(
|
|
4336
4365
|
o,
|
|
4337
4366
|
n,
|
|
4338
4367
|
r
|
|
4339
4368
|
);
|
|
4340
4369
|
const A = this._assetCache[t.motionController.assetUrl];
|
|
4341
4370
|
if (A)
|
|
4342
|
-
i = A.scene.clone(),
|
|
4371
|
+
i = A.scene.clone(), Zt(t, i), this.onLoad && this.onLoad(i);
|
|
4343
4372
|
else {
|
|
4344
4373
|
if (!this.gltfLoader)
|
|
4345
4374
|
throw new Error("GLTFLoader not set.");
|
|
4346
4375
|
this.gltfLoader.setPath(""), this.gltfLoader.load(
|
|
4347
4376
|
t.motionController.assetUrl,
|
|
4348
4377
|
(a) => {
|
|
4349
|
-
this._assetCache[t.motionController.assetUrl] = a, i = a.scene.clone(),
|
|
4378
|
+
this._assetCache[t.motionController.assetUrl] = a, i = a.scene.clone(), Zt(t, i), this.onLoad && this.onLoad(i);
|
|
4350
4379
|
},
|
|
4351
4380
|
null,
|
|
4352
4381
|
() => {
|
|
@@ -4362,7 +4391,7 @@ class mn {
|
|
|
4362
4391
|
}), t;
|
|
4363
4392
|
}
|
|
4364
4393
|
}
|
|
4365
|
-
class
|
|
4394
|
+
class yn {
|
|
4366
4395
|
constructor(e, t) {
|
|
4367
4396
|
this.renderer = e, this.camera = t, this.controller1 = null, this.controller2 = null, this.controllerGrip1 = null, this.controllerGrip2 = null, this.controllers = [], this.controllerGrips = [], this.buttonStates = /* @__PURE__ */ new Map(), this.inputDeadzone = 0.15, this.turnSmoothingFactor = 0.1, this.lastTurnInput = 0, this.onSelectStart = null, this.onSelectEnd = null, this.onSqueezeStart = null, this.onSqueezeEnd = null, this.onModeToggle = null, this.onMovementStart = null, this.onMovementStop = null, this.handsActive = !1, this.handStates = {
|
|
4368
4397
|
left: { pinch: !1, fist: !1, direction: new u.Vector3() },
|
|
@@ -4420,7 +4449,7 @@ class bn {
|
|
|
4420
4449
|
}
|
|
4421
4450
|
}
|
|
4422
4451
|
initControllers() {
|
|
4423
|
-
const e = new
|
|
4452
|
+
const e = new Bn();
|
|
4424
4453
|
for (let t = 0; t < 2; t++) {
|
|
4425
4454
|
const i = this.renderer.xr.getController(t), s = this.renderer.xr.getControllerGrip(t);
|
|
4426
4455
|
s.add(e.createControllerModel(s)), this.camera.parent.add(i), this.camera.parent.add(s), this.controllers.push(i), this.controllerGrips.push(s);
|
|
@@ -4517,7 +4546,7 @@ class bn {
|
|
|
4517
4546
|
}), this.controller1 = null, this.controller2 = null, this.controllerGrip1 = null, this.controllerGrip2 = null, this.controllers = [], this.controllerGrips = [], this.buttonStates.clear();
|
|
4518
4547
|
}
|
|
4519
4548
|
}
|
|
4520
|
-
class
|
|
4549
|
+
class wn {
|
|
4521
4550
|
constructor(e, t) {
|
|
4522
4551
|
this.scene = e, this.camera = t, this.teleportController = null, this.teleportMarker = null, this.teleportCurve = null, this.teleportFloor = null, this.validTeleportPosition = null, this.teleportThreshold = 0.7, this.teleportReleaseThreshold = 0.3, this.teleportPressed = !1, this.teleportMaxMagnitude = 0, this.teleportFloorHeight = null, this.teleportFloorMin = -10, this.teleportFloorMax = 10, this.lastSnapTurnTime = 0, this.onTeleport = null, this.onTeleportStart = null, this.onTeleportEnd = null;
|
|
4523
4552
|
}
|
|
@@ -4623,44 +4652,44 @@ class Cn {
|
|
|
4623
4652
|
const s = 3, o = 30, n = Math.min(this.teleportMaxMagnitude / this.teleportThreshold, 1), r = o - s, A = Math.pow(n, 0.7), a = s + r * A, l = [], h = 40, d = -9.8;
|
|
4624
4653
|
let g = Math.sqrt(a * Math.abs(d) / 2);
|
|
4625
4654
|
if (i.y > 0.3 ? g *= 1 - i.y * 0.5 : i.y < -0.5 && (g *= 1 + Math.abs(i.y) * 0.3), Math.sqrt(i.x * i.x + i.z * i.z) > 0.1) {
|
|
4626
|
-
const
|
|
4627
|
-
g *=
|
|
4628
|
-
}
|
|
4629
|
-
const C = i.x * g,
|
|
4630
|
-
let B = null,
|
|
4631
|
-
const
|
|
4632
|
-
for (let
|
|
4633
|
-
const v =
|
|
4655
|
+
const Q = Math.min(1, a / (g * 2));
|
|
4656
|
+
g *= Q;
|
|
4657
|
+
}
|
|
4658
|
+
const C = i.x * g, E = Math.max(i.y * g, g * 0.3), f = i.z * g, m = E / Math.abs(d), I = Math.max(m * 2.2, 1.5), b = this.teleportFloorHeight;
|
|
4659
|
+
let B = null, y = !1, w = e.y, L = 0;
|
|
4660
|
+
const D = 8;
|
|
4661
|
+
for (let Q = 0; Q <= h; Q++) {
|
|
4662
|
+
const v = Q / h * I, M = new u.Vector3(
|
|
4634
4663
|
e.x + C * v,
|
|
4635
|
-
e.y +
|
|
4664
|
+
e.y + E * v + 0.5 * d * v * v,
|
|
4636
4665
|
e.z + f * v
|
|
4637
4666
|
);
|
|
4638
|
-
Math.abs(M.y - e.y) >
|
|
4639
|
-
const J =
|
|
4667
|
+
Math.abs(M.y - e.y) > D && (M.y = e.y + Math.sign(M.y - e.y) * D), !y && M.y < w && (y = !0, L = v), l.push(M);
|
|
4668
|
+
const J = y ? v - L : 0, W = y && J > 0.1;
|
|
4640
4669
|
if (!B && W && M.y <= b) {
|
|
4641
|
-
if (
|
|
4642
|
-
const q = l[
|
|
4670
|
+
if (Q > 0) {
|
|
4671
|
+
const q = l[Q - 1], F = (b - q.y) / (M.y - q.y);
|
|
4643
4672
|
B = new u.Vector3().lerpVectors(q, M, F), B.y = b;
|
|
4644
4673
|
} else
|
|
4645
4674
|
B = M.clone(), B.y = b;
|
|
4646
|
-
l[
|
|
4675
|
+
l[Q] = B, l.length = Q + 1;
|
|
4647
4676
|
break;
|
|
4648
4677
|
}
|
|
4649
4678
|
if (w = M.y, Math.sqrt(
|
|
4650
4679
|
Math.pow(M.x - e.x, 2) + Math.pow(M.z - e.z, 2)
|
|
4651
4680
|
) > o) {
|
|
4652
|
-
W && (B = new u.Vector3(M.x, b, M.z), l[
|
|
4681
|
+
W && (B = new u.Vector3(M.x, b, M.z), l[Q] = B, l.length = Q + 1);
|
|
4653
4682
|
break;
|
|
4654
4683
|
}
|
|
4655
4684
|
}
|
|
4656
4685
|
if (!B && l.length > 0) {
|
|
4657
|
-
let
|
|
4686
|
+
let Q = l[0], v = 0;
|
|
4658
4687
|
for (let M = 1; M < l.length; M++)
|
|
4659
|
-
l[M].y <
|
|
4660
|
-
v > l.length / 3 && (B = new u.Vector3(
|
|
4688
|
+
l[M].y < Q.y && (Q = l[M], v = M);
|
|
4689
|
+
v > l.length / 3 && (B = new u.Vector3(Q.x, b, Q.z), l.length = v + 1, l[v] = B);
|
|
4661
4690
|
}
|
|
4662
4691
|
if (l.length > 1) {
|
|
4663
|
-
const
|
|
4692
|
+
const Q = new u.CatmullRomCurve3(l), v = new u.TubeGeometry(Q, 20, 0.03, 6, !1);
|
|
4664
4693
|
this.teleportCurve.geometry && this.teleportCurve.geometry.dispose(), this.teleportCurve.geometry = v;
|
|
4665
4694
|
}
|
|
4666
4695
|
this.teleportMarker && B && (this.teleportMarker.position.copy(B), this.teleportMarker.visible = !0, this.teleportFloorHeight < -0.5 ? this.teleportMarker.material.color.setHex(8965375) : this.teleportFloorHeight > 0.5 ? this.teleportMarker.material.color.setHex(16777096) : this.teleportMarker.material.color.setHex(16777215));
|
|
@@ -4704,7 +4733,7 @@ class Cn {
|
|
|
4704
4733
|
this.lastSnapTurnTime = 0;
|
|
4705
4734
|
}
|
|
4706
4735
|
}
|
|
4707
|
-
class
|
|
4736
|
+
class Qn {
|
|
4708
4737
|
constructor(e, t) {
|
|
4709
4738
|
this.camera = e, this.renderer = t, this.MOVE_SPEED = 2, this.TURN_SPEED = 1.5, this.FLY_SPEED = 1, this.currentSpeed = 0, this.targetSpeed = 0, this.currentBoostLevel = 0, this.targetBoostLevel = 0, this.SPEED_RAMP_RATE = 3, this.BOOST_RAMP_RATE = 6, this.handMoveActive = !1, this.handMoveBoost = !1, this.handMoveDirection = new u.Vector3(), this.isMoving = !1, this.inputDeadzone = 0.15, this.turnSmoothingFactor = 0.1, this.lastTurnInput = 0, this.comfortSettings = {
|
|
4710
4739
|
locomotionMode: "smooth",
|
|
@@ -4769,28 +4798,28 @@ class In {
|
|
|
4769
4798
|
continue;
|
|
4770
4799
|
const g = d.gamepad, C = d.handedness === "left" ? t.controller1 : t.controller2;
|
|
4771
4800
|
if (!C) continue;
|
|
4772
|
-
const
|
|
4801
|
+
const E = g.axes[2] || 0, f = g.axes[3] || 0;
|
|
4773
4802
|
if (d.handedness === "left") {
|
|
4774
|
-
const m = g.buttons[1],
|
|
4803
|
+
const m = g.buttons[1], I = m && m.pressed ? 3 : 1, b = this.comfortSettings.reducedMotion ? this.comfortSettings.comfortSpeed : 1;
|
|
4775
4804
|
if (m && m.pressed && (o = !0), this.comfortSettings.locomotionMode === "teleport" && this.teleportSystem) {
|
|
4776
|
-
this.teleportSystem.processTeleportation(C,
|
|
4805
|
+
this.teleportSystem.processTeleportation(C, E, f);
|
|
4777
4806
|
continue;
|
|
4778
4807
|
} else {
|
|
4779
4808
|
const B = new u.Vector3();
|
|
4780
4809
|
this.camera.getWorldDirection(B), B.y = 0, B.normalize();
|
|
4781
|
-
const
|
|
4810
|
+
const y = new u.Vector3().crossVectors(B, this.camera.up).normalize();
|
|
4782
4811
|
if (Math.abs(f) > 0.1) {
|
|
4783
|
-
const w = this.MOVE_SPEED *
|
|
4812
|
+
const w = this.MOVE_SPEED * I * b * this.currentSpeed * e;
|
|
4784
4813
|
this.camera.parent.position.addScaledVector(B, -f * w), s = !0;
|
|
4785
4814
|
}
|
|
4786
|
-
if (Math.abs(
|
|
4787
|
-
const w = this.MOVE_SPEED *
|
|
4788
|
-
this.camera.parent.position.addScaledVector(
|
|
4815
|
+
if (Math.abs(E) > 0.1) {
|
|
4816
|
+
const w = this.MOVE_SPEED * I * b * this.currentSpeed * e;
|
|
4817
|
+
this.camera.parent.position.addScaledVector(y, E * w), s = !0;
|
|
4789
4818
|
}
|
|
4790
4819
|
}
|
|
4791
4820
|
}
|
|
4792
4821
|
if (d.handedness === "right") {
|
|
4793
|
-
const m = g.buttons[1],
|
|
4822
|
+
const m = g.buttons[1], I = m && m.pressed ? 3 : 1, b = this.comfortSettings.reducedMotion ? this.comfortSettings.comfortSpeed : 1;
|
|
4794
4823
|
if (m && m.pressed && Math.abs(f) > 0.1 && (o = !0), this.teleportSystem && this.teleportSystem.teleportPressed && this.teleportSystem.teleportCurve && this.teleportSystem.teleportCurve.visible) {
|
|
4795
4824
|
if (Math.abs(f) > 0.1) {
|
|
4796
4825
|
const B = 4 * e;
|
|
@@ -4798,17 +4827,17 @@ class In {
|
|
|
4798
4827
|
}
|
|
4799
4828
|
} else {
|
|
4800
4829
|
if (this.comfortSettings.turningMode === "snap" && this.teleportSystem)
|
|
4801
|
-
this.teleportSystem.processSnapTurn(
|
|
4802
|
-
else if (Math.abs(
|
|
4803
|
-
const B = this.lastTurnInput * this.turnSmoothingFactor +
|
|
4830
|
+
this.teleportSystem.processSnapTurn(E, this.comfortSettings.snapTurnAngle);
|
|
4831
|
+
else if (Math.abs(E) > this.inputDeadzone) {
|
|
4832
|
+
const B = this.lastTurnInput * this.turnSmoothingFactor + E * (1 - this.turnSmoothingFactor);
|
|
4804
4833
|
if (this.lastTurnInput = B, Math.abs(B) > this.inputDeadzone) {
|
|
4805
|
-
const
|
|
4834
|
+
const y = this.comfortSettings.reducedMotion ? this.TURN_SPEED * 0.5 : this.TURN_SPEED, w = B * y * Math.min(e, 1 / 30);
|
|
4806
4835
|
this.camera.parent.rotation.y -= w, this.camera.parent.rotation.y = this.normalizeAngle(this.camera.parent.rotation.y);
|
|
4807
4836
|
}
|
|
4808
4837
|
} else
|
|
4809
4838
|
this.lastTurnInput *= 0.9;
|
|
4810
4839
|
if (Math.abs(f) > 0.1) {
|
|
4811
|
-
const B = this.FLY_SPEED *
|
|
4840
|
+
const B = this.FLY_SPEED * I * b * this.currentSpeed * e;
|
|
4812
4841
|
this.camera.parent.position.y -= f * B, s = !0;
|
|
4813
4842
|
}
|
|
4814
4843
|
}
|
|
@@ -4891,7 +4920,7 @@ class In {
|
|
|
4891
4920
|
};
|
|
4892
4921
|
}
|
|
4893
4922
|
}
|
|
4894
|
-
class
|
|
4923
|
+
class Sn {
|
|
4895
4924
|
constructor() {
|
|
4896
4925
|
this.soundEnabled = !1, this.audioContext = null, this._basePath = "./sound/", this.dpvSound = null, this.dpvHighSound = null, this.ambienceSound = null, this.currentMovementSound = null, this.currentBoostSound = null, this.currentAmbienceSound = null, this.baseGainNode = null, this.boostGainNode = null, this.ambienceGainNode = null, this.baseVolumeMultiplier = 1.52, this.boostVolumeMultiplier = 1.01, this.ambienceVolume = 0.1;
|
|
4897
4926
|
}
|
|
@@ -5026,7 +5055,7 @@ class En {
|
|
|
5026
5055
|
this.dpvSound = null, this.dpvHighSound = null, this.ambienceSound = null, this.currentMovementSound = null, this.currentBoostSound = null, this.currentAmbienceSound = null, this.baseGainNode = null, this.boostGainNode = null, this.ambienceGainNode = null, this.soundEnabled = !1;
|
|
5027
5056
|
}
|
|
5028
5057
|
}
|
|
5029
|
-
class
|
|
5058
|
+
class Mn {
|
|
5030
5059
|
/**
|
|
5031
5060
|
* Creates a new VRManager instance
|
|
5032
5061
|
*
|
|
@@ -5037,7 +5066,7 @@ class Bn {
|
|
|
5037
5066
|
* @param {boolean} [enableAudio=false] - Enable VR audio system
|
|
5038
5067
|
*/
|
|
5039
5068
|
constructor(e, t, i, s = "./sound/", o = !1, n = null) {
|
|
5040
|
-
this.renderer = e, this.camera = t, this.scene = i, this.audioPath = s, this.enableAudio = o, this.container = n, this.vrCore = new
|
|
5069
|
+
this.renderer = e, this.camera = t, this.scene = i, this.audioPath = s, this.enableAudio = o, this.container = n, this.vrCore = new cn(e, t, i, n), this.vrControllers = new yn(e, t), this.vrTeleport = new wn(i, t), this.vrLocomotion = new Qn(t, e), this.vrAudio = this.enableAudio ? new Sn() : null, this.isVRSupported = !1, this.isVRPresenting = !1, this.controller1 = null, this.controller2 = null, this.controllerGrip1 = null, this.controllerGrip2 = null, this.controllers = [], this.controllerGrips = [], this._preVRCameraState = {
|
|
5041
5070
|
target: null,
|
|
5042
5071
|
position: null,
|
|
5043
5072
|
zoom: null,
|
|
@@ -5261,7 +5290,583 @@ class Bn {
|
|
|
5261
5290
|
return this.vrLocomotion.normalizeAngle(e);
|
|
5262
5291
|
}
|
|
5263
5292
|
}
|
|
5264
|
-
class
|
|
5293
|
+
class xn {
|
|
5294
|
+
/**
|
|
5295
|
+
* Constructs a new AR button.
|
|
5296
|
+
*
|
|
5297
|
+
* @param {WebGLRenderer|WebGPURenderer} renderer - The renderer.
|
|
5298
|
+
* @param {XRSessionInit} [sessionInit] - The a configuration object for the AR session.
|
|
5299
|
+
* @return {HTMLElement} The button or an error message if `immersive-ar` isn't supported.
|
|
5300
|
+
*/
|
|
5301
|
+
static createButton(e, t = {}) {
|
|
5302
|
+
const i = document.createElement("button");
|
|
5303
|
+
function s() {
|
|
5304
|
+
if (t.domOverlay === void 0) {
|
|
5305
|
+
const d = document.createElement("div");
|
|
5306
|
+
d.style.display = "none", document.body.appendChild(d);
|
|
5307
|
+
const g = document.createElementNS("http://www.w3.org/2000/svg", "svg");
|
|
5308
|
+
g.setAttribute("width", 38), g.setAttribute("height", 38), g.style.position = "absolute", g.style.right = "20px", g.style.top = "20px", g.addEventListener("click", function() {
|
|
5309
|
+
a.end();
|
|
5310
|
+
}), d.appendChild(g);
|
|
5311
|
+
const p = document.createElementNS("http://www.w3.org/2000/svg", "path");
|
|
5312
|
+
p.setAttribute("d", "M 12,12 L 28,28 M 28,12 12,28"), p.setAttribute("stroke", "#fff"), p.setAttribute("stroke-width", 2), g.appendChild(p), t.optionalFeatures === void 0 && (t.optionalFeatures = []), t.optionalFeatures.push("dom-overlay"), t.domOverlay = { root: d };
|
|
5313
|
+
}
|
|
5314
|
+
let a = null;
|
|
5315
|
+
async function l(d) {
|
|
5316
|
+
d.addEventListener("end", h), e.xr.setReferenceSpaceType("local"), await e.xr.setSession(d), i.textContent = "STOP AR", t.domOverlay.root.style.display = "", a = d;
|
|
5317
|
+
}
|
|
5318
|
+
function h() {
|
|
5319
|
+
a.removeEventListener("end", h), i.textContent = "START AR", t.domOverlay.root.style.display = "none", a = null;
|
|
5320
|
+
}
|
|
5321
|
+
i.style.display = "", i.style.cursor = "pointer", i.style.left = "calc(50% - 50px)", i.style.width = "100px", i.textContent = "START AR", i.onmouseenter = function() {
|
|
5322
|
+
i.style.opacity = "1.0";
|
|
5323
|
+
}, i.onmouseleave = function() {
|
|
5324
|
+
i.style.opacity = "0.5";
|
|
5325
|
+
}, i.onclick = function() {
|
|
5326
|
+
a === null ? navigator.xr.requestSession("immersive-ar", t).then(l) : (a.end(), navigator.xr.offerSession !== void 0 && navigator.xr.offerSession("immersive-ar", t).then(l).catch((d) => {
|
|
5327
|
+
console.warn(d);
|
|
5328
|
+
}));
|
|
5329
|
+
}, navigator.xr.offerSession !== void 0 && navigator.xr.offerSession("immersive-ar", t).then(l).catch((d) => {
|
|
5330
|
+
console.warn(d);
|
|
5331
|
+
});
|
|
5332
|
+
}
|
|
5333
|
+
function o() {
|
|
5334
|
+
i.style.display = "", i.style.cursor = "auto", i.style.left = "calc(50% - 75px)", i.style.width = "150px", i.onmouseenter = null, i.onmouseleave = null, i.onclick = null;
|
|
5335
|
+
}
|
|
5336
|
+
function n() {
|
|
5337
|
+
o(), i.textContent = "AR NOT SUPPORTED";
|
|
5338
|
+
}
|
|
5339
|
+
function r(a) {
|
|
5340
|
+
o(), console.warn("Exception when trying to call xr.isSessionSupported", a), i.textContent = "AR NOT ALLOWED";
|
|
5341
|
+
}
|
|
5342
|
+
function A(a) {
|
|
5343
|
+
a.style.position = "absolute", a.style.bottom = "20px", a.style.padding = "12px 6px", a.style.border = "1px solid #fff", a.style.borderRadius = "4px", a.style.background = "rgba(0,0,0,0.1)", a.style.color = "#fff", a.style.font = "normal 13px sans-serif", a.style.textAlign = "center", a.style.opacity = "0.5", a.style.outline = "none", a.style.zIndex = "999";
|
|
5344
|
+
}
|
|
5345
|
+
if ("xr" in navigator)
|
|
5346
|
+
return i.id = "ARButton", i.style.display = "none", A(i), navigator.xr.isSessionSupported("immersive-ar").then(function(a) {
|
|
5347
|
+
a ? s() : n();
|
|
5348
|
+
}).catch(r), i;
|
|
5349
|
+
{
|
|
5350
|
+
const a = document.createElement("a");
|
|
5351
|
+
return window.isSecureContext === !1 ? (a.href = document.location.href.replace(/^http:/, "https:"), a.innerHTML = "WEBXR NEEDS HTTPS") : (a.href = "https://immersiveweb.dev/", a.innerHTML = "WEBXR NOT AVAILABLE"), a.style.left = "calc(50% - 90px)", a.style.width = "180px", a.style.textDecoration = "none", A(a), a;
|
|
5352
|
+
}
|
|
5353
|
+
}
|
|
5354
|
+
}
|
|
5355
|
+
class vn {
|
|
5356
|
+
constructor(e, t, i, s = null) {
|
|
5357
|
+
this.renderer = e, this.camera = t, this.scene = i, this.container = s || document.body, this.isARSupported = !1, this.isARPresenting = !1, this.isQuest2 = !1, this.isQuest3 = !1, this.arButton = null, this.buttonObserver = null, this.onSessionStart = null, this.onSessionEnd = null;
|
|
5358
|
+
}
|
|
5359
|
+
init() {
|
|
5360
|
+
this.renderer.xr.enabled = !0, this.removeExistingARButtons(), this.checkARSupported().then(() => {
|
|
5361
|
+
this.isARSupported && (document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", () => {
|
|
5362
|
+
this.createARButton();
|
|
5363
|
+
}) : this.createARButton());
|
|
5364
|
+
}), this.setupSessionListeners(), "xr" in navigator ? navigator.xr.isSessionSupported("immersive-ar").then((e) => {
|
|
5365
|
+
e || this.startARButtonMonitoring();
|
|
5366
|
+
}).catch(() => {
|
|
5367
|
+
this.startARButtonMonitoring();
|
|
5368
|
+
}) : this.startARButtonMonitoring();
|
|
5369
|
+
}
|
|
5370
|
+
checkARSupported() {
|
|
5371
|
+
return new Promise((e) => {
|
|
5372
|
+
try {
|
|
5373
|
+
"xr" in navigator ? navigator.xr.isSessionSupported("immersive-ar").then((t) => {
|
|
5374
|
+
this.isARSupported = t, e();
|
|
5375
|
+
}).catch(() => {
|
|
5376
|
+
this.isARSupported = !1, e();
|
|
5377
|
+
}) : (this.isARSupported = !1, e());
|
|
5378
|
+
} catch {
|
|
5379
|
+
this.isARSupported = !1, e();
|
|
5380
|
+
}
|
|
5381
|
+
});
|
|
5382
|
+
}
|
|
5383
|
+
createARButton() {
|
|
5384
|
+
this.waitForARCSS().then(() => {
|
|
5385
|
+
const e = {
|
|
5386
|
+
requiredFeatures: ["local"],
|
|
5387
|
+
optionalFeatures: this.getOptionalFeatures()
|
|
5388
|
+
};
|
|
5389
|
+
this.arButton = xn.createButton(this.renderer, e), this.arButton.innerHTML = '<span class="ar-icon">👁️</span>ENTER AR', this.arButton.className = "ar-button--glass ar-button-available", this.arButton.disabled = !1, this.arButton.style.cssText = `
|
|
5390
|
+
position: fixed !important;
|
|
5391
|
+
bottom: 140px !important;
|
|
5392
|
+
left: 50% !important;
|
|
5393
|
+
transform: translateX(-50%) !important;
|
|
5394
|
+
z-index: 2147483647 !important;
|
|
5395
|
+
display: flex !important;
|
|
5396
|
+
visibility: visible !important;
|
|
5397
|
+
opacity: 1 !important;
|
|
5398
|
+
pointer-events: auto !important;
|
|
5399
|
+
cursor: pointer !important;
|
|
5400
|
+
`, this.container.appendChild(this.arButton), this.styleARButton();
|
|
5401
|
+
});
|
|
5402
|
+
}
|
|
5403
|
+
getOptionalFeatures() {
|
|
5404
|
+
return ["hand-tracking"];
|
|
5405
|
+
}
|
|
5406
|
+
styleARButton() {
|
|
5407
|
+
const e = () => {
|
|
5408
|
+
const t = document.querySelector("button.ar-button--glass") || this.arButton;
|
|
5409
|
+
return t ? (t.style.display = "flex", t.style.visibility = "visible", t.style.opacity = "1", t.innerHTML = '<span class="ar-icon">👁️</span>ENTER AR', t.classList.contains("ar-button--glass") || t.classList.add("ar-button--glass"), t.disabled = !1, t.classList.remove("ar-generic-disabled"), !0) : !1;
|
|
5410
|
+
};
|
|
5411
|
+
e() || (setTimeout(e, 100), setTimeout(e, 300), setTimeout(e, 500));
|
|
5412
|
+
}
|
|
5413
|
+
setupSessionListeners() {
|
|
5414
|
+
this.renderer.xr.addEventListener("sessionstart", () => {
|
|
5415
|
+
this.isARPresenting = !0;
|
|
5416
|
+
const e = this.detectQuestDevice();
|
|
5417
|
+
this.applyQuestOptimizations(e), this.onSessionStart && this.onSessionStart();
|
|
5418
|
+
}), this.renderer.xr.addEventListener("sessionend", () => {
|
|
5419
|
+
this.isARPresenting = !1, this.onSessionEnd && this.onSessionEnd();
|
|
5420
|
+
});
|
|
5421
|
+
}
|
|
5422
|
+
detectQuestDevice() {
|
|
5423
|
+
try {
|
|
5424
|
+
const e = navigator.userAgent.toLowerCase();
|
|
5425
|
+
return e.includes("quest 2") || e.includes("oculus quest 2") || e.includes("oculus") && e.includes("android") && !e.includes("quest 3") ? (this.isQuest2 = !0, "quest2") : e.includes("quest 3") || e.includes("oculus quest 3") || e.includes("meta quest 3") ? (this.isQuest3 = !0, "quest3") : "unknown";
|
|
5426
|
+
} catch {
|
|
5427
|
+
return "unknown";
|
|
5428
|
+
}
|
|
5429
|
+
}
|
|
5430
|
+
applyQuestOptimizations(e) {
|
|
5431
|
+
(e === "quest2" || e === "quest3") && (this.camera.far = 2e3, this.camera.updateProjectionMatrix());
|
|
5432
|
+
}
|
|
5433
|
+
async waitForARCSS() {
|
|
5434
|
+
return new Promise((e) => {
|
|
5435
|
+
const t = () => {
|
|
5436
|
+
const i = document.createElement("div");
|
|
5437
|
+
i.className = "ar-mode-active", i.style.display = "none", this.container.appendChild(i);
|
|
5438
|
+
const s = window.getComputedStyle(i), o = s.getPropertyValue("--ar-css-loaded") === "true" || s.opacity === "0.998";
|
|
5439
|
+
this.container.removeChild(i), o ? e() : setTimeout(t, 50);
|
|
5440
|
+
};
|
|
5441
|
+
setTimeout(t, 100);
|
|
5442
|
+
});
|
|
5443
|
+
}
|
|
5444
|
+
removeExistingARButtons() {
|
|
5445
|
+
document.querySelectorAll('button.legacy-ar-button, a[href="#AR"]').forEach((t) => {
|
|
5446
|
+
t.parentNode && t.parentNode.removeChild(t);
|
|
5447
|
+
});
|
|
5448
|
+
}
|
|
5449
|
+
startARButtonMonitoring() {
|
|
5450
|
+
this.buttonObserver || (this.buttonObserver = new MutationObserver((e) => {
|
|
5451
|
+
e.forEach((t) => {
|
|
5452
|
+
t.addedNodes.forEach((i) => {
|
|
5453
|
+
if (i.nodeType === Node.ELEMENT_NODE) {
|
|
5454
|
+
const s = i.querySelectorAll ? i.querySelectorAll('button.legacy-ar-button, a[href="#AR"]') : [];
|
|
5455
|
+
if (s.length > 0 || i.tagName === "BUTTON" && i.classList.contains("legacy-ar-button")) {
|
|
5456
|
+
const o = s.length > 0 ? s[0] : i;
|
|
5457
|
+
o.style.display = "none";
|
|
5458
|
+
}
|
|
5459
|
+
}
|
|
5460
|
+
});
|
|
5461
|
+
});
|
|
5462
|
+
}), this.buttonObserver.observe(document.body, { childList: !0, subtree: !0 }));
|
|
5463
|
+
}
|
|
5464
|
+
getARStatus() {
|
|
5465
|
+
return {
|
|
5466
|
+
supported: this.isARSupported,
|
|
5467
|
+
presenting: this.isARPresenting,
|
|
5468
|
+
isQuest2: this.isQuest2,
|
|
5469
|
+
isQuest3: this.isQuest3
|
|
5470
|
+
};
|
|
5471
|
+
}
|
|
5472
|
+
dispose() {
|
|
5473
|
+
this.buttonObserver && (this.buttonObserver.disconnect(), this.buttonObserver = null), this.arButton && this.arButton.parentNode && this.arButton.parentNode.removeChild(this.arButton), this.isQuest2 = !1, this.isQuest3 = !1, this.isARSupported = !1, this.isARPresenting = !1;
|
|
5474
|
+
}
|
|
5475
|
+
}
|
|
5476
|
+
const $t = new Ie(), ei = new R();
|
|
5477
|
+
class ti {
|
|
5478
|
+
/**
|
|
5479
|
+
* Constructs a new XR hand primitive model.
|
|
5480
|
+
*
|
|
5481
|
+
* @param {XRHandModel} handModel - The hand model.
|
|
5482
|
+
* @param {Group} controller - The WebXR controller.
|
|
5483
|
+
* @param {string} path - The model path.
|
|
5484
|
+
* @param {XRHandedness} handedness - The handedness of the XR input source.
|
|
5485
|
+
* @param {XRHandPrimitiveModel~Options} options - The model options.
|
|
5486
|
+
*/
|
|
5487
|
+
constructor(e, t, i, s, o) {
|
|
5488
|
+
this.controller = t, this.handModel = e, this.envMap = null;
|
|
5489
|
+
let n;
|
|
5490
|
+
!o || !o.primitive || o.primitive === "sphere" ? n = new mi(1, 10, 10) : o.primitive === "box" && (n = new vs(1, 1, 1));
|
|
5491
|
+
const r = new wt();
|
|
5492
|
+
this.handMesh = new ci(n, r, 30), this.handMesh.frustumCulled = !1, this.handMesh.instanceMatrix.setUsage(Rs), this.handMesh.castShadow = !0, this.handMesh.receiveShadow = !0, this.handModel.add(this.handMesh), this.joints = [
|
|
5493
|
+
"wrist",
|
|
5494
|
+
"thumb-metacarpal",
|
|
5495
|
+
"thumb-phalanx-proximal",
|
|
5496
|
+
"thumb-phalanx-distal",
|
|
5497
|
+
"thumb-tip",
|
|
5498
|
+
"index-finger-metacarpal",
|
|
5499
|
+
"index-finger-phalanx-proximal",
|
|
5500
|
+
"index-finger-phalanx-intermediate",
|
|
5501
|
+
"index-finger-phalanx-distal",
|
|
5502
|
+
"index-finger-tip",
|
|
5503
|
+
"middle-finger-metacarpal",
|
|
5504
|
+
"middle-finger-phalanx-proximal",
|
|
5505
|
+
"middle-finger-phalanx-intermediate",
|
|
5506
|
+
"middle-finger-phalanx-distal",
|
|
5507
|
+
"middle-finger-tip",
|
|
5508
|
+
"ring-finger-metacarpal",
|
|
5509
|
+
"ring-finger-phalanx-proximal",
|
|
5510
|
+
"ring-finger-phalanx-intermediate",
|
|
5511
|
+
"ring-finger-phalanx-distal",
|
|
5512
|
+
"ring-finger-tip",
|
|
5513
|
+
"pinky-finger-metacarpal",
|
|
5514
|
+
"pinky-finger-phalanx-proximal",
|
|
5515
|
+
"pinky-finger-phalanx-intermediate",
|
|
5516
|
+
"pinky-finger-phalanx-distal",
|
|
5517
|
+
"pinky-finger-tip"
|
|
5518
|
+
];
|
|
5519
|
+
}
|
|
5520
|
+
/**
|
|
5521
|
+
* Updates the mesh based on the tracked XR joints data.
|
|
5522
|
+
*/
|
|
5523
|
+
updateMesh() {
|
|
5524
|
+
const t = this.controller.joints;
|
|
5525
|
+
let i = 0;
|
|
5526
|
+
for (let s = 0; s < this.joints.length; s++) {
|
|
5527
|
+
const o = t[this.joints[s]];
|
|
5528
|
+
o.visible && (ei.setScalar(o.jointRadius || 8e-3), $t.compose(o.position, o.quaternion, ei), this.handMesh.setMatrixAt(s, $t), i++);
|
|
5529
|
+
}
|
|
5530
|
+
this.handMesh.count = i, this.handMesh.instanceMatrix.needsUpdate = !0;
|
|
5531
|
+
}
|
|
5532
|
+
}
|
|
5533
|
+
const Rn = "https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/";
|
|
5534
|
+
class Dn {
|
|
5535
|
+
/**
|
|
5536
|
+
* Constructs a new XR hand mesh model.
|
|
5537
|
+
*
|
|
5538
|
+
* @param {XRHandModel} handModel - The hand model.
|
|
5539
|
+
* @param {Group} controller - The WebXR controller.
|
|
5540
|
+
* @param {?string} path - The model path.
|
|
5541
|
+
* @param {XRHandedness} handedness - The handedness of the XR input source.
|
|
5542
|
+
* @param {?Loader} [loader=null] - The loader. If not provided, an instance of `GLTFLoader` will be used to load models.
|
|
5543
|
+
* @param {?Function} [onLoad=null] - A callback that is executed when a controller model has been loaded.
|
|
5544
|
+
*/
|
|
5545
|
+
constructor(e, t, i, s, o = null, n = null) {
|
|
5546
|
+
this.controller = t, this.handModel = e, this.bones = [], o === null && (o = new xt(), o.setPath(i || Rn)), o.load(`${s}.glb`, (r) => {
|
|
5547
|
+
const A = r.scene.children[0];
|
|
5548
|
+
this.handModel.add(A);
|
|
5549
|
+
const a = A.getObjectByProperty("type", "SkinnedMesh");
|
|
5550
|
+
a.frustumCulled = !1, a.castShadow = !0, a.receiveShadow = !0, [
|
|
5551
|
+
"wrist",
|
|
5552
|
+
"thumb-metacarpal",
|
|
5553
|
+
"thumb-phalanx-proximal",
|
|
5554
|
+
"thumb-phalanx-distal",
|
|
5555
|
+
"thumb-tip",
|
|
5556
|
+
"index-finger-metacarpal",
|
|
5557
|
+
"index-finger-phalanx-proximal",
|
|
5558
|
+
"index-finger-phalanx-intermediate",
|
|
5559
|
+
"index-finger-phalanx-distal",
|
|
5560
|
+
"index-finger-tip",
|
|
5561
|
+
"middle-finger-metacarpal",
|
|
5562
|
+
"middle-finger-phalanx-proximal",
|
|
5563
|
+
"middle-finger-phalanx-intermediate",
|
|
5564
|
+
"middle-finger-phalanx-distal",
|
|
5565
|
+
"middle-finger-tip",
|
|
5566
|
+
"ring-finger-metacarpal",
|
|
5567
|
+
"ring-finger-phalanx-proximal",
|
|
5568
|
+
"ring-finger-phalanx-intermediate",
|
|
5569
|
+
"ring-finger-phalanx-distal",
|
|
5570
|
+
"ring-finger-tip",
|
|
5571
|
+
"pinky-finger-metacarpal",
|
|
5572
|
+
"pinky-finger-phalanx-proximal",
|
|
5573
|
+
"pinky-finger-phalanx-intermediate",
|
|
5574
|
+
"pinky-finger-phalanx-distal",
|
|
5575
|
+
"pinky-finger-tip"
|
|
5576
|
+
].forEach((h) => {
|
|
5577
|
+
const d = A.getObjectByName(h);
|
|
5578
|
+
d !== void 0 ? d.jointName = h : console.warn(`Couldn't find ${h} in ${s} hand mesh`), this.bones.push(d);
|
|
5579
|
+
}), n && n(A);
|
|
5580
|
+
});
|
|
5581
|
+
}
|
|
5582
|
+
/**
|
|
5583
|
+
* Updates the mesh based on the tracked XR joints data.
|
|
5584
|
+
*/
|
|
5585
|
+
updateMesh() {
|
|
5586
|
+
const e = this.controller.joints;
|
|
5587
|
+
for (let t = 0; t < this.bones.length; t++) {
|
|
5588
|
+
const i = this.bones[t];
|
|
5589
|
+
if (i) {
|
|
5590
|
+
const s = e[i.jointName];
|
|
5591
|
+
if (s.visible) {
|
|
5592
|
+
const o = s.position;
|
|
5593
|
+
i.position.copy(o), i.quaternion.copy(s.quaternion);
|
|
5594
|
+
}
|
|
5595
|
+
}
|
|
5596
|
+
}
|
|
5597
|
+
}
|
|
5598
|
+
}
|
|
5599
|
+
class Tn extends Oe {
|
|
5600
|
+
/**
|
|
5601
|
+
* Constructs a new XR hand model.
|
|
5602
|
+
*
|
|
5603
|
+
* @param {Group} controller - The hand controller.
|
|
5604
|
+
*/
|
|
5605
|
+
constructor(e) {
|
|
5606
|
+
super(), this.controller = e, this.motionController = null, this.envMap = null, this.mesh = null;
|
|
5607
|
+
}
|
|
5608
|
+
/**
|
|
5609
|
+
* Overwritten with a custom implementation. Makes sure the motion controller updates the mesh.
|
|
5610
|
+
*
|
|
5611
|
+
* @param {boolean} [force=false] - When set to `true`, a recomputation of world matrices is forced even
|
|
5612
|
+
* when {@link Object3D#matrixWorldAutoUpdate} is set to `false`.
|
|
5613
|
+
*/
|
|
5614
|
+
updateMatrixWorld(e) {
|
|
5615
|
+
super.updateMatrixWorld(e), this.motionController && this.motionController.updateMesh();
|
|
5616
|
+
}
|
|
5617
|
+
}
|
|
5618
|
+
class Ln {
|
|
5619
|
+
/**
|
|
5620
|
+
* Constructs a new XR hand model factory.
|
|
5621
|
+
*
|
|
5622
|
+
* @param {?GLTFLoader} [gltfLoader=null] - A glTF loader that is used to load hand models.
|
|
5623
|
+
* @param {?Function} [onLoad=null] - A callback that is executed when a hand model has been loaded.
|
|
5624
|
+
*/
|
|
5625
|
+
constructor(e = null, t = null) {
|
|
5626
|
+
this.gltfLoader = e, this.path = null, this.onLoad = t;
|
|
5627
|
+
}
|
|
5628
|
+
/**
|
|
5629
|
+
* Sets the path to the hand model repository.
|
|
5630
|
+
*
|
|
5631
|
+
* @param {string} path - The path to set.
|
|
5632
|
+
* @return {XRHandModelFactory} A reference to this instance.
|
|
5633
|
+
*/
|
|
5634
|
+
setPath(e) {
|
|
5635
|
+
return this.path = e, this;
|
|
5636
|
+
}
|
|
5637
|
+
/**
|
|
5638
|
+
* Creates a controller model for the given WebXR hand controller.
|
|
5639
|
+
*
|
|
5640
|
+
* @param {Group} controller - The hand controller.
|
|
5641
|
+
* @param {('spheres'|'boxes'|'mesh')} [profile] - The model profile that defines the model type.
|
|
5642
|
+
* @return {XRHandModel} The XR hand model.
|
|
5643
|
+
*/
|
|
5644
|
+
createHandModel(e, t) {
|
|
5645
|
+
const i = new Tn(e);
|
|
5646
|
+
return e.addEventListener("connected", (s) => {
|
|
5647
|
+
const o = s.data;
|
|
5648
|
+
o.hand && !i.motionController && (i.xrInputSource = o, t === void 0 || t === "spheres" ? i.motionController = new ti(i, e, this.path, o.handedness, { primitive: "sphere" }) : t === "boxes" ? i.motionController = new ti(i, e, this.path, o.handedness, { primitive: "box" }) : t === "mesh" && (i.motionController = new Dn(i, e, this.path, o.handedness, this.gltfLoader, this.onLoad))), e.visible = !0;
|
|
5649
|
+
}), e.addEventListener("disconnected", () => {
|
|
5650
|
+
e.visible = !1;
|
|
5651
|
+
}), i;
|
|
5652
|
+
}
|
|
5653
|
+
}
|
|
5654
|
+
class Fn {
|
|
5655
|
+
constructor(e) {
|
|
5656
|
+
this.renderer = e, this.handModelFactory = new Ln(), this.hand1 = null, this.hand2 = null, this.interactionEnabled = !0, this.dragging = !1, this.scaling = !1, this.rotating = !1, this.dragStartPos = new u.Vector3(), this.scaleStartDistance = 0, this.rotateStartAngle = 0, this.pinchIntent = {
|
|
5657
|
+
hand1Start: 0,
|
|
5658
|
+
hand2Start: 0,
|
|
5659
|
+
delay: 100
|
|
5660
|
+
}, this.inertiaActive = !1, this.posVelocity = new u.Vector3(), this.rotVelocity = 0, this.scaleVelocity = 0, this.POSITION_DAMPING = 100, this.ROTATION_DAMPING = 8, this.SCALE_DAMPING = 8, this.MAX_ROT_VELOCITY = Math.PI, this.MAX_SCALE_VELOCITY = 0.5, this.MIN_SCALE = 0.01, this.MAX_SCALE = 1, this.VELOCITY_DEAD_ZONE = 1e-3, this.DISTANCE_GAIN_THRESHOLD = 5, this.MAX_DISTANCE_GAIN = 3, this.MAX_DELTA_PER_FRAME = 0.5, this.VELOCITY_SMOOTHING = 0.3, this.tempVec1 = new u.Vector3(), this.tempVec2 = new u.Vector3(), this.onGestureStart = null, this.onGestureEnd = null;
|
|
5661
|
+
}
|
|
5662
|
+
init(e) {
|
|
5663
|
+
this.hand1 = this.setupHand(e, 0, "hand1Start"), this.hand2 = this.setupHand(e, 1, "hand2Start");
|
|
5664
|
+
}
|
|
5665
|
+
setupHand(e, t, i) {
|
|
5666
|
+
const s = this.renderer.xr.getHand(t);
|
|
5667
|
+
s.userData.pinch = !1, s.addEventListener("pinchstart", () => {
|
|
5668
|
+
s.userData.pinch = !0, this.pinchIntent[i] = performance.now();
|
|
5669
|
+
}), s.addEventListener("pinchend", () => {
|
|
5670
|
+
s.userData.pinch = !1, this.onPinchEnd();
|
|
5671
|
+
});
|
|
5672
|
+
const o = this.handModelFactory.createHandModel(s, "mesh");
|
|
5673
|
+
return s.add(o), e.add(s), o.addEventListener("connected", () => {
|
|
5674
|
+
this.styleHandModel(o, 16777215, 0.5);
|
|
5675
|
+
}), s;
|
|
5676
|
+
}
|
|
5677
|
+
styleHandModel(e, t, i) {
|
|
5678
|
+
e.traverse((s) => {
|
|
5679
|
+
s.isMesh && (s.material = new u.MeshStandardMaterial({
|
|
5680
|
+
color: t,
|
|
5681
|
+
roughness: 0.8,
|
|
5682
|
+
metalness: 0.2,
|
|
5683
|
+
transparent: !0,
|
|
5684
|
+
opacity: i
|
|
5685
|
+
}));
|
|
5686
|
+
});
|
|
5687
|
+
}
|
|
5688
|
+
update(e, t, i) {
|
|
5689
|
+
t && (this.handleGestures(e, t, i), this.inertiaActive && !this.dragging && !this.scaling && !this.rotating && this.applyInertia(e, t));
|
|
5690
|
+
}
|
|
5691
|
+
handleGestures(e, t, i) {
|
|
5692
|
+
if (!this.interactionEnabled || !this.hand1 || !this.hand2) return;
|
|
5693
|
+
const s = this.hand1.joints?.["index-finger-tip"], o = this.hand2.joints?.["index-finger-tip"];
|
|
5694
|
+
if (!s || !o) {
|
|
5695
|
+
(this.dragging || this.scaling || this.rotating) && this.onPinchEnd();
|
|
5696
|
+
return;
|
|
5697
|
+
}
|
|
5698
|
+
const n = performance.now(), r = this.hand1.userData.pinch && n - this.pinchIntent.hand1Start >= this.pinchIntent.delay, A = this.hand2.userData.pinch && n - this.pinchIntent.hand2Start >= this.pinchIntent.delay;
|
|
5699
|
+
if (r && !this.hand2.userData.pinch || A && !this.hand1.userData.pinch) {
|
|
5700
|
+
const l = (r ? this.hand1 : this.hand2).joints["index-finger-tip"];
|
|
5701
|
+
if (!this.dragging)
|
|
5702
|
+
(this.scaling || this.rotating) && (this.rotVelocity = 0, this.scaleVelocity = 0), this.dragging = !0, this.scaling = !1, this.rotating = !1, l.getWorldPosition(this.dragStartPos), this.onGestureStart && this.onGestureStart("drag");
|
|
5703
|
+
else {
|
|
5704
|
+
l.getWorldPosition(this.tempVec1);
|
|
5705
|
+
let h = this.tempVec1.clone().sub(this.dragStartPos);
|
|
5706
|
+
if (h.length() > this.MAX_DELTA_PER_FRAME && h.normalize().multiplyScalar(this.MAX_DELTA_PER_FRAME), i) {
|
|
5707
|
+
const d = i.position.distanceTo(t.position);
|
|
5708
|
+
if (d > this.DISTANCE_GAIN_THRESHOLD) {
|
|
5709
|
+
const g = Math.min(
|
|
5710
|
+
this.MAX_DISTANCE_GAIN,
|
|
5711
|
+
1 + (d - this.DISTANCE_GAIN_THRESHOLD) / 7.5
|
|
5712
|
+
);
|
|
5713
|
+
h.multiplyScalar(g);
|
|
5714
|
+
}
|
|
5715
|
+
}
|
|
5716
|
+
if (t.position.add(h), e > 0) {
|
|
5717
|
+
const d = h.clone().divideScalar(e);
|
|
5718
|
+
this.posVelocity.lerp(d, this.VELOCITY_SMOOTHING);
|
|
5719
|
+
}
|
|
5720
|
+
this.dragStartPos.copy(this.tempVec1);
|
|
5721
|
+
}
|
|
5722
|
+
} else if (r && A)
|
|
5723
|
+
if (s.getWorldPosition(this.tempVec1), o.getWorldPosition(this.tempVec2), !this.scaling && !this.rotating) {
|
|
5724
|
+
this.dragging = !1, this.scaling = !0, this.rotating = !0, this.scaleStartDistance = this.tempVec1.distanceTo(this.tempVec2);
|
|
5725
|
+
const a = this.tempVec2.x - this.tempVec1.x, l = this.tempVec2.z - this.tempVec1.z;
|
|
5726
|
+
this.rotateStartAngle = Math.atan2(l, a), this.onGestureStart && this.onGestureStart("two-hand");
|
|
5727
|
+
} else {
|
|
5728
|
+
const a = this.tempVec1.distanceTo(this.tempVec2), l = a / this.scaleStartDistance, h = Math.log(t.scale.x), d = Math.log(l), g = h + d, p = Math.max(this.MIN_SCALE, Math.min(this.MAX_SCALE, Math.exp(g)));
|
|
5729
|
+
if (t.scale.setScalar(p), e > 0) {
|
|
5730
|
+
const I = d / e, b = Math.max(-this.MAX_SCALE_VELOCITY, Math.min(this.MAX_SCALE_VELOCITY, I));
|
|
5731
|
+
this.scaleVelocity = this.scaleVelocity * (1 - this.VELOCITY_SMOOTHING) + b * this.VELOCITY_SMOOTHING;
|
|
5732
|
+
}
|
|
5733
|
+
this.scaleStartDistance = a;
|
|
5734
|
+
const C = this.tempVec2.x - this.tempVec1.x, E = this.tempVec2.z - this.tempVec1.z, f = Math.atan2(E, C);
|
|
5735
|
+
let m = f - this.rotateStartAngle;
|
|
5736
|
+
if (m > Math.PI && (m -= 2 * Math.PI), m < -Math.PI && (m += 2 * Math.PI), t.rotation.y -= m, e > 0) {
|
|
5737
|
+
const I = -m / e, b = Math.max(-this.MAX_ROT_VELOCITY, Math.min(this.MAX_ROT_VELOCITY, I));
|
|
5738
|
+
this.rotVelocity = this.rotVelocity * (1 - this.VELOCITY_SMOOTHING) + b * this.VELOCITY_SMOOTHING;
|
|
5739
|
+
}
|
|
5740
|
+
this.rotateStartAngle = f;
|
|
5741
|
+
}
|
|
5742
|
+
}
|
|
5743
|
+
onPinchEnd() {
|
|
5744
|
+
if (!this.hand1.userData.pinch && !this.hand2.userData.pinch) {
|
|
5745
|
+
const e = this.dragging || this.scaling || this.rotating;
|
|
5746
|
+
this.dragging = !1, this.scaling = !1, this.rotating = !1, e && (this.onGestureEnd && this.onGestureEnd(), this.posVelocity.lengthSq() < this.VELOCITY_DEAD_ZONE && this.posVelocity.set(0, 0, 0), Math.abs(this.rotVelocity) < this.VELOCITY_DEAD_ZONE && (this.rotVelocity = 0), Math.abs(this.scaleVelocity) < this.VELOCITY_DEAD_ZONE && (this.scaleVelocity = 0), (this.posVelocity.lengthSq() > 0 || Math.abs(this.rotVelocity) > 0 || Math.abs(this.scaleVelocity) > 0) && (this.inertiaActive = !0));
|
|
5747
|
+
} else (!this.hand1.userData.pinch || !this.hand2.userData.pinch) && (this.scaling = !1, this.rotating = !1, this.rotVelocity = 0, this.scaleVelocity = 0);
|
|
5748
|
+
}
|
|
5749
|
+
applyInertia(e, t) {
|
|
5750
|
+
const i = Math.exp(-this.POSITION_DAMPING * e), s = Math.exp(-this.ROTATION_DAMPING * e), o = Math.exp(-this.SCALE_DAMPING * e);
|
|
5751
|
+
this.posVelocity.multiplyScalar(i), this.rotVelocity *= s, this.scaleVelocity *= o, t.position.addScaledVector(this.posVelocity, e), t.rotation.y += this.rotVelocity * e;
|
|
5752
|
+
const r = Math.log(t.scale.x) + this.scaleVelocity * e, A = Math.max(this.MIN_SCALE, Math.min(this.MAX_SCALE, Math.exp(r)));
|
|
5753
|
+
t.scale.setScalar(A), this.posVelocity.lengthSq() < this.VELOCITY_DEAD_ZONE && this.posVelocity.set(0, 0, 0), Math.abs(this.rotVelocity) < this.VELOCITY_DEAD_ZONE && (this.rotVelocity = 0), Math.abs(this.scaleVelocity) < this.VELOCITY_DEAD_ZONE && (this.scaleVelocity = 0), this.posVelocity.lengthSq() === 0 && this.rotVelocity === 0 && this.scaleVelocity === 0 && (this.inertiaActive = !1);
|
|
5754
|
+
}
|
|
5755
|
+
stop() {
|
|
5756
|
+
this.dragging = !1, this.scaling = !1, this.rotating = !1, this.inertiaActive = !1, this.posVelocity.set(0, 0, 0), this.rotVelocity = 0, this.scaleVelocity = 0;
|
|
5757
|
+
}
|
|
5758
|
+
/**
|
|
5759
|
+
* Enable or disable hand gesture interactions.
|
|
5760
|
+
* When disabled, all gestures are silently ignored (useful for remote scenarios).
|
|
5761
|
+
* @param {boolean} enabled - true to allow interactions, false to block them
|
|
5762
|
+
*/
|
|
5763
|
+
setInteractionEnabled(e) {
|
|
5764
|
+
this.interactionEnabled = e, e || this.stop();
|
|
5765
|
+
}
|
|
5766
|
+
dispose() {
|
|
5767
|
+
this.hand1 && this.hand1.clear(), this.hand2 && this.hand2.clear(), this.stop();
|
|
5768
|
+
}
|
|
5769
|
+
}
|
|
5770
|
+
class kn extends je {
|
|
5771
|
+
constructor(e, t, i, s = {}, o = null) {
|
|
5772
|
+
super(), this.renderer = e, this.camera = t, this.scene = i, this.config = {
|
|
5773
|
+
enableHandTracking: !0,
|
|
5774
|
+
enableWorldCube: !0,
|
|
5775
|
+
defaultScale: 0.05,
|
|
5776
|
+
worldCubeSize: 1e3,
|
|
5777
|
+
worldCubeOpacity: 0.1,
|
|
5778
|
+
...s
|
|
5779
|
+
}, this.container = o, this.arCore = new vn(e, t, i, o), this.handTracking = this.config.enableHandTracking ? new Fn(e) : null, this.modelGroup = new u.Group(), this.modelGroup.name = "AR Model Group", this.scene.add(this.modelGroup), this.currentModel = null, this.pendingModel = null, this.pendingModelConfig = null, this.currentModelScale = this.config.defaultScale, this.worldCube = null, this.config.enableWorldCube && this.createWorldCube(), this.isARPresenting = !1, this.previousGestureType = null, this.init();
|
|
5780
|
+
}
|
|
5781
|
+
init() {
|
|
5782
|
+
this.arCore.init(), this.handTracking && (this.handTracking.init(this.scene), this.handTracking.onGestureStart = (e) => {
|
|
5783
|
+
this.previousGestureType !== e && (this.emit("gesture-start", e), this.previousGestureType = e);
|
|
5784
|
+
}, this.handTracking.onGestureEnd = () => {
|
|
5785
|
+
this.previousGestureType && (this.emit("gesture-end", this.previousGestureType), this.previousGestureType = null);
|
|
5786
|
+
}), this.setupSessionLifecycle();
|
|
5787
|
+
}
|
|
5788
|
+
setupSessionLifecycle() {
|
|
5789
|
+
this.arCore.onSessionStart = () => {
|
|
5790
|
+
this.isARPresenting = !0, this.activateModel(), this.worldCube && (this.worldCube.visible = !0), this.emit("session-start");
|
|
5791
|
+
}, this.arCore.onSessionEnd = () => {
|
|
5792
|
+
this.isARPresenting = !1, this.worldCube && (this.worldCube.visible = !1), this.handTracking && this.handTracking.stop(), this.emit("session-end");
|
|
5793
|
+
};
|
|
5794
|
+
}
|
|
5795
|
+
prepareModel(e, t = null) {
|
|
5796
|
+
if (this.handTracking && this.handTracking.stop(), this.pendingModel = e, this.pendingModelConfig = t, e) {
|
|
5797
|
+
const i = t?.defaultScale || e.userData?.defaultScale || this.config.defaultScale;
|
|
5798
|
+
this.currentModelScale = i, this.isARPresenting && this.activateModel();
|
|
5799
|
+
} else
|
|
5800
|
+
this.isARPresenting && this.activateModel();
|
|
5801
|
+
}
|
|
5802
|
+
activateModel() {
|
|
5803
|
+
if (this.currentModel)
|
|
5804
|
+
for (this.modelGroup.remove(this.currentModel); this.modelGroup.children.length > 0; )
|
|
5805
|
+
this.modelGroup.remove(this.modelGroup.children[0]);
|
|
5806
|
+
this.currentModel = this.pendingModel, this.currentModel && (this.modelGroup.add(this.currentModel), this.modelGroup.position.set(0, 0, 0), this.modelGroup.rotation.set(0, 0, 0), this.modelGroup.scale.setScalar(this.currentModelScale));
|
|
5807
|
+
}
|
|
5808
|
+
setTargetModel(e, t = null) {
|
|
5809
|
+
this.prepareModel(e, t);
|
|
5810
|
+
}
|
|
5811
|
+
update(e) {
|
|
5812
|
+
if (!this.isActive() || !this.currentModel) return;
|
|
5813
|
+
const t = e / 1e3;
|
|
5814
|
+
this.handTracking && this.handTracking.update(t, this.modelGroup, this.camera);
|
|
5815
|
+
}
|
|
5816
|
+
createWorldCube() {
|
|
5817
|
+
const e = this.config.worldCubeSize, t = new u.BoxGeometry(e, e, e), i = new u.MeshBasicMaterial({
|
|
5818
|
+
color: 0,
|
|
5819
|
+
transparent: !0,
|
|
5820
|
+
opacity: this.config.worldCubeOpacity,
|
|
5821
|
+
side: u.BackSide,
|
|
5822
|
+
depthWrite: !1
|
|
5823
|
+
});
|
|
5824
|
+
this.worldCube = new u.Mesh(t, i), this.worldCube.name = "AR World Cube", this.worldCube.visible = !1, this.scene.add(this.worldCube);
|
|
5825
|
+
}
|
|
5826
|
+
setWorldCubeOpacity(e) {
|
|
5827
|
+
this.worldCube && (this.worldCube.material.opacity = Math.max(0, Math.min(1, e)));
|
|
5828
|
+
}
|
|
5829
|
+
setModelScale(e) {
|
|
5830
|
+
this.modelGroup && this.modelGroup.scale.setScalar(Math.max(0.01, Math.min(1, e)));
|
|
5831
|
+
}
|
|
5832
|
+
setModelOpacity(e) {
|
|
5833
|
+
this.currentModel && this.currentModel.traverse((t) => {
|
|
5834
|
+
t.isMesh && t.material && (t.material.transparent = !0, t.material.opacity = Math.max(0, Math.min(1, e)));
|
|
5835
|
+
});
|
|
5836
|
+
}
|
|
5837
|
+
getModelTransform() {
|
|
5838
|
+
return {
|
|
5839
|
+
position: {
|
|
5840
|
+
x: this.modelGroup.position.x,
|
|
5841
|
+
y: this.modelGroup.position.y,
|
|
5842
|
+
z: this.modelGroup.position.z
|
|
5843
|
+
},
|
|
5844
|
+
rotation: {
|
|
5845
|
+
x: this.modelGroup.rotation.x,
|
|
5846
|
+
y: this.modelGroup.rotation.y,
|
|
5847
|
+
z: this.modelGroup.rotation.z
|
|
5848
|
+
},
|
|
5849
|
+
scale: {
|
|
5850
|
+
x: this.modelGroup.scale.x,
|
|
5851
|
+
y: this.modelGroup.scale.y,
|
|
5852
|
+
z: this.modelGroup.scale.z
|
|
5853
|
+
}
|
|
5854
|
+
};
|
|
5855
|
+
}
|
|
5856
|
+
setModelTransform(e) {
|
|
5857
|
+
e.position && this.modelGroup.position.set(e.position.x, e.position.y, e.position.z), e.rotation && this.modelGroup.rotation.set(e.rotation.x, e.rotation.y, e.rotation.z), e.scale && this.modelGroup.scale.set(e.scale.x, e.scale.y, e.scale.z);
|
|
5858
|
+
}
|
|
5859
|
+
isActive() {
|
|
5860
|
+
return this.isARPresenting;
|
|
5861
|
+
}
|
|
5862
|
+
getARStatus() {
|
|
5863
|
+
return this.arCore.getARStatus();
|
|
5864
|
+
}
|
|
5865
|
+
dispose() {
|
|
5866
|
+
this.arCore && this.arCore.dispose(), this.handTracking && this.handTracking.dispose(), this.worldCube && (this.scene.remove(this.worldCube), this.worldCube.geometry.dispose(), this.worldCube.material.dispose()), this.modelGroup && this.scene.remove(this.modelGroup), this.isARPresenting = !1, this.currentModel = null;
|
|
5867
|
+
}
|
|
5868
|
+
}
|
|
5869
|
+
class ii {
|
|
5265
5870
|
/**
|
|
5266
5871
|
* Initialize debug commands with a BelowViewer instance
|
|
5267
5872
|
*
|
|
@@ -5406,7 +6011,7 @@ class Xt {
|
|
|
5406
6011
|
typeof window > "u" || (delete window.camera, delete window.scene, delete window.models, delete window.particles, delete window.vr, delete window.debugHelp, delete window.belowViewer);
|
|
5407
6012
|
}
|
|
5408
6013
|
}
|
|
5409
|
-
class
|
|
6014
|
+
class _n extends je {
|
|
5410
6015
|
/**
|
|
5411
6016
|
* Creates a new BelowViewer instance
|
|
5412
6017
|
*
|
|
@@ -5469,14 +6074,31 @@ class Qn extends yt {
|
|
|
5469
6074
|
enabled: { type: "boolean", default: !0 }
|
|
5470
6075
|
}
|
|
5471
6076
|
},
|
|
6077
|
+
ar: {
|
|
6078
|
+
type: "object",
|
|
6079
|
+
default: {
|
|
6080
|
+
enabled: !1,
|
|
6081
|
+
settings: {
|
|
6082
|
+
enableHandTracking: !0,
|
|
6083
|
+
enableWorldCube: !0,
|
|
6084
|
+
defaultScale: 0.05,
|
|
6085
|
+
worldCubeSize: 20,
|
|
6086
|
+
worldCubeOpacity: 0.1
|
|
6087
|
+
}
|
|
6088
|
+
},
|
|
6089
|
+
schema: {
|
|
6090
|
+
enabled: { type: "boolean", default: !1 },
|
|
6091
|
+
settings: { type: "object", default: {} }
|
|
6092
|
+
}
|
|
6093
|
+
},
|
|
5472
6094
|
audioPath: { type: "string", default: "./sound/" },
|
|
5473
6095
|
enableVRAudio: { type: "boolean", default: !1 }
|
|
5474
6096
|
};
|
|
5475
|
-
this.config = new
|
|
6097
|
+
this.config = new Ke(i).validate(t), this.renderer = null, this.sceneManager = null, this.cameraManager = null, this.modelLoader = null, this.vrManager = null, this.arManager = null, this.isVREnabled = this.config.vr?.enabled !== !1, this.isAREnabled = this.config.ar?.enabled === !0, this.dolly = null, this.isInitialized = !1, this.loadedModels = [], this.currentAbortController = null, this.skipRenderDuringLoad = !1, this.pixelRatioBeforeThrottle = 1, this.originalPixelRatio = 1, this.isConstrainedSafari = !1, this.init();
|
|
5476
6098
|
}
|
|
5477
6099
|
init() {
|
|
5478
6100
|
try {
|
|
5479
|
-
this.initRenderer(), this.sceneManager = new
|
|
6101
|
+
this.initRenderer(), this.sceneManager = new ks(this.config.scene), this.cameraManager = new Ws(this.config.camera), this.modelLoader = new O(this.renderer), this.isConstrainedSafari = this.modelLoader?.isIOSWebKit || !1, this.renderer?.getPixelRatio ? this.originalPixelRatio = this.renderer.getPixelRatio() : typeof window < "u" && (this.originalPixelRatio = window.devicePixelRatio || 1), this.pixelRatioBeforeThrottle = this.originalPixelRatio, this.isVREnabled && this.initVR(), this.isAREnabled && this.initAR(), this.cameraManager.initControls(this.renderer.domElement), this.setupEventListeners(), this.startRenderLoop(), this.isInitialized = !0, typeof window < "u" && ii.init(this), this.emit("initialized");
|
|
5480
6102
|
} catch (e) {
|
|
5481
6103
|
console.error("Failed to initialize BelowViewer:", e), this.emit("error", e);
|
|
5482
6104
|
}
|
|
@@ -5500,7 +6122,7 @@ class Qn extends yt {
|
|
|
5500
6122
|
initVR() {
|
|
5501
6123
|
this.dolly = new u.Group(), this.dolly.add(this.cameraManager.camera), this.sceneManager.scene.add(this.dolly);
|
|
5502
6124
|
const e = this.config.audioPath || "./sound/", t = this.config.enableVRAudio === !0;
|
|
5503
|
-
this.vrManager = new
|
|
6125
|
+
this.vrManager = new Mn(this.renderer, this.cameraManager.camera, this.sceneManager.scene, e, t, this.container), this.vrManager.setControls(this.cameraManager.controls), this.config.initialPositions && this.vrManager.setInitialPositions(this.config.initialPositions), this.vrManager.onModeToggle = () => {
|
|
5504
6126
|
this.emit("vr-mode-toggle");
|
|
5505
6127
|
}, this.vrManager.onMovementStart = () => {
|
|
5506
6128
|
this.emit("vr-movement-start");
|
|
@@ -5518,6 +6140,26 @@ class Qn extends yt {
|
|
|
5518
6140
|
this.cameraManager.controls && (this.cameraManager.controls.enabled = !0), this.dolly.position.set(0, 0, 0), this.dolly.rotation.set(0, 0, 0), this.emit("vr-session-end");
|
|
5519
6141
|
};
|
|
5520
6142
|
}
|
|
6143
|
+
initAR() {
|
|
6144
|
+
const e = this.config.ar?.settings || {};
|
|
6145
|
+
this.arManager = new kn(
|
|
6146
|
+
this.renderer,
|
|
6147
|
+
this.cameraManager.camera,
|
|
6148
|
+
this.sceneManager.scene,
|
|
6149
|
+
e,
|
|
6150
|
+
this.container
|
|
6151
|
+
), this.arManager.on("session-start", () => {
|
|
6152
|
+
this.cameraManager.controls && (this.cameraManager.controls.enabled = !1), this.emit("ar-session-start");
|
|
6153
|
+
}), this.arManager.on("session-end", () => {
|
|
6154
|
+
this.cameraManager.controls && (this.cameraManager.controls.enabled = !0), this.emit("ar-session-end");
|
|
6155
|
+
}), this.arManager.on("gesture-start", (t) => {
|
|
6156
|
+
this.emit("ar-gesture-start", t);
|
|
6157
|
+
}), this.arManager.on("gesture-end", (t) => {
|
|
6158
|
+
this.emit("ar-gesture-end", t);
|
|
6159
|
+
}), this.on("model-loaded", ({ model: t, options: i }) => {
|
|
6160
|
+
this.arManager && this.arManager.setTargetModel(t, i);
|
|
6161
|
+
});
|
|
6162
|
+
}
|
|
5521
6163
|
setupEventListeners() {
|
|
5522
6164
|
window.addEventListener("resize", this.onWindowResize.bind(this)), this.cameraManager && this.cameraManager.on("change", () => {
|
|
5523
6165
|
this.emit("camera-change");
|
|
@@ -5612,7 +6254,7 @@ class Qn extends yt {
|
|
|
5612
6254
|
let e = 0;
|
|
5613
6255
|
const t = (i) => {
|
|
5614
6256
|
const s = Math.min((i - e) / 1e3, 0.1);
|
|
5615
|
-
e = i, this.vrManager && this.vrManager.update(s), this.cameraManager && this.cameraManager.update(), this.emit("before-render", s);
|
|
6257
|
+
e = i, this.vrManager && this.vrManager.update(s), this.arManager && this.arManager.update(s * 1e3), this.cameraManager && this.cameraManager.update(), this.emit("before-render", s);
|
|
5616
6258
|
const o = this.renderer?.xr?.isPresenting;
|
|
5617
6259
|
this.renderer && this.sceneManager && this.cameraManager && (!this.skipRenderDuringLoad || o) && this.renderer.render(this.sceneManager.scene, this.cameraManager.camera);
|
|
5618
6260
|
};
|
|
@@ -5706,13 +6348,14 @@ class Qn extends yt {
|
|
|
5706
6348
|
const t = this.loadedModels.findIndex((i) => i.model === e);
|
|
5707
6349
|
if (t >= 0) {
|
|
5708
6350
|
const { url: i } = this.loadedModels[t];
|
|
5709
|
-
this.sceneManager.remove(e),
|
|
6351
|
+
this.sceneManager.remove(e), at(e), this.loadedModels.splice(t, 1), this.emit("model-removed", { model: e }), !this.loadedModels.some((o) => o.url === i) && this.modelLoader && this.modelLoader.releaseFromCache(i);
|
|
5710
6352
|
}
|
|
5711
6353
|
}
|
|
5712
6354
|
clearModels() {
|
|
6355
|
+
this.arManager && this.arManager.setTargetModel(null);
|
|
5713
6356
|
const e = new Set(this.loadedModels.map(({ url: t }) => t));
|
|
5714
6357
|
this.loadedModels.forEach(({ model: t }) => {
|
|
5715
|
-
|
|
6358
|
+
at(t), this.sceneManager.remove(t);
|
|
5716
6359
|
}), this.loadedModels.length = 0, e.forEach((t) => {
|
|
5717
6360
|
this.modelLoader && this.modelLoader.releaseFromCache(t);
|
|
5718
6361
|
}), this.emit("models-cleared");
|
|
@@ -5733,8 +6376,8 @@ class Qn extends yt {
|
|
|
5733
6376
|
* @since 1.0.0
|
|
5734
6377
|
*/
|
|
5735
6378
|
dispose() {
|
|
5736
|
-
this.currentAbortController && this.currentAbortController.abort(), typeof window < "u" &&
|
|
5737
|
-
e.parent && e.parent.remove(e),
|
|
6379
|
+
this.currentAbortController && this.currentAbortController.abort(), typeof window < "u" && ii.cleanup(), this.vrManager && (this.vrManager.dispose(), this.vrManager = null), this.arManager && (this.arManager.dispose(), this.arManager = null), this.renderer && this.renderer.setAnimationLoop(null), this.loadedModels.forEach(({ model: e }) => {
|
|
6380
|
+
e.parent && e.parent.remove(e), at(e);
|
|
5738
6381
|
}), this.loadedModels = [], this.cameraManager && (this.cameraManager.dispose(), this.cameraManager = null), this.renderer && (this.renderer.dispose(), this.renderer.domElement && this.renderer.domElement.parentNode && this.renderer.domElement.parentNode.removeChild(this.renderer.domElement), this.renderer = null), this.modelLoader && (this.modelLoader.dispose(), this.modelLoader = null), window.removeEventListener("resize", this.onWindowResize.bind(this)), this.removeAllListeners(), this.isInitialized = !1;
|
|
5739
6382
|
}
|
|
5740
6383
|
applyDesktopPositions(e) {
|
|
@@ -5820,15 +6463,15 @@ class Qn extends yt {
|
|
|
5820
6463
|
t && e.vr && this.vrManager ? this.vrManager.applyVRPositions(e) : !t && e.desktop && this.applyDesktopPositions(e.desktop);
|
|
5821
6464
|
}
|
|
5822
6465
|
}
|
|
5823
|
-
const
|
|
5824
|
-
class
|
|
6466
|
+
const si = new qe(), Fe = new R();
|
|
6467
|
+
class Ui extends Ds {
|
|
5825
6468
|
/**
|
|
5826
6469
|
* Constructs a new line segments geometry.
|
|
5827
6470
|
*/
|
|
5828
6471
|
constructor() {
|
|
5829
6472
|
super(), this.isLineSegmentsGeometry = !0, this.type = "LineSegmentsGeometry";
|
|
5830
6473
|
const e = [-1, 2, 0, 1, 2, 0, -1, 1, 0, 1, 1, 0, -1, 0, 0, 1, 0, 0, -1, -1, 0, 1, -1, 0], t = [-1, 2, 1, 2, -1, 1, 1, 1, -1, -1, 1, -1, -1, -2, 1, -2], i = [0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5];
|
|
5831
|
-
this.setIndex(i), this.setAttribute("position", new
|
|
6474
|
+
this.setIndex(i), this.setAttribute("position", new Ut(e, 3)), this.setAttribute("uv", new Ut(t, 2));
|
|
5832
6475
|
}
|
|
5833
6476
|
/**
|
|
5834
6477
|
* Applies the given 4x4 transformation matrix to the geometry.
|
|
@@ -5850,7 +6493,7 @@ class ki extends Ss {
|
|
|
5850
6493
|
setPositions(e) {
|
|
5851
6494
|
let t;
|
|
5852
6495
|
e instanceof Float32Array ? t = e : Array.isArray(e) && (t = new Float32Array(e));
|
|
5853
|
-
const i = new
|
|
6496
|
+
const i = new mt(t, 6, 1);
|
|
5854
6497
|
return this.setAttribute("instanceStart", new Ae(i, 3, 0)), this.setAttribute("instanceEnd", new Ae(i, 3, 3)), this.instanceCount = this.attributes.instanceStart.count, this.computeBoundingBox(), this.computeBoundingSphere(), this;
|
|
5855
6498
|
}
|
|
5856
6499
|
/**
|
|
@@ -5863,7 +6506,7 @@ class ki extends Ss {
|
|
|
5863
6506
|
setColors(e) {
|
|
5864
6507
|
let t;
|
|
5865
6508
|
e instanceof Float32Array ? t = e : Array.isArray(e) && (t = new Float32Array(e));
|
|
5866
|
-
const i = new
|
|
6509
|
+
const i = new mt(t, 6, 1);
|
|
5867
6510
|
return this.setAttribute("instanceColorStart", new Ae(i, 3, 0)), this.setAttribute("instanceColorEnd", new Ae(i, 3, 3)), this;
|
|
5868
6511
|
}
|
|
5869
6512
|
/**
|
|
@@ -5891,7 +6534,7 @@ class ki extends Ss {
|
|
|
5891
6534
|
* @return {LineSegmentsGeometry} A reference to this geometry.
|
|
5892
6535
|
*/
|
|
5893
6536
|
fromMesh(e) {
|
|
5894
|
-
return this.fromWireframeGeometry(new
|
|
6537
|
+
return this.fromWireframeGeometry(new Ts(e.geometry)), this;
|
|
5895
6538
|
}
|
|
5896
6539
|
/**
|
|
5897
6540
|
* Setups this line segments geometry from the given line segments.
|
|
@@ -5905,12 +6548,12 @@ class ki extends Ss {
|
|
|
5905
6548
|
return this.setPositions(t.attributes.position.array), this;
|
|
5906
6549
|
}
|
|
5907
6550
|
computeBoundingBox() {
|
|
5908
|
-
this.boundingBox === null && (this.boundingBox = new
|
|
6551
|
+
this.boundingBox === null && (this.boundingBox = new qe());
|
|
5909
6552
|
const e = this.attributes.instanceStart, t = this.attributes.instanceEnd;
|
|
5910
|
-
e !== void 0 && t !== void 0 && (this.boundingBox.setFromBufferAttribute(e),
|
|
6553
|
+
e !== void 0 && t !== void 0 && (this.boundingBox.setFromBufferAttribute(e), si.setFromBufferAttribute(t), this.boundingBox.union(si));
|
|
5911
6554
|
}
|
|
5912
6555
|
computeBoundingSphere() {
|
|
5913
|
-
this.boundingSphere === null && (this.boundingSphere = new
|
|
6556
|
+
this.boundingSphere === null && (this.boundingSphere = new St()), this.boundingBox === null && this.computeBoundingBox();
|
|
5914
6557
|
const e = this.attributes.instanceStart, t = this.attributes.instanceEnd;
|
|
5915
6558
|
if (e !== void 0 && t !== void 0) {
|
|
5916
6559
|
const i = this.boundingSphere.center;
|
|
@@ -5927,7 +6570,7 @@ class ki extends Ss {
|
|
|
5927
6570
|
Ne.line = {
|
|
5928
6571
|
worldUnits: { value: 1 },
|
|
5929
6572
|
linewidth: { value: 1 },
|
|
5930
|
-
resolution: { value: new
|
|
6573
|
+
resolution: { value: new V(1, 1) },
|
|
5931
6574
|
dashOffset: { value: 0 },
|
|
5932
6575
|
dashScale: { value: 1 },
|
|
5933
6576
|
dashSize: { value: 1 },
|
|
@@ -5935,7 +6578,7 @@ Ne.line = {
|
|
|
5935
6578
|
// todo FIX - maybe change to totalSize
|
|
5936
6579
|
};
|
|
5937
6580
|
Pe.line = {
|
|
5938
|
-
uniforms:
|
|
6581
|
+
uniforms: bi.merge([
|
|
5939
6582
|
Ne.common,
|
|
5940
6583
|
Ne.fog,
|
|
5941
6584
|
Ne.line
|
|
@@ -6318,7 +6961,7 @@ Pe.line = {
|
|
|
6318
6961
|
`
|
|
6319
6962
|
)
|
|
6320
6963
|
};
|
|
6321
|
-
class
|
|
6964
|
+
class Ve extends Ls {
|
|
6322
6965
|
/**
|
|
6323
6966
|
* Constructs a new line segments geometry.
|
|
6324
6967
|
*
|
|
@@ -6331,7 +6974,7 @@ class He extends xs {
|
|
|
6331
6974
|
constructor(e) {
|
|
6332
6975
|
super({
|
|
6333
6976
|
type: "LineMaterial",
|
|
6334
|
-
uniforms:
|
|
6977
|
+
uniforms: bi.clone(Pe.line.uniforms),
|
|
6335
6978
|
vertexShader: Pe.line.vertexShader,
|
|
6336
6979
|
fragmentShader: Pe.line.fragmentShader,
|
|
6337
6980
|
clipping: !0
|
|
@@ -6473,16 +7116,16 @@ class He extends xs {
|
|
|
6473
7116
|
this.defines && (e === !0 !== this.alphaToCoverage && (this.needsUpdate = !0), e === !0 ? this.defines.USE_ALPHA_TO_COVERAGE = "" : delete this.defines.USE_ALPHA_TO_COVERAGE);
|
|
6474
7117
|
}
|
|
6475
7118
|
}
|
|
6476
|
-
const
|
|
7119
|
+
const At = new Te(), oi = new R(), ni = new R(), _ = new Te(), G = new Te(), X = new Te(), lt = new R(), ct = new Ie(), P = new Fs(), ri = new R(), ke = new qe(), _e = new St(), Z = new Te();
|
|
6477
7120
|
let $, ce;
|
|
6478
|
-
function
|
|
7121
|
+
function ai(c, e, t) {
|
|
6479
7122
|
return Z.set(0, 0, -e, 1).applyMatrix4(c.projectionMatrix), Z.multiplyScalar(1 / Z.w), Z.x = ce / t.width, Z.y = ce / t.height, Z.applyMatrix4(c.projectionMatrixInverse), Z.multiplyScalar(1 / Z.w), Math.abs(Math.max(Z.x, Z.y));
|
|
6480
7123
|
}
|
|
6481
|
-
function
|
|
7124
|
+
function Gn(c, e) {
|
|
6482
7125
|
const t = c.matrixWorld, i = c.geometry, s = i.attributes.instanceStart, o = i.attributes.instanceEnd, n = Math.min(i.instanceCount, s.count);
|
|
6483
7126
|
for (let r = 0, A = n; r < A; r++) {
|
|
6484
7127
|
P.start.fromBufferAttribute(s, r), P.end.fromBufferAttribute(o, r), P.applyMatrix4(t);
|
|
6485
|
-
const a = new
|
|
7128
|
+
const a = new R(), l = new R();
|
|
6486
7129
|
$.distanceSqToSegment(P.start, P.end, l, a), l.distanceTo(a) < ce * 0.5 && e.push({
|
|
6487
7130
|
point: l,
|
|
6488
7131
|
pointOnLine: a,
|
|
@@ -6495,29 +7138,29 @@ function wn(c, e) {
|
|
|
6495
7138
|
});
|
|
6496
7139
|
}
|
|
6497
7140
|
}
|
|
6498
|
-
function
|
|
7141
|
+
function Pn(c, e, t) {
|
|
6499
7142
|
const i = e.projectionMatrix, o = c.material.resolution, n = c.matrixWorld, r = c.geometry, A = r.attributes.instanceStart, a = r.attributes.instanceEnd, l = Math.min(r.instanceCount, A.count), h = -e.near;
|
|
6500
|
-
$.at(1, X), X.w = 1, X.applyMatrix4(e.matrixWorldInverse), X.applyMatrix4(i), X.multiplyScalar(1 / X.w), X.x *= o.x / 2, X.y *= o.y / 2, X.z = 0,
|
|
7143
|
+
$.at(1, X), X.w = 1, X.applyMatrix4(e.matrixWorldInverse), X.applyMatrix4(i), X.multiplyScalar(1 / X.w), X.x *= o.x / 2, X.y *= o.y / 2, X.z = 0, lt.copy(X), ct.multiplyMatrices(e.matrixWorldInverse, n);
|
|
6501
7144
|
for (let d = 0, g = l; d < g; d++) {
|
|
6502
|
-
if (_.fromBufferAttribute(A, d), G.fromBufferAttribute(a, d), _.w = 1, G.w = 1, _.applyMatrix4(
|
|
7145
|
+
if (_.fromBufferAttribute(A, d), G.fromBufferAttribute(a, d), _.w = 1, G.w = 1, _.applyMatrix4(ct), G.applyMatrix4(ct), _.z > h && G.z > h)
|
|
6503
7146
|
continue;
|
|
6504
7147
|
if (_.z > h) {
|
|
6505
|
-
const
|
|
7148
|
+
const I = _.z - G.z, b = (_.z - h) / I;
|
|
6506
7149
|
_.lerp(G, b);
|
|
6507
7150
|
} else if (G.z > h) {
|
|
6508
|
-
const
|
|
7151
|
+
const I = G.z - _.z, b = (G.z - h) / I;
|
|
6509
7152
|
G.lerp(_, b);
|
|
6510
7153
|
}
|
|
6511
7154
|
_.applyMatrix4(i), G.applyMatrix4(i), _.multiplyScalar(1 / _.w), G.multiplyScalar(1 / G.w), _.x *= o.x / 2, _.y *= o.y / 2, G.x *= o.x / 2, G.y *= o.y / 2, P.start.copy(_), P.start.z = 0, P.end.copy(G), P.end.z = 0;
|
|
6512
|
-
const C = P.closestPointToPointParameter(
|
|
6513
|
-
P.at(C,
|
|
6514
|
-
const
|
|
7155
|
+
const C = P.closestPointToPointParameter(lt, !0);
|
|
7156
|
+
P.at(C, ri);
|
|
7157
|
+
const E = Bt.lerp(_.z, G.z, C), f = E >= -1 && E <= 1, m = lt.distanceTo(ri) < ce * 0.5;
|
|
6515
7158
|
if (f && m) {
|
|
6516
7159
|
P.start.fromBufferAttribute(A, d), P.end.fromBufferAttribute(a, d), P.start.applyMatrix4(n), P.end.applyMatrix4(n);
|
|
6517
|
-
const
|
|
6518
|
-
$.distanceSqToSegment(P.start, P.end, b,
|
|
7160
|
+
const I = new R(), b = new R();
|
|
7161
|
+
$.distanceSqToSegment(P.start, P.end, b, I), t.push({
|
|
6519
7162
|
point: b,
|
|
6520
|
-
pointOnLine:
|
|
7163
|
+
pointOnLine: I,
|
|
6521
7164
|
distance: $.origin.distanceTo(b),
|
|
6522
7165
|
object: c,
|
|
6523
7166
|
face: null,
|
|
@@ -6528,14 +7171,14 @@ function yn(c, e, t) {
|
|
|
6528
7171
|
}
|
|
6529
7172
|
}
|
|
6530
7173
|
}
|
|
6531
|
-
class
|
|
7174
|
+
class Nn extends Qt {
|
|
6532
7175
|
/**
|
|
6533
7176
|
* Constructs a new wide line.
|
|
6534
7177
|
*
|
|
6535
7178
|
* @param {LineSegmentsGeometry} [geometry] - The line geometry.
|
|
6536
7179
|
* @param {LineMaterial} [material] - The line material.
|
|
6537
7180
|
*/
|
|
6538
|
-
constructor(e = new
|
|
7181
|
+
constructor(e = new Ui(), t = new Ve({ color: Math.random() * 16777215 })) {
|
|
6539
7182
|
super(e, t), this.isLineSegments2 = !0, this.type = "LineSegments2";
|
|
6540
7183
|
}
|
|
6541
7184
|
/**
|
|
@@ -6548,8 +7191,8 @@ class Sn extends Qt {
|
|
|
6548
7191
|
computeLineDistances() {
|
|
6549
7192
|
const e = this.geometry, t = e.attributes.instanceStart, i = e.attributes.instanceEnd, s = new Float32Array(2 * t.count);
|
|
6550
7193
|
for (let n = 0, r = 0, A = t.count; n < A; n++, r += 2)
|
|
6551
|
-
|
|
6552
|
-
const o = new
|
|
7194
|
+
oi.fromBufferAttribute(t, n), ni.fromBufferAttribute(i, n), s[r] = r === 0 ? 0 : s[r - 1], s[r + 1] = s[r] + oi.distanceTo(ni);
|
|
7195
|
+
const o = new mt(s, 2, 1);
|
|
6553
7196
|
return e.setAttribute("instanceDistanceStart", new Ae(o, 1, 0)), e.setAttribute("instanceDistanceEnd", new Ae(o, 1, 1)), this;
|
|
6554
7197
|
}
|
|
6555
7198
|
/**
|
|
@@ -6570,7 +7213,7 @@ class Sn extends Qt {
|
|
|
6570
7213
|
a = ce * 0.5;
|
|
6571
7214
|
else {
|
|
6572
7215
|
const h = Math.max(s.near, _e.distanceToPoint($.origin));
|
|
6573
|
-
a =
|
|
7216
|
+
a = ai(s, h, A.resolution);
|
|
6574
7217
|
}
|
|
6575
7218
|
if (_e.radius += a, $.intersectsSphere(_e) === !1)
|
|
6576
7219
|
return;
|
|
@@ -6580,16 +7223,16 @@ class Sn extends Qt {
|
|
|
6580
7223
|
l = ce * 0.5;
|
|
6581
7224
|
else {
|
|
6582
7225
|
const h = Math.max(s.near, ke.distanceToPoint($.origin));
|
|
6583
|
-
l =
|
|
7226
|
+
l = ai(s, h, A.resolution);
|
|
6584
7227
|
}
|
|
6585
|
-
ke.expandByScalar(l), $.intersectsBox(ke) !== !1 && (i ?
|
|
7228
|
+
ke.expandByScalar(l), $.intersectsBox(ke) !== !1 && (i ? Gn(this, t) : Pn(this, s, t));
|
|
6586
7229
|
}
|
|
6587
7230
|
onBeforeRender(e) {
|
|
6588
7231
|
const t = this.material.uniforms;
|
|
6589
|
-
t && t.resolution && (e.getViewport(
|
|
7232
|
+
t && t.resolution && (e.getViewport(At), this.material.uniforms.resolution.value.set(At.z, At.w));
|
|
6590
7233
|
}
|
|
6591
7234
|
}
|
|
6592
|
-
class
|
|
7235
|
+
class It extends Ui {
|
|
6593
7236
|
/**
|
|
6594
7237
|
* Constructs a new line geometry.
|
|
6595
7238
|
*/
|
|
@@ -6643,18 +7286,18 @@ class Ct extends ki {
|
|
|
6643
7286
|
return this.setPositions(t.attributes.position.array), this;
|
|
6644
7287
|
}
|
|
6645
7288
|
}
|
|
6646
|
-
class
|
|
7289
|
+
class Ai extends Nn {
|
|
6647
7290
|
/**
|
|
6648
7291
|
* Constructs a new wide line.
|
|
6649
7292
|
*
|
|
6650
7293
|
* @param {LineGeometry} [geometry] - The line geometry.
|
|
6651
7294
|
* @param {LineMaterial} [material] - The line material.
|
|
6652
7295
|
*/
|
|
6653
|
-
constructor(e = new
|
|
7296
|
+
constructor(e = new It(), t = new Ve({ color: Math.random() * 16777215 })) {
|
|
6654
7297
|
super(e, t), this.isLine2 = !0, this.type = "Line2";
|
|
6655
7298
|
}
|
|
6656
7299
|
}
|
|
6657
|
-
class
|
|
7300
|
+
class Un {
|
|
6658
7301
|
/**
|
|
6659
7302
|
* Set the objects to use for raycasting during measurement
|
|
6660
7303
|
*
|
|
@@ -6714,7 +7357,7 @@ class Mn {
|
|
|
6714
7357
|
}
|
|
6715
7358
|
l && h ? (this.attachVR({ controller1: l, controller2: h, controllerGrip1: d, controllerGrip2: g }), this.ghostSpheres && this.ghostSpheres.left && this.ghostSpheres.right && (this.ghostSpheres.left.visible = !0, this.ghostSpheres.right.visible = !0)) : (this._ghostSphereAttachRetries || (this._ghostSphereAttachRetries = 0), this._ghostSphereAttachRetries < 40 ? (this._ghostSphereAttachRetries++, setTimeout(a, 250)) : typeof window < "u" && window.console && console.warn("[MeasurementSystem] Could not find VR controllers to attach ghost spheres after multiple attempts."));
|
|
6716
7359
|
};
|
|
6717
|
-
if (a(), i && i.xr && i.xr.addEventListener && i.xr.addEventListener("sessionstart", a), this.sphereGeometry = new u.SphereGeometry(0.02, 8, 6), this.placedMaterial = new u.MeshBasicMaterial({ color: 16777215 }), this.vrLineMaterial = new
|
|
7360
|
+
if (a(), i && i.xr && i.xr.addEventListener && i.xr.addEventListener("sessionstart", a), this.sphereGeometry = new u.SphereGeometry(0.02, 8, 6), this.placedMaterial = new u.MeshBasicMaterial({ color: 16777215 }), this.vrLineMaterial = new Ve({
|
|
6718
7361
|
color: 16777215,
|
|
6719
7362
|
linewidth: 3,
|
|
6720
7363
|
transparent: !0,
|
|
@@ -6722,7 +7365,7 @@ class Mn {
|
|
|
6722
7365
|
depthTest: !1,
|
|
6723
7366
|
vertexColors: !1,
|
|
6724
7367
|
dashed: !1
|
|
6725
|
-
}), this.desktopLineMaterial = new
|
|
7368
|
+
}), this.desktopLineMaterial = new Ve({
|
|
6726
7369
|
color: 16777215,
|
|
6727
7370
|
linewidth: 3,
|
|
6728
7371
|
transparent: !0,
|
|
@@ -6842,7 +7485,7 @@ class Mn {
|
|
|
6842
7485
|
s.position.copy(i), this.scene.add(s), this.desktopMeasurementPoints.push(s);
|
|
6843
7486
|
}
|
|
6844
7487
|
if (this.desktopMeasurementPoints.length === 2) {
|
|
6845
|
-
const e = new
|
|
7488
|
+
const e = new It();
|
|
6846
7489
|
e.setPositions([
|
|
6847
7490
|
this.desktopMeasurementPoints[0].position.x,
|
|
6848
7491
|
this.desktopMeasurementPoints[0].position.y,
|
|
@@ -6850,7 +7493,7 @@ class Mn {
|
|
|
6850
7493
|
this.desktopMeasurementPoints[1].position.x,
|
|
6851
7494
|
this.desktopMeasurementPoints[1].position.y,
|
|
6852
7495
|
this.desktopMeasurementPoints[1].position.z
|
|
6853
|
-
]), this.desktopMeasurementLine = new
|
|
7496
|
+
]), this.desktopMeasurementLine = new Ai(e, this.desktopLineMaterial), this.desktopMeasurementLine.computeLineDistances(), this.scene.add(this.desktopMeasurementLine);
|
|
6854
7497
|
const t = this.desktopMeasurementPoints[0].position.distanceTo(this.desktopMeasurementPoints[1].position);
|
|
6855
7498
|
if (this.createMeasurementDisplay(t), this.measurementSprite) {
|
|
6856
7499
|
const i = new u.Vector3();
|
|
@@ -6872,8 +7515,8 @@ class Mn {
|
|
|
6872
7515
|
e <= 2 ? a = 0.4 + e / 2 * 0.3 : e <= 4 ? a = 0.7 + (e - 2) / 2 * 0.2 : a = 0.9 + Math.min((e - 4) / 16, 1) * 0.5;
|
|
6873
7516
|
const l = Math.round(A * a);
|
|
6874
7517
|
r.font = `600 ${l}px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif`;
|
|
6875
|
-
const h = `${e.toFixed(2)}m`, g = r.measureText(h).width, p = l, C = Math.max(6, l * 0.3),
|
|
6876
|
-
if (r.fillStyle = "rgba(0, 0, 0, 0.8)", r.beginPath(), r.roundRect(m,
|
|
7518
|
+
const h = `${e.toFixed(2)}m`, g = r.measureText(h).width, p = l, C = Math.max(6, l * 0.3), E = g + C * 2, f = p + C * 2, m = (i - E) / 2, I = (s - f) / 2;
|
|
7519
|
+
if (r.fillStyle = "rgba(0, 0, 0, 0.8)", r.beginPath(), r.roundRect(m, I, E, f, Math.max(4, l * 0.2)), r.fill(), r.fillStyle = "white", r.textAlign = "center", r.textBaseline = "middle", r.fillText(h, i / 2, s / 2), r.restore(), this.measurementTexture ? this.measurementTexture.needsUpdate = !0 : (this.measurementTexture = new u.CanvasTexture(this.measurementCanvas), this.measurementTexture.minFilter = u.LinearFilter, this.measurementTexture.magFilter = u.LinearFilter), !this.measurementSprite) {
|
|
6877
7520
|
const w = new u.SpriteMaterial({
|
|
6878
7521
|
map: this.measurementTexture,
|
|
6879
7522
|
depthTest: !1,
|
|
@@ -6881,8 +7524,8 @@ class Mn {
|
|
|
6881
7524
|
});
|
|
6882
7525
|
this.measurementSprite = new u.Sprite(w);
|
|
6883
7526
|
}
|
|
6884
|
-
const B = 0.3 * a,
|
|
6885
|
-
return this.measurementSprite.scale.set(B *
|
|
7527
|
+
const B = 0.3 * a, y = i / s;
|
|
7528
|
+
return this.measurementSprite.scale.set(B * y, B, 1), this.measurementSprite;
|
|
6886
7529
|
}
|
|
6887
7530
|
/**
|
|
6888
7531
|
* Attach VR controllers for VR measurement mode
|
|
@@ -6990,7 +7633,7 @@ class Mn {
|
|
|
6990
7633
|
*/
|
|
6991
7634
|
updateUnifiedMeasurementLine() {
|
|
6992
7635
|
if (this.unifiedMeasurementLine && (this.scene.remove(this.unifiedMeasurementLine), this.unifiedMeasurementLine = null), this.unifiedMeasurementPoints.length === 2) {
|
|
6993
|
-
const e = this.unifiedMeasurementPoints[0].position, t = this.unifiedMeasurementPoints[1].position, i = new
|
|
7636
|
+
const e = this.unifiedMeasurementPoints[0].position, t = this.unifiedMeasurementPoints[1].position, i = new It();
|
|
6994
7637
|
i.setPositions([
|
|
6995
7638
|
e.x,
|
|
6996
7639
|
e.y,
|
|
@@ -6998,7 +7641,7 @@ class Mn {
|
|
|
6998
7641
|
t.x,
|
|
6999
7642
|
t.y,
|
|
7000
7643
|
t.z
|
|
7001
|
-
]), this.unifiedMeasurementLine = new
|
|
7644
|
+
]), this.unifiedMeasurementLine = new Ai(i, this.desktopLineMaterial), this.unifiedMeasurementLine.computeLineDistances(), this.unifiedMeasurementLine.userData.isMeasurementLine = !0, this.scene.add(this.unifiedMeasurementLine);
|
|
7002
7645
|
const s = e.distanceTo(t);
|
|
7003
7646
|
if (this.createMeasurementDisplay(s), this.measurementSprite) {
|
|
7004
7647
|
const o = new u.Vector3();
|
|
@@ -7166,7 +7809,7 @@ class Mn {
|
|
|
7166
7809
|
}
|
|
7167
7810
|
}
|
|
7168
7811
|
}
|
|
7169
|
-
class
|
|
7812
|
+
class Rt {
|
|
7170
7813
|
constructor(e, t = {}) {
|
|
7171
7814
|
this.vrManager = e, this.isComfortMode = !1, this._iconRendered = !1, this.options = {
|
|
7172
7815
|
containerId: t.containerId || "modelSelector",
|
|
@@ -7455,10 +8098,10 @@ class xt {
|
|
|
7455
8098
|
this.vrManager = null;
|
|
7456
8099
|
}
|
|
7457
8100
|
static create(e, t = {}) {
|
|
7458
|
-
return new
|
|
8101
|
+
return new Rt(e, t);
|
|
7459
8102
|
}
|
|
7460
8103
|
}
|
|
7461
|
-
class
|
|
8104
|
+
class Vn {
|
|
7462
8105
|
constructor(e) {
|
|
7463
8106
|
this.scene = e, this.particleBounds = {
|
|
7464
8107
|
min: new u.Vector3(-50, -25, -50),
|
|
@@ -7649,7 +8292,7 @@ class xn {
|
|
|
7649
8292
|
this.particles && (this.scene.remove(this.particles), this.particles.geometry && this.particles.geometry.dispose(), this.particles.material && this.particles.material.dispose(), this.particles = null);
|
|
7650
8293
|
}
|
|
7651
8294
|
}
|
|
7652
|
-
class
|
|
8295
|
+
class On {
|
|
7653
8296
|
constructor(e) {
|
|
7654
8297
|
this.scene = e, this.controllerSpotlight = null, this.spotlightTarget = null, this.isQuest2 = !1, this.isQuest3 = !1, this.detectQuestDevice(), this.createSpotlight();
|
|
7655
8298
|
}
|
|
@@ -7756,7 +8399,7 @@ class vn {
|
|
|
7756
8399
|
this.controllerSpotlight && (this.scene.remove(this.controllerSpotlight), this.controllerSpotlight = null), this.spotlightTarget && (this.scene.remove(this.spotlightTarget), this.spotlightTarget = null);
|
|
7757
8400
|
}
|
|
7758
8401
|
}
|
|
7759
|
-
class
|
|
8402
|
+
class Hn {
|
|
7760
8403
|
constructor(e) {
|
|
7761
8404
|
this.scene = e, this.overheadLight = null, this.clearModeDirectionalLight = null, this.clearModeHemisphereLight = null, this.isTransitioning = !1, this.currentMode = "survey", this.pendingAnimations = /* @__PURE__ */ new Set(), this.isDisposed = !1, this.initializeLighting();
|
|
7762
8405
|
}
|
|
@@ -7807,12 +8450,12 @@ class Dn {
|
|
|
7807
8450
|
return;
|
|
7808
8451
|
}
|
|
7809
8452
|
try {
|
|
7810
|
-
const C = p - a,
|
|
8453
|
+
const C = p - a, E = Math.min(C / n, 1), f = 1 - Math.pow(1 - E, 3);
|
|
7811
8454
|
if (!e || this.scene && !this.scene.children.includes(e)) {
|
|
7812
8455
|
this.pendingAnimations.delete(A), r && r();
|
|
7813
8456
|
return;
|
|
7814
8457
|
}
|
|
7815
|
-
e.intensity = t + l * f, h && d && e.color && e.color.lerpColors(h, d, f),
|
|
8458
|
+
e.intensity = t + l * f, h && d && e.color && e.color.lerpColors(h, d, f), E < 1 ? requestAnimationFrame(g) : (this.pendingAnimations.delete(A), r && r());
|
|
7816
8459
|
} catch (C) {
|
|
7817
8460
|
console.error("Error in lighting animation:", C), this.pendingAnimations.delete(A), r && r();
|
|
7818
8461
|
}
|
|
@@ -7846,9 +8489,9 @@ class Dn {
|
|
|
7846
8489
|
});
|
|
7847
8490
|
}
|
|
7848
8491
|
}
|
|
7849
|
-
class
|
|
8492
|
+
class qn {
|
|
7850
8493
|
constructor(e, t, i) {
|
|
7851
|
-
this.scene = e, this.renderer = t, this.camera = i, this.isDiveModeEnabled = !1, this.currentVRMode = null, this.lighting = new
|
|
8494
|
+
this.scene = e, this.renderer = t, this.camera = i, this.isDiveModeEnabled = !1, this.currentVRMode = null, this.lighting = new Hn(e), this.particles = new Vn(e), this.torch = new On(e), this.isQuest2 = !1, this.isQuest3 = !1, this.detectQuestDevice(), this.applyModeSettings();
|
|
7852
8495
|
}
|
|
7853
8496
|
/**
|
|
7854
8497
|
* Toggle between dive and survey modes
|
|
@@ -8009,7 +8652,7 @@ class Rn {
|
|
|
8009
8652
|
this.lighting.dispose(), this.particles.dispose(), this.torch.dispose();
|
|
8010
8653
|
}
|
|
8011
8654
|
}
|
|
8012
|
-
class
|
|
8655
|
+
class Kn extends je {
|
|
8013
8656
|
/**
|
|
8014
8657
|
* Creates a new ModelViewer instance
|
|
8015
8658
|
*
|
|
@@ -8025,6 +8668,7 @@ class Tn extends yt {
|
|
|
8025
8668
|
showStatus: { type: "boolean", default: !1 },
|
|
8026
8669
|
showInfo: { type: "boolean", default: !1 },
|
|
8027
8670
|
enableVR: { type: "boolean", default: !1 },
|
|
8671
|
+
enableAR: { type: "boolean", default: !1 },
|
|
8028
8672
|
enableMeasurement: { type: "boolean", default: !0 },
|
|
8029
8673
|
measurementTheme: { type: "string", default: "dark" },
|
|
8030
8674
|
showMeasurementLabels: { type: "boolean", default: !1 },
|
|
@@ -8046,16 +8690,21 @@ class Tn extends yt {
|
|
|
8046
8690
|
initialModel: { type: "string", default: null },
|
|
8047
8691
|
initialPositions: { type: "object", default: null }
|
|
8048
8692
|
};
|
|
8049
|
-
this.config = new
|
|
8693
|
+
this.config = new Ke(i).validate(t), this.options = this.config, this.currentModelKey = null, this.belowViewer = null, this.ui = {}, this.measurementSystem = null, this.comfortGlyph = null, this.diveSystem = null, this.fullscreenButton = null, this.screenshotButton = null, this.lastComfortMode = null, this.isLoading = !1, this.loadingMessage = "", this.loadingModelName = "", this.loadingPercentage = 0, this.lastManualLoadingMessage = "", this.stageOverrideActive = !1, this.vrUpdateLoop = null, typeof window < "u" && (window.modelViewer = this), this.init();
|
|
8050
8694
|
}
|
|
8051
8695
|
init() {
|
|
8052
8696
|
const e = {
|
|
8053
8697
|
...this.config.viewerConfig,
|
|
8054
|
-
|
|
8698
|
+
// Enable VR only if AR is not enabled
|
|
8699
|
+
...this.config.enableVR && !this.config.enableAR && { vr: { enabled: !0 } },
|
|
8700
|
+
// Enable AR if requested
|
|
8701
|
+
...this.config.enableAR && { ar: { enabled: !0, ...this.config.viewerConfig?.ar || {} } },
|
|
8702
|
+
// Explicitly disable VR when AR is enabled
|
|
8703
|
+
...this.config.enableAR && { vr: { enabled: !1 } },
|
|
8055
8704
|
...this.config.audioPath && { audioPath: this.config.audioPath },
|
|
8056
8705
|
...typeof this.config.enableVRAudio < "u" && { enableVRAudio: this.config.enableVRAudio }
|
|
8057
8706
|
};
|
|
8058
|
-
if (this.belowViewer = new
|
|
8707
|
+
if (this.belowViewer = new _n(this.container, e), this.setupEventForwarding(), this.belowViewer.on("initialized", () => {
|
|
8059
8708
|
this.setupFocusInteraction(), this._maybeAttachMeasurementSystem(), this._maybeAttachVRComfortGlyph(), this._maybeAttachDiveSystem(), this._maybeAttachScreenshotButton(), this._maybeAttachFullscreenButton();
|
|
8060
8709
|
}), this.belowViewer.isInitialized && (this.setupFocusInteraction(), this._maybeAttachMeasurementSystem(), this._maybeAttachVRComfortGlyph(), this._maybeAttachDiveSystem(), this._maybeAttachScreenshotButton(), this._maybeAttachFullscreenButton()), Object.keys(this.config.models).length > 0 && (this.createUI(), this.populateDropdown(), this.config.autoLoadFirst)) {
|
|
8061
8710
|
const t = Object.keys(this.config.models)[0];
|
|
@@ -8064,7 +8713,7 @@ class Tn extends yt {
|
|
|
8064
8713
|
}
|
|
8065
8714
|
_maybeAttachMeasurementSystem() {
|
|
8066
8715
|
if (!this.config.enableMeasurement || this.measurementSystem) return;
|
|
8067
|
-
this.measurementSystem = new
|
|
8716
|
+
this.measurementSystem = new Un({
|
|
8068
8717
|
scene: this.belowViewer.sceneManager.scene,
|
|
8069
8718
|
camera: this.belowViewer.cameraManager.camera,
|
|
8070
8719
|
renderer: this.belowViewer.renderer,
|
|
@@ -8090,7 +8739,7 @@ class Tn extends yt {
|
|
|
8090
8739
|
}
|
|
8091
8740
|
async _maybeAttachVRComfortGlyph() {
|
|
8092
8741
|
if (!(!this.config.enableVRComfortGlyph || this.comfortGlyph) && this.belowViewer.vrManager && this.belowViewer.vrManager.vrCore && (await this.belowViewer.vrManager.vrCore.checkVRSupported(), !!this.belowViewer.vrManager.vrCore.isVRSupported)) {
|
|
8093
|
-
if (this.comfortGlyph = new
|
|
8742
|
+
if (this.comfortGlyph = new Rt(this.belowViewer.vrManager, {
|
|
8094
8743
|
position: "bottom-right",
|
|
8095
8744
|
offsetX: 20,
|
|
8096
8745
|
offsetY: 70
|
|
@@ -8111,7 +8760,7 @@ class Tn extends yt {
|
|
|
8111
8760
|
}
|
|
8112
8761
|
_maybeAttachDiveSystem() {
|
|
8113
8762
|
if (!this.config.enableDiveSystem || this.diveSystem) return;
|
|
8114
|
-
this.diveSystem = new
|
|
8763
|
+
this.diveSystem = new qn(
|
|
8115
8764
|
this.belowViewer.sceneManager.scene,
|
|
8116
8765
|
this.belowViewer.renderer,
|
|
8117
8766
|
this.belowViewer.cameraManager.camera
|
|
@@ -8392,8 +9041,8 @@ class Tn extends yt {
|
|
|
8392
9041
|
transparent: !0
|
|
8393
9042
|
});
|
|
8394
9043
|
this.vrLoadingSprite = new u.Sprite(p);
|
|
8395
|
-
const C = 0.7,
|
|
8396
|
-
this.vrLoadingSprite.scale.set(C *
|
|
9044
|
+
const C = 0.7, E = o / n;
|
|
9045
|
+
this.vrLoadingSprite.scale.set(C * E, C, 1);
|
|
8397
9046
|
}
|
|
8398
9047
|
return this.vrLoadingSprite;
|
|
8399
9048
|
}
|
|
@@ -8740,15 +9389,15 @@ class Tn extends yt {
|
|
|
8740
9389
|
}
|
|
8741
9390
|
}
|
|
8742
9391
|
export {
|
|
8743
|
-
|
|
8744
|
-
|
|
8745
|
-
|
|
8746
|
-
|
|
8747
|
-
|
|
8748
|
-
|
|
8749
|
-
|
|
8750
|
-
|
|
8751
|
-
|
|
8752
|
-
|
|
8753
|
-
|
|
9392
|
+
_n as BelowViewer,
|
|
9393
|
+
Ws as Camera,
|
|
9394
|
+
Ke as ConfigValidator,
|
|
9395
|
+
je as EventSystem,
|
|
9396
|
+
Ai as Line2,
|
|
9397
|
+
It as LineGeometry,
|
|
9398
|
+
Ve as LineMaterial,
|
|
9399
|
+
O as ModelLoader,
|
|
9400
|
+
Kn as ModelViewer,
|
|
9401
|
+
ks as Scene,
|
|
9402
|
+
Mn as VRManager
|
|
8754
9403
|
};
|