@realsee/vreo 3.0.0-webgpu.9 → 4.0.0-react19.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.
Files changed (68) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +6 -0
  3. package/lib/PlayController/index.js +74 -75
  4. package/lib/PlayController/index.js.map +1 -1
  5. package/lib/Player/App.d.ts +2 -1
  6. package/lib/Player/App.d.ts.map +1 -1
  7. package/lib/Player/custom/SpatialScenePanel/index.d.ts +2 -1
  8. package/lib/Player/custom/SpatialScenePanel/index.d.ts.map +1 -1
  9. package/lib/Player/hooks.d.ts.map +1 -1
  10. package/lib/Player/index.js +1 -1808
  11. package/lib/Player/modules/Drawer/index.d.ts +2 -1
  12. package/lib/Player/modules/Drawer/index.d.ts.map +1 -1
  13. package/lib/Player/modules/PopUp/index.d.ts +2 -1
  14. package/lib/Player/modules/PopUp/index.d.ts.map +1 -1
  15. package/lib/Player/modules/ResizeObserver/index.d.ts +2 -1
  16. package/lib/Player/modules/ResizeObserver/index.d.ts.map +1 -1
  17. package/lib/Player/modules/VideoAgent/index.d.ts +2 -2
  18. package/lib/Player/modules/Wave/index.d.ts +2 -1
  19. package/lib/Player/modules/Wave/index.d.ts.map +1 -1
  20. package/lib/Player/modules/keyframes/BgMusic/index.d.ts +2 -1
  21. package/lib/Player/modules/keyframes/BgMusic/index.d.ts.map +1 -1
  22. package/lib/Player/modules/keyframes/CameraMovement/index.d.ts +2 -1
  23. package/lib/Player/modules/keyframes/CameraMovement/index.d.ts.map +1 -1
  24. package/lib/Player/modules/keyframes/InfoPanel/index.d.ts +2 -1
  25. package/lib/Player/modules/keyframes/InfoPanel/index.d.ts.map +1 -1
  26. package/lib/Player/modules/keyframes/ModelVideo/index.d.ts +2 -1
  27. package/lib/Player/modules/keyframes/ModelVideo/index.d.ts.map +1 -1
  28. package/lib/Player/modules/keyframes/PanoEffect/index.d.ts +2 -1
  29. package/lib/Player/modules/keyframes/PanoEffect/index.d.ts.map +1 -1
  30. package/lib/Player/modules/keyframes/PanoTextLabel/index.d.ts +2 -1
  31. package/lib/Player/modules/keyframes/PanoTextLabel/index.d.ts.map +1 -1
  32. package/lib/Player/modules/keyframes/Prompter/index.d.ts +2 -1
  33. package/lib/Player/modules/keyframes/Prompter/index.d.ts.map +1 -1
  34. package/lib/Player/modules/keyframes/UpdateVRPanorama/index.d.ts +2 -1
  35. package/lib/Player/modules/keyframes/UpdateVRPanorama/index.d.ts.map +1 -1
  36. package/lib/Player/modules/keyframes/VideoEffect/index.d.ts +2 -1
  37. package/lib/Player/modules/keyframes/VideoEffect/index.d.ts.map +1 -1
  38. package/lib/chunks/CSS3DRenderPlugin-CtnLUnu7.js +128 -0
  39. package/lib/chunks/CSS3DRenderPlugin-CtnLUnu7.js.map +1 -0
  40. package/lib/chunks/CameraMovementPlugin-YCaScSFU.js +77 -0
  41. package/lib/chunks/CameraMovementPlugin-YCaScSFU.js.map +1 -0
  42. package/lib/chunks/Player-BzRqdH4q.js +1581 -0
  43. package/lib/chunks/Player-BzRqdH4q.js.map +1 -0
  44. package/lib/chunks/VreoUnit-NhH1hdF1.js +17 -0
  45. package/lib/chunks/VreoUnit-NhH1hdF1.js.map +1 -0
  46. package/lib/chunks/timeline-DZs_svT3.js +37 -0
  47. package/lib/chunks/timeline-DZs_svT3.js.map +1 -0
  48. package/lib/fivePlugins/CSS3DRenderPlugin/transformPositionToVector3.d.ts.map +1 -1
  49. package/lib/index.js +4 -12
  50. package/lib/plugins/CSS3DRenderPlugin.js +1 -115
  51. package/lib/plugins/CameraMovementPlugin.js +1 -6
  52. package/lib/plugins/ModelTVVideoPlugin.js +133 -161
  53. package/lib/plugins/ModelTVVideoPlugin.js.map +1 -1
  54. package/lib/react/index.js +40 -38
  55. package/lib/react/index.js.map +1 -1
  56. package/lib/shared-utils/animationFrame/BetterTween.d.ts.map +1 -1
  57. package/lib/shared-utils/createTransMatrix.d.ts.map +1 -1
  58. package/lib/types/index.js +1 -10
  59. package/package.json +8 -8
  60. package/lib/Player/index.js.map +0 -1
  61. package/lib/chunks/index-BgPSzRSs.js +0 -93
  62. package/lib/chunks/index-BgPSzRSs.js.map +0 -1
  63. package/lib/chunks/index-CunyJn6H.js +0 -51
  64. package/lib/chunks/index-CunyJn6H.js.map +0 -1
  65. package/lib/index.js.map +0 -1
  66. package/lib/plugins/CSS3DRenderPlugin.js.map +0 -1
  67. package/lib/plugins/CameraMovementPlugin.js.map +0 -1
  68. package/lib/types/index.js.map +0 -1
