@shopware-ag/dive 2.0.1-beta.0 → 2.0.1-beta.10
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/build/chunks/AssetCache-C-7MpNrK.cjs +1 -0
- package/build/chunks/AssetCache-CZV5A70i.mjs +79 -0
- package/build/chunks/AssetExporter-DsbC2rqv.cjs +164 -0
- package/build/{src/modules/asset/exporter/AssetExporter.mjs → chunks/AssetExporter-brT7ogoM.mjs} +22 -21
- package/build/chunks/AssetLoader-BZlqXTbf.cjs +4 -0
- package/build/chunks/AssetLoader-Dnh5tbUZ.mjs +2341 -0
- package/build/chunks/FileTypes-DMybIHHj.mjs +1109 -0
- package/build/chunks/FileTypes-PEcAgRZ8.cjs +30 -0
- package/build/chunks/MathUtils-CBW56ZuG.cjs +1 -0
- package/build/chunks/MathUtils-CFGjHuVF.mjs +159 -0
- package/build/chunks/OrbitController-D-WNei2f.mjs +940 -0
- package/build/chunks/OrbitController-rMX8EHvJ.cjs +1 -0
- package/build/chunks/PerspectiveCamera-CONx93im.cjs +1 -0
- package/build/chunks/PerspectiveCamera-DUiWJJIj.mjs +38 -0
- package/build/chunks/PovSchema-Co9FznEz.cjs +1 -0
- package/build/chunks/PovSchema-DWWvr_ED.mjs +10 -0
- package/build/chunks/SelectTool-BVxDEcnM.cjs +1 -0
- package/build/chunks/{SelectTool-mTRiZYaC.mjs → SelectTool-D5QfT5rr.mjs} +59 -54
- package/build/chunks/draco_decoder-Bh9flJPu.cjs +1 -0
- package/build/chunks/draco_decoder-CEzwqP9o.mjs +38 -0
- package/build/chunks/draco_decoder-DtHHc5d0.mjs +4 -0
- package/build/chunks/draco_decoder-DvYjcLz_.cjs +35 -0
- package/build/chunks/draco_wasm_wrapper-FoEVV9af.cjs +118 -0
- package/build/chunks/draco_wasm_wrapper-yQy2VLhb.mjs +121 -0
- package/build/chunks/fflate.module-DHdJvhNh.cjs +6 -0
- package/build/chunks/fflate.module-xyO_T3Zm.mjs +602 -0
- package/build/chunks/findInterface-C6mrvf_t.cjs +1 -0
- package/build/chunks/findInterface-DbJ5qzbc.mjs +11 -0
- package/build/chunks/isFileTypeSupported-BSpswPHU.mjs +12 -0
- package/build/chunks/isFileTypeSupported-CrEqYiv9.cjs +1 -0
- package/build/chunks/network-error-BONfHWQq.mjs +14 -0
- package/build/chunks/network-error-CdDXil5g.cjs +1 -0
- package/build/chunks/package-Bf92jAR_.cjs +1 -0
- package/build/chunks/package-ZPbjnXun.mjs +39 -0
- package/build/chunks/parse-error-DfOPyLWM.mjs +14 -0
- package/build/chunks/parse-error-Dy_EE4rL.cjs +1 -0
- package/build/dive.cjs +1 -30
- package/build/dive.mjs +665 -1622
- package/build/plugins/animation/index.cjs +1 -0
- package/build/plugins/animation/index.d.ts +2 -0
- package/build/plugins/animation/index.mjs +126 -0
- package/build/plugins/ar/index.cjs +1 -0
- package/build/plugins/ar/index.d.ts +2 -0
- package/build/plugins/ar/index.mjs +207 -0
- package/build/plugins/assetcache/index.cjs +1 -0
- package/build/plugins/assetcache/index.d.ts +2 -0
- package/build/plugins/assetcache/index.mjs +5 -0
- package/build/plugins/assetconverter/index.d.ts +2 -0
- package/build/plugins/assetexporter/index.cjs +1 -0
- package/build/plugins/assetexporter/index.d.ts +2 -0
- package/build/plugins/assetexporter/index.mjs +4 -0
- package/build/plugins/assetloader/index.cjs +1 -0
- package/build/plugins/assetloader/index.d.ts +2 -0
- package/build/plugins/assetloader/index.mjs +6 -0
- package/build/plugins/axiscamera/index.cjs +1 -0
- package/build/plugins/axiscamera/index.d.ts +2 -0
- package/build/plugins/axiscamera/index.mjs +4 -0
- package/build/plugins/mediacreator/index.cjs +1 -0
- package/build/plugins/mediacreator/index.d.ts +2 -0
- package/build/{src/modules/mediacreator/MediaCreator.mjs → plugins/mediacreator/index.mjs} +4 -4
- package/build/plugins/orbitcontroller/index.cjs +1 -0
- package/build/plugins/orbitcontroller/index.d.ts +2 -0
- package/build/plugins/orbitcontroller/index.mjs +5 -0
- package/build/plugins/state/index.cjs +27 -0
- package/build/plugins/state/index.d.ts +2 -0
- package/build/plugins/state/index.mjs +4265 -0
- package/build/plugins/systeminfo/index.cjs +1 -0
- package/build/plugins/systeminfo/index.d.ts +2 -0
- package/build/{chunks/SystemInfo-DPAQG-S5.mjs → plugins/systeminfo/index.mjs} +48 -51
- package/build/plugins/toolbox/index.cjs +1 -0
- package/build/plugins/toolbox/index.d.ts +2 -0
- package/build/{src/modules/toolbox/Toolbox.mjs → plugins/toolbox/index.mjs} +23 -17
- package/build/src/components/floor/Floor.d.ts +2 -2
- package/build/src/components/gizmo/Gizmo.d.ts +1 -1
- package/build/src/components/gizmo/handles/AxisHandle.d.ts +1 -1
- package/build/src/components/gizmo/handles/RadialHandle.d.ts +1 -1
- package/build/src/components/gizmo/handles/ScaleHandle.d.ts +1 -1
- package/build/src/components/gizmo/rotate/RotateGizmo.d.ts +2 -2
- package/build/src/components/gizmo/scale/ScaleGizmo.d.ts +2 -2
- package/build/src/components/gizmo/translate/TranslateGizmo.d.ts +2 -2
- package/build/src/components/grid/Grid.d.ts +1 -1
- package/build/src/components/group/Group.d.ts +4 -4
- package/build/src/components/light/AmbientLight.d.ts +3 -3
- package/build/src/components/light/PointLight.d.ts +3 -3
- package/build/src/components/light/SceneLight.d.ts +3 -3
- package/build/src/components/model/Model.d.ts +8 -5
- package/build/src/components/node/Node.d.ts +8 -8
- package/build/src/components/primitive/Primitive.d.ts +5 -5
- package/build/src/components/root/Root.d.ts +19 -31
- package/build/src/core/Dive.d.ts +8 -7
- package/build/src/engine/Engine.d.ts +2 -6
- package/build/src/engine/clock/Clock.d.ts +1 -0
- package/build/src/engine/index.d.ts +6 -0
- package/build/src/engine/renderer/Renderer.d.ts +47 -7
- package/build/src/engine/scene/Scene.d.ts +4 -22
- package/build/src/engine/scene/xrroot/XRRoot.d.ts +2 -2
- package/build/src/engine/scene/xrroot/xrlightroot/XRLightRoot.d.ts +2 -2
- package/build/src/error/file-content/file-content-error.d.ts +4 -0
- package/build/src/error/index.d.ts +4 -0
- package/build/src/error/network/network-error.d.ts +1 -1
- package/build/src/error/parse/parse-error.d.ts +2 -1
- package/build/src/events/dispatcher/EventDispatcher.d.ts +6 -0
- package/build/src/events/index.d.ts +1 -0
- package/build/src/helpers/deepClone/deepClone.d.ts +34 -0
- package/build/src/helpers/index.d.ts +5 -4
- package/build/src/index.d.ts +5 -5
- package/build/src/interfaces/Draggable.d.ts +1 -1
- package/build/src/plugins/animation/index.d.ts +2 -0
- package/build/src/{modules/animation → plugins/animation/src}/animator/Animator.d.ts +2 -3
- package/build/src/plugins/animation/src/index.d.ts +3 -0
- package/build/src/plugins/animation/src/system/AnimationSystem.d.ts +23 -0
- package/build/src/plugins/ar/index.d.ts +4 -0
- package/build/src/plugins/ar/src/ARSystem.d.ts +24 -0
- package/build/src/plugins/ar/src/arquicklook/ARQuickLook.d.ts +15 -0
- package/build/src/plugins/ar/src/error/ar-errors.d.ts +24 -0
- package/build/src/{modules/ar → plugins/ar/src}/sceneviewer/SceneViewer.d.ts +10 -0
- package/build/src/{modules/ar → plugins/ar/src}/webxr/WebXR.d.ts +4 -4
- package/build/src/{modules/ar → plugins/ar/src}/webxr/controller/WebXRController.d.ts +5 -5
- package/build/src/{modules/ar → plugins/ar/src}/webxr/crosshair/WebXRCrosshair.d.ts +2 -2
- package/build/src/{modules/ar → plugins/ar/src}/webxr/origin/WebXROrigin.d.ts +4 -4
- package/build/src/{modules/ar → plugins/ar/src}/webxr/overlay/Overlay.d.ts +2 -2
- package/build/src/{modules/ar → plugins/ar/src}/webxr/raycaster/WebXRRaycaster.d.ts +8 -8
- package/build/src/{modules/ar → plugins/ar/src}/webxr/raycaster/ar/WebXRRaycasterAR.d.ts +4 -4
- package/build/src/{modules/ar → plugins/ar/src}/webxr/raycaster/three/WebXRRaycasterTHREE.d.ts +4 -4
- package/build/src/{modules/ar → plugins/ar/src}/webxr/touchscreencontrols/WebXRTouchscreenControls.d.ts +3 -3
- package/build/src/plugins/assetcache/index.d.ts +1 -0
- package/build/src/plugins/assetcache/src/cache/AssetCache.d.ts +12 -0
- package/build/src/plugins/assetcache/src/chunk/Chunk.d.ts +16 -0
- package/build/src/plugins/assetcache/src/index.d.ts +2 -0
- package/build/src/plugins/assetconverter/index.d.ts +1 -0
- package/build/src/plugins/assetconverter/src/AssetConverter.d.ts +13 -0
- package/build/src/plugins/assetexporter/index.d.ts +1 -0
- package/build/src/{modules/asset/exporter → plugins/assetexporter/src}/AssetExporter.d.ts +0 -17
- package/build/src/plugins/assetloader/index.d.ts +3 -0
- package/build/src/plugins/assetloader/src/draco/DracoLoader.d.ts +10 -0
- package/build/src/plugins/assetloader/src/loader/AssetLoader.d.ts +14 -0
- package/build/src/plugins/axiscamera/index.d.ts +1 -0
- package/build/src/{modules/axiscamera → plugins/axiscamera/src}/AxisCamera.d.ts +3 -6
- package/build/src/plugins/mediacreator/index.d.ts +1 -0
- package/build/src/plugins/mediacreator/src/MediaCreator.d.ts +15 -0
- package/build/src/plugins/orbitcontroller/index.d.ts +1 -0
- package/build/src/{modules/controller/orbit → plugins/orbitcontroller/src}/OrbitController.d.ts +3 -3
- package/build/src/plugins/state/index.d.ts +4 -0
- package/build/src/{modules/state → plugins/state/src}/State.d.ts +4 -27
- package/build/src/{modules/state → plugins/state/src}/actions/action.d.ts +1 -1
- package/build/src/{modules/state → plugins/state/src}/actions/ar/launchar.d.ts +2 -2
- package/build/src/{modules/state → plugins/state/src}/actions/camera/computeencompassingview.d.ts +1 -1
- package/build/src/{modules/state → plugins/state/src}/actions/camera/getcameratransform.d.ts +1 -1
- package/build/src/{modules/state → plugins/state/src}/actions/camera/lockcamera.d.ts +1 -1
- package/build/src/{modules/state → plugins/state/src}/actions/camera/movecamera.d.ts +1 -1
- package/build/src/{modules/state → plugins/state/src}/actions/camera/setcameralayer.d.ts +1 -1
- package/build/src/{modules/state → plugins/state/src}/actions/camera/setcameratransform.d.ts +1 -1
- package/build/src/{modules/state → plugins/state/src}/actions/camera/zoomcamera.d.ts +1 -1
- package/build/src/{modules/state → plugins/state/src}/actions/media/generatemedia.d.ts +1 -1
- package/build/src/plugins/state/src/actions/object/addobject.d.ts +9 -0
- package/build/src/{modules/state → plugins/state/src}/actions/object/deleteobject.d.ts +4 -3
- package/build/src/{modules/state → plugins/state/src}/actions/object/deselectobject.d.ts +4 -3
- package/build/src/{modules/state → plugins/state/src}/actions/object/dropit.d.ts +1 -1
- package/build/src/{modules/state → plugins/state/src}/actions/object/getallobjects.d.ts +3 -2
- package/build/src/{modules/state → plugins/state/src}/actions/object/getobjects.d.ts +3 -2
- package/build/src/{modules/state → plugins/state/src}/actions/object/modelloaded.d.ts +1 -1
- package/build/src/{modules/state → plugins/state/src}/actions/object/placeonfloor.d.ts +1 -1
- package/build/src/{modules/state → plugins/state/src}/actions/object/selectobject.d.ts +4 -3
- package/build/src/{modules/state → plugins/state/src}/actions/object/setparent.d.ts +6 -5
- package/build/src/{modules/state → plugins/state/src}/actions/object/updateobject.d.ts +4 -3
- package/build/src/{modules/state → plugins/state/src}/actions/renderer/startrender.d.ts +1 -1
- package/build/src/{modules/state → plugins/state/src}/actions/scene/exportscene.d.ts +4 -4
- package/build/src/{modules/state → plugins/state/src}/actions/scene/getallscenedata.d.ts +3 -3
- package/build/src/{modules/state → plugins/state/src}/actions/scene/setbackground.d.ts +1 -1
- package/build/src/{modules/state → plugins/state/src}/actions/scene/updatescene.d.ts +1 -1
- package/build/src/{modules/state → plugins/state/src}/actions/toolbox/setgizmomode.d.ts +1 -1
- package/build/src/{modules/state → plugins/state/src}/actions/toolbox/setgizmoscalelinked.d.ts +1 -1
- package/build/src/{modules/state → plugins/state/src}/actions/toolbox/setgizmovisible.d.ts +1 -1
- package/build/src/{modules/state → plugins/state/src}/actions/toolbox/usetool.d.ts +2 -2
- package/build/src/plugins/state/types/ActionTypes.d.ts +17 -0
- package/build/src/{types/SceneType.d.ts → plugins/state/types/StateExportFileType.d.ts} +1 -1
- package/build/src/plugins/state/types/StateSceneData.d.ts +19 -0
- package/build/src/plugins/state/types/index.d.ts +1 -0
- package/build/src/plugins/systeminfo/index.d.ts +2 -0
- package/build/src/{modules/systeminfo → plugins/systeminfo/src}/SystemInfo.d.ts +22 -32
- package/build/src/plugins/toolbox/index.d.ts +4 -0
- package/build/src/{modules/toolbox → plugins/toolbox/src}/BaseTool.d.ts +4 -6
- package/build/src/{modules/toolbox → plugins/toolbox/src}/Toolbox.d.ts +8 -17
- package/build/src/{modules/toolbox → plugins/toolbox/src}/select/SelectTool.d.ts +7 -11
- package/build/src/{modules/toolbox → plugins/toolbox/src}/transform/TransformTool.d.ts +6 -10
- package/build/src/types/components/DIVELight.d.ts +4 -0
- package/build/src/types/components/DIVESceneObject.d.ts +6 -0
- package/build/src/types/components/index.d.ts +2 -0
- package/build/src/types/index.d.ts +2 -5
- package/build/src/types/schema/BaseEntitySchema.d.ts +8 -0
- package/build/src/types/schema/EntitySchema.d.ts +11 -0
- package/build/src/types/schema/EntityTypeSchema.d.ts +1 -0
- package/build/src/types/schema/GeometrySchema.d.ts +7 -0
- package/build/src/types/schema/GeometryTypeSchema.d.ts +1 -0
- package/build/src/types/schema/GroupSchema.d.ts +11 -0
- package/build/src/types/schema/LightSchema.d.ts +28 -0
- package/build/src/{modules/state/types/COMMaterial.d.ts → types/schema/MaterialSchema.d.ts} +1 -1
- package/build/src/types/schema/ModelSchema.d.ts +14 -0
- package/build/src/types/schema/PovSchema.d.ts +10 -0
- package/build/src/types/schema/PrimitiveSchema.d.ts +14 -0
- package/build/src/types/schema/index.d.ts +11 -0
- package/package.json +60 -41
- package/build/chunks/FileTypes-BjZ0rrIV.cjs +0 -1
- package/build/chunks/FileTypes-qgYnI0Jg.mjs +0 -30
- package/build/chunks/ModuleRegistry-NyNtjHb2.cjs +0 -1
- package/build/chunks/ModuleRegistry-RSub8W0G.mjs +0 -13
- package/build/chunks/PerspectiveCamera-BByyG5R4.cjs +0 -1
- package/build/chunks/PerspectiveCamera-sm4_81KJ.mjs +0 -34
- package/build/chunks/SelectTool-BRKko7uz.cjs +0 -1
- package/build/chunks/SystemInfo-oX-NNneO.cjs +0 -1
- package/build/chunks/VisibilityLayerMask-BI7jPKdx.cjs +0 -1
- package/build/chunks/VisibilityLayerMask-CXgt1fJc.mjs +0 -8
- package/build/chunks/findInterface-BEdL2iUQ.cjs +0 -1
- package/build/chunks/findInterface-OrXgmwxj.mjs +0 -18
- package/build/chunks/index-C_uFFwT2.mjs +0 -5
- package/build/chunks/index-DAwIH9xh.cjs +0 -1
- package/build/chunks/package-BFpY3sIj.cjs +0 -1
- package/build/chunks/package-BvoZkrge.mjs +0 -39
- package/build/chunks/parse-error-2f5qpXP5.cjs +0 -6
- package/build/chunks/parse-error-DRBVHL9E.mjs +0 -614
- package/build/src/error/ar-compatibility/ar-compatibility-error.d.ts +0 -12
- package/build/src/modules/ModuleRegistry.d.ts +0 -19
- package/build/src/modules/animation/AnimationSystem.cjs +0 -1
- package/build/src/modules/animation/AnimationSystem.d.ts +0 -36
- package/build/src/modules/animation/AnimationSystem.mjs +0 -95
- package/build/src/modules/ar/ARSystem.cjs +0 -1
- package/build/src/modules/ar/ARSystem.d.ts +0 -71
- package/build/src/modules/ar/ARSystem.mjs +0 -163
- package/build/src/modules/ar/arquicklook/ARQuickLook.d.ts +0 -7
- package/build/src/modules/asset/converter/AssetConverter.d.ts +0 -30
- package/build/src/modules/asset/exporter/AssetExporter.cjs +0 -164
- package/build/src/modules/asset/loader/AssetLoader.cjs +0 -2
- package/build/src/modules/asset/loader/AssetLoader.d.ts +0 -29
- package/build/src/modules/asset/loader/AssetLoader.mjs +0 -1919
- package/build/src/modules/events/EventExecutor.d.ts +0 -5
- package/build/src/modules/mediacreator/MediaCreator.cjs +0 -1
- package/build/src/modules/mediacreator/MediaCreator.d.ts +0 -44
- package/build/src/modules/state/State.cjs +0 -27
- package/build/src/modules/state/State.mjs +0 -4271
- package/build/src/modules/state/actions/object/addobject.d.ts +0 -8
- package/build/src/modules/state/types/ActionTypes.d.ts +0 -18
- package/build/src/modules/state/types/COMBaseEntity.d.ts +0 -8
- package/build/src/modules/state/types/COMEntity.d.ts +0 -6
- package/build/src/modules/state/types/COMEntityType.d.ts +0 -1
- package/build/src/modules/state/types/COMGeometry.d.ts +0 -7
- package/build/src/modules/state/types/COMGeometryType.d.ts +0 -1
- package/build/src/modules/state/types/COMGroup.d.ts +0 -10
- package/build/src/modules/state/types/COMLight.d.ts +0 -12
- package/build/src/modules/state/types/COMModel.d.ts +0 -13
- package/build/src/modules/state/types/COMPov.d.ts +0 -9
- package/build/src/modules/state/types/COMPrimitive.d.ts +0 -13
- package/build/src/modules/state/types/index.d.ts +0 -11
- package/build/src/modules/systeminfo/SystemInfo.cjs +0 -1
- package/build/src/modules/systeminfo/SystemInfo.mjs +0 -5
- package/build/src/modules/toolbox/Toolbox.cjs +0 -1
- package/build/src/types/SceneData.d.ts +0 -19
- package/build/src/types/SceneObjects.d.ts +0 -7
- package/build/src/types/UUID.d.ts +0 -1
- /package/build/{src/modules/asset/converter/AssetConverter.cjs → plugins/assetconverter/index.cjs} +0 -0
- /package/build/{src/modules/asset/converter/AssetConverter.mjs → plugins/assetconverter/index.mjs} +0 -0
- /package/build/src/{modules/animation → plugins/animation/src}/types/AnimatorParameters.d.ts +0 -0
- /package/build/src/{modules/state → plugins/state/src}/ActionRegistry.d.ts +0 -0
- /package/build/src/{modules/state → plugins/state/src}/actions/ar/index.d.ts +0 -0
- /package/build/src/{modules/state → plugins/state/src}/actions/camera/index.d.ts +0 -0
- /package/build/src/{modules/state → plugins/state/src}/actions/index.d.ts +0 -0
- /package/build/src/{modules/state → plugins/state/src}/actions/media/index.d.ts +0 -0
- /package/build/src/{modules/state → plugins/state/src}/actions/object/index.d.ts +0 -0
- /package/build/src/{modules/state → plugins/state/src}/actions/renderer/index.d.ts +0 -0
- /package/build/src/{modules/state → plugins/state/src}/actions/scene/index.d.ts +0 -0
- /package/build/src/{modules/state → plugins/state/src}/actions/toolbox/index.d.ts +0 -0
- /package/build/src/{types/info → plugins/systeminfo/types}/index.d.ts +0 -0
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
var c = Object.defineProperty;
|
|
2
|
-
var d = (p, t, e) => t in p ? c(p, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : p[t] = e;
|
|
3
|
-
var i = (p, t, e) => d(p, typeof t != "symbol" ? t + "" : t, e);
|
|
4
|
-
import { update as u, Tween as r, Easing as _ } from "@tweenjs/tween.js";
|
|
5
|
-
import { EventDispatcher as g, MathUtils as h } from "three";
|
|
6
|
-
class w extends g {
|
|
7
|
-
constructor(e, n, a, s) {
|
|
8
|
-
super();
|
|
9
|
-
i(this, "_uuid", h.generateUUID());
|
|
10
|
-
i(this, "_playing", !1);
|
|
11
|
-
i(this, "_stopped", !1);
|
|
12
|
-
i(this, "_completed", !1);
|
|
13
|
-
this.object = e, this.to = n, this.duration = a, this.options = s;
|
|
14
|
-
}
|
|
15
|
-
get uuid() {
|
|
16
|
-
return this._uuid;
|
|
17
|
-
}
|
|
18
|
-
get playing() {
|
|
19
|
-
return this._playing;
|
|
20
|
-
}
|
|
21
|
-
get stopped() {
|
|
22
|
-
return this._stopped;
|
|
23
|
-
}
|
|
24
|
-
get completed() {
|
|
25
|
-
return this._completed;
|
|
26
|
-
}
|
|
27
|
-
dispose() {
|
|
28
|
-
this._playing = !1, this._stopped = !1, this._completed = !1;
|
|
29
|
-
}
|
|
30
|
-
play() {
|
|
31
|
-
return this._playing = !0, this._stopped = !1, this.dispatchEvent({ type: "play", target: this }), console.log("play", this), this;
|
|
32
|
-
}
|
|
33
|
-
stop() {
|
|
34
|
-
return this._playing = !1, this._stopped = !0, this.dispatchEvent({ type: "stop", target: this }), this;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
class M {
|
|
38
|
-
constructor() {
|
|
39
|
-
i(this, "uuid", h.generateUUID());
|
|
40
|
-
i(this, "_callbackMap", /* @__PURE__ */ new Map());
|
|
41
|
-
i(this, "_tweens", /* @__PURE__ */ new Map());
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Creates a new animator and registers it.
|
|
45
|
-
* @param object - The object to animate.
|
|
46
|
-
* @param to - The target object.
|
|
47
|
-
* @param duration - The duration of the animation.
|
|
48
|
-
* @param options - The options for the animation.
|
|
49
|
-
* @returns The animator.
|
|
50
|
-
*/
|
|
51
|
-
createAnimator(t, e, n, a) {
|
|
52
|
-
var o, l;
|
|
53
|
-
const s = new w(t, e, n, a);
|
|
54
|
-
return this._callbackMap.set(s.uuid, {
|
|
55
|
-
onUpdate: ((o = s.options) == null ? void 0 : o.onUpdate) ?? (() => {
|
|
56
|
-
}),
|
|
57
|
-
onComplete: ((l = s.options) == null ? void 0 : l.onComplete) ?? (() => {
|
|
58
|
-
})
|
|
59
|
-
}), this._setupTween(s), s;
|
|
60
|
-
}
|
|
61
|
-
unregister(t) {
|
|
62
|
-
if (!this._callbackMap.has(t)) {
|
|
63
|
-
console.warn(`Animator with uuid ${t} not registered`);
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
this._callbackMap.delete(t), this._tweens.delete(t);
|
|
67
|
-
}
|
|
68
|
-
Dispose() {
|
|
69
|
-
this._callbackMap.clear(), this._tweens.clear();
|
|
70
|
-
}
|
|
71
|
-
tick() {
|
|
72
|
-
u();
|
|
73
|
-
}
|
|
74
|
-
Animate(t) {
|
|
75
|
-
return new r(t);
|
|
76
|
-
}
|
|
77
|
-
_setupTween(t) {
|
|
78
|
-
var n;
|
|
79
|
-
const e = new r(t.object).to(t.to, t.duration).easing(((n = t.options) == null ? void 0 : n.easing) ?? _.Quadratic.Out).onUpdate((a, s) => {
|
|
80
|
-
var o;
|
|
81
|
-
(o = this._callbackMap.get(t.uuid)) == null || o.onUpdate(a, s);
|
|
82
|
-
}).onComplete((a) => {
|
|
83
|
-
var s;
|
|
84
|
-
(s = this._callbackMap.get(t.uuid)) == null || s.onComplete(a);
|
|
85
|
-
});
|
|
86
|
-
t.addEventListener("play", () => {
|
|
87
|
-
e.start();
|
|
88
|
-
}), t.addEventListener("stop", () => {
|
|
89
|
-
e.stop();
|
|
90
|
-
}), this._tweens.set(t.uuid, e);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
export {
|
|
94
|
-
M as AnimationSystem
|
|
95
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var u=Object.defineProperty;var d=(a,e,t)=>e in a?u(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var l=(a,e,t)=>d(a,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("../../../chunks/SystemInfo-oX-NNneO.cjs"),i=require("../../../chunks/index-DAwIH9xh.cjs"),m=require("../asset/converter/AssetConverter.cjs"),h=require("../asset/loader/AssetLoader.cjs"),y=require("../asset/exporter/AssetExporter.cjs");class S{constructor(){l(this,"converter",new m.AssetConverter(new h.AssetLoader,new y.AssetExporter))}async launch(e,t){const r=await this.convertToUSDZ(e,t);return this.launchARQuickLook(r,t)}async convertToUSDZ(e,t){const r=await this.converter.convert(e).to("usdz",{quickLookCompatible:!0,ar:{anchoring:{type:"plane"},planeAnchoring:{alignment:(t==null?void 0:t.arPlacement)==="vertical"?"vertical":"horizontal"}}}),n=new Blob([r],{type:"model/vnd.usdz+zip"});return URL.createObjectURL(n)}launchARQuickLook(e,t){return new Promise(r=>{(t==null?void 0:t.arScale)==="fixed"&&(e=e.concat("#allowsContentScaling=0"));const n=document.createElement("a");n.innerHTML="<picture></picture>",n.rel="ar",n.href=e,n.download="scene.usdz",r(),n.click()})}}class _{launch(e,t){const r=self.location.toString(),n=document.createElement("a"),c=this._createParams(r,e,t),o=this._createIntent(r,e,c);n.setAttribute("href",o),n.click()}_createParams(e,t,r){const n=new URL(t,e),c=new URLSearchParams(n.search);return c.set("mode","ar_preferred"),this._applyScaleOption(c,r),this._applyPlacementOption(c,r),this._applySoundOption(c,e),this._applyLinkOption(c,e),c}_applyScaleOption(e,t){(t==null?void 0:t.arScale)==="fixed"&&e.set("resizable","false")}_applyPlacementOption(e,t){(t==null?void 0:t.arPlacement)==="vertical"&&e.set("enable_vertical_placement","true")}_applySoundOption(e,t){if(e.has("sound")){const r=new URL(e.get("sound"),t);e.set("sound",r.toString())}}_applyLinkOption(e,t){if(e.has("link")){const r=new URL(e.get("link"),t);e.set("link",r.toString())}}_createIntent(e,t,r){const n=new URL(e),c=new URL(t,e),o="#model-viewer-no-ar-fallback";return n.hash=o,`intent://arvr.google.com/scene-viewer/1.2?${r.toString()+"&file="+c.toString()}#Intent;scheme=https;package=com.google.android.googlequicksearchbox;action=android.intent.action.VIEW;S.browser_fallback_url=${encodeURIComponent(n.toString())};end;`}}class w{async launch(e,t){const r=s.SystemInfo.getSystem();return r===i.ESystem.IOS?this.tryARQuickLook(e,t):r===i.ESystem.ANDROID?this.trySceneViewer(e,t):Promise.reject(new s.ARCompatibilityError("AR not supported on non-mobile systems",window.navigator.userAgent,window.navigator.platform,window.navigator.vendor))}async tryARQuickLook(e,t){try{s.SystemInfo.getSupportsARQuickLook()}catch(r){return Promise.reject(r)}return new S().launch(e,t)}async trySceneViewer(e,t){try{return new _().launch(e,t)}catch(r){return Promise.reject(r)}}}exports.ARSystem=w;
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
declare global {
|
|
2
|
-
interface ModuleClasses {
|
|
3
|
-
ARSystem: typeof ARSystem;
|
|
4
|
-
}
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* @module ARSystem
|
|
8
|
-
*
|
|
9
|
-
* The AR module enables Augmented Reality features across different platforms:
|
|
10
|
-
*
|
|
11
|
-
* ```ts
|
|
12
|
-
* import { ARSystem } from '@shopware-ag/dive/modules/ARSystem';
|
|
13
|
-
*
|
|
14
|
-
* const arSystem = new ARSystem();
|
|
15
|
-
*
|
|
16
|
-
* // Launch AR with options
|
|
17
|
-
* await arSystem.launch('path/to/model.glb', {
|
|
18
|
-
* arPlacement: 'horizontal', // or 'vertical'
|
|
19
|
-
* arScale: 'auto' // or 'fixed'
|
|
20
|
-
* });
|
|
21
|
-
* ```
|
|
22
|
-
*
|
|
23
|
-
* Features:
|
|
24
|
-
* - Platform-specific AR implementations (ARQuickLook for iOS, SceneViewer for Android)
|
|
25
|
-
* - Automatic format conversion for AR compatibility
|
|
26
|
-
* - Configurable placement and scaling options
|
|
27
|
-
*/
|
|
28
|
-
/**
|
|
29
|
-
* Options for configuring the AR system behavior
|
|
30
|
-
*/
|
|
31
|
-
export type ARSystemOptions = {
|
|
32
|
-
/** The placement orientation for AR content - either horizontal or vertical */
|
|
33
|
-
arPlacement: 'horizontal' | 'vertical';
|
|
34
|
-
/** The scaling behavior for AR content - either automatic or fixed */
|
|
35
|
-
arScale: 'auto' | 'fixed';
|
|
36
|
-
};
|
|
37
|
-
/**
|
|
38
|
-
* Main class for handling AR functionality across different platforms
|
|
39
|
-
* Provides methods to launch AR experiences using platform-specific implementations
|
|
40
|
-
*/
|
|
41
|
-
export declare class ARSystem {
|
|
42
|
-
/**
|
|
43
|
-
* Launches an AR experience using the appropriate platform-specific implementation
|
|
44
|
-
*
|
|
45
|
-
* @param uri - The URI of the 3D model to display in AR
|
|
46
|
-
* @param options - Optional configuration for the AR experience
|
|
47
|
-
* @returns Promise that resolves when AR is launched successfully
|
|
48
|
-
* @throws Error if AR is not supported on the current platform
|
|
49
|
-
*/
|
|
50
|
-
launch(uri: string, options?: ARSystemOptions): Promise<void>;
|
|
51
|
-
/**
|
|
52
|
-
* Attempts to launch AR using ARQuickLook (iOS-specific implementation)
|
|
53
|
-
*
|
|
54
|
-
* @param uri - The URI of the 3D model to display in AR
|
|
55
|
-
* @param options - Optional configuration for the AR experience
|
|
56
|
-
* @returns Promise that resolves when ARQuickLook is launched successfully
|
|
57
|
-
* @throws Error if ARQuickLook is not supported on the device
|
|
58
|
-
*/
|
|
59
|
-
private tryARQuickLook;
|
|
60
|
-
/**
|
|
61
|
-
* Launches AR using SceneViewer (Android-specific implementation)
|
|
62
|
-
* Note: SceneViewer is supported on all Android devices. If ARCore is not installed,
|
|
63
|
-
* the model will be displayed in 3D view mode instead of AR mode.
|
|
64
|
-
*
|
|
65
|
-
* @param uri - The URI of the 3D model to display in AR
|
|
66
|
-
* @param options - Optional configuration for the AR experience
|
|
67
|
-
* @returns Promise that resolves when SceneViewer is launched successfully
|
|
68
|
-
* @throws Error if there's an issue launching SceneViewer
|
|
69
|
-
*/
|
|
70
|
-
private trySceneViewer;
|
|
71
|
-
}
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
var u = Object.defineProperty;
|
|
2
|
-
var m = (c, e, t) => e in c ? u(c, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : c[e] = t;
|
|
3
|
-
var i = (c, e, t) => m(c, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
-
import { S as l, A as d } from "../../../chunks/SystemInfo-DPAQG-S5.mjs";
|
|
5
|
-
import { E as s } from "../../../chunks/index-C_uFFwT2.mjs";
|
|
6
|
-
import { AssetConverter as h } from "../asset/converter/AssetConverter.mjs";
|
|
7
|
-
import { AssetLoader as w } from "../asset/loader/AssetLoader.mjs";
|
|
8
|
-
import { AssetExporter as p } from "../asset/exporter/AssetExporter.mjs";
|
|
9
|
-
class y {
|
|
10
|
-
constructor() {
|
|
11
|
-
i(this, "converter", new h(
|
|
12
|
-
new w(),
|
|
13
|
-
new p()
|
|
14
|
-
));
|
|
15
|
-
}
|
|
16
|
-
async launch(e, t) {
|
|
17
|
-
const r = await this.convertToUSDZ(e, t);
|
|
18
|
-
return this.launchARQuickLook(r, t);
|
|
19
|
-
}
|
|
20
|
-
async convertToUSDZ(e, t) {
|
|
21
|
-
const r = await this.converter.convert(e).to("usdz", {
|
|
22
|
-
quickLookCompatible: !0,
|
|
23
|
-
ar: {
|
|
24
|
-
anchoring: { type: "plane" },
|
|
25
|
-
planeAnchoring: {
|
|
26
|
-
alignment: (t == null ? void 0 : t.arPlacement) === "vertical" ? "vertical" : "horizontal"
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}), n = new Blob([r], { type: "model/vnd.usdz+zip" });
|
|
30
|
-
return URL.createObjectURL(n);
|
|
31
|
-
}
|
|
32
|
-
launchARQuickLook(e, t) {
|
|
33
|
-
return new Promise((r) => {
|
|
34
|
-
(t == null ? void 0 : t.arScale) === "fixed" && (e = e.concat("#allowsContentScaling=0"));
|
|
35
|
-
const n = document.createElement("a");
|
|
36
|
-
n.innerHTML = "<picture></picture>", n.rel = "ar", n.href = e, n.download = "scene.usdz", r(), n.click();
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
class S {
|
|
41
|
-
launch(e, t) {
|
|
42
|
-
const r = self.location.toString(), n = document.createElement("a"), a = this._createParams(r, e, t), o = this._createIntent(r, e, a);
|
|
43
|
-
n.setAttribute("href", o), n.click();
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Creates the base URL parameters for SceneViewer
|
|
47
|
-
* @param location Current page location URL
|
|
48
|
-
* @returns URLSearchParams with base configuration
|
|
49
|
-
*/
|
|
50
|
-
_createParams(e, t, r) {
|
|
51
|
-
const n = new URL(t, e), a = new URLSearchParams(n.search);
|
|
52
|
-
return a.set("mode", "ar_preferred"), this._applyScaleOption(a, r), this._applyPlacementOption(a, r), this._applySoundOption(a, e), this._applyLinkOption(a, e), a;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Applies the scale option to the parameters
|
|
56
|
-
* If scale is set to 'fixed', the model will not be resizable in AR
|
|
57
|
-
* @param params URLSearchParams to modify
|
|
58
|
-
*/
|
|
59
|
-
_applyScaleOption(e, t) {
|
|
60
|
-
(t == null ? void 0 : t.arScale) === "fixed" && e.set("resizable", "false");
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Applies the placement option to the parameters
|
|
64
|
-
* If placement is set to 'vertical', vertical placement will be enabled
|
|
65
|
-
* @param params URLSearchParams to modify
|
|
66
|
-
*/
|
|
67
|
-
_applyPlacementOption(e, t) {
|
|
68
|
-
(t == null ? void 0 : t.arPlacement) === "vertical" && e.set("enable_vertical_placement", "true");
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Applies the sound option to the parameters if present
|
|
72
|
-
* This will resolve any relative sound URLs to absolute URLs
|
|
73
|
-
* @param params URLSearchParams to modify
|
|
74
|
-
* @param location Current page location URL
|
|
75
|
-
*/
|
|
76
|
-
_applySoundOption(e, t) {
|
|
77
|
-
if (e.has("sound")) {
|
|
78
|
-
const r = new URL(e.get("sound"), t);
|
|
79
|
-
e.set("sound", r.toString());
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Applies the link option to the parameters if present
|
|
84
|
-
* This will resolve any relative link URLs to absolute URLs
|
|
85
|
-
* @param params URLSearchParams to modify
|
|
86
|
-
* @param location Current page location URL
|
|
87
|
-
*/
|
|
88
|
-
_applyLinkOption(e, t) {
|
|
89
|
-
if (e.has("link")) {
|
|
90
|
-
const r = new URL(e.get("link"), t);
|
|
91
|
-
e.set("link", r.toString());
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Creates the Android Intent URL for SceneViewer
|
|
96
|
-
* @param params URLSearchParams containing all configuration
|
|
97
|
-
* @param location Current page location URL
|
|
98
|
-
* @returns The complete Intent URL
|
|
99
|
-
*/
|
|
100
|
-
_createIntent(e, t, r) {
|
|
101
|
-
const n = new URL(e), a = new URL(t, e), o = "#model-viewer-no-ar-fallback";
|
|
102
|
-
return n.hash = o, `intent://arvr.google.com/scene-viewer/1.2?${r.toString() + "&file=" + a.toString()}#Intent;scheme=https;package=com.google.android.googlequicksearchbox;action=android.intent.action.VIEW;S.browser_fallback_url=${encodeURIComponent(
|
|
103
|
-
n.toString()
|
|
104
|
-
)};end;`;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
class A {
|
|
108
|
-
/**
|
|
109
|
-
* Launches an AR experience using the appropriate platform-specific implementation
|
|
110
|
-
*
|
|
111
|
-
* @param uri - The URI of the 3D model to display in AR
|
|
112
|
-
* @param options - Optional configuration for the AR experience
|
|
113
|
-
* @returns Promise that resolves when AR is launched successfully
|
|
114
|
-
* @throws Error if AR is not supported on the current platform
|
|
115
|
-
*/
|
|
116
|
-
async launch(e, t) {
|
|
117
|
-
const r = l.getSystem();
|
|
118
|
-
return r === s.IOS ? this.tryARQuickLook(e, t) : r === s.ANDROID ? this.trySceneViewer(e, t) : Promise.reject(
|
|
119
|
-
new d(
|
|
120
|
-
"AR not supported on non-mobile systems",
|
|
121
|
-
window.navigator.userAgent,
|
|
122
|
-
window.navigator.platform,
|
|
123
|
-
window.navigator.vendor
|
|
124
|
-
)
|
|
125
|
-
);
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Attempts to launch AR using ARQuickLook (iOS-specific implementation)
|
|
129
|
-
*
|
|
130
|
-
* @param uri - The URI of the 3D model to display in AR
|
|
131
|
-
* @param options - Optional configuration for the AR experience
|
|
132
|
-
* @returns Promise that resolves when ARQuickLook is launched successfully
|
|
133
|
-
* @throws Error if ARQuickLook is not supported on the device
|
|
134
|
-
*/
|
|
135
|
-
async tryARQuickLook(e, t) {
|
|
136
|
-
try {
|
|
137
|
-
l.getSupportsARQuickLook();
|
|
138
|
-
} catch (r) {
|
|
139
|
-
return Promise.reject(r);
|
|
140
|
-
}
|
|
141
|
-
return new y().launch(e, t);
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Launches AR using SceneViewer (Android-specific implementation)
|
|
145
|
-
* Note: SceneViewer is supported on all Android devices. If ARCore is not installed,
|
|
146
|
-
* the model will be displayed in 3D view mode instead of AR mode.
|
|
147
|
-
*
|
|
148
|
-
* @param uri - The URI of the 3D model to display in AR
|
|
149
|
-
* @param options - Optional configuration for the AR experience
|
|
150
|
-
* @returns Promise that resolves when SceneViewer is launched successfully
|
|
151
|
-
* @throws Error if there's an issue launching SceneViewer
|
|
152
|
-
*/
|
|
153
|
-
async trySceneViewer(e, t) {
|
|
154
|
-
try {
|
|
155
|
-
return new S().launch(e, t);
|
|
156
|
-
} catch (r) {
|
|
157
|
-
return Promise.reject(r);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
export {
|
|
162
|
-
A as ARSystem
|
|
163
|
-
};
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { AssetLoader } from '../loader/AssetLoader.ts';
|
|
2
|
-
import { AssetExporter, FileTypeToExporterOptions } from '../exporter/AssetExporter.ts';
|
|
3
|
-
import { FileType } from '../../../types/file/index.ts';
|
|
4
|
-
declare global {
|
|
5
|
-
interface ModuleClasses {
|
|
6
|
-
AssetConverter: typeof AssetConverter;
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* @module AssetConverter
|
|
11
|
-
*
|
|
12
|
-
* Converts between different 3D file formats:
|
|
13
|
-
*
|
|
14
|
-
* ```ts
|
|
15
|
-
* import { AssetConverter } from '@shopware-ag/dive/modules/AssetConverter';
|
|
16
|
-
*
|
|
17
|
-
* const assetConverter = new AssetConverter();
|
|
18
|
-
* const usdzBuffer = await assetConverter.convert('input.glb').to('usdz');
|
|
19
|
-
* ```
|
|
20
|
-
*/
|
|
21
|
-
export declare class AssetConverter {
|
|
22
|
-
private _loader;
|
|
23
|
-
private _exporter;
|
|
24
|
-
private _uri;
|
|
25
|
-
constructor(_loader: AssetLoader, _exporter: AssetExporter);
|
|
26
|
-
convert(uri: string): {
|
|
27
|
-
to: <T extends FileType>(type: T, options?: FileTypeToExporterOptions[T]) => Promise<ArrayBuffer>;
|
|
28
|
-
};
|
|
29
|
-
private _to;
|
|
30
|
-
}
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
"use strict";var ce=Object.defineProperty;var ue=(n,e,s)=>e in n?ce(n,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):n[e]=s;var H=(n,e,s)=>ue(n,typeof e!="symbol"?e+"":e,s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("three"),N=require("../../../../chunks/parse-error-2f5qpXP5.cjs");let $,V,C,D;function k(n,e=1/0,s=null){V||(V=new d.PlaneGeometry(2,2,1,1)),C||(C=new d.ShaderMaterial({uniforms:{blitTexture:new d.Uniform(n)},vertexShader:`
|
|
2
|
-
varying vec2 vUv;
|
|
3
|
-
void main(){
|
|
4
|
-
vUv = uv;
|
|
5
|
-
gl_Position = vec4(position.xy * 1.0,0.,.999999);
|
|
6
|
-
}`,fragmentShader:`
|
|
7
|
-
uniform sampler2D blitTexture;
|
|
8
|
-
varying vec2 vUv;
|
|
9
|
-
|
|
10
|
-
void main(){
|
|
11
|
-
gl_FragColor = vec4(vUv.xy, 0, 1);
|
|
12
|
-
|
|
13
|
-
#ifdef IS_SRGB
|
|
14
|
-
gl_FragColor = LinearTosRGB( texture2D( blitTexture, vUv) );
|
|
15
|
-
#else
|
|
16
|
-
gl_FragColor = texture2D( blitTexture, vUv);
|
|
17
|
-
#endif
|
|
18
|
-
}`})),C.uniforms.blitTexture.value=n,C.defines.IS_SRGB=n.colorSpace==d.SRGBColorSpace,C.needsUpdate=!0,D||(D=new d.Mesh(V,C),D.frustumCulled=!1);const t=new d.PerspectiveCamera,r=new d.Scene;r.add(D),s===null&&(s=$=new d.WebGLRenderer({antialias:!1}));const i=Math.min(n.image.width,e),o=Math.min(n.image.height,e);s.setSize(i,o),s.clear(),s.render(r,t);const a=document.createElement("canvas"),c=a.getContext("2d");a.width=i,a.height=o,c.drawImage(s.domElement,0,0,i,o);const u=new d.CanvasTexture(a);return u.minFilter=n.minFilter,u.magFilter=n.magFilter,u.wrapS=n.wrapS,u.wrapT=n.wrapT,u.name=n.name,$&&($.forceContextLoss(),$.dispose(),$=null),u}const Z={POSITION:["byte","byte normalized","unsigned byte","unsigned byte normalized","short","short normalized","unsigned short","unsigned short normalized"],NORMAL:["byte normalized","short normalized"],TANGENT:["byte normalized","short normalized"],TEXCOORD:["byte","byte normalized","unsigned byte","short","short normalized","unsigned short"]};class W{constructor(){this.pluginCallbacks=[],this.register(function(e){return new Me(e)}),this.register(function(e){return new ye(e)}),this.register(function(e){return new be(e)}),this.register(function(e){return new Ae(e)}),this.register(function(e){return new Ie(e)}),this.register(function(e){return new Se(e)}),this.register(function(e){return new we(e)}),this.register(function(e){return new Ee(e)}),this.register(function(e){return new Re(e)}),this.register(function(e){return new _e(e)}),this.register(function(e){return new Ne(e)}),this.register(function(e){return new Le(e)}),this.register(function(e){return new ve(e)})}register(e){return this.pluginCallbacks.indexOf(e)===-1&&this.pluginCallbacks.push(e),this}unregister(e){return this.pluginCallbacks.indexOf(e)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,s,t,r){const i=new Te,o=[];for(let a=0,c=this.pluginCallbacks.length;a<c;a++)o.push(this.pluginCallbacks[a](i));i.setPlugins(o),i.write(e,s,r).catch(t)}parseAsync(e,s){const t=this;return new Promise(function(r,i){t.parse(e,r,i,s)})}}const M={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,BYTE:5120,UNSIGNED_BYTE:5121,SHORT:5122,UNSIGNED_SHORT:5123,INT:5124,UNSIGNED_INT:5125,FLOAT:5126,ARRAY_BUFFER:34962,ELEMENT_ARRAY_BUFFER:34963,NEAREST:9728,LINEAR:9729,NEAREST_MIPMAP_NEAREST:9984,LINEAR_MIPMAP_NEAREST:9985,NEAREST_MIPMAP_LINEAR:9986,LINEAR_MIPMAP_LINEAR:9987,CLAMP_TO_EDGE:33071,MIRRORED_REPEAT:33648,REPEAT:10497},Y="KHR_mesh_quantization",R={};R[d.NearestFilter]=M.NEAREST;R[d.NearestMipmapNearestFilter]=M.NEAREST_MIPMAP_NEAREST;R[d.NearestMipmapLinearFilter]=M.NEAREST_MIPMAP_LINEAR;R[d.LinearFilter]=M.LINEAR;R[d.LinearMipmapNearestFilter]=M.LINEAR_MIPMAP_NEAREST;R[d.LinearMipmapLinearFilter]=M.LINEAR_MIPMAP_LINEAR;R[d.ClampToEdgeWrapping]=M.CLAMP_TO_EDGE;R[d.RepeatWrapping]=M.REPEAT;R[d.MirroredRepeatWrapping]=M.MIRRORED_REPEAT;const q={scale:"scale",position:"translation",quaternion:"rotation",morphTargetInfluences:"weights"},le=new d.Color,J=12,fe=1179937895,pe=2,Q=8,he=1313821514,de=5130562;function P(n,e){return n.length===e.length&&n.every(function(s,t){return s===e[t]})}function xe(n){return new TextEncoder().encode(n).buffer}function ge(n){return P(n.elements,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function me(n,e,s){const t={min:new Array(n.itemSize).fill(Number.POSITIVE_INFINITY),max:new Array(n.itemSize).fill(Number.NEGATIVE_INFINITY)};for(let r=e;r<e+s;r++)for(let i=0;i<n.itemSize;i++){let o;n.itemSize>4?o=n.array[r*n.itemSize+i]:(i===0?o=n.getX(r):i===1?o=n.getY(r):i===2?o=n.getZ(r):i===3&&(o=n.getW(r)),n.normalized===!0&&(o=d.MathUtils.normalize(o,n.array))),t.min[i]=Math.min(t.min[i],o),t.max[i]=Math.max(t.max[i],o)}return t}function re(n){return Math.ceil(n/4)*4}function j(n,e=0){const s=re(n.byteLength);if(s!==n.byteLength){const t=new Uint8Array(s);if(t.set(new Uint8Array(n)),e!==0)for(let r=n.byteLength;r<s;r++)t[r]=e;return t.buffer}return n}function ee(){return typeof document>"u"&&typeof OffscreenCanvas<"u"?new OffscreenCanvas(1,1):document.createElement("canvas")}function te(n,e){if(n.toBlob!==void 0)return new Promise(t=>n.toBlob(t,e));let s;return e==="image/jpeg"?s=.92:e==="image/webp"&&(s=.8),n.convertToBlob({type:e,quality:s})}class Te{constructor(){this.plugins=[],this.options={},this.pending=[],this.buffers=[],this.byteOffset=0,this.buffers=[],this.nodeMap=new Map,this.skins=[],this.extensionsUsed={},this.extensionsRequired={},this.uids=new Map,this.uid=0,this.json={asset:{version:"2.0",generator:"THREE.GLTFExporter"}},this.cache={meshes:new Map,attributes:new Map,attributesNormalized:new Map,materials:new Map,textures:new Map,images:new Map}}setPlugins(e){this.plugins=e}async write(e,s,t={}){this.options=Object.assign({binary:!1,trs:!1,onlyVisible:!0,maxTextureSize:1/0,animations:[],includeCustomExtensions:!1},t),this.options.animations.length>0&&(this.options.trs=!0),this.processInput(e),await Promise.all(this.pending);const r=this,i=r.buffers,o=r.json;t=r.options;const a=r.extensionsUsed,c=r.extensionsRequired,u=new Blob(i,{type:"application/octet-stream"}),p=Object.keys(a),l=Object.keys(c);if(p.length>0&&(o.extensionsUsed=p),l.length>0&&(o.extensionsRequired=l),o.buffers&&o.buffers.length>0&&(o.buffers[0].byteLength=u.size),t.binary===!0){const g=new FileReader;g.readAsArrayBuffer(u),g.onloadend=function(){const f=j(g.result),h=new DataView(new ArrayBuffer(Q));h.setUint32(0,f.byteLength,!0),h.setUint32(4,de,!0);const x=j(xe(JSON.stringify(o)),32),m=new DataView(new ArrayBuffer(Q));m.setUint32(0,x.byteLength,!0),m.setUint32(4,he,!0);const w=new ArrayBuffer(J),_=new DataView(w);_.setUint32(0,fe,!0),_.setUint32(4,pe,!0);const B=J+m.byteLength+x.byteLength+h.byteLength+f.byteLength;_.setUint32(8,B,!0);const T=new Blob([w,m,x,h,f],{type:"application/octet-stream"}),y=new FileReader;y.readAsArrayBuffer(T),y.onloadend=function(){s(y.result)}}}else if(o.buffers&&o.buffers.length>0){const g=new FileReader;g.readAsDataURL(u),g.onloadend=function(){const f=g.result;o.buffers[0].uri=f,s(o)}}else s(o)}serializeUserData(e,s){if(Object.keys(e.userData).length===0)return;const t=this.options,r=this.extensionsUsed;try{const i=JSON.parse(JSON.stringify(e.userData));if(t.includeCustomExtensions&&i.gltfExtensions){s.extensions===void 0&&(s.extensions={});for(const o in i.gltfExtensions)s.extensions[o]=i.gltfExtensions[o],r[o]=!0;delete i.gltfExtensions}Object.keys(i).length>0&&(s.extras=i)}catch(i){console.warn("THREE.GLTFExporter: userData of '"+e.name+"' won't be serialized because of JSON.stringify error - "+i.message)}}getUID(e,s=!1){if(this.uids.has(e)===!1){const r=new Map;r.set(!0,this.uid++),r.set(!1,this.uid++),this.uids.set(e,r)}return this.uids.get(e).get(s)}isNormalizedNormalAttribute(e){if(this.cache.attributesNormalized.has(e))return!1;const t=new d.Vector3;for(let r=0,i=e.count;r<i;r++)if(Math.abs(t.fromBufferAttribute(e,r).length()-1)>5e-4)return!1;return!0}createNormalizedNormalAttribute(e){const s=this.cache;if(s.attributesNormalized.has(e))return s.attributesNormalized.get(e);const t=e.clone(),r=new d.Vector3;for(let i=0,o=t.count;i<o;i++)r.fromBufferAttribute(t,i),r.x===0&&r.y===0&&r.z===0?r.setX(1):r.normalize(),t.setXYZ(i,r.x,r.y,r.z);return s.attributesNormalized.set(e,t),t}applyTextureTransform(e,s){let t=!1;const r={};(s.offset.x!==0||s.offset.y!==0)&&(r.offset=s.offset.toArray(),t=!0),s.rotation!==0&&(r.rotation=s.rotation,t=!0),(s.repeat.x!==1||s.repeat.y!==1)&&(r.scale=s.repeat.toArray(),t=!0),t&&(e.extensions=e.extensions||{},e.extensions.KHR_texture_transform=r,this.extensionsUsed.KHR_texture_transform=!0)}buildMetalRoughTexture(e,s){if(e===s)return e;function t(f){return f.colorSpace===d.SRGBColorSpace?function(x){return x<.04045?x*.0773993808:Math.pow(x*.9478672986+.0521327014,2.4)}:function(x){return x}}console.warn("THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures."),e instanceof d.CompressedTexture&&(e=k(e)),s instanceof d.CompressedTexture&&(s=k(s));const r=e?e.image:null,i=s?s.image:null,o=Math.max(r?r.width:0,i?i.width:0),a=Math.max(r?r.height:0,i?i.height:0),c=ee();c.width=o,c.height=a;const u=c.getContext("2d");u.fillStyle="#00ffff",u.fillRect(0,0,o,a);const p=u.getImageData(0,0,o,a);if(r){u.drawImage(r,0,0,o,a);const f=t(e),h=u.getImageData(0,0,o,a).data;for(let x=2;x<h.length;x+=4)p.data[x]=f(h[x]/256)*256}if(i){u.drawImage(i,0,0,o,a);const f=t(s),h=u.getImageData(0,0,o,a).data;for(let x=1;x<h.length;x+=4)p.data[x]=f(h[x]/256)*256}u.putImageData(p,0,0);const g=(e||s).clone();return g.source=new d.Source(c),g.colorSpace=d.NoColorSpace,g.channel=(e||s).channel,e&&s&&e.channel!==s.channel&&console.warn("THREE.GLTFExporter: UV channels for metalnessMap and roughnessMap textures must match."),g}processBuffer(e){const s=this.json,t=this.buffers;return s.buffers||(s.buffers=[{byteLength:0}]),t.push(e),0}processBufferView(e,s,t,r,i){const o=this.json;o.bufferViews||(o.bufferViews=[]);let a;switch(s){case M.BYTE:case M.UNSIGNED_BYTE:a=1;break;case M.SHORT:case M.UNSIGNED_SHORT:a=2;break;default:a=4}let c=e.itemSize*a;i===M.ARRAY_BUFFER&&(c=Math.ceil(c/4)*4);const u=re(r*c),p=new DataView(new ArrayBuffer(u));let l=0;for(let h=t;h<t+r;h++){for(let x=0;x<e.itemSize;x++){let m;e.itemSize>4?m=e.array[h*e.itemSize+x]:(x===0?m=e.getX(h):x===1?m=e.getY(h):x===2?m=e.getZ(h):x===3&&(m=e.getW(h)),e.normalized===!0&&(m=d.MathUtils.normalize(m,e.array))),s===M.FLOAT?p.setFloat32(l,m,!0):s===M.INT?p.setInt32(l,m,!0):s===M.UNSIGNED_INT?p.setUint32(l,m,!0):s===M.SHORT?p.setInt16(l,m,!0):s===M.UNSIGNED_SHORT?p.setUint16(l,m,!0):s===M.BYTE?p.setInt8(l,m):s===M.UNSIGNED_BYTE&&p.setUint8(l,m),l+=a}l%c!==0&&(l+=c-l%c)}const g={buffer:this.processBuffer(p.buffer),byteOffset:this.byteOffset,byteLength:u};return i!==void 0&&(g.target=i),i===M.ARRAY_BUFFER&&(g.byteStride=c),this.byteOffset+=u,o.bufferViews.push(g),{id:o.bufferViews.length-1,byteLength:0}}processBufferViewImage(e){const s=this,t=s.json;return t.bufferViews||(t.bufferViews=[]),new Promise(function(r){const i=new FileReader;i.readAsArrayBuffer(e),i.onloadend=function(){const o=j(i.result),a={buffer:s.processBuffer(o),byteOffset:s.byteOffset,byteLength:o.byteLength};s.byteOffset+=o.byteLength,r(t.bufferViews.push(a)-1)}})}processAccessor(e,s,t,r){const i=this.json,o={1:"SCALAR",2:"VEC2",3:"VEC3",4:"VEC4",9:"MAT3",16:"MAT4"};let a;if(e.array.constructor===Float32Array)a=M.FLOAT;else if(e.array.constructor===Int32Array)a=M.INT;else if(e.array.constructor===Uint32Array)a=M.UNSIGNED_INT;else if(e.array.constructor===Int16Array)a=M.SHORT;else if(e.array.constructor===Uint16Array)a=M.UNSIGNED_SHORT;else if(e.array.constructor===Int8Array)a=M.BYTE;else if(e.array.constructor===Uint8Array)a=M.UNSIGNED_BYTE;else throw new Error("THREE.GLTFExporter: Unsupported bufferAttribute component type: "+e.array.constructor.name);if(t===void 0&&(t=0),(r===void 0||r===1/0)&&(r=e.count),r===0)return null;const c=me(e,t,r);let u;s!==void 0&&(u=e===s.index?M.ELEMENT_ARRAY_BUFFER:M.ARRAY_BUFFER);const p=this.processBufferView(e,a,t,r,u),l={bufferView:p.id,byteOffset:p.byteOffset,componentType:a,count:r,max:c.max,min:c.min,type:o[e.itemSize]};return e.normalized===!0&&(l.normalized=!0),i.accessors||(i.accessors=[]),i.accessors.push(l)-1}processImage(e,s,t,r="image/png"){if(e!==null){const i=this,o=i.cache,a=i.json,c=i.options,u=i.pending;o.images.has(e)||o.images.set(e,{});const p=o.images.get(e),l=r+":flipY/"+t.toString();if(p[l]!==void 0)return p[l];a.images||(a.images=[]);const g={mimeType:r},f=ee();f.width=Math.min(e.width,c.maxTextureSize),f.height=Math.min(e.height,c.maxTextureSize);const h=f.getContext("2d");if(t===!0&&(h.translate(0,f.height),h.scale(1,-1)),e.data!==void 0){s!==d.RGBAFormat&&console.error("GLTFExporter: Only RGBAFormat is supported.",s),(e.width>c.maxTextureSize||e.height>c.maxTextureSize)&&console.warn("GLTFExporter: Image size is bigger than maxTextureSize",e);const m=new Uint8ClampedArray(e.height*e.width*4);for(let w=0;w<m.length;w+=4)m[w+0]=e.data[w+0],m[w+1]=e.data[w+1],m[w+2]=e.data[w+2],m[w+3]=e.data[w+3];h.putImageData(new ImageData(m,e.width,e.height),0,0)}else if(typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&e instanceof ImageBitmap||typeof OffscreenCanvas<"u"&&e instanceof OffscreenCanvas)h.drawImage(e,0,0,f.width,f.height);else throw new Error("THREE.GLTFExporter: Invalid image type. Use HTMLImageElement, HTMLCanvasElement, ImageBitmap or OffscreenCanvas.");c.binary===!0?u.push(te(f,r).then(m=>i.processBufferViewImage(m)).then(m=>{g.bufferView=m})):f.toDataURL!==void 0?g.uri=f.toDataURL(r):u.push(te(f,r).then(m=>new FileReader().readAsDataURL(m)).then(m=>{g.uri=m}));const x=a.images.push(g)-1;return p[l]=x,x}else throw new Error("THREE.GLTFExporter: No valid image data found. Unable to process texture.")}processSampler(e){const s=this.json;s.samplers||(s.samplers=[]);const t={magFilter:R[e.magFilter],minFilter:R[e.minFilter],wrapS:R[e.wrapS],wrapT:R[e.wrapT]};return s.samplers.push(t)-1}processTexture(e){const t=this.options,r=this.cache,i=this.json;if(r.textures.has(e))return r.textures.get(e);i.textures||(i.textures=[]),e instanceof d.CompressedTexture&&(e=k(e,t.maxTextureSize));let o=e.userData.mimeType;o==="image/webp"&&(o="image/png");const a={sampler:this.processSampler(e),source:this.processImage(e.image,e.format,e.flipY,o)};e.name&&(a.name=e.name),this._invokeAll(function(u){u.writeTexture&&u.writeTexture(e,a)});const c=i.textures.push(a)-1;return r.textures.set(e,c),c}processMaterial(e){const s=this.cache,t=this.json;if(s.materials.has(e))return s.materials.get(e);if(e.isShaderMaterial)return console.warn("GLTFExporter: THREE.ShaderMaterial not supported."),null;t.materials||(t.materials=[]);const r={pbrMetallicRoughness:{}};e.isMeshStandardMaterial!==!0&&e.isMeshBasicMaterial!==!0&&console.warn("GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.");const i=e.color.toArray().concat([e.opacity]);if(P(i,[1,1,1,1])||(r.pbrMetallicRoughness.baseColorFactor=i),e.isMeshStandardMaterial?(r.pbrMetallicRoughness.metallicFactor=e.metalness,r.pbrMetallicRoughness.roughnessFactor=e.roughness):(r.pbrMetallicRoughness.metallicFactor=.5,r.pbrMetallicRoughness.roughnessFactor=.5),e.metalnessMap||e.roughnessMap){const a=this.buildMetalRoughTexture(e.metalnessMap,e.roughnessMap),c={index:this.processTexture(a),channel:a.channel};this.applyTextureTransform(c,a),r.pbrMetallicRoughness.metallicRoughnessTexture=c}if(e.map){const a={index:this.processTexture(e.map),texCoord:e.map.channel};this.applyTextureTransform(a,e.map),r.pbrMetallicRoughness.baseColorTexture=a}if(e.emissive){const a=e.emissive;if(Math.max(a.r,a.g,a.b)>0&&(r.emissiveFactor=e.emissive.toArray()),e.emissiveMap){const u={index:this.processTexture(e.emissiveMap),texCoord:e.emissiveMap.channel};this.applyTextureTransform(u,e.emissiveMap),r.emissiveTexture=u}}if(e.normalMap){const a={index:this.processTexture(e.normalMap),texCoord:e.normalMap.channel};e.normalScale&&e.normalScale.x!==1&&(a.scale=e.normalScale.x),this.applyTextureTransform(a,e.normalMap),r.normalTexture=a}if(e.aoMap){const a={index:this.processTexture(e.aoMap),texCoord:e.aoMap.channel};e.aoMapIntensity!==1&&(a.strength=e.aoMapIntensity),this.applyTextureTransform(a,e.aoMap),r.occlusionTexture=a}e.transparent?r.alphaMode="BLEND":e.alphaTest>0&&(r.alphaMode="MASK",r.alphaCutoff=e.alphaTest),e.side===d.DoubleSide&&(r.doubleSided=!0),e.name!==""&&(r.name=e.name),this.serializeUserData(e,r),this._invokeAll(function(a){a.writeMaterial&&a.writeMaterial(e,r)});const o=t.materials.push(r)-1;return s.materials.set(e,o),o}processMesh(e){const s=this.cache,t=this.json,r=[e.geometry.uuid];if(Array.isArray(e.material))for(let T=0,y=e.material.length;T<y;T++)r.push(e.material[T].uuid);else r.push(e.material.uuid);const i=r.join(":");if(s.meshes.has(i))return s.meshes.get(i);const o=e.geometry;let a;e.isLineSegments?a=M.LINES:e.isLineLoop?a=M.LINE_LOOP:e.isLine?a=M.LINE_STRIP:e.isPoints?a=M.POINTS:a=e.material.wireframe?M.LINES:M.TRIANGLES;const c={},u={},p=[],l=[],g={uv:"TEXCOORD_0",uv1:"TEXCOORD_1",uv2:"TEXCOORD_2",uv3:"TEXCOORD_3",color:"COLOR_0",skinWeight:"WEIGHTS_0",skinIndex:"JOINTS_0"},f=o.getAttribute("normal");f!==void 0&&!this.isNormalizedNormalAttribute(f)&&(console.warn("THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one."),o.setAttribute("normal",this.createNormalizedNormalAttribute(f)));let h=null;for(let T in o.attributes){if(T.slice(0,5)==="morph")continue;const y=o.attributes[T];if(T=g[T]||T.toUpperCase(),/^(POSITION|NORMAL|TANGENT|TEXCOORD_\d+|COLOR_\d+|JOINTS_\d+|WEIGHTS_\d+)$/.test(T)||(T="_"+T),s.attributes.has(this.getUID(y))){u[T]=s.attributes.get(this.getUID(y));continue}h=null;const A=y.array;T==="JOINTS_0"&&!(A instanceof Uint16Array)&&!(A instanceof Uint8Array)&&(console.warn('GLTFExporter: Attribute "skinIndex" converted to type UNSIGNED_SHORT.'),h=new d.BufferAttribute(new Uint16Array(A),y.itemSize,y.normalized));const S=this.processAccessor(h||y,o);S!==null&&(T.startsWith("_")||this.detectMeshQuantization(T,y),u[T]=S,s.attributes.set(this.getUID(y),S))}if(f!==void 0&&o.setAttribute("normal",f),Object.keys(u).length===0)return null;if(e.morphTargetInfluences!==void 0&&e.morphTargetInfluences.length>0){const T=[],y=[],b={};if(e.morphTargetDictionary!==void 0)for(const A in e.morphTargetDictionary)b[e.morphTargetDictionary[A]]=A;for(let A=0;A<e.morphTargetInfluences.length;++A){const S={};let X=!1;for(const U in o.morphAttributes){if(U!=="position"&&U!=="normal"){X||(console.warn("GLTFExporter: Only POSITION and NORMAL morph are supported."),X=!0);continue}const L=o.morphAttributes[U][A],z=U.toUpperCase(),F=o.attributes[U];if(s.attributes.has(this.getUID(L,!0))){S[z]=s.attributes.get(this.getUID(L,!0));continue}const O=L.clone();if(!o.morphTargetsRelative)for(let I=0,ae=L.count;I<ae;I++)for(let v=0;v<L.itemSize;v++)v===0&&O.setX(I,L.getX(I)-F.getX(I)),v===1&&O.setY(I,L.getY(I)-F.getY(I)),v===2&&O.setZ(I,L.getZ(I)-F.getZ(I)),v===3&&O.setW(I,L.getW(I)-F.getW(I));S[z]=this.processAccessor(O,o),s.attributes.set(this.getUID(F,!0),S[z])}l.push(S),T.push(e.morphTargetInfluences[A]),e.morphTargetDictionary!==void 0&&y.push(b[A])}c.weights=T,y.length>0&&(c.extras={},c.extras.targetNames=y)}const x=Array.isArray(e.material);if(x&&o.groups.length===0)return null;let m=!1;if(x&&o.index===null){const T=[];for(let y=0,b=o.attributes.position.count;y<b;y++)T[y]=y;o.setIndex(T),m=!0}const w=x?e.material:[e.material],_=x?o.groups:[{materialIndex:0,start:void 0,count:void 0}];for(let T=0,y=_.length;T<y;T++){const b={mode:a,attributes:u};if(this.serializeUserData(o,b),l.length>0&&(b.targets=l),o.index!==null){let S=this.getUID(o.index);(_[T].start!==void 0||_[T].count!==void 0)&&(S+=":"+_[T].start+":"+_[T].count),s.attributes.has(S)?b.indices=s.attributes.get(S):(b.indices=this.processAccessor(o.index,o,_[T].start,_[T].count),s.attributes.set(S,b.indices)),b.indices===null&&delete b.indices}const A=this.processMaterial(w[_[T].materialIndex]);A!==null&&(b.material=A),p.push(b)}m===!0&&o.setIndex(null),c.primitives=p,t.meshes||(t.meshes=[]),this._invokeAll(function(T){T.writeMesh&&T.writeMesh(e,c)});const B=t.meshes.push(c)-1;return s.meshes.set(i,B),B}detectMeshQuantization(e,s){if(this.extensionsUsed[Y])return;let t;switch(s.array.constructor){case Int8Array:t="byte";break;case Uint8Array:t="unsigned byte";break;case Int16Array:t="short";break;case Uint16Array:t="unsigned short";break;default:return}s.normalized&&(t+=" normalized");const r=e.split("_",1)[0];Z[r]&&Z[r].includes(t)&&(this.extensionsUsed[Y]=!0,this.extensionsRequired[Y]=!0)}processCamera(e){const s=this.json;s.cameras||(s.cameras=[]);const t=e.isOrthographicCamera,r={type:t?"orthographic":"perspective"};return t?r.orthographic={xmag:e.right*2,ymag:e.top*2,zfar:e.far<=0?.001:e.far,znear:e.near<0?0:e.near}:r.perspective={aspectRatio:e.aspect,yfov:d.MathUtils.degToRad(e.fov),zfar:e.far<=0?.001:e.far,znear:e.near<0?0:e.near},e.name!==""&&(r.name=e.type),s.cameras.push(r)-1}processAnimation(e,s){const t=this.json,r=this.nodeMap;t.animations||(t.animations=[]),e=W.Utils.mergeMorphTargetTracks(e.clone(),s);const i=e.tracks,o=[],a=[];for(let c=0;c<i.length;++c){const u=i[c],p=d.PropertyBinding.parseTrackName(u.name);let l=d.PropertyBinding.findNode(s,p.nodeName);const g=q[p.propertyName];if(p.objectName==="bones"&&(l.isSkinnedMesh===!0?l=l.skeleton.getBoneByName(p.objectIndex):l=void 0),!l||!g)return console.warn('THREE.GLTFExporter: Could not export animation track "%s".',u.name),null;const f=1;let h=u.values.length/u.times.length;g===q.morphTargetInfluences&&(h/=l.morphTargetInfluences.length);let x;u.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline===!0?(x="CUBICSPLINE",h/=3):u.getInterpolation()===d.InterpolateDiscrete?x="STEP":x="LINEAR",a.push({input:this.processAccessor(new d.BufferAttribute(u.times,f)),output:this.processAccessor(new d.BufferAttribute(u.values,h)),interpolation:x}),o.push({sampler:a.length-1,target:{node:r.get(l),path:g}})}return t.animations.push({name:e.name||"clip_"+t.animations.length,samplers:a,channels:o}),t.animations.length-1}processSkin(e){const s=this.json,t=this.nodeMap,r=s.nodes[t.get(e)],i=e.skeleton;if(i===void 0)return null;const o=e.skeleton.bones[0];if(o===void 0)return null;const a=[],c=new Float32Array(i.bones.length*16),u=new d.Matrix4;for(let l=0;l<i.bones.length;++l)a.push(t.get(i.bones[l])),u.copy(i.boneInverses[l]),u.multiply(e.bindMatrix).toArray(c,l*16);return s.skins===void 0&&(s.skins=[]),s.skins.push({inverseBindMatrices:this.processAccessor(new d.BufferAttribute(c,16)),joints:a,skeleton:t.get(o)}),r.skin=s.skins.length-1}processNode(e){const s=this.json,t=this.options,r=this.nodeMap;s.nodes||(s.nodes=[]);const i={};if(t.trs){const a=e.quaternion.toArray(),c=e.position.toArray(),u=e.scale.toArray();P(a,[0,0,0,1])||(i.rotation=a),P(c,[0,0,0])||(i.translation=c),P(u,[1,1,1])||(i.scale=u)}else e.matrixAutoUpdate&&e.updateMatrix(),ge(e.matrix)===!1&&(i.matrix=e.matrix.elements);if(e.name!==""&&(i.name=String(e.name)),this.serializeUserData(e,i),e.isMesh||e.isLine||e.isPoints){const a=this.processMesh(e);a!==null&&(i.mesh=a)}else e.isCamera&&(i.camera=this.processCamera(e));if(e.isSkinnedMesh&&this.skins.push(e),e.children.length>0){const a=[];for(let c=0,u=e.children.length;c<u;c++){const p=e.children[c];if(p.visible||t.onlyVisible===!1){const l=this.processNode(p);l!==null&&a.push(l)}}a.length>0&&(i.children=a)}this._invokeAll(function(a){a.writeNode&&a.writeNode(e,i)});const o=s.nodes.push(i)-1;return r.set(e,o),o}processScene(e){const s=this.json,t=this.options;s.scenes||(s.scenes=[],s.scene=0);const r={};e.name!==""&&(r.name=e.name),s.scenes.push(r);const i=[];for(let o=0,a=e.children.length;o<a;o++){const c=e.children[o];if(c.visible||t.onlyVisible===!1){const u=this.processNode(c);u!==null&&i.push(u)}}i.length>0&&(r.nodes=i),this.serializeUserData(e,r)}processObjects(e){const s=new d.Scene;s.name="AuxScene";for(let t=0;t<e.length;t++)s.children.push(e[t]);this.processScene(s)}processInput(e){const s=this.options;e=e instanceof Array?e:[e],this._invokeAll(function(r){r.beforeParse&&r.beforeParse(e)});const t=[];for(let r=0;r<e.length;r++)e[r]instanceof d.Scene?this.processScene(e[r]):t.push(e[r]);t.length>0&&this.processObjects(t);for(let r=0;r<this.skins.length;++r)this.processSkin(this.skins[r]);for(let r=0;r<s.animations.length;++r)this.processAnimation(s.animations[r],e[0]);this._invokeAll(function(r){r.afterParse&&r.afterParse(e)})}_invokeAll(e){for(let s=0,t=this.plugins.length;s<t;s++)e(this.plugins[s])}}class Me{constructor(e){this.writer=e,this.name="KHR_lights_punctual"}writeNode(e,s){if(!e.isLight)return;if(!e.isDirectionalLight&&!e.isPointLight&&!e.isSpotLight){console.warn("THREE.GLTFExporter: Only directional, point, and spot lights are supported.",e);return}const t=this.writer,r=t.json,i=t.extensionsUsed,o={};e.name&&(o.name=e.name),o.color=e.color.toArray(),o.intensity=e.intensity,e.isDirectionalLight?o.type="directional":e.isPointLight?(o.type="point",e.distance>0&&(o.range=e.distance)):e.isSpotLight&&(o.type="spot",e.distance>0&&(o.range=e.distance),o.spot={},o.spot.innerConeAngle=(1-e.penumbra)*e.angle,o.spot.outerConeAngle=e.angle),e.decay!==void 0&&e.decay!==2&&console.warn("THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, and expects light.decay=2."),e.target&&(e.target.parent!==e||e.target.position.x!==0||e.target.position.y!==0||e.target.position.z!==-1)&&console.warn("THREE.GLTFExporter: Light direction may be lost. For best results, make light.target a child of the light with position 0,0,-1."),i[this.name]||(r.extensions=r.extensions||{},r.extensions[this.name]={lights:[]},i[this.name]=!0);const a=r.extensions[this.name].lights;a.push(o),s.extensions=s.extensions||{},s.extensions[this.name]={light:a.length-1}}}class ye{constructor(e){this.writer=e,this.name="KHR_materials_unlit"}writeMaterial(e,s){if(!e.isMeshBasicMaterial)return;const r=this.writer.extensionsUsed;s.extensions=s.extensions||{},s.extensions[this.name]={},r[this.name]=!0,s.pbrMetallicRoughness.metallicFactor=0,s.pbrMetallicRoughness.roughnessFactor=.9}}class we{constructor(e){this.writer=e,this.name="KHR_materials_clearcoat"}writeMaterial(e,s){if(!e.isMeshPhysicalMaterial||e.clearcoat===0)return;const t=this.writer,r=t.extensionsUsed,i={};if(i.clearcoatFactor=e.clearcoat,e.clearcoatMap){const o={index:t.processTexture(e.clearcoatMap),texCoord:e.clearcoatMap.channel};t.applyTextureTransform(o,e.clearcoatMap),i.clearcoatTexture=o}if(i.clearcoatRoughnessFactor=e.clearcoatRoughness,e.clearcoatRoughnessMap){const o={index:t.processTexture(e.clearcoatRoughnessMap),texCoord:e.clearcoatRoughnessMap.channel};t.applyTextureTransform(o,e.clearcoatRoughnessMap),i.clearcoatRoughnessTexture=o}if(e.clearcoatNormalMap){const o={index:t.processTexture(e.clearcoatNormalMap),texCoord:e.clearcoatNormalMap.channel};t.applyTextureTransform(o,e.clearcoatNormalMap),i.clearcoatNormalTexture=o}s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class Ee{constructor(e){this.writer=e,this.name="KHR_materials_iridescence"}writeMaterial(e,s){if(!e.isMeshPhysicalMaterial||e.iridescence===0)return;const t=this.writer,r=t.extensionsUsed,i={};if(i.iridescenceFactor=e.iridescence,e.iridescenceMap){const o={index:t.processTexture(e.iridescenceMap),texCoord:e.iridescenceMap.channel};t.applyTextureTransform(o,e.iridescenceMap),i.iridescenceTexture=o}if(i.iridescenceIor=e.iridescenceIOR,i.iridescenceThicknessMinimum=e.iridescenceThicknessRange[0],i.iridescenceThicknessMaximum=e.iridescenceThicknessRange[1],e.iridescenceThicknessMap){const o={index:t.processTexture(e.iridescenceThicknessMap),texCoord:e.iridescenceThicknessMap.channel};t.applyTextureTransform(o,e.iridescenceThicknessMap),i.iridescenceThicknessTexture=o}s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class be{constructor(e){this.writer=e,this.name="KHR_materials_transmission"}writeMaterial(e,s){if(!e.isMeshPhysicalMaterial||e.transmission===0)return;const t=this.writer,r=t.extensionsUsed,i={};if(i.transmissionFactor=e.transmission,e.transmissionMap){const o={index:t.processTexture(e.transmissionMap),texCoord:e.transmissionMap.channel};t.applyTextureTransform(o,e.transmissionMap),i.transmissionTexture=o}s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class Ae{constructor(e){this.writer=e,this.name="KHR_materials_volume"}writeMaterial(e,s){if(!e.isMeshPhysicalMaterial||e.transmission===0)return;const t=this.writer,r=t.extensionsUsed,i={};if(i.thicknessFactor=e.thickness,e.thicknessMap){const o={index:t.processTexture(e.thicknessMap),texCoord:e.thicknessMap.channel};t.applyTextureTransform(o,e.thicknessMap),i.thicknessTexture=o}i.attenuationDistance=e.attenuationDistance,i.attenuationColor=e.attenuationColor.toArray(),s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class Ie{constructor(e){this.writer=e,this.name="KHR_materials_ior"}writeMaterial(e,s){if(!e.isMeshPhysicalMaterial||e.ior===1.5)return;const r=this.writer.extensionsUsed,i={};i.ior=e.ior,s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class Se{constructor(e){this.writer=e,this.name="KHR_materials_specular"}writeMaterial(e,s){if(!e.isMeshPhysicalMaterial||e.specularIntensity===1&&e.specularColor.equals(le)&&!e.specularIntensityMap&&!e.specularColorMap)return;const t=this.writer,r=t.extensionsUsed,i={};if(e.specularIntensityMap){const o={index:t.processTexture(e.specularIntensityMap),texCoord:e.specularIntensityMap.channel};t.applyTextureTransform(o,e.specularIntensityMap),i.specularTexture=o}if(e.specularColorMap){const o={index:t.processTexture(e.specularColorMap),texCoord:e.specularColorMap.channel};t.applyTextureTransform(o,e.specularColorMap),i.specularColorTexture=o}i.specularFactor=e.specularIntensity,i.specularColorFactor=e.specularColor.toArray(),s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class Re{constructor(e){this.writer=e,this.name="KHR_materials_sheen"}writeMaterial(e,s){if(!e.isMeshPhysicalMaterial||e.sheen==0)return;const t=this.writer,r=t.extensionsUsed,i={};if(e.sheenRoughnessMap){const o={index:t.processTexture(e.sheenRoughnessMap),texCoord:e.sheenRoughnessMap.channel};t.applyTextureTransform(o,e.sheenRoughnessMap),i.sheenRoughnessTexture=o}if(e.sheenColorMap){const o={index:t.processTexture(e.sheenColorMap),texCoord:e.sheenColorMap.channel};t.applyTextureTransform(o,e.sheenColorMap),i.sheenColorTexture=o}i.sheenRoughnessFactor=e.sheenRoughness,i.sheenColorFactor=e.sheenColor.toArray(),s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class _e{constructor(e){this.writer=e,this.name="KHR_materials_anisotropy"}writeMaterial(e,s){if(!e.isMeshPhysicalMaterial||e.anisotropy==0)return;const t=this.writer,r=t.extensionsUsed,i={};if(e.anisotropyMap){const o={index:t.processTexture(e.anisotropyMap)};t.applyTextureTransform(o,e.anisotropyMap),i.anisotropyTexture=o}i.anisotropyStrength=e.anisotropy,i.anisotropyRotation=e.anisotropyRotation,s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class Ne{constructor(e){this.writer=e,this.name="KHR_materials_emissive_strength"}writeMaterial(e,s){if(!e.isMeshStandardMaterial||e.emissiveIntensity===1)return;const r=this.writer.extensionsUsed,i={};i.emissiveStrength=e.emissiveIntensity,s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class Le{constructor(e){this.writer=e,this.name="EXT_materials_bump"}writeMaterial(e,s){if(!e.isMeshStandardMaterial||e.bumpScale===1&&!e.bumpMap)return;const t=this.writer,r=t.extensionsUsed,i={};if(e.bumpMap){const o={index:t.processTexture(e.bumpMap),texCoord:e.bumpMap.channel};t.applyTextureTransform(o,e.bumpMap),i.bumpTexture=o}i.bumpFactor=e.bumpScale,s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class ve{constructor(e){this.writer=e,this.name="EXT_mesh_gpu_instancing"}writeNode(e,s){if(!e.isInstancedMesh)return;const t=this.writer,r=e,i=new Float32Array(r.count*3),o=new Float32Array(r.count*4),a=new Float32Array(r.count*3),c=new d.Matrix4,u=new d.Vector3,p=new d.Quaternion,l=new d.Vector3;for(let f=0;f<r.count;f++)r.getMatrixAt(f,c),c.decompose(u,p,l),u.toArray(i,f*3),p.toArray(o,f*4),l.toArray(a,f*3);const g={TRANSLATION:t.processAccessor(new d.BufferAttribute(i,3)),ROTATION:t.processAccessor(new d.BufferAttribute(o,4)),SCALE:t.processAccessor(new d.BufferAttribute(a,3))};r.instanceColor&&(g._COLOR_0=t.processAccessor(r.instanceColor)),s.extensions=s.extensions||{},s.extensions[this.name]={attributes:g},t.extensionsUsed[this.name]=!0,t.extensionsRequired[this.name]=!0}}W.Utils={insertKeyframe:function(n,e){const t=n.getValueSize(),r=new n.TimeBufferType(n.times.length+1),i=new n.ValueBufferType(n.values.length+t),o=n.createInterpolant(new n.ValueBufferType(t));let a;if(n.times.length===0){r[0]=e;for(let c=0;c<t;c++)i[c]=0;a=0}else if(e<n.times[0]){if(Math.abs(n.times[0]-e)<.001)return 0;r[0]=e,r.set(n.times,1),i.set(o.evaluate(e),0),i.set(n.values,t),a=0}else if(e>n.times[n.times.length-1]){if(Math.abs(n.times[n.times.length-1]-e)<.001)return n.times.length-1;r[r.length-1]=e,r.set(n.times,0),i.set(n.values,0),i.set(o.evaluate(e),n.values.length),a=r.length-1}else for(let c=0;c<n.times.length;c++){if(Math.abs(n.times[c]-e)<.001)return c;if(n.times[c]<e&&n.times[c+1]>e){r.set(n.times.slice(0,c+1),0),r[c+1]=e,r.set(n.times.slice(c+1),c+2),i.set(n.values.slice(0,(c+1)*t),0),i.set(o.evaluate(e),(c+1)*t),i.set(n.values.slice((c+1)*t),(c+2)*t),a=c+1;break}}return n.times=r,n.values=i,a},mergeMorphTargetTracks:function(n,e){const s=[],t={},r=n.tracks;for(let i=0;i<r.length;++i){let o=r[i];const a=d.PropertyBinding.parseTrackName(o.name),c=d.PropertyBinding.findNode(e,a.nodeName);if(a.propertyName!=="morphTargetInfluences"||a.propertyIndex===void 0){s.push(o);continue}if(o.createInterpolant!==o.InterpolantFactoryMethodDiscrete&&o.createInterpolant!==o.InterpolantFactoryMethodLinear){if(o.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline)throw new Error("THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.");console.warn("THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead."),o=o.clone(),o.setInterpolation(d.InterpolateLinear)}const u=c.morphTargetInfluences.length,p=c.morphTargetDictionary[a.propertyIndex];if(p===void 0)throw new Error("THREE.GLTFExporter: Morph target name not found: "+a.propertyIndex);let l;if(t[c.uuid]===void 0){l=o.clone();const f=new l.ValueBufferType(u*l.times.length);for(let h=0;h<l.times.length;h++)f[h*u+p]=l.values[h];l.name=(a.nodeName||"")+".morphTargetInfluences",l.values=f,t[c.uuid]=l,s.push(l);continue}const g=o.createInterpolant(new o.ValueBufferType(1));l=t[c.uuid];for(let f=0;f<l.times.length;f++)l.values[f*u+p]=g.evaluate(l.times[f]);for(let f=0;f<o.times.length;f++){const h=this.insertKeyframe(l,o.times[f]);l.values[h*u+p]=o.values[f]}}return n.tracks=s,n}};class Ce{async parse(e,s={}){s=Object.assign({ar:{anchoring:{type:"plane"},planeAnchoring:{alignment:"horizontal"}},quickLookCompatible:!1,maxTextureSize:1024},s);const t={},r="model.usda";t[r]=null;let i=ie();i+=Fe(s);const o={},a={};e.traverseVisible(u=>{if(u.isMesh){const p=u.geometry,l=u.material;if(l.isMeshStandardMaterial){const g="geometries/Geometry_"+p.id+".usda";if(!(g in t)){const f=Be(p);t[g]=$e(f)}l.uuid in o||(o[l.uuid]=l),i+=Pe(u,p,l)}else console.warn("THREE.USDZExporter: Unsupported material type (USDZ only supports MeshStandardMaterial)",u)}else u.isCamera&&(i+=Ke(u))}),i+=Oe(),i+=Ve(o,a,s.quickLookCompatible),t[r]=N.strToU8(i),i=null;for(const u in a){let p=a[u];p.isCompressedTexture===!0&&(p=k(p));const l=Ue(p.image,p.flipY,s.maxTextureSize),g=await new Promise(f=>l.toBlob(f,"image/png",1));t[`textures/Texture_${u}.png`]=new Uint8Array(await g.arrayBuffer())}let c=0;for(const u in t){const p=t[u],l=34+u.length;c+=l;const g=c&63;if(g!==4){const f=64-g,h=new Uint8Array(f);t[u]=[p,{extra:{12345:h}}]}c=p.length}return N.zipSync(t,{level:0})}}function Ue(n,e,s){if(typeof HTMLImageElement<"u"&&n instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&n instanceof HTMLCanvasElement||typeof OffscreenCanvas<"u"&&n instanceof OffscreenCanvas||typeof ImageBitmap<"u"&&n instanceof ImageBitmap){const t=s/Math.max(n.width,n.height),r=document.createElement("canvas");r.width=n.width*Math.min(1,t),r.height=n.height*Math.min(1,t);const i=r.getContext("2d");return e===!0&&(i.translate(0,r.height),i.scale(1,-1)),i.drawImage(n,0,0,r.width,r.height),r}else throw new Error("THREE.USDZExporter: No valid image data found. Unable to process texture.")}const E=7;function ie(){return`#usda 1.0
|
|
19
|
-
(
|
|
20
|
-
customLayerData = {
|
|
21
|
-
string creator = "Three.js USDZExporter"
|
|
22
|
-
}
|
|
23
|
-
defaultPrim = "Root"
|
|
24
|
-
metersPerUnit = 1
|
|
25
|
-
upAxis = "Y"
|
|
26
|
-
)
|
|
27
|
-
|
|
28
|
-
`}function Fe(n){return`def Xform "Root"
|
|
29
|
-
{
|
|
30
|
-
def Scope "Scenes" (
|
|
31
|
-
kind = "sceneLibrary"
|
|
32
|
-
)
|
|
33
|
-
{
|
|
34
|
-
def Xform "Scene" (
|
|
35
|
-
customData = {
|
|
36
|
-
bool preliminary_collidesWithEnvironment = 0
|
|
37
|
-
string sceneName = "Scene"
|
|
38
|
-
}
|
|
39
|
-
sceneName = "Scene"
|
|
40
|
-
)
|
|
41
|
-
{
|
|
42
|
-
token preliminary:anchoring:type = "${n.ar.anchoring.type}"
|
|
43
|
-
token preliminary:planeAnchoring:alignment = "${n.ar.planeAnchoring.alignment}"
|
|
44
|
-
|
|
45
|
-
`}function Oe(){return`
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
`}function $e(n){let e=ie();return e+=n,N.strToU8(e)}function Pe(n,e,s){const t="Object_"+n.id,r=oe(n.matrixWorld);return n.matrixWorld.determinant()<0&&console.warn("THREE.USDZExporter: USDZ does not support negative scales",n),`def Xform "${t}" (
|
|
51
|
-
prepend references = @./geometries/Geometry_${e.id}.usda@</Geometry>
|
|
52
|
-
prepend apiSchemas = ["MaterialBindingAPI"]
|
|
53
|
-
)
|
|
54
|
-
{
|
|
55
|
-
matrix4d xformOp:transform = ${r}
|
|
56
|
-
uniform token[] xformOpOrder = ["xformOp:transform"]
|
|
57
|
-
|
|
58
|
-
rel material:binding = </Materials/Material_${s.id}>
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
`}function oe(n){const e=n.elements;return`( ${G(e,0)}, ${G(e,4)}, ${G(e,8)}, ${G(e,12)} )`}function G(n,e){return`(${n[e+0]}, ${n[e+1]}, ${n[e+2]}, ${n[e+3]})`}function Be(n){return`
|
|
62
|
-
def "Geometry"
|
|
63
|
-
{
|
|
64
|
-
${De(n)}
|
|
65
|
-
}
|
|
66
|
-
`}function De(n){const e="Geometry",s=n.attributes,t=s.position.count;return`
|
|
67
|
-
def Mesh "${e}"
|
|
68
|
-
{
|
|
69
|
-
int[] faceVertexCounts = [${Ge(n)}]
|
|
70
|
-
int[] faceVertexIndices = [${ke(n)}]
|
|
71
|
-
normal3f[] normals = [${K(s.normal,t)}] (
|
|
72
|
-
interpolation = "vertex"
|
|
73
|
-
)
|
|
74
|
-
point3f[] points = [${K(s.position,t)}]
|
|
75
|
-
${He(s)}
|
|
76
|
-
uniform token subdivisionScheme = "none"
|
|
77
|
-
}
|
|
78
|
-
`}function Ge(n){const e=n.index!==null?n.index.count:n.attributes.position.count;return Array(e/3).fill(3).join(", ")}function ke(n){const e=n.index,s=[];if(e!==null)for(let t=0;t<e.count;t++)s.push(e.getX(t));else{const t=n.attributes.position.count;for(let r=0;r<t;r++)s.push(r)}return s.join(", ")}function K(n,e){if(n===void 0)return console.warn("USDZExporter: Normals missing."),Array(e).fill("(0, 0, 0)").join(", ");const s=[];for(let t=0;t<n.count;t++){const r=n.getX(t),i=n.getY(t),o=n.getZ(t);s.push(`(${r.toPrecision(E)}, ${i.toPrecision(E)}, ${o.toPrecision(E)})`)}return s.join(", ")}function ze(n){const e=[];for(let s=0;s<n.count;s++){const t=n.getX(s),r=n.getY(s);e.push(`(${t.toPrecision(E)}, ${1-r.toPrecision(E)})`)}return e.join(", ")}function He(n){let e="";for(let t=0;t<4;t++){const r=t>0?t:"",i=n["uv"+r];i!==void 0&&(e+=`
|
|
79
|
-
texCoord2f[] primvars:st${r} = [${ze(i)}] (
|
|
80
|
-
interpolation = "vertex"
|
|
81
|
-
)`)}const s=n.color;if(s!==void 0){const t=s.count;e+=`
|
|
82
|
-
color3f[] primvars:displayColor = [${K(s,t)}] (
|
|
83
|
-
interpolation = "vertex"
|
|
84
|
-
)`}return e}function Ve(n,e,s=!1){const t=[];for(const r in n){const i=n[r];t.push(Ye(i,e,s))}return`def "Materials"
|
|
85
|
-
{
|
|
86
|
-
${t.join("")}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
`}function Ye(n,e,s=!1){const t=" ",r=[],i=[];function o(a,c,u){const p=a.source.id+"_"+a.flipY;e[p]=a;const l=a.channel>0?"st"+a.channel:"st",g={1e3:"repeat",1001:"clamp",1002:"mirror"},f=a.repeat.clone(),h=a.offset.clone(),x=a.rotation,m=Math.sin(x),w=Math.cos(x);return h.y=1-h.y-f.y,s?(h.x=h.x/f.x,h.y=h.y/f.y,h.x+=m/f.x,h.y+=w-1):(h.x+=m*f.x,h.y+=(1-w)*f.y),`
|
|
90
|
-
def Shader "PrimvarReader_${c}"
|
|
91
|
-
{
|
|
92
|
-
uniform token info:id = "UsdPrimvarReader_float2"
|
|
93
|
-
float2 inputs:fallback = (0.0, 0.0)
|
|
94
|
-
token inputs:varname = "${l}"
|
|
95
|
-
float2 outputs:result
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
def Shader "Transform2d_${c}"
|
|
99
|
-
{
|
|
100
|
-
uniform token info:id = "UsdTransform2d"
|
|
101
|
-
token inputs:in.connect = </Materials/Material_${n.id}/PrimvarReader_${c}.outputs:result>
|
|
102
|
-
float inputs:rotation = ${(x*(180/Math.PI)).toFixed(E)}
|
|
103
|
-
float2 inputs:scale = ${ne(f)}
|
|
104
|
-
float2 inputs:translation = ${ne(h)}
|
|
105
|
-
float2 outputs:result
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
def Shader "Texture_${a.id}_${c}"
|
|
109
|
-
{
|
|
110
|
-
uniform token info:id = "UsdUVTexture"
|
|
111
|
-
asset inputs:file = @textures/Texture_${p}.png@
|
|
112
|
-
float2 inputs:st.connect = </Materials/Material_${n.id}/Transform2d_${c}.outputs:result>
|
|
113
|
-
${u!==void 0?"float4 inputs:scale = "+je(u):""}
|
|
114
|
-
token inputs:sourceColorSpace = "${a.colorSpace===d.NoColorSpace?"raw":"sRGB"}"
|
|
115
|
-
token inputs:wrapS = "${g[a.wrapS]}"
|
|
116
|
-
token inputs:wrapT = "${g[a.wrapT]}"
|
|
117
|
-
float outputs:r
|
|
118
|
-
float outputs:g
|
|
119
|
-
float outputs:b
|
|
120
|
-
float3 outputs:rgb
|
|
121
|
-
${n.transparent||n.alphaTest>0?"float outputs:a":""}
|
|
122
|
-
}`}return n.side===d.DoubleSide&&console.warn("THREE.USDZExporter: USDZ does not support double sided materials",n),n.map!==null?(r.push(`${t}color3f inputs:diffuseColor.connect = </Materials/Material_${n.id}/Texture_${n.map.id}_diffuse.outputs:rgb>`),n.transparent?r.push(`${t}float inputs:opacity.connect = </Materials/Material_${n.id}/Texture_${n.map.id}_diffuse.outputs:a>`):n.alphaTest>0&&(r.push(`${t}float inputs:opacity.connect = </Materials/Material_${n.id}/Texture_${n.map.id}_diffuse.outputs:a>`),r.push(`${t}float inputs:opacityThreshold = ${n.alphaTest}`)),i.push(o(n.map,"diffuse",n.color))):r.push(`${t}color3f inputs:diffuseColor = ${se(n.color)}`),n.emissiveMap!==null?(r.push(`${t}color3f inputs:emissiveColor.connect = </Materials/Material_${n.id}/Texture_${n.emissiveMap.id}_emissive.outputs:rgb>`),i.push(o(n.emissiveMap,"emissive"))):n.emissive.getHex()>0&&r.push(`${t}color3f inputs:emissiveColor = ${se(n.emissive)}`),n.normalMap!==null&&(r.push(`${t}normal3f inputs:normal.connect = </Materials/Material_${n.id}/Texture_${n.normalMap.id}_normal.outputs:rgb>`),i.push(o(n.normalMap,"normal"))),n.aoMap!==null&&(r.push(`${t}float inputs:occlusion.connect = </Materials/Material_${n.id}/Texture_${n.aoMap.id}_occlusion.outputs:r>`),i.push(o(n.aoMap,"occlusion"))),n.roughnessMap!==null&&n.roughness===1?(r.push(`${t}float inputs:roughness.connect = </Materials/Material_${n.id}/Texture_${n.roughnessMap.id}_roughness.outputs:g>`),i.push(o(n.roughnessMap,"roughness"))):r.push(`${t}float inputs:roughness = ${n.roughness}`),n.metalnessMap!==null&&n.metalness===1?(r.push(`${t}float inputs:metallic.connect = </Materials/Material_${n.id}/Texture_${n.metalnessMap.id}_metallic.outputs:b>`),i.push(o(n.metalnessMap,"metallic"))):r.push(`${t}float inputs:metallic = ${n.metalness}`),n.alphaMap!==null?(r.push(`${t}float inputs:opacity.connect = </Materials/Material_${n.id}/Texture_${n.alphaMap.id}_opacity.outputs:r>`),r.push(`${t}float inputs:opacityThreshold = 0.0001`),i.push(o(n.alphaMap,"opacity"))):r.push(`${t}float inputs:opacity = ${n.opacity}`),n.isMeshPhysicalMaterial&&(r.push(`${t}float inputs:clearcoat = ${n.clearcoat}`),r.push(`${t}float inputs:clearcoatRoughness = ${n.clearcoatRoughness}`),r.push(`${t}float inputs:ior = ${n.ior}`)),`
|
|
123
|
-
def Material "Material_${n.id}"
|
|
124
|
-
{
|
|
125
|
-
def Shader "PreviewSurface"
|
|
126
|
-
{
|
|
127
|
-
uniform token info:id = "UsdPreviewSurface"
|
|
128
|
-
${r.join(`
|
|
129
|
-
`)}
|
|
130
|
-
int inputs:useSpecularWorkflow = 0
|
|
131
|
-
token outputs:surface
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
token outputs:surface.connect = </Materials/Material_${n.id}/PreviewSurface.outputs:surface>
|
|
135
|
-
|
|
136
|
-
${i.join(`
|
|
137
|
-
`)}
|
|
138
|
-
|
|
139
|
-
}
|
|
140
|
-
`}function se(n){return`(${n.r}, ${n.g}, ${n.b})`}function je(n){return`(${n.r}, ${n.g}, ${n.b}, 1.0)`}function ne(n){return`(${n.x}, ${n.y})`}function Ke(n){const e=n.name?n.name:"Camera_"+n.id,s=oe(n.matrixWorld);return n.matrixWorld.determinant()<0&&console.warn("THREE.USDZExporter: USDZ does not support negative scales",n),n.isOrthographicCamera?`def Camera "${e}"
|
|
141
|
-
{
|
|
142
|
-
matrix4d xformOp:transform = ${s}
|
|
143
|
-
uniform token[] xformOpOrder = ["xformOp:transform"]
|
|
144
|
-
|
|
145
|
-
float2 clippingRange = (${n.near.toPrecision(E)}, ${n.far.toPrecision(E)})
|
|
146
|
-
float horizontalAperture = ${((Math.abs(n.left)+Math.abs(n.right))*10).toPrecision(E)}
|
|
147
|
-
float verticalAperture = ${((Math.abs(n.top)+Math.abs(n.bottom))*10).toPrecision(E)}
|
|
148
|
-
token projection = "orthographic"
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
`:`def Camera "${e}"
|
|
152
|
-
{
|
|
153
|
-
matrix4d xformOp:transform = ${s}
|
|
154
|
-
uniform token[] xformOpOrder = ["xformOp:transform"]
|
|
155
|
-
|
|
156
|
-
float2 clippingRange = (${n.near.toPrecision(E)}, ${n.far.toPrecision(E)})
|
|
157
|
-
float focalLength = ${n.getFocalLength().toPrecision(E)}
|
|
158
|
-
float focusDistance = ${n.focus.toPrecision(E)}
|
|
159
|
-
float horizontalAperture = ${n.getFilmWidth().toPrecision(E)}
|
|
160
|
-
token projection = "perspective"
|
|
161
|
-
float verticalAperture = ${n.getFilmHeight().toPrecision(E)}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
`}class We{constructor(){H(this,"_gltfExporter");H(this,"_usdzExporter");this._gltfExporter=new W,this._usdzExporter=new Ce}async export(e,s,t){switch(s){case"glb":return this._exportGlb(e,t);case"gltf":return this._exportGltf(e,t);case"usdz":return this._exportUsdz(e,t);default:throw new N.FileTypeError(`Unsupported file type: ${s}`,s)}}async _exportGlb(e,s){try{const t=await this._gltfExporter.parseAsync(e,{...s,binary:!0});if(t instanceof ArrayBuffer)return t;throw new N.ParseError("Failed to export GLB: expected ArrayBuffer")}catch(t){throw t instanceof N.ParseError?t:new N.ParseError("Failed to export GLB",t)}}async _exportGltf(e,s){try{const t=await this._gltfExporter.parseAsync(e,{...s,binary:!1}),r=JSON.stringify(t);return new TextEncoder().encode(r).buffer}catch(t){throw t instanceof N.ParseError?t:new N.ParseError("Failed to export GLTF",t)}}async _exportUsdz(e,s){try{return(await this._usdzExporter.parse(e,s)).buffer}catch(t){throw t instanceof N.ParseError?t:new N.ParseError("Failed to export USDZ",t)}}}exports.AssetExporter=We;
|