@realsee/vreo 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +465 -0
- package/docs/.nojekyll +1 -0
- package/docs/assets/custom.css +52 -0
- package/docs/assets/highlight.css +127 -0
- package/docs/assets/icons.css +1043 -0
- package/docs/assets/icons.png +0 -0
- package/docs/assets/icons@2x.png +0 -0
- package/docs/assets/main.js +52 -0
- package/docs/assets/search.js +1 -0
- package/docs/assets/style.css +1388 -0
- package/docs/assets/widgets.png +0 -0
- package/docs/assets/widgets@2x.png +0 -0
- package/docs/classes/Player.Player-1.html +50 -0
- package/docs/enums/Player.InfoPanelTypeEnum.html +3 -0
- package/docs/enums/Player.PanoEffectEnum.html +5 -0
- package/docs/enums/Player.PanoTagEnum.html +3 -0
- package/docs/enums/Player.VreoKeyframeEnum.html +388 -0
- package/docs/enums/fivePlugins.CameraMovementEffect.html +1 -0
- package/docs/enums/fivePlugins.Rotation.html +1 -0
- package/docs/index.html +204 -0
- package/docs/interfaces/Player.PlayerConfigs.html +4 -0
- package/docs/interfaces/Player.Vertex.html +3 -0
- package/docs/interfaces/Player.VreoKeyframe.html +3 -0
- package/docs/interfaces/Player.VreoUnit.html +3 -0
- package/docs/interfaces/Player.VreoVideo.html +3 -0
- package/docs/interfaces/fivePlugins.CameraMovementOptsCallback.html +1 -0
- package/docs/interfaces/fivePlugins.CameraMovementPluginExportType.html +7 -0
- package/docs/interfaces/fivePlugins.CameraMovementPluginParameterType.html +1 -0
- package/docs/interfaces/fivePlugins.ModelTVVideoPluginData.html +1 -0
- package/docs/interfaces/fivePlugins.ModelTVVideoPluginExportType.html +1 -0
- package/docs/interfaces/fivePlugins.ModelTVVideoPluginParameterType.html +1 -0
- package/docs/interfaces/react.VreoActionCallbacks.html +15 -0
- package/docs/modules/Player.html +29 -0
- package/docs/modules/fivePlugins.html +3 -0
- package/docs/modules/react.html +1 -0
- package/docs/modules.html +1 -0
- package/lib/Player/App.d.ts +2 -0
- package/lib/Player/App.js +68 -0
- package/lib/Player/Controller.d.ts +39 -0
- package/lib/Player/Controller.js +226 -0
- package/lib/Player/hooks.d.ts +4 -0
- package/lib/Player/hooks.js +41 -0
- package/lib/Player/index.d.ts +15 -0
- package/lib/Player/index.js +191 -0
- package/lib/Player/modules/Drawer/index.d.ts +2 -0
- package/lib/Player/modules/Drawer/index.js +67 -0
- package/lib/Player/modules/VideoAgent/VideoAgentMesh.d.ts +30 -0
- package/lib/Player/modules/VideoAgent/VideoAgentMesh.js +324 -0
- package/lib/Player/modules/VideoAgent/VideoAgentScene.d.ts +10 -0
- package/lib/Player/modules/VideoAgent/VideoAgentScene.js +65 -0
- package/lib/Player/modules/VideoAgent/index.d.ts +4 -0
- package/lib/Player/modules/VideoAgent/index.js +44 -0
- package/lib/Player/modules/keyframes/CameraMovement/index.d.ts +2 -0
- package/lib/Player/modules/keyframes/CameraMovement/index.js +73 -0
- package/lib/Player/modules/keyframes/InfoPanel/index.d.ts +2 -0
- package/lib/Player/modules/keyframes/InfoPanel/index.js +89 -0
- package/lib/Player/modules/keyframes/ModelVideo/index.d.ts +2 -0
- package/lib/Player/modules/keyframes/ModelVideo/index.js +87 -0
- package/lib/Player/modules/keyframes/PanoEffect/index.d.ts +2 -0
- package/lib/Player/modules/keyframes/PanoEffect/index.js +142 -0
- package/lib/Player/modules/keyframes/PanoEffect/lineAnime.d.ts +5 -0
- package/lib/Player/modules/keyframes/PanoEffect/lineAnime.js +46 -0
- package/lib/Player/modules/keyframes/PanoTag/index.d.ts +2 -0
- package/lib/Player/modules/keyframes/PanoTag/index.js +168 -0
- package/lib/Player/modules/keyframes/PanoTextLabel/index.d.ts +2 -0
- package/lib/Player/modules/keyframes/PanoTextLabel/index.js +113 -0
- package/lib/Player/modules/keyframes/Prompter/index.d.ts +2 -0
- package/lib/Player/modules/keyframes/Prompter/index.js +105 -0
- package/lib/Player/modules/keyframes/UpdateVRPanorama/index.d.ts +2 -0
- package/lib/Player/modules/keyframes/UpdateVRPanorama/index.js +51 -0
- package/lib/Player/modules/keyframes/VideoEffect/index.d.ts +2 -0
- package/lib/Player/modules/keyframes/VideoEffect/index.js +176 -0
- package/lib/Player/typings.d.ts +14 -0
- package/lib/Player/typings.js +5 -0
- package/lib/fivePlugins/CameraMovementPlugin/index.d.ts +6 -0
- package/lib/fivePlugins/CameraMovementPlugin/index.js +307 -0
- package/lib/fivePlugins/CameraMovementPlugin/typings.d.ts +48 -0
- package/lib/fivePlugins/CameraMovementPlugin/typings.js +25 -0
- package/lib/fivePlugins/ModelTVVideoPlugin/index.d.ts +20 -0
- package/lib/fivePlugins/ModelTVVideoPlugin/index.js +305 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +13 -0
- package/lib/react/index.d.ts +42 -0
- package/lib/react/index.js +120 -0
- package/lib/shared-utils/Preloader.d.ts +6 -0
- package/lib/shared-utils/Preloader.js +51 -0
- package/lib/shared-utils/animationFrame/BetterTween.d.ts +11 -0
- package/lib/shared-utils/animationFrame/BetterTween.js +102 -0
- package/lib/shared-utils/animationFrame/index.d.ts +15 -0
- package/lib/shared-utils/animationFrame/index.js +68 -0
- package/lib/shared-utils/animationFrame/tween.d.ts +75 -0
- package/lib/shared-utils/animationFrame/tween.js +76 -0
- package/lib/typings/VreoUnit.d.ts +204 -0
- package/lib/typings/VreoUnit.js +65 -0
- package/package.json +55 -0
- package/resources/Player/App.tsx +57 -0
- package/resources/Player/Controller.ts +154 -0
- package/resources/Player/hooks.ts +28 -0
- package/resources/Player/index.tsx +115 -0
- package/resources/Player/modules/Drawer/index.tsx +40 -0
- package/resources/Player/modules/VideoAgent/VideoAgentMesh.ts +202 -0
- package/resources/Player/modules/VideoAgent/VideoAgentScene.ts +38 -0
- package/resources/Player/modules/VideoAgent/index.tsx +31 -0
- package/resources/Player/modules/keyframes/CameraMovement/index.tsx +33 -0
- package/resources/Player/modules/keyframes/InfoPanel/index.tsx +52 -0
- package/resources/Player/modules/keyframes/ModelVideo/index.tsx +44 -0
- package/resources/Player/modules/keyframes/PanoEffect/index.tsx +99 -0
- package/resources/Player/modules/keyframes/PanoEffect/lineAnime.ts +31 -0
- package/resources/Player/modules/keyframes/PanoTag/index.tsx +127 -0
- package/resources/Player/modules/keyframes/PanoTextLabel/index.tsx +65 -0
- package/resources/Player/modules/keyframes/Prompter/index.tsx +65 -0
- package/resources/Player/modules/keyframes/UpdateVRPanorama/index.tsx +36 -0
- package/resources/Player/modules/keyframes/VideoEffect/index.tsx +115 -0
- package/resources/Player/typings.ts +15 -0
- package/resources/fivePlugins/CameraMovementPlugin/index.ts +203 -0
- package/resources/fivePlugins/CameraMovementPlugin/typings.ts +57 -0
- package/resources/fivePlugins/ModelTVVideoPlugin/index.ts +278 -0
- package/resources/index.ts +1 -0
- package/resources/react/index.tsx +95 -0
- package/resources/shared-utils/Preloader.ts +35 -0
- package/resources/shared-utils/animationFrame/BetterTween.ts +33 -0
- package/resources/shared-utils/animationFrame/index.ts +48 -0
- package/resources/shared-utils/animationFrame/tween.ts +51 -0
- package/resources/typings/VreoUnit.ts +225 -0
- package/stylesheets/default.css +497 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Mode, Pose } from '@realsee/five';
|
|
2
|
+
export interface CameraMovementPluginParameterType {
|
|
3
|
+
}
|
|
4
|
+
export interface CameraMovementPluginExportType {
|
|
5
|
+
/**
|
|
6
|
+
* 运镜:移动
|
|
7
|
+
* @param moveArgs
|
|
8
|
+
* @param duration
|
|
9
|
+
* @param opts
|
|
10
|
+
*/
|
|
11
|
+
move(moveArgs: Partial<MoveArgs>, duration: number, opts?: MoveOpts): Promise<boolean>;
|
|
12
|
+
/**
|
|
13
|
+
* 运镜:旋转
|
|
14
|
+
* @param args
|
|
15
|
+
* @param duration
|
|
16
|
+
* @param opts
|
|
17
|
+
*/
|
|
18
|
+
rotate(args: RotateArgs, duration: number, opts?: RotateOpts): Promise<boolean>;
|
|
19
|
+
}
|
|
20
|
+
export declare enum CameraMovementEffect {
|
|
21
|
+
Move = "Move",
|
|
22
|
+
Rotate = "Rotate"
|
|
23
|
+
}
|
|
24
|
+
export declare enum Rotation {
|
|
25
|
+
Clockwise = "Clockwise",
|
|
26
|
+
Anticlockwise = "Anticlockwise",
|
|
27
|
+
Loop = "Loop"
|
|
28
|
+
}
|
|
29
|
+
export interface CameraMovementOptsCallback {
|
|
30
|
+
asyncStartCallback?: () => void;
|
|
31
|
+
asyncEndCallback?: () => void;
|
|
32
|
+
}
|
|
33
|
+
export declare type MoveArgs = {
|
|
34
|
+
mode: Mode;
|
|
35
|
+
panoIndex: number;
|
|
36
|
+
} & Pose;
|
|
37
|
+
export declare type MoveOpts = {
|
|
38
|
+
preload?: boolean;
|
|
39
|
+
} & CameraMovementOptsCallback;
|
|
40
|
+
export declare type RotateArgs = {
|
|
41
|
+
panoIndex: number;
|
|
42
|
+
loop: boolean;
|
|
43
|
+
rotateSpeed: number;
|
|
44
|
+
rotation: Rotation;
|
|
45
|
+
} & Pose;
|
|
46
|
+
export declare type RotateOpts = {
|
|
47
|
+
preload?: boolean;
|
|
48
|
+
} & CameraMovementOptsCallback;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Rotation = exports.CameraMovementEffect = void 0;
|
|
7
|
+
|
|
8
|
+
/* eslint-disable prettier/prettier */
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
10
|
+
var CameraMovementEffect;
|
|
11
|
+
exports.CameraMovementEffect = CameraMovementEffect;
|
|
12
|
+
|
|
13
|
+
(function (CameraMovementEffect) {
|
|
14
|
+
CameraMovementEffect["Move"] = "Move";
|
|
15
|
+
CameraMovementEffect["Rotate"] = "Rotate";
|
|
16
|
+
})(CameraMovementEffect || (exports.CameraMovementEffect = CameraMovementEffect = {}));
|
|
17
|
+
|
|
18
|
+
var Rotation;
|
|
19
|
+
exports.Rotation = Rotation;
|
|
20
|
+
|
|
21
|
+
(function (Rotation) {
|
|
22
|
+
Rotation["Clockwise"] = "Clockwise";
|
|
23
|
+
Rotation["Anticlockwise"] = "Anticlockwise";
|
|
24
|
+
Rotation["Loop"] = "Loop";
|
|
25
|
+
})(Rotation || (exports.Rotation = Rotation = {}));
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { FivePlugin } from '@realsee/five';
|
|
2
|
+
export interface ModelTVVideoPluginData {
|
|
3
|
+
enable?: boolean;
|
|
4
|
+
video_src: string;
|
|
5
|
+
video_poster_src: string;
|
|
6
|
+
points: {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
z: number;
|
|
10
|
+
}[][];
|
|
11
|
+
}
|
|
12
|
+
export interface ModelTVVideoPluginParameterType {
|
|
13
|
+
videoElement?: HTMLVideoElement;
|
|
14
|
+
}
|
|
15
|
+
export interface ModelTVVideoPluginExportType {
|
|
16
|
+
enable: () => void;
|
|
17
|
+
disable: () => void;
|
|
18
|
+
load: (data: ModelTVVideoPluginData, videoElement?: HTMLVideoElement) => Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export declare const ModelTVVideoPlugin: FivePlugin<ModelTVVideoPluginParameterType, ModelTVVideoPluginExportType>;
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.ModelTVVideoPlugin = void 0;
|
|
9
|
+
|
|
10
|
+
var THREE = _interopRequireWildcard(require("three"));
|
|
11
|
+
|
|
12
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
13
|
+
|
|
14
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
15
|
+
|
|
16
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
17
|
+
|
|
18
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
19
|
+
|
|
20
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
21
|
+
|
|
22
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
23
|
+
|
|
24
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
25
|
+
|
|
26
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
27
|
+
|
|
28
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
29
|
+
|
|
30
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
31
|
+
|
|
32
|
+
var ModelTVVideoPlugin = function ModelTVVideoPlugin(five, _ref) {
|
|
33
|
+
var videoElement = _ref.videoElement;
|
|
34
|
+
var state = {
|
|
35
|
+
videoMeshes: [],
|
|
36
|
+
videoTextureEnabled: false,
|
|
37
|
+
videoSource: '',
|
|
38
|
+
rectPoints: [],
|
|
39
|
+
enabled: false,
|
|
40
|
+
videoElement: videoElement
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
var setMuted = function setMuted(muted) {
|
|
44
|
+
if (state.videoTexture) {
|
|
45
|
+
state.videoTexture.image.muted = muted;
|
|
46
|
+
state.videoTexture.image.play();
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
var getMuted = function getMuted() {
|
|
51
|
+
if (state.videoTexture) return state.videoTexture.image.muted;else return true;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
var enable = function enable() {
|
|
55
|
+
if (state.enabled) return;
|
|
56
|
+
if (!state.videoTexture) return;
|
|
57
|
+
state.enabled = true;
|
|
58
|
+
state.videoMeshes = createPanoVideoMeshes();
|
|
59
|
+
state.videoMeshes.forEach(function (mesh) {
|
|
60
|
+
return five.scene.add(mesh);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
var play = function play() {
|
|
64
|
+
if (!state.videoTexture) return;
|
|
65
|
+
|
|
66
|
+
var timeupdate = function timeupdate() {
|
|
67
|
+
var _state$videoTexture;
|
|
68
|
+
|
|
69
|
+
if (!state.videoTexture) return;
|
|
70
|
+
(_state$videoTexture = state.videoTexture) === null || _state$videoTexture === void 0 ? void 0 : _state$videoTexture.image.removeEventListener('timeupdate', timeupdate);
|
|
71
|
+
state.videoTextureEnabled = true;
|
|
72
|
+
state.videoMeshes.forEach(function (mesh) {
|
|
73
|
+
if (mesh.material.map !== state.videoTexture) mesh.material.map = state.videoTexture;
|
|
74
|
+
});
|
|
75
|
+
five.needsRender = true;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
state.videoTexture.image.addEventListener('timeupdate', timeupdate);
|
|
79
|
+
|
|
80
|
+
if (state.videoTexture && state.videoMeshes.length) {
|
|
81
|
+
state.videoTexture.image.play();
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
if (five.model.loaded) play();else {
|
|
86
|
+
return five.once('modelLoaded', function () {
|
|
87
|
+
return play();
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
var disable = function disable() {
|
|
93
|
+
if (!state.enabled) return;
|
|
94
|
+
state.enabled = false;
|
|
95
|
+
state.videoMeshes.forEach(function (mesh) {
|
|
96
|
+
mesh.geometry.dispose();
|
|
97
|
+
mesh.material.dispose();
|
|
98
|
+
five.scene.remove(mesh);
|
|
99
|
+
if (state.videoTexture) state.videoTexture.image.pause();
|
|
100
|
+
});
|
|
101
|
+
state.videoMeshes = [];
|
|
102
|
+
five.needsRender = true;
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
var createPanoVideoMeshes = function createPanoVideoMeshes() {
|
|
106
|
+
return state.rectPoints.map(function (points, index) {
|
|
107
|
+
var geometry = new THREE.BufferGeometry();
|
|
108
|
+
var segments = 128;
|
|
109
|
+
var verticesArray = [];
|
|
110
|
+
verticesArray.push(points[0].x, points[0].y, points[0].z);
|
|
111
|
+
|
|
112
|
+
for (var i = 1; i < segments; i++) {
|
|
113
|
+
verticesArray.push(points[0].x + (points[1].x - points[0].x) * i / segments, points[0].y + (points[1].y - points[0].y) * i / segments, points[0].z + (points[1].z - points[0].z) * i / segments);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
verticesArray.push(points[1].x, points[1].y, points[1].z);
|
|
117
|
+
verticesArray.push(points[2].x, points[2].y, points[2].z);
|
|
118
|
+
|
|
119
|
+
for (var _i = 1; _i < segments; _i++) {
|
|
120
|
+
verticesArray.push(points[2].x + (points[3].x - points[2].x) * _i / segments, points[2].y + (points[3].y - points[2].y) * _i / segments, points[2].z + (points[3].z - points[2].z) * _i / segments);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
verticesArray.push(points[3].x, points[3].y, points[3].z);
|
|
124
|
+
var uvArray = [];
|
|
125
|
+
uvArray.push(0, 1);
|
|
126
|
+
|
|
127
|
+
for (var _i2 = 1; _i2 < segments; _i2++) {
|
|
128
|
+
uvArray.push(0, 1 - _i2 / segments);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
uvArray.push(0, 0);
|
|
132
|
+
uvArray.push(1, 0);
|
|
133
|
+
|
|
134
|
+
for (var _i3 = 1; _i3 < segments; _i3++) {
|
|
135
|
+
uvArray.push(1, _i3 / segments);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
uvArray.push(1, 1);
|
|
139
|
+
var indicesArray = [];
|
|
140
|
+
|
|
141
|
+
for (var _i4 = 0; _i4 < segments; _i4++) {
|
|
142
|
+
indicesArray.push(_i4, _i4 + 1, segments * 2 - _i4, _i4, segments * 2 - _i4, segments * 2 + 1 - _i4);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
geometry.setAttribute('position', new THREE.BufferAttribute(new Float32Array(verticesArray), 3));
|
|
146
|
+
geometry.setAttribute('uv', new THREE.BufferAttribute(new Float32Array(uvArray), 2));
|
|
147
|
+
geometry.setIndex(new THREE.BufferAttribute(new Uint32Array(indicesArray), 1));
|
|
148
|
+
var material = new THREE.MeshBasicMaterial({
|
|
149
|
+
map: state.videoTextureEnabled ? state.videoTexture : state.imageTexture,
|
|
150
|
+
side: THREE.DoubleSide
|
|
151
|
+
});
|
|
152
|
+
var mesh = new THREE.Mesh(geometry, material);
|
|
153
|
+
mesh.renderOrder = 1;
|
|
154
|
+
mesh.name = "video-".concat(index, "-").concat(performance.now());
|
|
155
|
+
return mesh;
|
|
156
|
+
});
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
var getImageTexture = function getImageTexture(source) {
|
|
160
|
+
var texture = new THREE.TextureLoader().load(source);
|
|
161
|
+
texture.minFilter = THREE.LinearFilter;
|
|
162
|
+
texture.magFilter = THREE.LinearFilter;
|
|
163
|
+
texture.format = THREE.RGBFormat;
|
|
164
|
+
return texture;
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
var getVideoTexture = function getVideoTexture(source, video) {
|
|
168
|
+
return new Promise(function (resolve, reject) {
|
|
169
|
+
var xhr = new XMLHttpRequest();
|
|
170
|
+
|
|
171
|
+
xhr.onreadystatechange = function () {
|
|
172
|
+
if (xhr.readyState == 4) {
|
|
173
|
+
if (xhr.status == 200) {
|
|
174
|
+
var url = window.URL || window.webkitURL;
|
|
175
|
+
video = video || document.createElement('video');
|
|
176
|
+
video.crossOrigin = 'anonymous';
|
|
177
|
+
video.autoplay = true;
|
|
178
|
+
video.muted = true;
|
|
179
|
+
video.loop = true;
|
|
180
|
+
video.playsInline = true;
|
|
181
|
+
video.src = url.createObjectURL(xhr.response);
|
|
182
|
+
var texture = new THREE.VideoTexture(video);
|
|
183
|
+
texture.minFilter = THREE.LinearFilter;
|
|
184
|
+
texture.magFilter = THREE.LinearFilter;
|
|
185
|
+
texture.format = THREE.RGBFormat;
|
|
186
|
+
resolve(Object.assign(texture, {
|
|
187
|
+
videoSource: source
|
|
188
|
+
}));
|
|
189
|
+
} else {
|
|
190
|
+
reject(new Error('Video download Error: ' + xhr.status));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
xhr.onerror = function (error) {
|
|
196
|
+
return reject(error);
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
xhr.open('GET', source);
|
|
200
|
+
xhr.responseType = 'blob';
|
|
201
|
+
xhr.send();
|
|
202
|
+
});
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
var load = /*#__PURE__*/function () {
|
|
206
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(data, videoElement) {
|
|
207
|
+
var video_src, video_poster_src, points;
|
|
208
|
+
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
209
|
+
while (1) {
|
|
210
|
+
switch (_context.prev = _context.next) {
|
|
211
|
+
case 0:
|
|
212
|
+
video_src = data.video_src, video_poster_src = data.video_poster_src, points = data.points;
|
|
213
|
+
state.videoSource = video_src;
|
|
214
|
+
state.rectPoints = points.map(function (items) {
|
|
215
|
+
return items.map(function (_ref3) {
|
|
216
|
+
var x = _ref3.x,
|
|
217
|
+
y = _ref3.y,
|
|
218
|
+
z = _ref3.z;
|
|
219
|
+
return new THREE.Vector3(x, y, z);
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
state.imageTexture = getImageTexture(video_poster_src);
|
|
223
|
+
|
|
224
|
+
if (videoElement) {
|
|
225
|
+
state.videoElement = videoElement;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
_context.next = 7;
|
|
229
|
+
return getVideoTexture(state.videoSource, state.videoElement);
|
|
230
|
+
|
|
231
|
+
case 7:
|
|
232
|
+
state.videoTexture = _context.sent;
|
|
233
|
+
state.enabled = !!data.enable;
|
|
234
|
+
if (state.enabled) enable();
|
|
235
|
+
|
|
236
|
+
case 10:
|
|
237
|
+
case "end":
|
|
238
|
+
return _context.stop();
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}, _callee);
|
|
242
|
+
}));
|
|
243
|
+
|
|
244
|
+
return function load(_x, _x2) {
|
|
245
|
+
return _ref2.apply(this, arguments);
|
|
246
|
+
};
|
|
247
|
+
}();
|
|
248
|
+
|
|
249
|
+
five.on('modeChange', function () {
|
|
250
|
+
return setMuted(true);
|
|
251
|
+
});
|
|
252
|
+
five.on('wantsTapGesture', function (raycaster) {
|
|
253
|
+
if (!state.enabled) return;
|
|
254
|
+
|
|
255
|
+
var _raycaster$intersectO = raycaster.intersectObjects(five.scene.children, true),
|
|
256
|
+
_raycaster$intersectO2 = _slicedToArray(_raycaster$intersectO, 1),
|
|
257
|
+
intersect = _raycaster$intersectO2[0];
|
|
258
|
+
|
|
259
|
+
if (!!intersect && /^video/.test(intersect.object.name)) {
|
|
260
|
+
if (state.videoTexture) setMuted(!state.videoTexture.image.muted);
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
five.on('panoArrived', function () {
|
|
265
|
+
if (!state.enabled) return;
|
|
266
|
+
if (getMuted()) return;
|
|
267
|
+
var cameraPosition = five.camera.position;
|
|
268
|
+
var visible = state.rectPoints.find(function (points) {
|
|
269
|
+
var centerVector = points.reduce(function (total, curr) {
|
|
270
|
+
return new THREE.Vector3(total.x + curr.x / points.length, total.y + curr.y / points.length, total.z + curr.z / points.length);
|
|
271
|
+
}, new THREE.Vector3());
|
|
272
|
+
return points.map(function (point) {
|
|
273
|
+
return new THREE.Vector3((point.x + centerVector.x) / 2, (point.y + centerVector.y) / 2, (point.z + centerVector.z) / 2);
|
|
274
|
+
}).filter(function (vector) {
|
|
275
|
+
vector = vector.clone().sub(cameraPosition).normalize();
|
|
276
|
+
var raycaster = new THREE.Raycaster(cameraPosition, vector);
|
|
277
|
+
|
|
278
|
+
var _raycaster$intersectO3 = raycaster.intersectObjects(five.scene.children, true),
|
|
279
|
+
_raycaster$intersectO4 = _slicedToArray(_raycaster$intersectO3, 1),
|
|
280
|
+
intersect = _raycaster$intersectO4[0];
|
|
281
|
+
|
|
282
|
+
return !!intersect && /^video/.test(intersect.object.name);
|
|
283
|
+
}).length >= 2;
|
|
284
|
+
});
|
|
285
|
+
if (!visible) setMuted(true);
|
|
286
|
+
});
|
|
287
|
+
five.on('renderFrame', function () {
|
|
288
|
+
state.videoMeshes.forEach(function (meshes) {
|
|
289
|
+
if (meshes) //@ts-ignore
|
|
290
|
+
meshes.needsRender = true;
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
five.on('load', function (input) {
|
|
294
|
+
if (input.modelTVVideoData) {
|
|
295
|
+
load(input.modelTVVideoData);
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
return {
|
|
299
|
+
enable: enable,
|
|
300
|
+
disable: disable,
|
|
301
|
+
load: load
|
|
302
|
+
};
|
|
303
|
+
};
|
|
304
|
+
|
|
305
|
+
exports.ModelTVVideoPlugin = ModelTVVideoPlugin;
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Player } from './Player';
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { VreoKeyframeEvent, VreoUnit } from '../typings/VreoUnit';
|
|
3
|
+
export declare const VreoProvider: React.FC;
|
|
4
|
+
/**
|
|
5
|
+
* VreoPlayer 命令集合。
|
|
6
|
+
*/
|
|
7
|
+
export interface VreoActionCallbacks {
|
|
8
|
+
/**
|
|
9
|
+
* 载入剧本数据。
|
|
10
|
+
*/
|
|
11
|
+
load: (vreoUnit: VreoUnit, currentTime?: number) => Promise<boolean>;
|
|
12
|
+
/**
|
|
13
|
+
* 播放。
|
|
14
|
+
*/
|
|
15
|
+
play: () => void;
|
|
16
|
+
/**
|
|
17
|
+
* 暂停。
|
|
18
|
+
*/
|
|
19
|
+
pause: () => void;
|
|
20
|
+
/**
|
|
21
|
+
* 显示 UI 面板。
|
|
22
|
+
*/
|
|
23
|
+
show: () => void;
|
|
24
|
+
/**
|
|
25
|
+
* 隐藏 UI 面板。
|
|
26
|
+
*/
|
|
27
|
+
hide: () => void;
|
|
28
|
+
/**
|
|
29
|
+
* 销毁数据及部分定时任务。
|
|
30
|
+
*/
|
|
31
|
+
dispose: () => void;
|
|
32
|
+
}
|
|
33
|
+
export declare function useVreoAction(): {
|
|
34
|
+
load: (vreoUnit: VreoUnit, currentTime?: number | undefined) => Promise<boolean>;
|
|
35
|
+
pause: () => void;
|
|
36
|
+
show: () => void;
|
|
37
|
+
play: () => boolean;
|
|
38
|
+
hide: () => void;
|
|
39
|
+
dispose: () => void;
|
|
40
|
+
};
|
|
41
|
+
export declare function useVreoEventCallback<T extends keyof VreoKeyframeEvent>(name: T, callback: VreoKeyframeEvent[T], deps?: React.DependencyList | undefined): void;
|
|
42
|
+
export declare function useVreoPausedState(): boolean;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.VreoProvider = void 0;
|
|
9
|
+
exports.useVreoAction = useVreoAction;
|
|
10
|
+
exports.useVreoEventCallback = useVreoEventCallback;
|
|
11
|
+
exports.useVreoPausedState = useVreoPausedState;
|
|
12
|
+
|
|
13
|
+
var _react = require("@realsee/five/react");
|
|
14
|
+
|
|
15
|
+
var React = _interopRequireWildcard(require("react"));
|
|
16
|
+
|
|
17
|
+
var _Player = require("../Player");
|
|
18
|
+
|
|
19
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
20
|
+
|
|
21
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
22
|
+
|
|
23
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
24
|
+
|
|
25
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
26
|
+
|
|
27
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
28
|
+
|
|
29
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
30
|
+
|
|
31
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
32
|
+
|
|
33
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
34
|
+
|
|
35
|
+
var VreoContext = /*#__PURE__*/React.createContext(null);
|
|
36
|
+
|
|
37
|
+
var VreoProvider = function VreoProvider(props) {
|
|
38
|
+
var five = (0, _react.unsafe__useFiveInstance)();
|
|
39
|
+
var player = new _Player.Player(five);
|
|
40
|
+
return /*#__PURE__*/React.createElement(VreoContext.Provider, {
|
|
41
|
+
value: player
|
|
42
|
+
}, props.children);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
exports.VreoProvider = VreoProvider;
|
|
46
|
+
|
|
47
|
+
function useVreoInstance() {
|
|
48
|
+
var context = React.useContext(VreoContext);
|
|
49
|
+
|
|
50
|
+
if (!context) {
|
|
51
|
+
throw new Error('VreoProvider never found.');
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return context;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* VreoPlayer 命令集合。
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
function useVreoAction() {
|
|
62
|
+
var player = useVreoInstance();
|
|
63
|
+
var load = React.useCallback(function (vreoUnit, currentTime) {
|
|
64
|
+
return player.load(vreoUnit, currentTime);
|
|
65
|
+
}, [player]);
|
|
66
|
+
var play = React.useCallback(function () {
|
|
67
|
+
return player.play();
|
|
68
|
+
}, [player]);
|
|
69
|
+
var pause = React.useCallback(function () {
|
|
70
|
+
return player.pause();
|
|
71
|
+
}, [player]);
|
|
72
|
+
var show = React.useCallback(function () {
|
|
73
|
+
return player.show();
|
|
74
|
+
}, [player]);
|
|
75
|
+
var hide = React.useCallback(function () {
|
|
76
|
+
return player.hide();
|
|
77
|
+
}, [player]);
|
|
78
|
+
var dispose = React.useCallback(function () {
|
|
79
|
+
return player.dispose();
|
|
80
|
+
}, [player]);
|
|
81
|
+
return {
|
|
82
|
+
load: load,
|
|
83
|
+
pause: pause,
|
|
84
|
+
show: show,
|
|
85
|
+
play: play,
|
|
86
|
+
hide: hide,
|
|
87
|
+
dispose: dispose
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function useVreoEventCallback(name, callback, deps) {
|
|
92
|
+
var player = useVreoInstance();
|
|
93
|
+
var dependencyList = [player, name];
|
|
94
|
+
|
|
95
|
+
if (deps !== undefined) {
|
|
96
|
+
dependencyList = dependencyList.concat(deps);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
React.useLayoutEffect(function () {
|
|
100
|
+
// @ts-ignore
|
|
101
|
+
return player.on(name, callback);
|
|
102
|
+
}, dependencyList);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function useVreoPausedState() {
|
|
106
|
+
var player = useVreoInstance();
|
|
107
|
+
|
|
108
|
+
var _React$useState = React.useState(player.paused),
|
|
109
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
110
|
+
state = _React$useState2[0],
|
|
111
|
+
setState = _React$useState2[1];
|
|
112
|
+
|
|
113
|
+
useVreoEventCallback('paused', function () {
|
|
114
|
+
return setState(true);
|
|
115
|
+
});
|
|
116
|
+
useVreoEventCallback('playing', function () {
|
|
117
|
+
return setState(false);
|
|
118
|
+
});
|
|
119
|
+
return state;
|
|
120
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Preloader = void 0;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 预载器
|
|
10
|
+
*/
|
|
11
|
+
var Preloader = {
|
|
12
|
+
blob: function blob(url) {
|
|
13
|
+
var noop = function noop() {
|
|
14
|
+
return null;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
return new Promise(function (resolve, reject) {
|
|
18
|
+
var xhr = new XMLHttpRequest();
|
|
19
|
+
|
|
20
|
+
var clear = function clear() {
|
|
21
|
+
xhr.ontimeout = noop;
|
|
22
|
+
xhr.onreadystatechange = noop;
|
|
23
|
+
xhr.onprogress = noop;
|
|
24
|
+
xhr.onabort = noop;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
xhr.ontimeout = function () {
|
|
28
|
+
reject(new Error('timeout'));
|
|
29
|
+
clear();
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
xhr.onreadystatechange = function () {
|
|
33
|
+
if (xhr.readyState !== 4) return;
|
|
34
|
+
if (xhr.status === 0 && !xhr.response) return;
|
|
35
|
+
|
|
36
|
+
if (xhr.status === 200 || xhr.status === 0) {
|
|
37
|
+
resolve(xhr.response);
|
|
38
|
+
clear();
|
|
39
|
+
} else {
|
|
40
|
+
reject(new Error('status:' + xhr.status));
|
|
41
|
+
clear();
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
xhr.open('GET', url, true);
|
|
46
|
+
xhr.responseType = 'blob';
|
|
47
|
+
xhr.send(null);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
exports.Preloader = Preloader;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import TWEEN from '@tweenjs/tween.js';
|
|
2
|
+
export declare class BetterTween<G> extends TWEEN.Tween<G> {
|
|
3
|
+
private disposeMethods;
|
|
4
|
+
private animationFrameDisposer?;
|
|
5
|
+
onDispose: (callback: () => void) => this;
|
|
6
|
+
play: () => this;
|
|
7
|
+
dispose: () => void;
|
|
8
|
+
}
|
|
9
|
+
export declare function tweenProgress(duration?: number, easing?: (amount: number) => number): BetterTween<{
|
|
10
|
+
progress: number;
|
|
11
|
+
}>;
|