@@ -1,93 +0,0 @@
1
- import { Five as w } from "@realsee/five-webgpu";
2
- var y = /* @__PURE__ */ ((e) => (e.Move = "Move", e.Rotate = "Rotate", e))(y || {}), M = /* @__PURE__ */ ((e) => (e.Clockwise = "Clockwise", e.Anticlockwise = "Anticlockwise", e.Loop = "Loop", e))(M || {});
3
- const S = Math.PI, x = S * 2;
4
- let C = !1;
5
- function p(e, i, f) {
6
- return e === i ? e : e + (i - e) * f;
7
- }
8
- function h(e, i, f, o) {
9
- const d = f === M.Clockwise, n = (d ? e - i : i - e) % x, a = n < 0 ? n + x : n, l = d ? -a : a;
10
- return (e + l * o) % x;
11
- }
12
- const L = (e) => ({
13
- move: (o, d, t = { preload: !0 }) => new Promise(async (n, a) => {
14
- var u;
15
- if (C = !0, t.asyncStartCallback && t.asyncStartCallback(), e.panoIndex === void 0)
16
- return a(!1);
17
- if (o.mode && o.mode !== e.currentMode)
18
- return await e.changeMode(o.mode, o, d), n(!0);
19
- if (o.mode === w.Mode.Floorplan || (t.preload && o.panoIndex !== void 0 && o.panoIndex !== e.panoIndex && await e.preloadPano(o.panoIndex), (u = t.asyncEndCallback) == null || u.call(t), o.panoIndex === void 0 && o.fov === void 0 && o.latitude === void 0 && o.longitude === void 0))
20
- return n(!0);
21
- const l = o.panoIndex !== void 0 ? o.panoIndex : e.panoIndex;
22
- if (l !== void 0) {
23
- const m = performance.now();
24
- await e.ready();
25
- const s = Object.assign({}, o, {
26
- duration: d - (performance.now() - m),
27
- // 移动耗时
28
- moveEndCallback: () => n(!0),
29
- // 移动结束
30
- moveCancelCallback: () => {
31
- n(!0);
32
- },
33
- // 移动开始
34
- effect: o.transEffect || "fly"
35
- });
36
- await e.moveToPano(
37
- l,
38
- s
39
- );
40
- } else
41
- a(!1);
42
- }),
43
- rotate: async (o, d, t = {}) => {
44
- var P, k;
45
- C = !1, (P = t.asyncStartCallback) == null || P.call(t), o.mode && e.currentMode !== o.mode && await e.changeMode(o.mode, o.mode === w.Mode.Panorama ? { latitude: 0 } : void 0), o.mode === w.Mode.Panorama && e.currentMode === w.Mode.Panorama && o.panoIndex !== void 0 && o.panoIndex !== e.panoIndex && (t.preload && await e.preloadPano(o.panoIndex), await new Promise((c, r) => {
46
- e.moveToPano(o.panoIndex, {
47
- moveEndCallback: () => c(!0),
48
- // 移动结束
49
- moveCancelCallback: () => r(!1),
50
- // 移动开始
51
- effect: "fade"
52
- });
53
- })), await e.ready(), (k = t.asyncEndCallback) == null || k.call(t);
54
- const n = e.getCurrentState(), a = o;
55
- let l = !1;
56
- const u = performance.now();
57
- let m = d;
58
- o.rotation === M.Loop && (m = o.rotateSpeed ? Math.ceil(Math.abs(a.longitude - n.longitude) / o.rotateSpeed * 1e3) : d, m = Math.min(d, m));
59
- const s = () => {
60
- if (l || C) {
61
- e.off("renderFrame", s);
62
- return;
63
- }
64
- let c = {};
65
- if (o.rotation !== M.Loop) {
66
- const r = (performance.now() - u) / d;
67
- c = {
68
- fov: p(n.fov, a.fov, r),
69
- latitude: p(n.latitude, a.latitude, r),
70
- longitude: h(n.longitude, a.longitude, o.rotation, r)
71
- };
72
- } else {
73
- const r = (performance.now() - u) / m, b = Math.floor(r), v = r - b, I = b % 2 === 1 ? 1 - v : v;
74
- c = {
75
- fov: p(n.fov, a.fov, I),
76
- latitude: p(n.latitude, a.latitude, I),
77
- longitude: p(n.longitude, a.longitude, I)
78
- };
79
- }
80
- e.setState(c, !0);
81
- };
82
- return e.on("renderFrame", s), await new Promise((c) => {
83
- setTimeout(() => {
84
- l = !0, e.off("renderFrame", s), c(!0);
85
- }, d);
86
- });
87
- }
88
- });
89
- export {
90
- L as C,
91
- y as a
92
- };
93
- //# sourceMappingURL=index-BgPSzRSs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BgPSzRSs.js","sources":["../../resources/fivePlugins/CameraMovementPlugin/typings.ts","../../resources/fivePlugins/CameraMovementPlugin/index.ts"],"sourcesContent":["/* eslint-disable prettier/prettier */\nimport { Mode, MovePanoOptions, Pose } from '@realsee/five-webgpu'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface CameraMovementPluginParameterType { }\n\nexport interface CameraMovementPluginExportType {\n /**\n * 运镜:移动\n * @param moveArgs\n * @param duration\n * @param opts\n */\n move(moveArgs: Partial<MoveArgs>, duration: number, opts?: MoveOpts): Promise<boolean>\n /**\n * 运镜:旋转\n * @param args\n * @param duration\n * @param opts\n */\n rotate(args: RotateArgs, duration: number, opts?: RotateOpts): Promise<boolean>\n}\n\nexport enum CameraMovementEffect {\n Move = 'Move',\n Rotate = 'Rotate',\n}\nexport enum Rotation {\n Clockwise = 'Clockwise',\n Anticlockwise = 'Anticlockwise',\n Loop = 'Loop',\n}\n\nexport interface CameraMovementOptsCallback {\n asyncStartCallback?: () => void\n asyncEndCallback?: () => void\n}\n\nexport type MoveArgs = {\n mode: Mode\n panoIndex: number\n transEffect?: \"fly\" | \"fade\" | \"instant\"\n} & Pose\n\nexport type MoveOpts = {\n preload?: boolean\n} & CameraMovementOptsCallback\n\nexport type RotateArgs = {\n mode?: Mode\n panoIndex: number\n loop: boolean\n rotateSpeed: number\n rotation: Rotation\n} & Pose\n\nexport type RotateOpts = {\n preload?: boolean\n} & CameraMovementOptsCallback\n","import { Five, MovePanoOptions } from '@realsee/five-webgpu'\nimport type { FivePlugin } from '@realsee/five-webgpu'\n\nimport {\n CameraMovementPluginParameterType,\n CameraMovementPluginExportType,\n MoveArgs,\n MoveOpts,\n RotateArgs,\n RotateOpts,\n Rotation,\n} from './typings'\n\nconst PI = Math.PI\nconst PI_2 = PI * 2\nlet moving = false // five 6 神秘bug, move 的时候不能 setState\n\nfunction progressNumber(from: number, to: number, pst: number) {\n if (from === to) return from\n return from + (to - from) * pst\n}\n\nfunction progressLongitude(fromLongitude: number, toLongitude: number, rotation: Rotation, progress: number): number {\n const clockwise = rotation === Rotation.Clockwise\n const delta = clockwise ? fromLongitude - toLongitude : toLongitude - fromLongitude\n const deltaMod = delta % PI_2\n const deltaMod2 = deltaMod < 0 ? deltaMod + PI_2 : deltaMod\n const deltaMod3 = clockwise ? -deltaMod2 : deltaMod2\n const progressLongitude = fromLongitude + deltaMod3 * progress\n return progressLongitude % PI_2\n}\n\n/**\n * **运镜插件** 模拟类似于电影运镜效果。\n */\nexport const CameraMovementPlugin: FivePlugin<CameraMovementPluginParameterType, CameraMovementPluginExportType> = (\n five: Five,\n) => {\n\n const move = (args: Partial<MoveArgs>, duration: number, opts: MoveOpts = { preload: true }) => {\n return new Promise<boolean>(async (resolve, reject) => {\n moving = true\n if (opts.asyncStartCallback) {\n opts.asyncStartCallback()\n }\n\n if (five.panoIndex === undefined) {\n return reject(false)\n }\n\n if (args.mode && args.mode !== five.currentMode) {\n await five.changeMode(args.mode, args, duration)\n return resolve(true)\n }\n\n // 模型态不能 move\n if (args.mode === Five.Mode.Floorplan) {\n return resolve(true)\n }\n\n if (opts.preload && args.panoIndex !== undefined && args.panoIndex !== five.panoIndex) {\n await five.preloadPano(args.panoIndex)\n }\n\n opts.asyncEndCallback?.()\n\n if (\n args.panoIndex === undefined &&\n args.fov === undefined &&\n args.latitude === undefined &&\n args.longitude === undefined\n ) {\n return resolve(true)\n }\n\n\n const panoIndex = args.panoIndex !== undefined ? args.panoIndex : five.panoIndex\n\n if (panoIndex !== undefined) {\n const start = performance.now()\n await five.ready()\n const movePanoOptions: MovePanoOptions = Object.assign({}, args, {\n duration: duration - (performance.now() - start), // 移动耗时\n moveEndCallback: () => resolve(true), // 移动结束\n moveCancelCallback: () => {\n resolve(true)\n }, // 移动开始\n effect: args.transEffect || 'fly',\n })\n await five.moveToPano(\n panoIndex,\n movePanoOptions,\n )\n } else {\n reject(false)\n }\n })\n }\n\n const rotate = async (args: RotateArgs, duration: number, opts: RotateOpts = {}) => {\n moving = false\n opts.asyncStartCallback?.()\n\n // 先切换模型再出旋转效果\n if (args.mode && five.currentMode !== args.mode) {\n await five.changeMode(args.mode, args.mode === Five.Mode.Panorama ? {latitude: 0} : undefined)\n }\n\n // 全景状态下,需要点位对齐\n if (args.mode === Five.Mode.Panorama &&\n five.currentMode === Five.Mode.Panorama &&\n args.panoIndex !== undefined &&\n args.panoIndex !== five.panoIndex) {\n if (opts.preload) await five.preloadPano(args.panoIndex)\n await new Promise((resolve, reject) => {\n five.moveToPano(args.panoIndex, {\n moveEndCallback: () => resolve(true), // 移动结束\n moveCancelCallback: () => reject(false), // 移动开始\n effect: 'fade',\n })\n })\n }\n\n await five.ready()\n\n opts.asyncEndCallback?.()\n\n // 计算to\n const from = five.getCurrentState()\n const to = (() => {\n return args\n })()\n\n let timeEnd = false\n\n // 开始时间\n const start = performance.now()\n\n let animeDuration = duration\n\n if (args.rotation === Rotation.Loop) {\n animeDuration = args.rotateSpeed\n ? Math.ceil((Math.abs(to.longitude - from.longitude) / args.rotateSpeed) * 1000)\n : duration\n animeDuration = Math.min(duration, animeDuration)\n }\n\n const onFiveRenderFrame = () => {\n if (timeEnd || moving) {\n five.off('renderFrame', onFiveRenderFrame)\n return\n }\n \n let targetState = {}\n \n if (args.rotation !== Rotation.Loop) {\n const progress = (performance.now() - start) / duration\n targetState = {\n fov: progressNumber(from.fov, to.fov, progress),\n latitude: progressNumber(from.latitude, to.latitude, progress),\n longitude: progressLongitude(from.longitude, to.longitude, args.rotation, progress)\n }\n } else {\n const progress = (performance.now() - start) / animeDuration // 可能大于1\n const times = Math.floor(progress)\n const progress2 = progress - times // 一定小于1\n const isNegative = times % 2 === 1 // 是否为反向旋转, 0: 正, 1: 反, 2: 正, 3: 反 以此类推\n const resultProgress = isNegative ? 1 - progress2 : progress2\n targetState = {\n fov: progressNumber(from.fov, to.fov, resultProgress),\n latitude: progressNumber(from.latitude, to.latitude, resultProgress),\n longitude: progressNumber(from.longitude, to.longitude, resultProgress)\n }\n }\n\n five.setState(targetState, true)\n }\n \n five.on('renderFrame', onFiveRenderFrame)\n\n return await new Promise<boolean>((resolve) => {\n setTimeout(() => {\n timeEnd = true\n five.off('renderFrame', onFiveRenderFrame)\n // 总时间到了之后强制结束,同时也是 Loop 模式的结束方式\n resolve(true)\n }, duration)\n })\n }\n\n return {\n move,\n rotate,\n }\n}\n"],"names":["CameraMovementEffect","Rotation","PI","PI_2","moving","progressNumber","from","to","pst","progressLongitude","fromLongitude","toLongitude","rotation","progress","clockwise","deltaMod","deltaMod2","deltaMod3","CameraMovementPlugin","five","args","duration","opts","resolve","reject","Five","_a","panoIndex","start","movePanoOptions","_b","timeEnd","animeDuration","onFiveRenderFrame","targetState","times","progress2","resultProgress"],"mappings":"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"}
@@ -1,51 +0,0 @@
1
- var l = Object.defineProperty;
2
- var f = (n, t, e) => t in n ? l(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
3
- var a = (n, t, e) => f(n, typeof t != "symbol" ? t + "" : t, e);
4
- const r = globalThis;
5
- var m;
6
- const d = ((m = r.requestAnimationFrame) == null ? void 0 : m.bind(r)) ?? ((n) => setTimeout(() => n(performance.now()), 16));
7
- var c;
8
- const p = ((c = r.cancelAnimationFrame) == null ? void 0 : c.bind(r)) ?? ((n) => clearTimeout(n));
9
- function g(n, t = 60) {
10
- let e = -1, s = 0, o = -1;
11
- const h = 1e3 / t;
12
- function u(i) {
13
- o === -1 && (o = i), e = d(u), !(i - s < h) && (s = i, n == null || n(i - o));
14
- }
15
- return e = d(u), () => p(e);
16
- }
17
- class A {
18
- constructor() {
19
- a(this, "keyframes", []);
20
- a(this, "consumed", /* @__PURE__ */ new Set());
21
- }
22
- load(t) {
23
- this.keyframes = t, this.consumed = new Set(t.filter((e) => e.parsed));
24
- }
25
- pendingAt(t) {
26
- return this.keyframes.filter((e) => this.consumed.has(e) || e.start > t || e.end < t ? !1 : e.type === "BgMusic" || e.type === "PanoTextLabel" || e.type === "Prompter" || e.type === "PanoTag" || t - e.start <= 100);
27
- }
28
- take(t) {
29
- const e = this.pendingAt(t);
30
- return e.forEach((s) => this.consumed.add(s)), e;
31
- }
32
- seek(t) {
33
- this.consumed = new Set(this.keyframes.filter((e) => e.end < t));
34
- }
35
- reset(t) {
36
- if (t === void 0) {
37
- this.consumed.clear();
38
- return;
39
- }
40
- for (const e of this.keyframes)
41
- e.type === t && this.consumed.delete(e);
42
- }
43
- clear() {
44
- this.keyframes = [], this.consumed.clear();
45
- }
46
- }
47
- export {
48
- A as T,
49
- g as r
50
- };
51
- //# sourceMappingURL=index-CunyJn6H.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-CunyJn6H.js","sources":["../../resources/shared-utils/animationFrame/index.ts","../../resources/timeline/index.ts"],"sourcesContent":["const scope = globalThis as typeof globalThis & {\n requestAnimationFrame?: (callback: FrameRequestCallback) => number\n cancelAnimationFrame?: (handle: number) => void\n}\n\nconst requestFrame = scope.requestAnimationFrame?.bind(scope)\n ?? ((callback: FrameRequestCallback) => setTimeout(() => callback(performance.now()), 16) as unknown as number)\nconst cancelFrame = scope.cancelAnimationFrame?.bind(scope)\n ?? ((handle: number) => clearTimeout(handle))\n\nexport default requestFrame\n\nexport function nextFrame(fn: FrameRequestCallback, delay = 0) {\n if (delay <= 0) requestFrame(fn)\n else requestFrame(() => nextFrame(fn, delay - 1))\n}\n\nexport function requestAnimationFrameInterval(callback?: (time: number) => unknown, frame = 60) {\n let handle = -1\n let previousTime = 0\n let startTime = -1\n const minimumDelta = 1000 / frame\n function loop(time: number) {\n if (startTime === -1) startTime = time\n handle = requestFrame(loop)\n if (time - previousTime < minimumDelta) return\n previousTime = time\n callback?.(time - startTime)\n }\n handle = requestFrame(loop)\n return () => cancelFrame(handle)\n}\n\nexport function getFrameTime() {\n const start = Date.now()\n return new Promise<number>(resolve => requestFrame(() => resolve(Date.now() - start)))\n}\n","export interface TimelineKeyframe {\n type: string\n start: number\n end: number\n parsed?: boolean\n}\n\n/** Deterministic keyframe selection. Runtime state never mutates timeline input. */\nexport class Timeline<Keyframe extends TimelineKeyframe = TimelineKeyframe> {\n private keyframes: readonly Keyframe[] = []\n private consumed = new Set<Keyframe>()\n\n load(keyframes: readonly Keyframe[]) {\n this.keyframes = keyframes\n this.consumed = new Set(keyframes.filter(keyframe => keyframe.parsed))\n }\n\n pendingAt(currentTime: number) {\n return this.keyframes.filter(keyframe => {\n if (this.consumed.has(keyframe)) return false\n if (keyframe.start > currentTime || keyframe.end < currentTime) return false\n return keyframe.type === 'BgMusic' ||\n keyframe.type === 'PanoTextLabel' || keyframe.type === 'Prompter' || keyframe.type === 'PanoTag' ||\n currentTime - keyframe.start <= 100\n })\n }\n\n take(currentTime: number) {\n const pending = this.pendingAt(currentTime)\n pending.forEach(keyframe => this.consumed.add(keyframe))\n return pending\n }\n\n seek(currentTime: number) {\n this.consumed = new Set(this.keyframes.filter(keyframe => keyframe.end < currentTime))\n }\n\n reset(type?: Keyframe['type']) {\n if (type === undefined) {\n this.consumed.clear()\n return\n }\n for (const keyframe of this.keyframes) {\n if (keyframe.type === type) this.consumed.delete(keyframe)\n }\n }\n\n clear() {\n this.keyframes = []\n this.consumed.clear()\n }\n}\n"],"names":["scope","_a","requestFrame","callback","cancelFrame","handle","requestAnimationFrameInterval","frame","previousTime","startTime","minimumDelta","loop","time","Timeline","__publicField","keyframes","keyframe","currentTime","pending","type"],"mappings":";;;AAAA,MAAMA,IAAQ;AAAd,IAAAC;AAKA,MAAMC,MAAeD,IAAAD,EAAM,0BAAN,gBAAAC,EAA6B,KAAKD,QACjD,CAACG,MAAmC,WAAW,MAAMA,EAAS,YAAY,IAAA,CAAK,GAAG,EAAE;AAN1F,IAAAF;AAOA,MAAMG,MAAcH,IAAAD,EAAM,yBAAN,gBAAAC,EAA4B,KAAKD,QAC/C,CAACK,MAAmB,aAAaA,CAAM;AAStC,SAASC,EAA8BH,GAAsCI,IAAQ,IAAI;AAC9F,MAAIF,IAAS,IACTG,IAAe,GACfC,IAAY;AAChB,QAAMC,IAAe,MAAOH;AAC5B,WAASI,EAAKC,GAAc;AAG1B,IAFIH,MAAc,OAAIA,IAAYG,IAClCP,IAASH,EAAaS,CAAI,GACtB,EAAAC,IAAOJ,IAAeE,OAC1BF,IAAeI,GACfT,KAAA,QAAAA,EAAWS,IAAOH;AAAA,EACpB;AACA,SAAAJ,IAASH,EAAaS,CAAI,GACnB,MAAMP,EAAYC,CAAM;AACjC;ACvBO,MAAMQ,EAA+D;AAAA,EAArE;AACG,IAAAC,EAAA,mBAAiC,CAAA;AACjC,IAAAA,EAAA,sCAAe,IAAA;AAAA;AAAA,EAEvB,KAAKC,GAAgC;AACnC,SAAK,YAAYA,GACjB,KAAK,WAAW,IAAI,IAAIA,EAAU,OAAO,CAAAC,MAAYA,EAAS,MAAM,CAAC;AAAA,EACvE;AAAA,EAEA,UAAUC,GAAqB;AAC7B,WAAO,KAAK,UAAU,OAAO,CAAAD,MACvB,KAAK,SAAS,IAAIA,CAAQ,KAC1BA,EAAS,QAAQC,KAAeD,EAAS,MAAMC,IAAoB,KAChED,EAAS,SAAS,aACvBA,EAAS,SAAS,mBAAmBA,EAAS,SAAS,cAAcA,EAAS,SAAS,aACvFC,IAAcD,EAAS,SAAS,GACnC;AAAA,EACH;AAAA,EAEA,KAAKC,GAAqB;AACxB,UAAMC,IAAU,KAAK,UAAUD,CAAW;AAC1C,WAAAC,EAAQ,QAAQ,CAAAF,MAAY,KAAK,SAAS,IAAIA,CAAQ,CAAC,GAChDE;AAAA,EACT;AAAA,EAEA,KAAKD,GAAqB;AACxB,SAAK,WAAW,IAAI,IAAI,KAAK,UAAU,OAAO,CAAAD,MAAYA,EAAS,MAAMC,CAAW,CAAC;AAAA,EACvF;AAAA,EAEA,MAAME,GAAyB;AAC7B,QAAIA,MAAS,QAAW;AACtB,WAAK,SAAS,MAAA;AACd;AAAA,IACF;AACA,eAAWH,KAAY,KAAK;AAC1B,MAAIA,EAAS,SAASG,KAAM,KAAK,SAAS,OAAOH,CAAQ;AAAA,EAE7D;AAAA,EAEA,QAAQ;AACN,SAAK,YAAY,CAAA,GACjB,KAAK,SAAS,MAAA;AAAA,EAChB;AACF;"}
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CSS3DRenderPlugin.js","sources":["../../resources/fivePlugins/CSS3DRenderPlugin/evenNumber.ts","../../resources/fivePlugins/CSS3DRenderPlugin/centerPoint.ts","../../resources/fivePlugins/CSS3DRenderPlugin/transformPositionToVector3.ts","../../resources/fivePlugins/CSS3DRenderPlugin/createResizeObserver.ts","../../resources/fivePlugins/CSS3DRenderPlugin/index.ts"],"sourcesContent":["export default function evenNumber(num: number, config?: { smaller?: boolean }): number {\n const roundNum = Math.round(num)\n return roundNum % 2 === 0 ? roundNum : roundNum + Number(config?.smaller ? -1 : 1)\n}\n","import { Vector3 } from 'three/webgpu'\n\nexport default function centerPoint(point1: Vector3, point2: Vector3): Vector3 {\n return new Vector3((point1.x + point2.x) / 2, (point1.y + point2.y) / 2, (point1.z + point2.z) / 2)\n}\n","import { Vector3 } from 'three/webgpu'\n\nconst transformPositionToVector3 = ({ x, y, z }: { x: number; y: number; z: number }) => new Vector3(x, y, z)\n\nexport default transformPositionToVector3\n","export default function createResizeObserver(callback: () => void, element?: HTMLElement) {\n let observing = false\n if (!element || typeof ResizeObserver === 'undefined') {\n return {\n observe() {\n if (observing) return\n observing = true\n window.addEventListener('resize', callback)\n },\n unobserve() {\n if (!observing) return\n observing = false\n window.removeEventListener('resize', callback)\n },\n disconnect() {\n if (!observing) return\n observing = false\n window.removeEventListener('resize', callback)\n },\n }\n }\n\n const observer = new ResizeObserver(callback)\n return {\n observe() {\n if (observing) return\n observing = true\n observer.observe(element)\n },\n unobserve() {\n if (!observing) return\n observing = false\n observer.unobserve(element)\n },\n disconnect() {\n observing = false\n observer.disconnect()\n },\n }\n}\n","import { FivePlugin } from '@realsee/five-webgpu'\nimport * as THREE from 'three/webgpu'\nimport { Scene, Vector3 } from 'three/webgpu'\nimport { CSS3DObject, CSS3DRenderer } from 'three/addons/renderers/CSS3DRenderer.js'\nimport evenNumber from './evenNumber'\nimport centerPoint from './centerPoint'\nimport transformPositionToVector3 from './transformPositionToVector3'\nimport createResizeObserver from './createResizeObserver'\n\nexport interface Vector3Position {\n x: number\n y: number\n z: number\n}\n\nexport type CSS3DRenderPluginParameterType = undefined\nexport interface CSS3DRenderPluginExportType {\n create3DDomContainer: (\n points: Vector3[] | Vector3Position[],\n config?: { ratio?: number; dpr?: number; autoRender?: boolean; container?: HTMLElement; [key: string]: any } & (\n | { mode?: 'front' }\n | { mode: 'behind'; behindFiveContainer: HTMLElement }\n ),\n ) => { container: HTMLElement; dispose: () => void; css3DObject: CSS3DObject; render?: () => void } | void\n disposeAll: () => void\n}\n\ntype CreateContainer = CSS3DRenderPluginExportType['create3DDomContainer']\ntype CreateContainerConfig = NonNullable<Parameters<CreateContainer>[1]>\ninterface RenderLayer {\n scene: Scene\n renderer: CSS3DRenderer\n entries: Set<object>\n start: () => void\n stop: () => void\n dispose: () => void\n}\ninterface CSS3DRenderPluginState {\n disposers: Set<() => void>\n front?: RenderLayer\n behind?: RenderLayer\n}\n\n/** Renders DOM overlays in a Five scene. One renderer is shared by each front/behind layer. */\nexport const CSS3DRenderPlugin: FivePlugin<CSS3DRenderPluginParameterType, CSS3DRenderPluginExportType> = (five) => {\n const state: CSS3DRenderPluginState = { disposers: new Set() }\n\n const createLayer = (wrapper: HTMLElement, fiveElement: HTMLElement): RenderLayer => {\n const scene = new Scene()\n const renderer = new CSS3DRenderer()\n const setSize = () => renderer.setSize(\n evenNumber(fiveElement.clientWidth, { smaller: true }),\n evenNumber(fiveElement.clientHeight, { smaller: true }),\n )\n setSize()\n const resize = createResizeObserver(setSize, fiveElement)\n renderer.domElement.style.position = 'absolute'\n renderer.domElement.style.top = '0'\n renderer.domElement.style.userSelect = 'none'\n renderer.domElement.style.pointerEvents = 'none'\n wrapper.appendChild(renderer.domElement)\n\n let running = false\n let frame: number | undefined\n const layer: RenderLayer = {\n scene,\n renderer,\n entries: new Set(),\n start() {\n if (running) return\n running = true\n resize.observe()\n const render = () => {\n if (!running) return\n renderer.render(scene, five.camera)\n frame = requestAnimationFrame(render)\n }\n render()\n },\n stop() {\n if (!running) return\n running = false\n if (frame !== undefined) cancelAnimationFrame(frame)\n frame = undefined\n resize.unobserve()\n },\n dispose() {\n layer.stop()\n resize.disconnect()\n renderer.domElement.remove()\n },\n }\n return layer\n }\n\n const create3DDomContainer = (...params: Parameters<CreateContainer>): ReturnType<CreateContainer> => {\n const points = params[0].map(point => point instanceof Vector3 ? point : transformPositionToVector3(point))\n const config = params[1]\n if (points.length < 4) return console.error('points must be equal or greater than 4')\n if (!five.model.loaded) return console.error('five.model.loaded is false')\n const fiveElement = five.getElement()\n if (!fiveElement) return console.error('five.getElement() is empty')\n\n const ratio = config?.ratio ?? 0.00216\n if (ratio <= 0.00215) console.warn('if you need click css3DElement on safari, ratio must be greater than 0.00215')\n const dpr = config?.dpr ?? 1\n const mode = config?.mode ?? 'front'\n const autoRender = config?.autoRender ?? true\n const container = config?.container ?? document.createElement('div')\n container.classList.add('__Dnalogel-plugin--CSS3DRenderPlugin')\n const { css3DObject, mesh } = createObject(points, { ratio, dpr, container, mode })\n\n let layer = mode === 'behind' ? state.behind : state.front\n if (!layer) {\n const wrapper = mode === 'behind'\n ? config?.behindFiveContainer ?? fiveElement.parentElement ?? document.body\n : fiveElement.parentElement ?? document.body\n layer = createLayer(wrapper, fiveElement)\n if (mode === 'behind') state.behind = layer\n else state.front = layer\n }\n\n const entry = {}\n layer.entries.add(entry)\n let rendered = false\n let disposed = false\n const render = () => {\n if (disposed || rendered) return\n rendered = true\n layer!.scene.add(css3DObject)\n if (mesh) five.scene.add(mesh)\n layer!.start()\n }\n const dispose = () => {\n if (disposed) return\n disposed = true\n state.disposers.delete(dispose)\n layer!.entries.delete(entry)\n if (rendered) {\n layer!.scene.remove(css3DObject)\n if (mesh) five.scene.remove(mesh)\n }\n mesh?.geometry.dispose()\n mesh?.material.dispose()\n if (layer!.scene.children.length === 0) layer!.stop()\n if (layer!.entries.size === 0) {\n layer!.dispose()\n if (mode === 'behind' && state.behind === layer) state.behind = undefined\n if (mode === 'front' && state.front === layer) state.front = undefined\n }\n }\n state.disposers.add(dispose)\n if (autoRender) render()\n return { container, dispose, css3DObject, render: autoRender ? undefined : render }\n }\n\n const createObject = (\n points: Vector3[],\n config: Required<Pick<CreateContainerConfig, 'ratio' | 'dpr' | 'container'>> & Pick<CreateContainerConfig, 'mode'>,\n ) => {\n const { ratio, dpr, container: element, mode } = config\n const planeWidth = points[0].distanceTo(points[1])\n const planeHeight = points[1].distanceTo(points[2])\n const domWidthPx = evenNumber((planeWidth / ratio) * dpr)\n const domHeightPx = evenNumber((planeHeight / ratio) * dpr)\n const css3DObject = new CSS3DObject(element)\n css3DObject.scale.set(ratio, ratio, ratio)\n element.style.width = domWidthPx + 'px'\n element.style.height = domHeightPx + 'px'\n element.style.pointerEvents = 'none'\n\n const centerPosition = centerPoint(points[0], points[2])\n const vector01 = points[1].clone().sub(points[0])\n const vector12 = points[2].clone().sub(points[1])\n const rotateXAngle = new Vector3(0, 1, 0).angleTo(new Vector3(0, vector12.y, vector12.z))\n const rotateYAngle = new Vector3(1, 0, 0).angleTo(new Vector3(vector01.x, 0, vector01.z))\n const rotateZAngle = vector01.angleTo(new Vector3(vector01.x, 0, vector01.z))\n const rotateX = (vector12.z > 0 ? -1 : 1) * rotateXAngle\n const rotateY = (vector01.z < 0 ? 1 : -1) * rotateYAngle\n const rotateZ = ((vector01.x > 0 && vector01.y < 0) || (vector01.x < 0 && vector01.y > 0) ? -1 : 1) * rotateZAngle\n css3DObject.rotateOnWorldAxis(new Vector3(1, 0, 0), rotateX)\n css3DObject.rotateOnWorldAxis(new Vector3(0, 1, 0), rotateY)\n css3DObject.rotateOnWorldAxis(new Vector3(0, 0, 1), rotateZ)\n css3DObject.position.set(centerPosition.x, centerPosition.y, centerPosition.z)\n\n let mesh: THREE.Mesh<THREE.PlaneGeometry, THREE.MeshBasicNodeMaterial> | undefined\n if (mode === 'behind') {\n const material = new THREE.MeshBasicNodeMaterial({ opacity: 0, transparent: false, side: THREE.DoubleSide })\n const geometry = new THREE.PlaneGeometry(domWidthPx, domHeightPx)\n mesh = new THREE.Mesh(geometry, material)\n mesh.name = 'CSS3DRenderPlugin-mesh'\n mesh.position.copy(css3DObject.position)\n mesh.rotation.copy(css3DObject.rotation)\n mesh.scale.copy(css3DObject.scale)\n }\n return { css3DObject, mesh }\n }\n\n return {\n create3DDomContainer,\n disposeAll: () => [...state.disposers].forEach(dispose => dispose()),\n }\n}\n\nexport default CSS3DRenderPlugin\n"],"names":["evenNumber","num","config","roundNum","centerPoint","point1","point2","Vector3","transformPositionToVector3","x","y","z","createResizeObserver","callback","element","observing","observer","CSS3DRenderPlugin","five","state","createLayer","wrapper","fiveElement","scene","Scene","renderer","CSS3DRenderer","setSize","resize","running","frame","layer","render","create3DDomContainer","params","points","point","ratio","dpr","mode","autoRender","container","css3DObject","mesh","createObject","entry","rendered","disposed","dispose","planeWidth","planeHeight","domWidthPx","domHeightPx","CSS3DObject","centerPosition","vector01","vector12","rotateXAngle","rotateYAngle","rotateZAngle","rotateX","rotateY","rotateZ","material","THREE","geometry"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CameraMovementPlugin.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../resources/typings/VreoUnit.ts"],"sourcesContent":["import { Mode, Pose } from '@realsee/five-webgpu'\nimport { CameraMovementEffect, Rotation } from '../fivePlugins/CameraMovementPlugin/typings'\n\nexport enum VreoKeyframeEnum {\n /** 运镜 */\n CameraMovement = 'CameraMovement',\n /**\n * 全景标签\n */\n PanoTag = 'PanoTag',\n /**\n * 全景文本标签\n */\n PanoTextLabel = 'PanoTextLabel',\n /**\n * 提词器\n */\n Prompter = 'Prompter',\n /**\n * 更新 VR 全景\n */\n UpdateVRPanorama = 'UpdateVRPanorama',\n /**\n * 视频广告\n */\n ModelVideo = 'ModelVideo',\n /**\n * 全景特效\n */\n PanoEffect = 'PanoEffect',\n /**\n * 信息面板\n */\n InfoPanel = 'InfoPanel',\n /**\n * 视频特效\n */\n VideoEffect = 'VideoEffect',\n /**\n * 背景音乐\n */\n BgMusic = 'BgMusic',\n /**\n * 结束\n */\n Exit = 'Exit',\n /**\n * 自定义剧本帧\n */\n Custom = 'Custom',\n}\n\n/**\n * 支持自定义剧本关键帧配置项\n */\nexport type VreoKeyframeConfigMap = {\n PanoTag?: false\n PanoTextLabel?: false\n Prompter?: false\n InfoPanel?: false\n}\n\n\n/**\n * 剧本关键帧\n */\nexport interface VreoKeyframe {\n uuid?: string\n type: VreoKeyframeEnum\n start: number\n end: number\n parsed?: boolean\n data: Record<string, any>\n}\n\n/**\n * 虚拟视频角色\n */\nexport interface VreoVideo {\n duration: number\n start: number\n end: number\n url: string\n avatar?: {\n url?: string\n force?: true\n }\n}\n\n/**\n * 剧本结构\n */\nexport interface VreoUnit {\n categoryId?: string\n categoryText?: string\n frontRequestId?: string\n index?: string | number\n configure?: { pageTitle?: string }\n keyframes: VreoKeyframe[]\n video: VreoVideo\n}\n\n\n\n/**\n * 剧本事件\n */\nexport type VreoKeyframeEvent = { [key in VreoKeyframeEnum]: (keyframe: VreoKeyframe, currentTime: number) => void } & {\n // 新数据载入完成\n loaded: (vreoUnit: VreoUnit) => void\n // 语音状态 播放 -> 暂停\n paused: (ended?: boolean) => void\n // 语音状态 暂停 -> 播放\n playing: () => void\n // 未知的 剧本帧类型\n unknownKeyframeType: (keyframe: Record<string, any>) => void\n // 一次播放完成(试用,只抛事件不做任何额外的逻辑处理)\n ended: () => void\n}\n\n/**\n * 相机运动\n */\nexport type CameraMovementData = {\n effect?: CameraMovementEffect\n transEffect?: \"fly\" | \"fade\" | \"instant\"\n mode: Mode\n panoIndex: number\n loop?: boolean\n rotateSpeed?: number\n rotation?: Rotation\n} & Partial<Pose>\n\n/**\n * 提词器\n */\nexport type PrompterData = {\n text: string\n}\n\n/**\n * VR 全景切换\n */\nexport type UpdateVRPanoramaData = {\n _signature: string\n allow_hosts: string[]\n certificate: string\n expire_at: string\n // 动态场景\n dynamic_scene?: {\n images: {\n index: number\n right: string\n left: string\n up: string\n down: string\n front: string\n back: string\n }\n }\n [key: string]: any\n}\n\n/**\n * 顶点\n */\nexport interface Vertex {\n x: number\n y: number\n z: number\n}\n\n/**\n * 矩形顶点\n */\nexport type QuadrangleVertexs = [Vertex, Vertex, Vertex, Vertex]\n/**\n * 顶点数组\n */\nexport type Vertexs = Vertex[]\n\n/**\n * 视频广告\n */\nexport type ModelVideoData = {\n /**\n * 视频素材\n */\n videoSrc: string\n /**\n * 视频封面\n */\n videoPosterSrc: string\n /**\n * 视频映射在模型中的顶点\n */\n vertexs: QuadrangleVertexs | Vertexs\n matrixWorld?: number[]\n}\n\n/**\n * 四元数\n */\nexport type Quaternion = {\n x: number,\n y: number,\n z: number,\n w: number\n}\n\n/**\n * 全景文本标签\n */\nexport type PanoTextLabelData = {\n text: string\n vertex: Vertex\n normal?: Vertex\n quaternion?: Quaternion\n fontSize?: number\n}\n\n/**\n * 全景标签枚举\n */\nexport enum PanoTagEnum {\n Text = 'Text',\n Image = 'Image',\n}\n\n/**\n * 标签样式种类\n */\nexport enum PanoTagStyleEnum {\n /**\n * 生长动画:默认值\n */\n Growth = 'Growth',\n /**\n * 展开动画\n */\n Expand = 'Expand',\n}\n\nexport type PanoTagData = {\n type: PanoTagEnum\n style: PanoTagStyleEnum\n text: string\n vertex: Vertex\n imgUrl?: string\n}\n\n/**\n * 全景特效枚举\n */\nexport enum PanoEffectEnum {\n /**\n * 两点距离\n */\n Distance = 'Distance',\n}\n\n/**\n * 全景特效\n */\nexport type PanoEffectData = {\n effect: PanoEffectEnum\n twoVertexs: [Vertex, Vertex]\n}\n\n/**\n * 信息面板类型枚举\n */\nexport enum InfoPanelTypeEnum {\n Image = 'Image',\n Video = 'Video',\n}\n\nexport enum InfoPanelStyleEnum {\n Drawer = 'Drawer',\n PopUp = 'PopUp',\n}\n\n/**\n * 信息面板\n */\nexport type InfoPanelData = {\n type: InfoPanelTypeEnum\n style?: InfoPanelStyleEnum\n url: string\n // 标题\n title?: string\n // 副标题\n subTitle?: string\n}\n\n/**\n * 视频特效\n */\nexport type VideoEffectData = {\n videoSrc: string\n panoIndex: number\n fov: number\n direction?: Vertex\n vector?: Pick<Pose, 'longitude' | 'latitude'>\n}\n\n/**\n * 背景音乐\n */\nexport type BgMusicData = {\n url: string\n}\n\n/** 自定义序列帧 */\nexport type CustomData = Record<string, any>\n"],"names":["VreoKeyframeEnum","PanoTagEnum","PanoTagStyleEnum","PanoEffectEnum","InfoPanelTypeEnum","InfoPanelStyleEnum"],"mappings":"AAGO,IAAKA,sBAAAA,OAEVA,EAAA,iBAAiB,kBAIjBA,EAAA,UAAU,WAIVA,EAAA,gBAAgB,iBAIhBA,EAAA,WAAW,YAIXA,EAAA,mBAAmB,oBAInBA,EAAA,aAAa,cAIbA,EAAA,aAAa,cAIbA,EAAA,YAAY,aAIZA,EAAA,cAAc,eAIdA,EAAA,UAAU,WAIVA,EAAA,OAAO,QAIPA,EAAA,SAAS,UA9CCA,IAAAA,KAAA,CAAA,CAAA,GA6NAC,sBAAAA,OACVA,EAAA,OAAO,QACPA,EAAA,QAAQ,SAFEA,IAAAA,KAAA,CAAA,CAAA,GAQAC,sBAAAA,OAIVA,EAAA,SAAS,UAITA,EAAA,SAAS,UARCA,IAAAA,KAAA,CAAA,CAAA,GAsBAC,sBAAAA,OAIVA,EAAA,WAAW,YAJDA,IAAAA,KAAA,CAAA,CAAA,GAkBAC,sBAAAA,OACVA,EAAA,QAAQ,SACRA,EAAA,QAAQ,SAFEA,IAAAA,KAAA,CAAA,CAAA,GAKAC,sBAAAA,OACVA,EAAA,SAAS,UACTA,EAAA,QAAQ,SAFEA,IAAAA,KAAA,CAAA,CAAA;"}