@realsee/five 5.0.0-alpha.15 → 5.0.0-alpha.150

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 (238) hide show
  1. package/README.md +21 -11
  2. package/docs/.nojekyll +1 -0
  3. package/docs/assets/highlight.css +134 -0
  4. package/docs/assets/icons.css +1043 -0
  5. package/docs/assets/{images/icons.png → icons.png} +0 -0
  6. package/docs/assets/{images/icons@2x.png → icons@2x.png} +0 -0
  7. package/docs/assets/main.js +52 -0
  8. package/docs/assets/search.js +1 -0
  9. package/docs/assets/style.css +1414 -0
  10. package/docs/assets/{images/widgets.png → widgets.png} +0 -0
  11. package/docs/assets/{images/widgets@2x.png → widgets@2x.png} +0 -0
  12. package/docs/classes/five.AnimationFrameLoop.html +15 -0
  13. package/docs/classes/five.BVH.html +10 -0
  14. package/docs/classes/five.BVHIntersect.html +1 -0
  15. package/docs/classes/five.BVHNode.html +7 -0
  16. package/docs/classes/five.BVHVector3.html +1 -0
  17. package/docs/classes/five.Camera.html +11 -0
  18. package/docs/classes/five.Clipper.html +1 -0
  19. package/docs/classes/five.Five.html +323 -0
  20. package/docs/classes/five.InternalWebGLRenderer.html +1 -0
  21. package/docs/classes/five.IntersectMesh.html +1 -0
  22. package/docs/classes/five.LegacyPanoCircleMesh.html +5 -0
  23. package/docs/classes/five.Model.html +87 -0
  24. package/docs/classes/five.NetworkSubscribe.html +50 -0
  25. package/docs/classes/five.PBMContainer.html +17 -0
  26. package/docs/classes/five.PBMGroup.html +19 -0
  27. package/docs/classes/five.PBMMaterial.html +27 -0
  28. package/docs/classes/five.PBMMesh.html +7 -0
  29. package/docs/classes/five.PanoCircleMesh.html +7 -0
  30. package/docs/classes/five.PanoCircleMeshDark.html +7 -0
  31. package/docs/classes/five.PanoCircleMeshSolid.html +7 -0
  32. package/docs/classes/five.Scene.html +3 -0
  33. package/docs/classes/five.Subscribe.html +56 -0
  34. package/docs/classes/five.TextureLoader.html +1 -0
  35. package/docs/classes/five.Tile3D.html +34 -0
  36. package/docs/classes/five.Tile3DModel.html +15 -0
  37. package/docs/classes/five.TileBoundingSphere.html +1 -0
  38. package/docs/classes/five.TileCacheNode.html +1 -0
  39. package/docs/classes/five.TileCubeTextureTarget.html +1 -0
  40. package/docs/classes/five.TileCullingVolume.html +1 -0
  41. package/docs/classes/five.TileOrientedBoundingBox.html +1 -0
  42. package/docs/classes/five.TilePlane.html +1 -0
  43. package/docs/classes/five.TileRequestScheduler.html +16 -0
  44. package/docs/classes/five.Tileset3D.html +11 -0
  45. package/docs/classes/five.Tileset3DTraverser.html +1 -0
  46. package/docs/classes/five.TilesetCache.html +1 -0
  47. package/docs/classes/five.Work.html +30 -0
  48. package/docs/classes/five.XRButton.html +1 -0
  49. package/docs/classes/gltf_loader.DDSLoader.html +1 -0
  50. package/docs/classes/gltf_loader.DRACOLoader.html +1 -0
  51. package/docs/classes/gltf_loader.GLTFLoader.html +17 -0
  52. package/docs/classes/gltf_loader.GLTFObject.html +7 -0
  53. package/docs/classes/gltf_loader.GLTFParser.html +1 -0
  54. package/docs/classes/gltf_loader.THREEGLTFLoader.html +1 -0
  55. package/docs/classes/line.Line.html +1 -0
  56. package/docs/classes/line.LineGeometry.html +1 -0
  57. package/docs/classes/line.LineMaterial.html +1 -0
  58. package/docs/classes/line.LineSegmentsGeometry.html +1 -0
  59. package/docs/classes/line.THREE_Line2.html +1 -0
  60. package/docs/classes/line.THREE_LineSegments2.html +1 -0
  61. package/docs/classes/react.Store.html +29 -0
  62. package/docs/classes/server.BVH.html +10 -0
  63. package/docs/classes/server.BVHIntersect.html +1 -0
  64. package/docs/classes/server.BVHNode.html +7 -0
  65. package/docs/classes/server.BVHVector3.html +1 -0
  66. package/docs/classes/server.Model.html +63 -0
  67. package/docs/classes/server.PBMGroup.html +9 -0
  68. package/docs/classes/server.PBMMesh.html +7 -0
  69. package/docs/classes/sticker.Sticker.html +32 -0
  70. package/docs/index.html +166 -422
  71. package/docs/interfaces/five.AddableObject.html +1 -0
  72. package/docs/interfaces/five.AnimationFrame.html +1 -0
  73. package/docs/interfaces/five.CameraPose.html +1 -0
  74. package/docs/interfaces/five.ClipperParameter.html +1 -0
  75. package/docs/interfaces/five.DepthPanoramaControllerCustomInitArgs.html +28 -0
  76. package/docs/interfaces/five.EventCallback.html +399 -0
  77. package/docs/interfaces/five.FiveInitArgs.html +109 -0
  78. package/docs/interfaces/five.FloorplanControllerCustomInitArgs.html +15 -0
  79. package/docs/interfaces/five.ImageOptions.html +18 -0
  80. package/docs/interfaces/five.ImageURLMappings.html +1 -0
  81. package/docs/interfaces/five.ImageURLOptions.html +17 -0
  82. package/docs/interfaces/five.IntersectMeshInterface.html +3 -0
  83. package/docs/interfaces/five.Intersection.html +7 -0
  84. package/docs/interfaces/five.MapviewControllerCustomInitArgs.html +15 -0
  85. package/docs/interfaces/five.ModelControllerCustomInitArgs.html +20 -0
  86. package/docs/interfaces/five.ModelEventCallback.html +22 -0
  87. package/docs/interfaces/five.MovePanoOptions.html +42 -0
  88. package/docs/interfaces/five.NetworkOptions.html +9 -0
  89. package/docs/interfaces/five.PBMPanoPicture.html +7 -0
  90. package/docs/interfaces/five.PBMParameters.html +27 -0
  91. package/docs/interfaces/five.PanoCircleMeshInterface.html +19 -0
  92. package/docs/interfaces/five.PanoramaControllerCustomInitArgs.html +33 -0
  93. package/docs/interfaces/five.PanoramaLikeControllerCustomInitArgs.html +20 -0
  94. package/docs/interfaces/five.Pose.html +37 -0
  95. package/docs/interfaces/five.Scissor.html +14 -0
  96. package/docs/interfaces/five.State.html +21 -0
  97. package/docs/interfaces/five.SubscribeMixinType.emit.html +1 -0
  98. package/docs/interfaces/five.SubscribeMixinType.hasListener.html +1 -0
  99. package/docs/interfaces/five.SubscribeMixinType.off.html +1 -0
  100. package/docs/interfaces/five.SubscribeMixinType.on.html +1 -0
  101. package/docs/interfaces/five.SubscribeMixinType.once.html +1 -0
  102. package/docs/interfaces/five.TextureOptions.html +20 -0
  103. package/docs/interfaces/five.Tile3DModelLoaderOptions.html +3 -0
  104. package/docs/interfaces/five.TileBoundingVolume.html +19 -0
  105. package/docs/interfaces/five.TileContent.html +1 -0
  106. package/docs/interfaces/five.TileCubeNode.html +1 -0
  107. package/docs/interfaces/five.TileCubeTree.html +1 -0
  108. package/docs/interfaces/five.Tileset3dOptions.html +1 -0
  109. package/docs/interfaces/five.TilesetJSON.html +1 -0
  110. package/docs/interfaces/five.TilesetJSONNode.html +1 -0
  111. package/docs/interfaces/five.TopviewControllerCustomInitArgs.html +7 -0
  112. package/docs/interfaces/five.VRPanoramaControllerCustomInitArgs.html +29 -0
  113. package/docs/interfaces/five.WorkCubeImage.html +13 -0
  114. package/docs/interfaces/five.WorkImage.html +21 -0
  115. package/docs/interfaces/five.WorkInitial.html +13 -0
  116. package/docs/interfaces/five.WorkModel.html +11 -0
  117. package/docs/interfaces/five.WorkModelTiles.html +3 -0
  118. package/docs/interfaces/five.WorkObserver.html +25 -0
  119. package/docs/interfaces/five.WorkTile.html +1 -0
  120. package/docs/interfaces/five.WorkVideo.html +9 -0
  121. package/docs/interfaces/five.XRPanoramaControllerCustomInitArgs.html +29 -0
  122. package/docs/interfaces/gltf_loader.DDS.html +1 -0
  123. package/docs/interfaces/gltf_loader.GLTF.html +7 -0
  124. package/docs/interfaces/gltf_loader.GLTFReference.html +1 -0
  125. package/docs/interfaces/gltf_loader.THREEGLTF.html +1 -0
  126. package/docs/interfaces/react.FiveActionReactCallbacks.html +62 -0
  127. package/docs/interfaces/react.FiveInjectionTypes.html +191 -0
  128. package/docs/interfaces/react.PropTypeOfFiveFeatures.html +1 -0
  129. package/docs/interfaces/server.Intersection.html +7 -0
  130. package/docs/interfaces/server.ModelEventCallback.html +18 -0
  131. package/docs/interfaces/sticker.IntersectionLike.html +8 -0
  132. package/docs/interfaces/vue.FiveActionVueCallbacks.html +62 -0
  133. package/docs/modules/five.SubscribeMixinType.html +1 -0
  134. package/docs/modules/five.html +496 -0
  135. package/docs/modules/gltf_loader.html +1 -0
  136. package/docs/modules/line.html +1 -0
  137. package/docs/modules/react.html +133 -1374
  138. package/docs/modules/server.html +18 -0
  139. package/docs/modules/sticker.html +1 -0
  140. package/docs/modules/vue.html +112 -0
  141. package/docs/modules.html +1 -120
  142. package/exporters/staticify.js +210 -0
  143. package/five/index.d.ts +2922 -0
  144. package/five/index.js +372 -0
  145. package/gltf-loader/index.d.ts +160 -0
  146. package/gltf-loader/index.js +260 -0
  147. package/line/index.d.ts +69 -0
  148. package/line/index.js +260 -0
  149. package/package.json +25 -17
  150. package/react/index.d.ts +86 -24
  151. package/react/index.js +260 -1
  152. package/resource/{basis_transcoder.js → basis/basis_transcoder.js} +0 -0
  153. package/resource/{basis_transcoder.wasm → basis/basis_transcoder.wasm} +0 -0
  154. package/resource/gltf/draco_decoder.js +31 -0
  155. package/resource/gltf/draco_decoder.wasm +0 -0
  156. package/resource/gltf/draco_wasm_wrapper.js +119 -0
  157. package/scripts/five-staticify.js +26 -0
  158. package/server/index.d.ts +197 -26
  159. package/server/index.js +367 -1
  160. package/sticker/index.d.ts +71 -0
  161. package/sticker/index.js +260 -0
  162. package/templates/quick-start/README.md +1 -1
  163. package/templates/quick-start/package.json +1 -1
  164. package/templates/react-component/lib/index.tsx +3 -3
  165. package/umd/five-gltf-loader.js +1 -0
  166. package/umd/five-gltf-loader.js.LICENSE.txt +14 -0
  167. package/umd/five-line.js +1 -0
  168. package/umd/five-line.js.LICENSE.txt +14 -0
  169. package/umd/five-react.js +1 -0
  170. package/umd/five-react.js.LICENSE.txt +14 -0
  171. package/umd/five-sticker.js +1 -0
  172. package/umd/five-sticker.js.LICENSE.txt +14 -0
  173. package/umd/five-vue.js +1 -0
  174. package/umd/five.js +2 -0
  175. package/umd/five.js.LICENSE.txt +107 -0
  176. package/vue/index.d.ts +440 -0
  177. package/vue/index.js +260 -0
  178. package/bundles/five.js +0 -2
  179. package/bundles/five.js.LICENSE.txt +0 -160
  180. package/docs/assets/css/main.css +0 -2660
  181. package/docs/assets/js/main.js +0 -248
  182. package/docs/assets/js/search.js +0 -1
  183. package/docs/classes/index.five.html +0 -2498
  184. package/docs/classes/index.fivecamera.html +0 -311
  185. package/docs/classes/index.fivehashcubetexture.html +0 -240
  186. package/docs/classes/index.fiveline.html +0 -342
  187. package/docs/classes/index.fivelinegeometry.html +0 -500
  188. package/docs/classes/index.fivelinematerial.html +0 -276
  189. package/docs/classes/index.fivelinesegmentsgeometry.html +0 -447
  190. package/docs/classes/index.fivescene.html +0 -186
  191. package/docs/classes/index.internalwebglrenderer.html +0 -200
  192. package/docs/classes/index.model.html +0 -883
  193. package/docs/classes/index.pbmgroup.html +0 -415
  194. package/docs/classes/index.pbmmaterial.html +0 -521
  195. package/docs/classes/index.pbmmesh.html +0 -242
  196. package/docs/classes/index.subscribe.html +0 -556
  197. package/docs/classes/react.store.html +0 -584
  198. package/docs/interfaces/index.depthpanoramacontrollercustominitargs.html +0 -408
  199. package/docs/interfaces/index.eventcallback.html +0 -2452
  200. package/docs/interfaces/index.fiveinitargs.html +0 -695
  201. package/docs/interfaces/index.floorplancontrollercustominitargs.html +0 -283
  202. package/docs/interfaces/index.imageoptions.html +0 -320
  203. package/docs/interfaces/index.intersection.html +0 -215
  204. package/docs/interfaces/index.intersectmeshinterface.html +0 -176
  205. package/docs/interfaces/index.modelcontrollercustominitargs.html +0 -354
  206. package/docs/interfaces/index.modeleventcallback.html +0 -316
  207. package/docs/interfaces/index.movepanooptions.html +0 -457
  208. package/docs/interfaces/index.panocirclemeshinterface.html +0 -349
  209. package/docs/interfaces/index.panoramacontrollercustominitargs.html +0 -433
  210. package/docs/interfaces/index.panoramalikecontrollercustominitargs.html +0 -352
  211. package/docs/interfaces/index.pbmparameters.html +0 -462
  212. package/docs/interfaces/index.pose.html +0 -258
  213. package/docs/interfaces/index.scissor.html +0 -240
  214. package/docs/interfaces/index.state.html +0 -288
  215. package/docs/interfaces/index.subscribemixintype.emit.html +0 -180
  216. package/docs/interfaces/index.subscribemixintype.haslistener.html +0 -171
  217. package/docs/interfaces/index.subscribemixintype.off.html +0 -198
  218. package/docs/interfaces/index.subscribemixintype.on.html +0 -213
  219. package/docs/interfaces/index.subscribemixintype.once.html +0 -210
  220. package/docs/interfaces/index.topviewcontrollercustominitargs.html +0 -214
  221. package/docs/interfaces/index.vrpanoramacontrollercustominitargs.html +0 -420
  222. package/docs/interfaces/react.fiveactionreactcallbacks.html +0 -559
  223. package/docs/interfaces/react.fiveinjectiontypes.html +0 -1473
  224. package/docs/interfaces/react.injectfivetoprops.html +0 -259
  225. package/docs/modules/index.html +0 -3027
  226. package/docs/modules/index.subscribemixintype.html +0 -143
  227. package/five.js.LICENSE.txt +0 -160
  228. package/index.d.ts +0 -1807
  229. package/index.js +0 -1
  230. package/scripts/export-five-resource/chfs.exe +0 -0
  231. package/scripts/export-five-resource/fileify.js +0 -192
  232. package/scripts/export-five-resource/format-work.js +0 -71
  233. package/scripts/export-five-resource/staticify.js +0 -327
  234. package/scripts/transcode-model/BufferGeometryUtils.js +0 -832
  235. package/scripts/transcode-model/LoaderSupport.js +0 -1545
  236. package/scripts/transcode-model/MTLLoader.js +0 -602
  237. package/scripts/transcode-model/OBJLoader2.js +0 -1470
  238. package/scripts/transcode-model/obj2pbm.js +0 -65
@@ -0,0 +1,2922 @@
1
+ import Matrix3 from '@math.gl/core/dist/esm/classes/matrix3';
2
+ import Matrix4 from '@math.gl/core/dist/esm/classes/matrix4';
3
+ import Quaternion from '@math.gl/core/dist/esm/classes/quaternion';
4
+ import * as THREE_2 from 'three';
5
+ import Vector3 from '@math.gl/core/dist/esm/classes/vector3';
6
+
7
+ export declare interface AddableObject extends THREE_2.Object3D {
8
+ needsPerToOrt?: boolean;
9
+ needsRender?: boolean;
10
+ mixer?: THREE_2.AnimationMixer;
11
+ setResolution?(width: number, height: number): void;
12
+ }
13
+
14
+ export declare interface AnimationFrame {
15
+ callback: (time: number, deltaTime: number, ...args: any[]) => void;
16
+ once: boolean;
17
+ delay: number;
18
+ order: number;
19
+ }
20
+
21
+ export declare class AnimationFrameLoop {
22
+ private frames;
23
+ private time;
24
+ private stoped;
25
+ private context?;
26
+ private requestId;
27
+ private static sharedInstance?;
28
+ static get shared(): AnimationFrameLoop;
29
+ static getFrameTime(): number;
30
+ constructor();
31
+ private loop;
32
+ setContext(context: any): void;
33
+ getContext(): any;
34
+ private requestAnimationFrame;
35
+ private cancelAnimationFrame;
36
+ private remove;
37
+ /**
38
+ * 添加到动画循环
39
+ * @param callback - 动画循环回调
40
+ * @param once - 是否只回调一次
41
+ * @param delay - 延迟多少个动画循环回调
42
+ * @param order - 优先级,数字越小越早被调用
43
+ * @returns 移除动画循环函数
44
+ */
45
+ add(callback: AnimationFrame["callback"], once?: boolean, delay?: number, order?: number): () => void;
46
+ disponse(): void;
47
+ }
48
+
49
+ export declare class BVH {
50
+ trianglesArray?: Float32Array;
51
+ offsetArray?: Uint32Array;
52
+ rootNode?: BVHNode;
53
+ create(trianglesArray: Float32Array): this;
54
+ splitNode(maxTrianglesPerNode: number): this;
55
+ /**
56
+ * 计算射线与三角形的碰撞
57
+ * @param rayOrigin - 射线的原点坐标
58
+ * @param rayDirection - 设想的方向向量
59
+ * @param backfaceCulling - 是否背面剔除
60
+ * @return 碰撞焦点数组
61
+ */
62
+ intersectRay(rayOrigin: BVHVector3, rayDirection: BVHVector3, backfaceCulling: boolean): BVHIntersect[];
63
+ dispose(): void;
64
+ }
65
+
66
+ export declare class BVHIntersect {
67
+ triangle: [BVHVector3, BVHVector3, BVHVector3];
68
+ intersectionPoint: BVHVector3;
69
+ constructor(triangle: [BVHVector3, BVHVector3, BVHVector3], intersectionPoint: BVHVector3);
70
+ }
71
+
72
+ /**
73
+ * A node in the BVH structure
74
+ * @param extents - the min coords of this node's bounding box
75
+ * @param startIndex - an index in the bbox array, where the first element of this node is located
76
+ * @param endIndex - an index in the bbox array, where the last of this node is located, plus 1 (meaning that its non-inclusive).
77
+ * @param level - distance of this node from the root for the bvh tree. root node has level=0, its children have level=1 etc.
78
+ */
79
+ export declare class BVHNode {
80
+ extents: ArrayLike<number>;
81
+ startIndex: number;
82
+ endIndex: number;
83
+ node0?: BVHNode;
84
+ node1?: BVHNode;
85
+ constructor(extents: ArrayLike<number>, startIndex: number, endIndex: number);
86
+ }
87
+
88
+ export declare class BVHVector3 {
89
+ x: number;
90
+ y: number;
91
+ z: number;
92
+ constructor(x: number, y: number, z: number);
93
+ copy(v: BVHVector3): this;
94
+ set(x: number, y: number, z: number): this;
95
+ fromArray(array: number[], firstElementPos?: number): this;
96
+ add(v: BVHVector3): this;
97
+ multiplyScalar(scalar: number): this;
98
+ subVectors(a: BVHVector3, b: BVHVector3): this;
99
+ dot(v: BVHVector3): number;
100
+ cross(v: BVHVector3): this;
101
+ crossVectors(a: BVHVector3, b: BVHVector3): this;
102
+ clone(): BVHVector3;
103
+ }
104
+
105
+ /** Five 相机 */
106
+ export declare class Camera extends THREE_2.PerspectiveCamera {
107
+ /** 相机姿态 */
108
+ pose: CameraPose;
109
+ constructor(fov: number);
110
+ /** 通过相机参数反算姿态 */
111
+ computePose(): this;
112
+ /** 设置相机姿态 */
113
+ setFromPose(pose: Partial<CameraPose>): this;
114
+ /** 拷贝相机姿态 */
115
+ copyPose(): CameraPose;
116
+ }
117
+
118
+ export declare interface CameraPose {
119
+ longitude: number;
120
+ latitude: number;
121
+ fov: number;
122
+ distance: number;
123
+ offset: THREE_2.Vector3;
124
+ }
125
+
126
+ export declare class Clipper {
127
+ numPlanes: number;
128
+ clipperPlanes: Float32Array | null;
129
+ clipperFloors: number[] | null;
130
+ private static sharedInstance?;
131
+ static get shared(): Clipper;
132
+ constructor();
133
+ update(clipperParameter: ClipperParameter | ClipperParameter[], camera: THREE_2.Camera): void;
134
+ private projectPlanes;
135
+ }
136
+
137
+ export declare interface ClipperParameter {
138
+ clippingBoxMatrix: THREE_2.Matrix4;
139
+ floorIndex?: number;
140
+ }
141
+
142
+ export declare type ControllerCustomInitTypes = {
143
+ Floorplan: FloorplanControllerCustomInitArgs;
144
+ Topview: TopviewControllerCustomInitArgs;
145
+ Panorama: PanoramaControllerCustomInitArgs;
146
+ VRPanorama: VRPanoramaControllerCustomInitArgs;
147
+ Model: ModelControllerCustomInitArgs;
148
+ DepthPanorama: DepthPanoramaControllerCustomInitArgs;
149
+ Mapview: MapviewControllerCustomInitArgs;
150
+ XRPanorama: XRPanoramaControllerCustomInitArgs;
151
+ };
152
+
153
+ export declare type ControllerEventTypes = {
154
+ /**
155
+ * 模态间切换动画开始
156
+ * @param panoIndex - 当前点位
157
+ * @param pose - 相机姿态
158
+ * @param userAction - 是否用户触发
159
+ */
160
+ initAnimationWillStart(panoIndex: number, pose: Pose, userAction: boolean): void;
161
+ /**
162
+ * 模态间切换动画结束
163
+ * @param panoIndex - 当前点位
164
+ * @param pose - 相机姿态
165
+ * @param userAction - 是否用户触发
166
+ */
167
+ initAnimationEnded(panoIndex: number, pose: Pose, userAction: boolean): void;
168
+ /**
169
+ * 意图要变化相机的可视角度 可以通过 `return false` 阻止
170
+ * @deprecated
171
+ * 建议通过 初始化设置的 `defaultFov`, `maxFov`, `minFov` 来限制
172
+ * @param fov - 意图要变化相机的可视角度
173
+ * @returns 可以通过 `return false` 阻止
174
+ */
175
+ wantsChangeCameraFov(fov: number): void | false;
176
+ /**
177
+ * 相机姿态变化
178
+ * @param pose - 相机姿态
179
+ * @param userAction - 是否用户触发
180
+ */
181
+ cameraUpdate(pose: Pose, userAction: boolean): void;
182
+ /**
183
+ * 相机姿态中可视角度变化
184
+ * @param fov - 相机的可视角度
185
+ * @param userAction - 是否用户触发
186
+ */
187
+ cameraFovUpdate(fov: Pose["fov"], userAction: boolean): void;
188
+ /**
189
+ * 相机姿态中相机位置变化
190
+ * @param offset - 相机位置
191
+ * @param userAction - 是否用户触发
192
+ */
193
+ cameraPositionUpdate(offset: Pose["offset"], userAction: boolean): void;
194
+ /**
195
+ * 相机姿态中相机方向变化
196
+ * @param coordinates - 相机姿态的俯仰角和偏航角
197
+ * @param userAction - 是否用户触发
198
+ */
199
+ cameraDirectionUpdate(coordinates: Pick<Pose, "longitude" | "latitude">, userAction: boolean): void;
200
+ /**
201
+ * 观察点位被选择
202
+ * @param panoIndex - 选择的点位
203
+ */
204
+ panoSelected(panoIndex: number | null): void;
205
+ /**
206
+ * 意图要移动到某个点位 可以通过 `return false` 阻止
207
+ * @param panoIndex - 图要移动到的点位下标
208
+ * @param options - 移动参数
209
+ * @param userAction - 是否用户触发
210
+ * @returns 可以通过 `return false` 阻止
211
+ */
212
+ wantsMoveToPano(panoIndex: number, options: MovePanoOptions, userAction: boolean): void | false;
213
+ /**
214
+ * 开始加载并移动到某个观察点位
215
+ * @description
216
+ * 可 panoWillArrive 相比
217
+ * - moveToPano 在加载全景图资源前触发
218
+ * - panoWillArrive 在加载全景图资源后触发
219
+ * @param panoIndex - 移动到的点位下标
220
+ * @param userAction - 是否用户触发
221
+ */
222
+ moveToPano(panoIndex: number, userAction: boolean): void;
223
+ /**
224
+ * 开始加载某个观察点的全景资源
225
+ * @param panoIndex - 移动到的点位下标
226
+ */
227
+ panoWillLoad(panoIndex: number): void;
228
+ /**
229
+ * 某个观察点的全景资源加载完成
230
+ * @param panoIndex - 对应的点位下标
231
+ */
232
+ panoLoaded(panoIndex: number): void;
233
+ /**
234
+ * 某个观察点的全景资源加载失败
235
+ * @param error - 错误对象
236
+ * @param panoIndex - 对应的点位下标
237
+ */
238
+ panoLoadError(error: Error, panoIndex: number): void;
239
+ /**
240
+ * 移动到某个观察点位被取消
241
+ * @description
242
+ * 这个有一些情况会导致
243
+ * - 移动过程中切换模态
244
+ * - 移动过程中 five 被析构
245
+ * - 移动过程点击切换到另一个点位
246
+ * @param panoIndex - 对应的点位下标
247
+ */
248
+ moveToPanoCanceled(panoIndex: number): void;
249
+ /**
250
+ * 开始移动到某个观察点位
251
+ * @description
252
+ * 和 moveToPano 相比
253
+ * - moveToPano 在加载全景图资源前触发
254
+ * - panoWillArrive 在加载全景图资源后触发
255
+ * @param panoIndex - 移动到点位下标
256
+ * @param pose - 相机姿态
257
+ * @param userAction - 是否用户触发
258
+ */
259
+ panoWillArrive(panoIndex: number, pose: Pose, userAction: boolean): void;
260
+ /**
261
+ * 移动到某个观察点位
262
+ * @param panoIndex - 移动到点位下标
263
+ * @param pose - 相机姿态
264
+ * @param userAction - 是否用户触发
265
+ */
266
+ panoArrived(panoIndex: number, pose: Pose, userAction: boolean): void;
267
+ /**
268
+ * 移动中, 会告知移动状态(耗时百分比)
269
+ * @param panoIndex - 将要移动到的点位下标
270
+ * @param prevPanoIndex - 上一个点位下标
271
+ * @param progress - 整个过程经度 [0-1]
272
+ */
273
+ movingToPano(panoIndex: number, prevPanoIndex: number, progress: number): void;
274
+ /**
275
+ * 意图要触发手势, 可以通过 `return false` 阻止
276
+ * @param type - 手势类型
277
+ * @param pointers - 手指位置
278
+ * @param final - 是否手势结束
279
+ * @returns 可以通过 `return false` 阻止
280
+ */
281
+ wantsGesture(type: GestureTypes, pointers: {
282
+ x: number;
283
+ y: number;
284
+ delta?: number;
285
+ }[], final: boolean): void | false;
286
+ /**
287
+ * 手势 触发
288
+ * @param type - 手势类型
289
+ * @param pointers - 手指位置
290
+ * @param final - 是否手势结束
291
+ */
292
+ gesture(type: GestureTypes, pointers: {
293
+ x: number;
294
+ y: number;
295
+ delta?: number;
296
+ }[], final: boolean): void;
297
+ /**
298
+ * 意图要触发 pan 手势(滑动屏幕), 可以通过 `return false` 阻止
299
+ * @param pose - 意图的相机姿态
300
+ * @param final - 是否手势结束
301
+ * @returns 可以通过 `return false` 阻止
302
+ */
303
+ wantsPanGesture(pose: Pose, final: boolean): void | false;
304
+ /**
305
+ * pan 手势(滑动屏幕) 被触发
306
+ * @param pose - 相机姿态
307
+ * @param final - 是否手势结束
308
+ */
309
+ panGesture(pose: Pose, final: boolean): void;
310
+ /**
311
+ * 意图要触发 pan 手势(滑动屏幕) 的惯性运动, 可以通过 `return false` 阻止
312
+ * @param pose - 意图的相机姿态
313
+ * @param final - 是否手势结束
314
+ * @returns 可以通过 `return false` 阻止
315
+ */
316
+ wantsInteriaPan(pose: Pose): void | false;
317
+ /**
318
+ * pan 手势(滑动屏幕) 的惯性运动
319
+ * @param pose - 意图的相机姿态
320
+ * @param final - 是否手势结束
321
+ */
322
+ interiaPan(pose: Pose, final: boolean): void;
323
+ /**
324
+ * 意图要触发 tap 手势(点击屏幕), 可以通过 `return false` 阻止
325
+ * @param raycaster - 点击对应的三维射线
326
+ * @param tapPosition - 点击对应的屏幕位置
327
+ * @param final - 是否手势结束
328
+ * @returns 可以通过 `return false` 阻止
329
+ */
330
+ wantsTapGesture(raycaster: THREE_2.Raycaster, tapPosition: THREE_2.Vector2, final: boolean): void | false;
331
+ /**
332
+ * tap 手势(点击屏幕) 被触发
333
+ * @param raycaster - 点击对应的三维射线
334
+ * @param tapPosition - 点击对应的屏幕位置
335
+ * @param final - 是否手势结束
336
+ */
337
+ tapGesture(raycaster: THREE_2.Raycaster, tapPosition: THREE_2.Vector2, final: boolean): void;
338
+ /**
339
+ * 意图要触发 pinch 手势(双指缩放),可以通过 `return false` 阻止
340
+ * @param scale - 缩放数值
341
+ * @param nextFov - 意图的fov变更
342
+ * @param final - 是否手势结束
343
+ * @returns 可以通过 `return false` 阻止
344
+ */
345
+ wantsPinchGesture(scale: number, nextFov: number, final: boolean): void | false;
346
+ /**
347
+ * 意图要触发 press 手势(长按屏幕), 可以通过 `return false` 阻止
348
+ * @param raycaster - 长按对应的三维射线
349
+ * @param tapPosition - 长按对应的屏幕位置
350
+ * @param duration - 长按持续时间
351
+ * @param final - 是否手势结束
352
+ * @returns 可以通过 `return false` 阻止
353
+ */
354
+ wantsPressGesture(raycaster: THREE_2.Raycaster, tapPosition: THREE_2.Vector2, duration: number, isFinal: boolean): void | false;
355
+ /**
356
+ * tap 手势(点击屏幕) 被触发
357
+ * @param raycaster - 点击对应的三维射线
358
+ * @param tapPosition - 点击对应的屏幕位置
359
+ * @param duration - 长按持续时间
360
+ * @param final - 是否手势结束
361
+ */
362
+ pressGesture(raycaster: THREE_2.Raycaster, tapPosition: THREE_2.Vector2, duration: number, isFinal: boolean): void;
363
+ /**
364
+ * pinch 手势(双指缩放) 被触发
365
+ * @param scale - 缩放数值
366
+ * @param nextFov - 意图的fov变更
367
+ * @param final - 是否手势结束
368
+ */
369
+ pinchGesture(scale: number, fov: number, final: boolean): void;
370
+ /**
371
+ * 意图要触发 鼠标滚轮 可以通过 `return false` 阻止
372
+ * @param delta - 滚轮数值
373
+ * @param nextFov - 意图的fov变更
374
+ * @param final - 是否手势结束
375
+ * @returns 可以通过 `return false` 阻止
376
+ */
377
+ wantsMouseWheel(delta: number, nextFov: number, final: boolean): void | false;
378
+ /**
379
+ * 鼠标滚轮被触发
380
+ * @param delta - 滚轮数值
381
+ * @param nextFov - 意图的fov变更
382
+ * @param final - 是否手势结束
383
+ */
384
+ mouseWheel(delta: number, fov: number, final: boolean): void;
385
+ /**
386
+ * 鼠标焦点环位置被重新计算
387
+ * @param intersection - 焦点碰撞结果
388
+ * @param mesh - 焦点环 mesh
389
+ */
390
+ intersectionOnModelUpdate(intersection: Intersection, mesh: IntersectMeshInterface): void;
391
+ /**
392
+ * 意图要展示鼠标焦点环,可以通过 `return false` 阻止
393
+ * @param intersection - 焦点碰撞结果
394
+ * @returns 可以通过 `return false` 阻止
395
+ */
396
+ wantsShowIntersectionOnModel(raycaster: THREE_2.Raycaster): void | false;
397
+ /** 鼠标焦点环被隐藏 */
398
+ intersectionHidden(): void;
399
+ /** 意图要退出VR眼镜模式 */
400
+ vrWantsToExit(): void;
401
+ /**
402
+ * 观察点的全景资源开始加载
403
+ * @param panoIndex - 加载点位下标
404
+ * @param observer - 对应的 observer 详情
405
+ */
406
+ textureStartLoad(panoIndex: number, observer: WorkObserver): void;
407
+ /**
408
+ * 观察点的全景资源加载中,可获取到进度
409
+ * @param progress - 加载进度 [0-1]
410
+ * @param panoIndex - 加载点位下标
411
+ * @param observer - 对应的 observer 详情
412
+ */
413
+ textureLoading(progress: number, panoIndex: number, observer: WorkObserver): void;
414
+ /**
415
+ * 观察点的全景资源加载被中止
416
+ * @param panoIndex - 加载点位下标
417
+ * @param observer - 对应的 observer 详情
418
+ */
419
+ textureAbort(panoIndex: number, observer: WorkObserver): void;
420
+ /**
421
+ * 观察点的全景资源加载失败
422
+ * @param error - 错误对象
423
+ * @param panoIndex - 加载点位下标
424
+ * @param observer - 对应的 observer 详情
425
+ */
426
+ textureError(error: Error, panoIndex: number, observer: WorkObserver): void;
427
+ /**
428
+ * 观察点的全景资源加载完成
429
+ * @param panoIndex - 加载点位下标
430
+ * @param observer - 对应的 observer 详情
431
+ */
432
+ textureLoaded(panoIndex: number, observer: WorkObserver, meta: (NetWorkMeta | null)[]): void;
433
+ /**
434
+ * 抛出错误
435
+ * @param error - 抛出错误
436
+ */
437
+ error(error: Error): void;
438
+ /**
439
+ * webXR模式开始,webxr session完成坐标系矫正
440
+ */
441
+ webXRSessionStart(): void;
442
+ /**
443
+ * webXR模式结束,webxr session销毁
444
+ */
445
+ webXRSessionEnd(): void;
446
+ /**
447
+ * webXR模式结束,webxr session销毁
448
+ */
449
+ webXRSelected(type: WebXRSelectType): void;
450
+ };
451
+
452
+ /**
453
+ * URL 地址的转换
454
+ * @param source - url 原地址
455
+ * @param options - url 转换参数
456
+ * @returns url 转换结果
457
+ */
458
+ export declare function defaultImageURLTransform(source: string, options: ImageURLOptions): string;
459
+
460
+ export declare interface DepthPanoramaControllerCustomInitArgs extends PanoramaLikeControllerCustomInitArgs {
461
+ /** 最远可移动观察点距离 */
462
+ maxAccessibleDistance?: number;
463
+ /**
464
+ * 点击地面观察点标识的判定范围
465
+ * @description
466
+ * 如果在判定范围内则确定去到目标点,
467
+ * 否则寻找点击位置方向最适合的点(可能会走到一个离相机更近的点)。
468
+ */
469
+ panoTapTriggerRadius?: number;
470
+ /** 地面观察点标识自定义创建器 */
471
+ panoCircleMeshCreator?: () => PanoCircleMeshInterface;
472
+ }
473
+
474
+ /**
475
+ * Five 事件列表
476
+ * @description
477
+ * 可以通过 `five.on(METHOD_NAME, METHOD)` 调用
478
+ */
479
+ export declare interface EventCallback extends EventTypes {
480
+ }
481
+
482
+ /**
483
+ * Five 事件列表
484
+ * @description
485
+ * 具体事件列表 请查看 {@link EventCallback}
486
+ */
487
+ export declare type EventTypes = Pick<ControllerEventTypes, typeof PROXY_CONTROLLER_EVENT_NAMES[number]> & {
488
+ /**
489
+ * 内部错误
490
+ * @param error - 错误对象
491
+ */
492
+ error(error: Error): void;
493
+ /**
494
+ * 准备加载 Work 数据
495
+ * @param input - 输入的 work
496
+ * @param work - 归一化的标准 work
497
+ * @param state - 加载时的姿态
498
+ */
499
+ willLoad(input: any, work: Work, state: Omit<State, "offset" | "distance">): void;
500
+ /**
501
+ * 开始加载 Work 数据
502
+ * @param input - 输入的 work
503
+ * @param work - 归一化的标准 work
504
+ * @param state - 加载时的姿态
505
+ */
506
+ load(input: any, work: Work, state: Omit<State, "offset" | "distance">): void;
507
+ /**
508
+ * 加载完 Work 数据
509
+ * @param input - 输入的 work
510
+ * @param work - 归一化的标准 work
511
+ */
512
+ loaded(input: any, work: Work): void;
513
+ /**
514
+ * 模型开始加载
515
+ * @param workModel - 归一化的标准 work 中的 model 值
516
+ */
517
+ modelWillLoad(workModel: WorkModel): void;
518
+ /**
519
+ * 模型三角面片结构加载完成
520
+ * @param model - 加载完的 model 本质是一个 {@link PBMGroup}
521
+ */
522
+ modelGeometryLoaded(model: Model): void;
523
+ /**
524
+ * 模型材质结构加载完成
525
+ * @param model - 加载完的 model 本质是一个 {@link PBMGroup}
526
+ */
527
+ modelMaterialLoaded(model: Model): void;
528
+ /**
529
+ * 模型 bvh树 计算完成
530
+ * @description
531
+ * bvh 树用于高效的碰撞检测,可以在 `model.bvh` 属性来设置是否开启。默认开启。
532
+ * bvh 树计算需要一定事件,可能会暂时影响一些性能。计算完毕后,会对碰撞检测带来质的提升。
533
+ * @param model - 加载完的 model 本质是一个 {@link PBMGroup}
534
+ */
535
+ modelBvhLoaded(model: Model): void;
536
+ /**
537
+ * 模型加载错误
538
+ * @param error - 错误对象
539
+ * @param model - 加载完的 model 本质是一个 {@link PBMGroup}
540
+ */
541
+ modelLoadError(error: Error, model: Model): void;
542
+ /**
543
+ * 模型加载完成
544
+ * @param model - 加载完的 model 本质是一个 {@link PBMGroup}
545
+ */
546
+ modelLoaded(model: Model): void;
547
+ /**
548
+ * 模型楼层切换
549
+ * @param shownFloor - 模型楼层
550
+ */
551
+ modelShownFloorChange(shownFloor: number | null, totalFloorLength: number): void;
552
+ /**
553
+ * 渲染循环
554
+ * @param rendered - 是否渲染了
555
+ */
556
+ renderFrame(rendered: boolean): void;
557
+ /**
558
+ * 当前 fps 变化
559
+ * @param fps - 当前刷新率
560
+ */
561
+ fps(fps: number): void;
562
+ /**
563
+ * 当目标 state 变化时
564
+ * @param state - 当前姿态状态
565
+ * @param userAction - 是否用户触发
566
+ */
567
+ stateChange(state: State, userAction: boolean): void;
568
+ /**
569
+ * 当前实时 state 变化时
570
+ * @param state - 当前姿态状态
571
+ * @param userAction - 是否用户触发
572
+ */
573
+ currentStateChange(state: State, userAction: boolean): void;
574
+ /**
575
+ * 当 setState 方法被调用
576
+ * @param state - 当前姿态状态
577
+ */
578
+ setState(state: State): void;
579
+ /**
580
+ * 当 state 被同步完成时
581
+ * @param state - 当前姿态状态
582
+ */
583
+ stateSynced(state: State): void;
584
+ /**
585
+ * 意图要移动到某个点时, 可以通过 return false 阻止
586
+ * @param panoIndex - 意图要移动到点位下标
587
+ * @param options - 移动参数
588
+ * @param userAction - 是否用户触发
589
+ * @returns 可以通过 return false 阻止
590
+ */
591
+ wantsMoveToPano(panoIndex: number, options: MovePanoOptions, userAction: boolean): void | false;
592
+ /**
593
+ * 同 wantsMoveToPano
594
+ * @description
595
+ * @param panoIndex - 意图要移动到点位下标
596
+ * @param options - 移动参数
597
+ * @param userAction - 是否用户触发
598
+ * @returns 可以通过 return false 阻止
599
+ */
600
+ wantsToMoveToPano(panoIndex: number, options: MovePanoOptions, userAction: boolean): void;
601
+ /**
602
+ * 意图要切换到某个模态, 可以通过 return false 阻止
603
+ * @param mode - 意图要切换到的模态
604
+ * @param prevMode - 当前模态
605
+ * @returns 可以通过 return false 阻止
606
+ */
607
+ wantsChangeMode(mode: Mode, prevMode: Mode): void | false;
608
+ /**
609
+ * 模态切换完成
610
+ * @param mode - 切换到的模态
611
+ * @param prevMode - 上本质是一个模态
612
+ * @param panoIndex - 初始化动画结束后的点位下标
613
+ * @param toPose - 初始化动画结束后的状态
614
+ * @param userAction - 是否用户触发
615
+ */
616
+ modeChange(mode: Mode, prevMode: Mode, panoIndex: number, toPose: Pose, userAction: boolean): void;
617
+ /**
618
+ * 帮助元素显应的变换
619
+ * @param visible - 帮助元素的是否开启
620
+ */
621
+ helpersVisibleChange(visible: boolean): void;
622
+ /**
623
+ * 网络资源分析
624
+ * @param source - 资源地址
625
+ * @param state - 状态
626
+ * @param detail - 详情
627
+ */
628
+ network(source: string, type: NetworkType, state: NetworkState, detail: string): void;
629
+ /** five 被析构。 插件中请监听用于自身析构 */
630
+ dispose(): void;
631
+ };
632
+
633
+ /**
634
+ * 如视 VR Web展示器
635
+ *
636
+ * @example
637
+ * ```
638
+ * // 初始化构造函数
639
+ * const five = new Five();
640
+ * // 将绘制区域添加到页面上
641
+ * five.appendTo(document.body);
642
+ * // 加载 Work 数据
643
+ * five.load({...});
644
+ * ```
645
+ */
646
+ export declare class Five extends Subscribe<EventTypes> {
647
+ static get version(): string;
648
+ /**
649
+ * Five 的显示模式,可以通过 `five.changeMode` `five.setState` 来切换
650
+ * @description
651
+ * ```text
652
+ * Panorama 全景图游走模式
653
+ * Model 模型游走模式
654
+ * Floorplan 模型查看模式
655
+ * Topview 户型图模式
656
+ * DepthPanorama 深度图游走模式
657
+ * VRPanorama VR眼镜模式
658
+ * XRPanorama VR硬件模式
659
+ * ```
660
+ */
661
+ static Mode: Mirror<Mode>;
662
+ /**
663
+ * @deprecated
664
+ * 请使用 `import { Line } from "@realsee/five/line"` 代替;
665
+ */
666
+ static Line: any;
667
+ /**
668
+ * 自动播放状态是否暂停
669
+ * @description
670
+ * 可以通过 `five.play` `five.pause` 方法播放或暂停
671
+ */
672
+ paused: boolean;
673
+ /** 当前点位序号 */
674
+ panoIndex?: number;
675
+ /** 当前展示的模式 */
676
+ currentMode?: Mode;
677
+ /** 内部使用的 `THREE.Scene` */
678
+ scene: Scene;
679
+ /** 内部使用的产生视差的物体Scene `THREE.Scene` */
680
+ parallaxScene: Scene;
681
+ /** 内部使用的 `Camera` */
682
+ camera: Camera;
683
+ /**
684
+ * 当前设置的 `scissor`
685
+ * @description
686
+ * 可通过初始化,或者 setScissor 方式设置
687
+ * `scissor` 是将屏幕中的内容渲染到 `renderer` 的指定区域。
688
+ * 页面整体长宽均为 `1`。通过类似 css 的 `left` `bottom` `width` `height` 来确定区域。
689
+ * @example
690
+ * ```
691
+ * scissor: { left: 0.75, bottom: 0, width: 0.25, height: 1 }
692
+ * ```
693
+ */
694
+ scissor: Scissor;
695
+ /**
696
+ * 当前使用的 THREE.WebGLRenderer。
697
+ * @description
698
+ * 如果初始化时传入了 `renderer` 则直接时该值
699
+ * 否则会通过 `preserveDrawingBuffer` `backgroundColor` `backgroundAlpha` `antialias` 创建一个 `THREE.WebGLRenderer`
700
+ */
701
+ renderer?: THREE_2.WebGLRenderer;
702
+ /** 当前加载的模型 */
703
+ model: Model;
704
+ /**
705
+ * 是否需要渲染
706
+ * @description
707
+ * 如果初始化设置了 `onlyRenderIfNeeds: true`, 则会激活按需渲染
708
+ * 可以通过设置 `five.needsRender = true` 来告知,five 会在下一帧渲染画面。
709
+ */
710
+ needsRender: boolean;
711
+ /**
712
+ * 全景图的配置参数
713
+ * @description
714
+ * 可以动态对配置在 `work` 数据中的全景图片在 runtime 做 url 调整。
715
+ * 平衡加载时间和图片质量
716
+ */
717
+ imageOptions: ImageOptions;
718
+ /**
719
+ * 模型贴图的配置参数
720
+ * @description
721
+ * 可以动态对配置在 `work` 数据中的模型贴图在 runtime 做 url 调整。
722
+ * 平衡加载时间和图片质量
723
+ */
724
+ textureOptions: TextureOptions;
725
+ /**
726
+ * 模型贴图的配置参数
727
+ * @description
728
+ * 可以动态对配置在 `work` 数据中的模型贴图在 runtime 做 url 调整。
729
+ * 平衡加载时间和图片质量
730
+ */
731
+ videoTexture: THREE_2.VideoTexture;
732
+ /**
733
+ * 当前状态
734
+ * @description
735
+ * ```text
736
+ * five 设置了以下状态
737
+ *
738
+ * - mode: Mode
739
+ * - panoIndex: number
740
+ * - longitude: number
741
+ * - latitude: number
742
+ * - fov: number
743
+ * - offset: THREE.Vector3
744
+ *
745
+ * 可以通过 five.state 和 five.setState 来获取和设置。
746
+ * 通过 state 设置后,five 会通过合适的动画运动来达到设置的位置。
747
+ * 来迎合一些通过数据驱动的场景。
748
+ * ```
749
+ */
750
+ state: State;
751
+ /** 插件暴露的方法 */
752
+ plugins: {
753
+ [key: string]: FivePluginInstance<any>;
754
+ };
755
+ ident: string;
756
+ private stopAnimationLoop?;
757
+ private fps;
758
+ private helperGroup;
759
+ private modeChangeDuration;
760
+ private onlyRenderIfNeeds;
761
+ private poweredByRealsee;
762
+ private controller?;
763
+ private destroyed;
764
+ private stateSynced;
765
+ private controllerInits;
766
+ private panoramaLikeSavedPose;
767
+ private extraElements;
768
+ private getPixelsRenderTarget;
769
+ private readyCallbacks;
770
+ private modelPending;
771
+ private syncingState;
772
+ /**
773
+ * 是否开启 IOS EDR 模式
774
+ * 需要客户端配合
775
+ * 并且开启 five.enablepostProcessing = true
776
+ */
777
+ private _enableIOSEDR;
778
+ private lastLoadWorkTask;
779
+ private requestProxy;
780
+ private networkSubscribe;
781
+ private screenBuffer?;
782
+ private analysis?;
783
+ private renderSwitch01;
784
+ /**
785
+ * gpu_picking
786
+ */
787
+ private gpuPickingRenderTarget;
788
+ private meshReplaceMaterialMap;
789
+ private meshOriginMaterialMap;
790
+ constructor(initArgs?: FiveInitArgs);
791
+ /**
792
+ * GPU Picking 获取选中的 mesh
793
+ * @param x - 屏幕坐标 x
794
+ * @param y - 屏幕坐标 y
795
+ * @param colorMap - 需要选取的 mesh 的颜色与 uuid 的映射
796
+ * @param modelColor - 指定的模型颜色
797
+ * @returns 选中 mesh 的 uuid
798
+ */
799
+ getGPUPicking(x: number, y: number, colorMap: {
800
+ [key: string]: THREE_2.Color;
801
+ }, pixelRatio?: number, modelColor?: THREE_2.Vector3): string | false;
802
+ /**
803
+ * 析构 five 对象。
804
+ * @description
805
+ * 一旦调用了析构方法,则不能再使用当前 five 对象了。
806
+ * 你可以新建一个新的。
807
+ */
808
+ dispose(): void;
809
+ /**
810
+ * 设置 `scissor`
811
+ * @param scissor - 指定区域
812
+ * `scissor` 是将屏幕中的内容渲染到 `renderer` 的指定区域。
813
+ * 请确保在 five 初始化时传入 `renderer` 对象
814
+ * 页面整体长宽均为 `1`。通过类似 css 的 `left` `bottom` `width` `height` 来确定区域。
815
+ * @example
816
+ * ```
817
+ * five.setScissor({ left: 0.75, bottom: 0, width: 0.25, height: 1 })
818
+ * ```
819
+ */
820
+ setScissor(scissor: Scissor): void;
821
+ /**
822
+ * 帮助元素显示/隐藏
823
+ */
824
+ get helperVisible(): boolean;
825
+ set helperVisible(visible: boolean);
826
+ /**
827
+ * 是否开启 IOS EDR 模式
828
+ * 需要客户端配合
829
+ * 并且开启 five.enablepostProcessing = true
830
+ */
831
+ get enableIOSEDR(): boolean;
832
+ set enableIOSEDR(enable: boolean);
833
+ get enablePostProcessing(): boolean;
834
+ set enablePostProcessing(enable: boolean);
835
+ updateConfiguration(args: Pick<FiveInitArgs, "panorama" | "model" | "floorplan" | "topview" | "mapview" | "depthPanorama" | "vrPanorama" | "imageOptions">): void;
836
+ /**
837
+ * 将显示区域加载到页面 DOM 中
838
+ * @description
839
+ * 如果你是传入的 `renderer`. 则你需要自行来方式显示区域该方法并不生效
840
+ *
841
+ * @param element - 加载到页面的 DOM 元素
842
+ * @param size - 显示区域尺寸 默认铺满这个 DOM 元素
843
+ */
844
+ appendTo(element: HTMLElement, size?: {
845
+ width?: number;
846
+ height?: number;
847
+ }): void;
848
+ /**
849
+ * 设置显示区域尺寸
850
+ * @description
851
+ * 如果你是传入的 `renderer`. 则你需要自行来设置显示区域尺寸,该方法并不生效
852
+ *
853
+ * @param size - 显示区域尺寸 默认铺满这个 DOM 元素
854
+ * @param pixelRatio - 像素比 默认继承之前的设置
855
+ */
856
+ refresh(size?: {
857
+ width?: number;
858
+ height?: number;
859
+ }, pixelRatio?: number): void;
860
+ /**
861
+ * 绑定一个额外 DOM 区域,接受触控/鼠标事件
862
+ * @returns 解除该绑定
863
+ */
864
+ addExtraElement(element: HTMLElement): () => void;
865
+ /**
866
+ * 解除绑定的一个额外 DOM 区域
867
+ */
868
+ removeExtraElement(element: HTMLElement): void;
869
+ /**
870
+ * 获取当前相机姿态, 可以使用 getCurrentState 代替
871
+ */
872
+ getPose(): Pose;
873
+ getSize(target: THREE_2.Vector2): THREE_2.Vector2;
874
+ getDrawingBufferSize(target: THREE_2.Vector2): THREE_2.Vector2;
875
+ /**
876
+ * 移动相机。(不触发点位移动)
877
+ * @description
878
+ * 如果动画中途被打断(用户触发行为,或者调用 setState, load, changeMode)的等
879
+ * 会 Promise.reject。运动完成则 Promise.resolve
880
+ * @param pose - 相机目标位置
881
+ * @param duration - 动画触发的时常
882
+ * @param userAction - 是否用户触发
883
+ * @returns Promise 是否移动成功
884
+ */
885
+ updateCamera(pose: Partial<Omit<Pose, "offset">>, duration: number, userAction?: boolean): Promise<void>;
886
+ /**
887
+ * 获取当前相机经纬度
888
+ * @deprecated 请使用使用 getPose
889
+ */
890
+ getLongitudeAndLatitude(): Pick<Pose, "longitude" | "latitude">;
891
+ /**
892
+ * 获取当前相机位置
893
+ * @deprecated 请使用使用 getPose
894
+ */
895
+ getOffset(): Pose["offset"];
896
+ /**
897
+ * 获取当前相机的姿态(用于内部的 python 脚本截图)
898
+ * @deprecated 这是用于内部的 python 脚本截图
899
+ */
900
+ getCameraLocal(): {
901
+ theta: number;
902
+ phi: number;
903
+ lookAtVector: THREE_2.Vector3;
904
+ };
905
+ /**
906
+ * 初始化 initBasisLoader
907
+ * @description
908
+ * 同初始化的 initBasisLoader 参数。用于初始化 basisLoader。
909
+ * basisLoader 只会初始化一次,一旦初始化则不会再修改。
910
+ *
911
+ * @param transcoderResourcePath - basis 解析器路径
912
+ * 如果不设置,使用默认解析器 basis 解析器。
913
+ * 可以传入解析器的 `resourcePath`, 则使用指定的解析器
914
+ * @example
915
+ * ```
916
+ * // 使用默认解析器
917
+ * five.initialBasisLoader();
918
+ *
919
+ * // 使用指定解析器
920
+ * // 会调用这个目录下的 basis_transcoder.js basis_transcoder.wasm 文件作为解析器
921
+ * five.initialBasisLoader("https://vr-public.realsee-cdn.cn/release/static/image/release/five/basis/");
922
+ * ```
923
+ */
924
+ initBasisLoader(transcoderResourcePath?: string): void;
925
+ /** 当前加载的 work 数据 */
926
+ get work(): Work;
927
+ /**
928
+ * 加载 Work 数据
929
+ * @param inputWork - Work 数据
930
+ * @param state - 初始化姿态
931
+ * - "inherit" 使用当前姿态
932
+ * - "initial" 使用 Work 数据中的 initial 姿态
933
+ * - State 自定义姿态
934
+ * @param duration - 切换时间
935
+ */
936
+ load(inputWork: Work | LooseWork | any | Promise<Work | LooseWork | any>, state?: "inherit" | "initial" | Partial<Omit<State, "offset">>, duration?: number, userAction?: boolean): Promise<void>;
937
+ private load_;
938
+ /**
939
+ * 切换模态
940
+ * @param mode - 切换到的模态
941
+ * @param state - 切换完成时的姿态
942
+ * @param duration - 模态切换动画用时
943
+ * @param userAction - 是否时用户动作触发 默认 true
944
+ * @param force - 必须重新初始化 controller
945
+ */
946
+ changeMode<T extends Mode>(mode: T, state?: Partial<Omit<State, "mode">>, duration?: number, userAction?: boolean, force?: boolean): Promise<void>;
947
+ /**
948
+ * 获取画面中的像素颜色
949
+ * @param x - 获取像素区域的起始坐标 x
950
+ * @param y - 获取像素区域的起始坐标 y
951
+ * @param width - 获取像素区域的宽度
952
+ * @param height - 获取像素区域的高度
953
+ * @param pixelRatio - 获取区域的像素比
954
+ * @returns rgba颜色平铺的 Uint8Array
955
+ */
956
+ getPixels(x: number, y: number, width: number, height: number, pixelRatio?: number): Uint8Array;
957
+ /**
958
+ * 获取显示用的画布(Canvas DOM节点)
959
+ */
960
+ getElement(): HTMLCanvasElement | undefined;
961
+ /**
962
+ * 强制渲染
963
+ * @description
964
+ * 调用 `five.render()` 和设置 `five.needsRender = true` 均可在按需渲染时,使得画面渲染一次
965
+ * 区别在于:
966
+ * - `five.needsRender = true` 为在下帧渲染画面
967
+ * - `five.render()` 在当前帧渲染画面
968
+ * 推荐使用 `five.needsRender = true`, 可以更加流畅。但是如果需要截图等同步操作,可以使用 `five.render()`
969
+ *
970
+ * @param callback - 渲染完成回调
971
+ */
972
+ render(callback?: () => void, updateObjectResolution?: boolean): THREE_2.WebGLRenderTarget;
973
+ updateTime(time: number, deltaTime: number, ...args: any[]): void;
974
+ /**
975
+ * 但停自动播放
976
+ */
977
+ pause(): void;
978
+ play(): void;
979
+ /**
980
+ * 转化到 Panorama 模态,并移动到对应序号的观察点。
981
+ * @param panoIndex - 观察点序号
982
+ * @param options - 移动点位参数
983
+ * @param userAction - 是否用户触犯
984
+ */
985
+ moveToPano(panoIndex: number, options?: MovePanoOptions, userAction?: boolean): Promise<void>;
986
+ /**
987
+ * 预加载点位图片资源
988
+ * @param panoIndex - 观察点序号
989
+ * @param callback - 加载完成回调, 并传递加载用时。
990
+ * @returns 加载完成的 Promise 参数同 callback
991
+ */
992
+ preloadPano(panoIndex: number, callback?: (costs: number) => void): Promise<number>;
993
+ /**
994
+ * 计算三维坐标对应到屏幕的二维坐标
995
+ * @description
996
+ * 如果三维坐标不在屏幕中,则返回 null
997
+ * @param vector - 三维坐标
998
+ * @param testModel - 是否计算模型遮挡
999
+ * @returns 二维坐标 或者 null
1000
+ */
1001
+ project2d(vector: THREE_2.Vector3, testModel?: boolean): THREE_2.Vector2 | null;
1002
+ /**
1003
+ * 获取当前在屏幕视锥中的 mesh。
1004
+ * @param object - 如果传入则检查这个对象中的mesh,如果不传,则检查整个 scene
1005
+ */
1006
+ getRenderObjects(object?: THREE_2.Object3D): THREE_2.Object3D[];
1007
+ getCurrentState(): State;
1008
+ /**
1009
+ * 设置 State
1010
+ * @description
1011
+ * ```text
1012
+ * five 设置了以下状态
1013
+ *
1014
+ * - mode: Mode
1015
+ * - panoIndex: number
1016
+ * - longitude: number
1017
+ * - latitude: number
1018
+ * - fov: number
1019
+ * - offset: THREE.Vector3
1020
+ *
1021
+ * 可以通过 five.state 和 five.setState 来获取和设置。
1022
+ * 通过 state 设置后,five 会通过合适的动画运动来达到设置的位置。
1023
+ * 来迎合一些通过数据驱动的场景。
1024
+ * ```
1025
+ * @param state - 目标状态
1026
+ * @param immediately - 是否马上转换,马上转换会尽快达到目标状态,尽量减少中间状态,更少动画。
1027
+ * @param userAction - 是否是用户触发的动作
1028
+ */
1029
+ setState(state: Partial<State>, immediately?: boolean, userAction?: boolean): void;
1030
+ aroundScissor(callback: () => void): void;
1031
+ private syncState;
1032
+ /**
1033
+ * 当前页面静态
1034
+ */
1035
+ ready(args?: {
1036
+ tile?: boolean;
1037
+ }): Promise<void>;
1038
+ /**
1039
+ * 请求全屏
1040
+ */
1041
+ requestFullscreen(): void;
1042
+ /**
1043
+ * 退出全屏
1044
+ */
1045
+ exitFullscreen(): void;
1046
+ private throwError;
1047
+ private loadModel;
1048
+ private commonParams;
1049
+ private saveControllerPose;
1050
+ private applyController;
1051
+ /** 移除事件绑定 */
1052
+ private removeEventListeners;
1053
+ /** 销毁GPU Picking 所用的材质 */
1054
+ private diposeGPUPickingMaterial;
1055
+ }
1056
+
1057
+ /** Five 初始化参数 */
1058
+ export declare interface FiveInitArgs {
1059
+ /**
1060
+ * 外部传入的 `THREE.WebGLRenderer`。
1061
+ * @description
1062
+ * 如果需要使用 `scissor` 分割画布功能,则必须使用外部传入 renderer,
1063
+ * 并且设置为 `preserveDrawingBuffer: false`。
1064
+ * 如果设置了 `renderer`, 则 `preserveDrawingBuffer`
1065
+ * `backgroundColor` `backgroundAlpha` `antialias`
1066
+ * 均不再生效。
1067
+ */
1068
+ renderer?: THREE_2.WebGLRenderer;
1069
+ /**
1070
+ * 内部 `THREE.WebGLRenderer` 是否通过像素拷贝的方式绘制。
1071
+ * @description
1072
+ * 当你想做屏幕截图等要确定取得屏幕像素时,请设置为 `true`。
1073
+ * 如果设置了参数 `renderer` 参数,则不生效,请对传入的 `renderer` 自行设置。
1074
+ * @default `false`
1075
+ */
1076
+ preserveDrawingBuffer?: boolean;
1077
+ /**
1078
+ * 输出画面的背景颜色。
1079
+ * @description
1080
+ * 通过数字类型传入。
1081
+ * 如果设置了参数 `renderer` 参数,则不生效,请对传入的 `renderer` 自行设置。
1082
+ * @default `0x181A1C`
1083
+ * @example
1084
+ * ```
1085
+ * backgroundColor: 0xffffff // 白色
1086
+ * backgroundColor: 0xff0000 // 红色
1087
+ * ```
1088
+ */
1089
+ backgroundColor?: number;
1090
+ /**
1091
+ * 输出画面的背景透明度
1092
+ * @description
1093
+ * 通过数字类型传入。取值范围 [0-1]
1094
+ * 如果设置了参数 `renderer` 参数,则不生效,请对传入的 `renderer` 自行设置。
1095
+ * @default `1`
1096
+ */
1097
+ backgroundAlpha?: number;
1098
+ /**
1099
+ * 是否开启 `THREE.WebGLRenderer` 的抗锯齿功能
1100
+ * @description
1101
+ * 这个抗锯齿功能是 `WEBGL` 自带的抗锯齿,并不是类似 fxaa taa 等后处理方式,比较吃性能。
1102
+ * 如果设置了参数 `renderer` 参数,则不生效,请对传入的 `renderer` 自行设置。
1103
+ * @default `false`
1104
+ */
1105
+ antialias?: boolean;
1106
+ /**
1107
+ * 屏幕渲染区域
1108
+ * @description
1109
+ * 请确保设置了 `renderer` 参数,`scissor` 参数才可生效
1110
+ * `scissor` 是将屏幕中的内容渲染到 `renderer` 的指定区域。
1111
+ * 页面整体长宽均为 `1`。通过类似 css 的 `left` `bottom` `width` `height` 来确定区域。
1112
+ * @example
1113
+ * ```
1114
+ * scissor: { left: 0.75, bottom: 0, width: 0.25, height: 1 }
1115
+ * ```
1116
+ */
1117
+ scissor?: Scissor;
1118
+ /**
1119
+ * 是否自动播放。
1120
+ * @description
1121
+ * 播放即把内存中计算的内容渲染到画面上。play则是进行每帧播放。
1122
+ * 如果 `play: false` 则不自动播放。屏幕不显示。
1123
+ * 你还可以通过 `five.play()` `five.pause()` 的方式来控制播放。
1124
+ * @default `true`
1125
+ */
1126
+ play?: boolean;
1127
+ /**
1128
+ * 全景图的配置参数
1129
+ * @description
1130
+ * 可以动态对配置在 `work` 数据中的全景图片在 runtime 做 url 调整。
1131
+ * 平衡加载时间和图片质量
1132
+ */
1133
+ imageOptions?: ImageOptions;
1134
+ /**
1135
+ * 模型贴图的配置参数
1136
+ * @description
1137
+ * 可以动态对配置在 `work` 数据中的模型贴图在 runtime 做 url 调整。
1138
+ * 平衡加载时间和图片质量
1139
+ */
1140
+ textureOptions?: TextureOptions;
1141
+ /**
1142
+ * 是否按需渲染
1143
+ * @description
1144
+ * 按需渲染时,如果页面中的渲染有 `needsRender: true` 属性。或者 `five.needsRender: true` 时
1145
+ * 才会重新渲染屏幕,降低无用渲染产生的消耗。
1146
+ * @default `true`
1147
+ */
1148
+ onlyRenderIfNeeds?: boolean;
1149
+ /**
1150
+ * 最高 fps 限制
1151
+ * @description
1152
+ * 如果为 `false`, 则不限制。最好也就是屏幕刷新率,不会再高了。
1153
+ * @default `false`
1154
+ */
1155
+ maxFps?: number | false;
1156
+ /**
1157
+ * 是否初始化 `basisLoader`。
1158
+ * @description
1159
+ * 当你需要加载 basis 格式图片时请启用。
1160
+ * 如果设置为 `true` 使用默认解析器 basis 解析器。
1161
+ * 如果要自定义,可以传入解析器的 `resourcePath`, 则使用指定的解析器
1162
+ * @default `false`
1163
+ * @example
1164
+ * ```
1165
+ * // 使用默认解析器
1166
+ * initialBasisLoader: true
1167
+ *
1168
+ * // 使用指定解析器
1169
+ * // 会调用这个目录下的 basis_transcoder.js basis_transcoder.wasm 文件作为解析器
1170
+ * initialBasisLoader: "https://vr-public.realsee-cdn.cn/release/static/image/release/five/basis/"
1171
+ * ```
1172
+ */
1173
+ initialBasisLoader?: boolean | string;
1174
+ /**
1175
+ * 外挂视频对象。
1176
+ * @description
1177
+ * 当点位中有视频元素,则会使用。如果不传入也会外部新建,
1178
+ * 加入传入的原因是,视频自动播放在不同浏览器或者 webview 中有不同的特性。
1179
+ * 给予更多外部操作的空间。
1180
+ */
1181
+ videoInstance?: HTMLVideoElement;
1182
+ /** 全景图游走模式下的特定参数 */
1183
+ panorama?: ControllerCustomInitTypes["Panorama"];
1184
+ /** 模型游走模式下的特定参数 */
1185
+ model?: ControllerCustomInitTypes["Model"];
1186
+ /** 模型查看模式下的特定参数 */
1187
+ floorplan?: ControllerCustomInitTypes["Floorplan"];
1188
+ /** 户型图模式下的特定参数 */
1189
+ topview?: ControllerCustomInitTypes["Topview"];
1190
+ /** 地图模式下的特定参数 */
1191
+ mapview?: ControllerCustomInitTypes["Mapview"];
1192
+ /** 深度图游走模式下的特定参数 */
1193
+ depthPanorama?: ControllerCustomInitTypes["DepthPanorama"];
1194
+ /** VR眼镜模式下的特定参数 */
1195
+ vrPanorama?: ControllerCustomInitTypes["VRPanorama"];
1196
+ /** XR眼镜模式下的特定参数 */
1197
+ xrPanorama?: ControllerCustomInitTypes["XRPanorama"];
1198
+ /**
1199
+ * 模式间切换时的过度动画时间
1200
+ * @description
1201
+ * 单位毫秒
1202
+ * @default `800`
1203
+ */
1204
+ modeChangeDuration?: number;
1205
+ /**
1206
+ * 插件定义
1207
+ * @description
1208
+ * 详见插件部分。
1209
+ */
1210
+ plugins?: (FivePlugin<void> | FivePluginInit<FivePlugin<any, any>> | FivePluginInit<FivePlugin<void, any>>)[];
1211
+ /**
1212
+ * 是否展示 powered by 如视
1213
+ */
1214
+ poweredByRealsee?: boolean;
1215
+ /**
1216
+ * 是否使用webgl2渲染执行环境, 默认值 false
1217
+ */
1218
+ webgl2?: boolean;
1219
+ /**
1220
+ * 是否开启模型裁切
1221
+ */
1222
+ localClippingEnabled?: boolean;
1223
+ /**
1224
+ * 请求代理
1225
+ * @param url - 发起的请求
1226
+ * @returns 返回的请求
1227
+ */
1228
+ requestProxy?(url: string): string | Promise<string>;
1229
+ }
1230
+
1231
+ /**
1232
+ * Five 插件
1233
+ * [[include:plugins.md]]
1234
+ * @template Parameters - 插件参数, 没有参数则为 void
1235
+ * @template Returns - 如果有参数则插件暴露的 api,没有参数则不传
1236
+ */
1237
+ export declare type FivePlugin<Parameters = void, Returns = void> = Parameters extends void ? ((five: Five) => Returns) : ((five: Five, parameters: Parameters) => Returns);
1238
+
1239
+ /**
1240
+ * 获取插件在Five中的初始化结构
1241
+ * @template T - Five 插件
1242
+ */
1243
+ export declare type FivePluginInit<T extends FivePlugin<any, any>> = Parameters<T>[1] extends undefined ? [
1244
+ Plugin: T,
1245
+ instanceName: null | string
1246
+ ] : [
1247
+ Plugin: T,
1248
+ instanceName: null | string,
1249
+ parameters: Parameters<T>[1]
1250
+ ];
1251
+
1252
+ /**
1253
+ * 获取插件暴露的 api
1254
+ * @template T - Five 插件
1255
+ */
1256
+ export declare type FivePluginInstance<T extends FivePlugin<any, any>> = ReturnType<T>;
1257
+
1258
+ export declare interface FloorplanControllerCustomInitArgs {
1259
+ /** 默认偏航角 */
1260
+ defaultLongitude?: number;
1261
+ /** 默认俯仰角 */
1262
+ defaultLatitude?: number;
1263
+ /** 最大俯仰角 */
1264
+ maxLatitude?: number;
1265
+ /** 最小俯仰角 */
1266
+ minLatitude?: number;
1267
+ /** 默认相机可视角度(垂直),可作为 `zoom` */
1268
+ defaultFov?: number;
1269
+ /** 最大相机可视角度 */
1270
+ maxFov?: number;
1271
+ /** 最小相机可视角度 */
1272
+ minFov?: number;
1273
+ }
1274
+
1275
+ export declare type GestureTypes = "pan" | "tap" | "pinch" | "press" | "mouseWheel";
1276
+
1277
+ export declare function getViewportScale(): number;
1278
+
1279
+ /**
1280
+ * 图片参数
1281
+ */
1282
+ export declare interface ImageOptions {
1283
+ /**
1284
+ * url 地址转化
1285
+ * @param url - 原始地址
1286
+ * @param options - 当前地址参数
1287
+ * @returns 转化后地址
1288
+ */
1289
+ transform?: (url: string, options: ImageURLOptions) => string;
1290
+ /** 图片尺寸参数 尽量使用 2 的幂次 如 512 1024 2048 */
1291
+ size?: number;
1292
+ /** 图片质量参数(0-100) */
1293
+ quality?: number;
1294
+ /** 图片格式参数 */
1295
+ format?: "jpg" | "png" | "heif" | "webp" | "avif";
1296
+ /** 锐化参数 海外不支持 */
1297
+ sharpen?: number;
1298
+ mappings?: ImageURLMappings;
1299
+ }
1300
+
1301
+ export declare function imageSupport(): Promise<{
1302
+ avif: boolean;
1303
+ webp: boolean;
1304
+ }>;
1305
+
1306
+ export declare interface ImageURLMappings {
1307
+ [publicDomain: string]: {
1308
+ "pano": [string, string];
1309
+ "tile": [string, string];
1310
+ "texture": [string];
1311
+ "default": [string];
1312
+ };
1313
+ }
1314
+
1315
+ export declare interface ImageURLOptions {
1316
+ /** 图片类型标识 */
1317
+ key: string;
1318
+ /** basisLoader 是否初始化完成 */
1319
+ basisLoaderInitialized: boolean;
1320
+ /** 图片尺寸参数 尽量使用 2 的幂次 如 256 512 1024 */
1321
+ size?: number;
1322
+ /** 图片质量参数(0-100) */
1323
+ quality?: number;
1324
+ /** 图片格式参数 */
1325
+ format?: "jpg" | "png" | "heif" | "webp" | "avif";
1326
+ /** 图片裁切 */
1327
+ cut?: [x: number, y: number, width: number, height: number];
1328
+ /** 锐化参数 海外不支持 */
1329
+ sharpen?: number;
1330
+ /** url匹配规则 */
1331
+ mappings?: ImageURLMappings;
1332
+ }
1333
+
1334
+ export declare class InternalWebGLRenderer extends THREE_2.WebGLRenderer {
1335
+ constructor({ preserveDrawingBuffer, backgroundColor, backgroundAlpha, pixelRatio, antialias, webgl2, }: {
1336
+ preserveDrawingBuffer?: boolean;
1337
+ backgroundColor?: number | THREE_2.Color;
1338
+ backgroundAlpha?: number;
1339
+ pixelRatio?: number;
1340
+ antialias?: boolean;
1341
+ webgl2?: boolean;
1342
+ });
1343
+ }
1344
+
1345
+ export declare interface Intersection {
1346
+ /** 焦点坐标 */
1347
+ point: THREE_2.Vector3;
1348
+ /** 焦点面片 */
1349
+ face?: {
1350
+ normal: THREE_2.Vector3;
1351
+ } | null;
1352
+ /** 焦点距离 */
1353
+ distance: number;
1354
+ }
1355
+
1356
+ export declare class IntersectMesh extends THREE_2.Object3D implements IntersectMeshInterface {
1357
+ private ringMesh;
1358
+ constructor();
1359
+ dispose(): void;
1360
+ }
1361
+
1362
+ /**
1363
+ * 地面提示点位接口
1364
+ */
1365
+ export declare interface IntersectMeshInterface extends THREE_2.Object3D {
1366
+ dispose(): void;
1367
+ }
1368
+
1369
+ export declare class LegacyPanoCircleMesh extends THREE_2.Object3D implements PanoCircleMeshInterface {
1370
+ needsRender: boolean;
1371
+ hitTestMesh: THREE_2.Mesh<THREE_2.BufferGeometry, THREE_2.MeshBasicMaterial>;
1372
+ current: boolean;
1373
+ loading: boolean;
1374
+ disabled: boolean;
1375
+ progress: number;
1376
+ opacity: number;
1377
+ private centerMesh;
1378
+ private loadingMesh;
1379
+ private progressMotion;
1380
+ private opacityMotion;
1381
+ private stopInterval?;
1382
+ constructor();
1383
+ setLoading(shown: boolean): void;
1384
+ setDisabled(disabled: boolean): void;
1385
+ setProgress(progress: number): void;
1386
+ setOpacity(opacity: number): void;
1387
+ setCurrent(current: boolean): void;
1388
+ updateTime(time: number, deltaTime: number): void;
1389
+ dispose(): void;
1390
+ }
1391
+
1392
+ export declare type LooseWork = {
1393
+ bvh?: boolean;
1394
+ modelAsync?: boolean;
1395
+ initial?: LooseWorkInitial;
1396
+ base_url?: string;
1397
+ model?: LooseWorkModel;
1398
+ panorama: {
1399
+ base_url?: string;
1400
+ pano_high_cube_base_url?: string;
1401
+ info?: LooseWorkPanorama[];
1402
+ list?: LooseWorkPanorama[];
1403
+ };
1404
+ observers: LooseWorkObserver[];
1405
+ };
1406
+
1407
+ export declare type LooseWorkInitial = {
1408
+ pano_index?: number;
1409
+ pano?: number;
1410
+ longitude?: number;
1411
+ latitude?: number;
1412
+ heading?: number;
1413
+ };
1414
+
1415
+ export declare type LooseWorkModel = {
1416
+ file_url: string;
1417
+ material_textures?: string[];
1418
+ material_base_url?: string;
1419
+ };
1420
+
1421
+ export declare type LooseWorkObserver = {
1422
+ active?: boolean;
1423
+ index?: number;
1424
+ visible_nodes: number[];
1425
+ accessible_nodes: number[];
1426
+ quaternion: {
1427
+ y: number;
1428
+ x: number;
1429
+ z: number;
1430
+ w: number;
1431
+ };
1432
+ standing_position: number[];
1433
+ position: number[];
1434
+ floor?: number;
1435
+ floor_index?: number;
1436
+ };
1437
+
1438
+ export declare type LooseWorkPanorama = {
1439
+ active?: boolean;
1440
+ loadable?: boolean;
1441
+ index?: number;
1442
+ up: string;
1443
+ down: string;
1444
+ right: string;
1445
+ left: string;
1446
+ front: string;
1447
+ back: string;
1448
+ video?: LooseWorkVideo;
1449
+ luminance?: {
1450
+ up: string;
1451
+ down: string;
1452
+ right: string;
1453
+ left: string;
1454
+ front: string;
1455
+ back: string;
1456
+ };
1457
+ tiles?: number[];
1458
+ };
1459
+
1460
+ export declare type LooseWorkVideo = {
1461
+ source: string;
1462
+ matrix: number[];
1463
+ size: number[];
1464
+ };
1465
+
1466
+ export declare interface MapviewControllerCustomInitArgs {
1467
+ /** 默认偏航角 */
1468
+ defaultLongitude?: number;
1469
+ /** 默认俯仰角 */
1470
+ defaultLatitude?: number;
1471
+ /** 默认相机距离 */
1472
+ defaultDistance?: number;
1473
+ /** 最大俯仰角 */
1474
+ maxLatitude?: number;
1475
+ /** 最小俯仰角 */
1476
+ minLatitude?: number;
1477
+ /** 最大相机距离 */
1478
+ maxDistance?: number;
1479
+ /** 最小相机距离 */
1480
+ minDistance?: number;
1481
+ }
1482
+
1483
+ export declare type Mirror<T extends string> = Record<T, T>;
1484
+
1485
+ /**
1486
+ * Five 的显示模式,可以通过 `five.changeMode` `five.setState` 来切换
1487
+ * - **Panorama**: 全景图游走模式
1488
+ * - **Model**: 模型游走模式
1489
+ * - **Floorplan**: 模型查看模式
1490
+ * - **Topview**: 户型图模式
1491
+ * - **Mapview**: 地图模式
1492
+ * - **DepthPanorama**: 深度图游走模式
1493
+ * - **VRPanorama**: VR眼镜模式
1494
+ */
1495
+ export declare type Mode =
1496
+ /** 模型查看模式 */
1497
+ "Floorplan" |
1498
+ /** 户型图模式 */
1499
+ "Topview" |
1500
+ /** 地图模式 */
1501
+ "Mapview" |
1502
+ /** 全景图游走模式 */
1503
+ "Panorama" |
1504
+ /** VR眼镜模式 */
1505
+ "VRPanorama" |
1506
+ /** 模型游走模式 */
1507
+ "Model" |
1508
+ /** 深度图游走模式 */
1509
+ "DepthPanorama" |
1510
+ /** XR眼镜模式*/
1511
+ "XRPanorama";
1512
+
1513
+ /**
1514
+ * Five 模型
1515
+ * @description
1516
+ * 通过 work 数据加载, 适配 at3d、pbm、dome、domez 格式的文件
1517
+ * 可以通过 jsonp 解析 base64 的 dataURL 内容,
1518
+ * 需要满足 your/path/filename.at3d.json_xxxxxx,
1519
+ * 通过 json_xxxxxx(<dataURL>) 方式返回。
1520
+ */
1521
+ export declare class Model extends PBMContainer implements Subscribe<ModelEventType> {
1522
+ /** 是否加载完成 */
1523
+ loaded: boolean;
1524
+ /** 是否未加载 */
1525
+ empty: boolean;
1526
+ /** 外接盒子的大小 */
1527
+ bounding: THREE_2.Box3;
1528
+ /** 当前显示的楼层 */
1529
+ shownFloor: number | null;
1530
+ /** 楼层的数量 */
1531
+ floorLength: number;
1532
+ /** 模型瓦片 */
1533
+ originModel?: PBMContainer;
1534
+ /** 模型瓦片 */
1535
+ tiledModel?: Tile3DModel;
1536
+ /**
1537
+ * 判断是否注册了事件
1538
+ * 具体可查看 {@link Subscribe.hasListener}
1539
+ */
1540
+ hasListener: SubscribeMixinType.hasListener<ModelEventType>;
1541
+ /**
1542
+ * 注册事件
1543
+ * 具体可查看 {@link Subscribe.on}
1544
+ */
1545
+ on: SubscribeMixinType.on<ModelEventType>;
1546
+ /**
1547
+ * 注册事件(是否只执行一次)
1548
+ * 具体可查看 {@link Subscribe.once}
1549
+ */
1550
+ once: SubscribeMixinType.once<ModelEventType>;
1551
+ /**
1552
+ * 解除事件
1553
+ * 具体可查看 {@link Subscribe.off}
1554
+ */
1555
+ off: SubscribeMixinType.off<ModelEventType>;
1556
+ /**
1557
+ * 触发事件
1558
+ * 具体可查看 {@link Subscribe.emit}
1559
+ */
1560
+ emit: SubscribeMixinType.emit<ModelEventType>;
1561
+ /** bvh 树的计算结果 */
1562
+ bvhs: BVH[] & {
1563
+ loaded: boolean;
1564
+ };
1565
+ /** 网络代理 */
1566
+ private requestProxy?;
1567
+ /** 网络跟踪 */
1568
+ private networkSubscribe?;
1569
+ /** 安全域名 */
1570
+ private allowHosts?;
1571
+ constructor(options?: {
1572
+ networkSubscribe?: NetworkSubscribe;
1573
+ requestProxy?: (url: string) => string | Promise<string>;
1574
+ allowHosts?: string[];
1575
+ });
1576
+ /**
1577
+ * 当前显示的楼层
1578
+ * @deprecated
1579
+ * 请用 shwonFloor 代替
1580
+ */
1581
+ get shownfloor(): number | null;
1582
+ /**
1583
+ * 当前模型是否支持瓦片
1584
+ */
1585
+ get hasTiles(): boolean;
1586
+ /**
1587
+ * 是否开启瓦片
1588
+ */
1589
+ get enableTiles(): boolean;
1590
+ set enableTiles(enable: boolean);
1591
+ /**
1592
+ * 获取模型边界线
1593
+ * @param threshold - 面片间夹角阈值
1594
+ * @returns 所有模型边界线
1595
+ */
1596
+ getEdges(threshold?: number): THREE_2.Line3[];
1597
+ /**
1598
+ * 获取当前楼层数
1599
+ * @deprecated
1600
+ * 请使用 floorLength 参数代替
1601
+ */
1602
+ hasFloors(): number;
1603
+ private hasFloors_;
1604
+ /**
1605
+ * 显示某楼层
1606
+ * @example
1607
+ * ```
1608
+ * model.show() //显示全部楼层
1609
+ * model.show(1) //显示第一楼层
1610
+ * model.show(1, 0) //显示第一楼层, 并且其他楼层透明度为 0
1611
+ * ```
1612
+ */
1613
+ show(): void;
1614
+ show(floorIndex: number, hiddenOpacity?: number): void;
1615
+ private at3dShow;
1616
+ private b3dmShow;
1617
+ /**
1618
+ * 计算模型射线碰撞检测
1619
+ * @param raycaster - THREE 射线对象
1620
+ * @param floors - 和某一楼层做碰撞检测, 不传为和所有楼层做碰撞检测
1621
+ * @returns 返回碰撞
1622
+ */
1623
+ intersectRaycaster(raycaster: THREE_2.Raycaster, floors?: number | number[]): Intersection[];
1624
+ buildBVH(): void;
1625
+ /**
1626
+ * 加载模型
1627
+ * @param workModel - work 的 model 内容
1628
+ * @param imageOptions - 图片参数
1629
+ */
1630
+ load(workModel: WorkModel, textureOptions?: TextureOptions): Promise<void>;
1631
+ update(renderer: THREE_2.WebGLRenderer, camera: THREE_2.PerspectiveCamera): void;
1632
+ /**
1633
+ * 析构函数
1634
+ * @description
1635
+ * 一旦析构,则不能使用
1636
+ */
1637
+ dispose(): void;
1638
+ }
1639
+
1640
+ export declare interface ModelControllerCustomInitArgs extends PanoramaLikeControllerCustomInitArgs {
1641
+ }
1642
+
1643
+ /**
1644
+ * Five 模型事件列表
1645
+ * @description
1646
+ * 可以通过 `five.model.on(METHOD_NAME, METHOD)` 调用
1647
+ */
1648
+ export declare interface ModelEventCallback extends ModelEventType {
1649
+ }
1650
+
1651
+ /**
1652
+ * 模型事件列表
1653
+ * @description
1654
+ * 具体事件列表 请查看 {@link ModelEventCallback}
1655
+ */
1656
+ export declare type ModelEventType = {
1657
+ /**
1658
+ * 模型 bvh树 计算完成
1659
+ * @description
1660
+ * bvh 树用于高效的碰撞检测,可以在 `model.bvh` 属性来设置是否开启。默认开启。
1661
+ * bvh 树计算需要一定时间,可能会暂时影响一些性能。计算完毕后,会对碰撞检测带来质的提升。
1662
+ */
1663
+ bvhLoaded(): void;
1664
+ /** 模型三角面片结构加载完成 */
1665
+ geometryLoaded(): void;
1666
+ /** 模型材质结构加载完成 */
1667
+ materialLoaded(): void;
1668
+ /** 模型加载完成 */
1669
+ loaded(): void;
1670
+ /**
1671
+ * 显示楼层改变
1672
+ * @param shownFloor - 显示的楼层
1673
+ */
1674
+ shownFloorChange(shownFloor: number | null, totalFloorLength: number): void;
1675
+ /**
1676
+ * 内部错误
1677
+ * @param error - 错误对象
1678
+ */
1679
+ error(error: Error): void;
1680
+ };
1681
+
1682
+ /**
1683
+ * 点位移动参数
1684
+ */
1685
+ export declare interface MovePanoOptions extends Partial<Omit<Pose, "offset">> {
1686
+ /** 是否通过初始化参数限制 fov, latitude */
1687
+ limit?: boolean;
1688
+ /**
1689
+ * 动画模式
1690
+ * @description
1691
+ * - `fly` 通过相机移动方式变化
1692
+ * - `fade` 通过渐变方式变化
1693
+ * - `montage` 通过渐变穿插到黑屏方式变化
1694
+ * - `instant` 通过插入黑屏方式变化
1695
+ */
1696
+ effect?: "fly" | "fade" | "montage" | "instant";
1697
+ /**
1698
+ * 运动耗时
1699
+ * @description
1700
+ * - `数字或者字符串类型` 直接当作运动耗时
1701
+ * - `函数类型` 传入 距离和速度(速度为five初始化设置) 返回运动耗时
1702
+ * - `不传或者null` 通过距离和速度(速度为five初始化设置)
1703
+ */
1704
+ duration?: number | ((distance: number, speed: number) => number) | string | null;
1705
+ /** 运动曲线函数 */
1706
+ easing?: (k: number) => number;
1707
+ /** 运动开始回调 */
1708
+ moveStartCallback?: (panoIndex: number, toPose: Pose) => void;
1709
+ /** 运动结束回调 */
1710
+ moveEndCallback?: (panoIndex: number, pose: Pose) => void;
1711
+ /**
1712
+ * 运动被取消回调
1713
+ * @description
1714
+ * 这个有一些情况会导致
1715
+ * - 移动过程中切换模态
1716
+ * - 移动过程中 five 被析构
1717
+ * - 移动过程点击切换到另一个点位
1718
+ */
1719
+ moveCancelCallback?: () => void;
1720
+ }
1721
+
1722
+ export declare type NetWorkMeta = {
1723
+ origin: string;
1724
+ source: string;
1725
+ headers: {
1726
+ [name: string]: string;
1727
+ };
1728
+ requestTime: number;
1729
+ responseTime: number;
1730
+ costs: number;
1731
+ size?: number;
1732
+ };
1733
+
1734
+ export declare interface NetworkOptions {
1735
+ /** 超时时间 */
1736
+ timeout?: number;
1737
+ /** 请求代理 */
1738
+ requestProxy?: (url: string) => string | Promise<string>;
1739
+ /** 网络消息追踪 */
1740
+ networkSubscribe?: NetworkSubscribe;
1741
+ /** 安全域名 */
1742
+ allowHosts?: string[];
1743
+ }
1744
+
1745
+ export declare type NetworkResponse<T = any, E extends NetWorkMeta | NetWorkMeta[] = NetWorkMeta> = {
1746
+ body: T;
1747
+ meta: E;
1748
+ };
1749
+
1750
+ export declare type NetworkState = "ok" | "preload" | "error" | "proxy-error" | "timeout" | "forbidden";
1751
+
1752
+ export declare class NetworkSubscribe extends Subscribe<{
1753
+ network(source: string, type: NetworkType, state: NetworkState, detail: string): void;
1754
+ }> {
1755
+ }
1756
+
1757
+ export declare type NetworkType = "XMLHttpRequest" | "Script" | "Image" | "Link";
1758
+
1759
+ export declare class PanoCircleMesh extends THREE_2.Object3D implements PanoCircleMeshInterface {
1760
+ needsRender: boolean;
1761
+ private loadingMesh;
1762
+ private disableMesh;
1763
+ private centerMesh;
1764
+ private ringMesh;
1765
+ private progressMesh;
1766
+ private ringRotateMotion;
1767
+ private tapMotion;
1768
+ private progressMotion;
1769
+ private progressOpacityMotion;
1770
+ private opacityMotion;
1771
+ progress: number;
1772
+ opacity: number;
1773
+ current: boolean;
1774
+ loading: boolean;
1775
+ disabled: boolean;
1776
+ constructor();
1777
+ setProgress(progress: number): void;
1778
+ setOpacity(opacity: number): void;
1779
+ setCurrent(current: boolean): void;
1780
+ setLoading(loading: boolean): void;
1781
+ setDisabled(disabled: boolean): void;
1782
+ tap(): Promise<void>;
1783
+ setResolution(width: number, height: number): void;
1784
+ updateTime(time: number, deltaTime: number): void;
1785
+ dispose(): void;
1786
+ }
1787
+
1788
+ export declare class PanoCircleMeshDark extends THREE_2.Object3D implements PanoCircleMeshInterface {
1789
+ needsRender: boolean;
1790
+ private backgroundMesh;
1791
+ private loadingMesh;
1792
+ private disableMesh;
1793
+ private centerMesh;
1794
+ private ringMesh;
1795
+ private progressMesh;
1796
+ private ringRotateMotion;
1797
+ private tapMotion;
1798
+ private progressMotion;
1799
+ private progressOpacityMotion;
1800
+ private opacityMotion;
1801
+ progress: number;
1802
+ opacity: number;
1803
+ current: boolean;
1804
+ loading: boolean;
1805
+ disabled: boolean;
1806
+ constructor();
1807
+ setProgress(progress: number): void;
1808
+ setOpacity(opacity: number): void;
1809
+ setCurrent(current: boolean): void;
1810
+ setLoading(loading: boolean): void;
1811
+ setDisabled(disabled: boolean): void;
1812
+ tap(): Promise<void>;
1813
+ setResolution(width: number, height: number): void;
1814
+ updateTime(time: number, deltaTime: number): void;
1815
+ dispose(): void;
1816
+ }
1817
+
1818
+ /**
1819
+ * 地面提示点位接口
1820
+ *
1821
+ * 点位状态
1822
+ * 1. 默认状态: 无任何操作的情况
1823
+ * 2. 高亮状态: 高亮,认为是合适的下一个点位,或者设备选中了某个点位
1824
+ * 3. 进度状态: 点位加载中,存在进度的情况
1825
+ * 4. 加载状态: 点位加载中,不存在进度的情况
1826
+ * 5. 不可用状态:点位不可用,存在点位,但是点位是个摆设
1827
+ * 6. 点击动画: 点位被选择,触发全景图切换
1828
+ * 7. 透明度改变: 一般会处理为近的点位透明度高,远的点位透明度低
1829
+ */
1830
+ export declare interface PanoCircleMeshInterface extends THREE_2.Object3D {
1831
+ needsRender: boolean;
1832
+ hitTestMesh?: THREE_2.Mesh;
1833
+ /** 当前高亮 */
1834
+ current: boolean;
1835
+ /** 是否当前高亮 */
1836
+ setCurrent(current: boolean): void;
1837
+ loading: boolean;
1838
+ setLoading(loading: boolean): void;
1839
+ disabled: boolean;
1840
+ setDisabled(disabled: boolean): void;
1841
+ progress: number;
1842
+ setProgress(progress: number): void;
1843
+ opacity: number;
1844
+ setOpacity(opacity: number): void;
1845
+ updateTime?(time: number, deltaTime: number): void;
1846
+ /** 点击交互 */
1847
+ tap?(): Promise<void>;
1848
+ dispose(): void;
1849
+ }
1850
+
1851
+ export declare class PanoCircleMeshSolid extends THREE_2.Object3D implements PanoCircleMeshInterface {
1852
+ needsRender: boolean;
1853
+ private loadingMesh;
1854
+ private disableMesh;
1855
+ private centerMesh;
1856
+ private progressMesh;
1857
+ private tapMotion;
1858
+ private progressMotion;
1859
+ private progressOpacityMotion;
1860
+ private opacityMotion;
1861
+ progress: number;
1862
+ opacity: number;
1863
+ current: boolean;
1864
+ loading: boolean;
1865
+ disabled: boolean;
1866
+ constructor();
1867
+ setProgress(progress: number): void;
1868
+ setOpacity(opacity: number): void;
1869
+ setCurrent(current: boolean): void;
1870
+ setLoading(loading: boolean): void;
1871
+ setDisabled(disabled: boolean): void;
1872
+ tap(): Promise<void>;
1873
+ setResolution(width: number, height: number): void;
1874
+ updateTime(time: number, deltaTime: number): void;
1875
+ dispose(): void;
1876
+ }
1877
+
1878
+ export declare interface PanoramaControllerCustomInitArgs extends PanoramaLikeControllerCustomInitArgs {
1879
+ /** 最远可移动观察点距离 */
1880
+ maxAccessibleDistance?: number;
1881
+ /**
1882
+ * 点击地面观察点标识的判定范围
1883
+ * @description
1884
+ * 如果在判定范围内则确定去到目标点,
1885
+ * 否则寻找点击位置方向最适合的点(可能会走到一个离相机更近的点)。
1886
+ */
1887
+ panoTapTriggerRadius?: number;
1888
+ /** 地面观察点标识自定义创建器 */
1889
+ panoCircleMeshCreator?: () => PanoCircleMeshInterface;
1890
+ /**
1891
+ * 全景瓦片登记
1892
+ * @param fov - 当前 fov
1893
+ * @param viewSize - 当前绘制区域大小
1894
+ * @returns 返回瓦片等级
1895
+ */
1896
+ tileLevelForFov?: false | ((fov: number, viewSize: THREE_2.Vector2) => number);
1897
+ }
1898
+
1899
+ export declare interface PanoramaLikeControllerCustomInitArgs {
1900
+ /** 默认相机偏航角 */
1901
+ defaultLongitude?: number;
1902
+ /** 默认相机俯仰角 */
1903
+ defaultLatitude?: number;
1904
+ /** 最大相机俯仰角 */
1905
+ maxLatitude?: number;
1906
+ /** 最小相机俯仰角 */
1907
+ minLatitude?: number;
1908
+ /** 默认相机可视角度(垂直),可作为 `zoom` */
1909
+ defaultFov?: number;
1910
+ /** 最大默认相机可视角度(垂直) */
1911
+ maxFov?: number;
1912
+ /** 最小默认相机可视角度(垂直) */
1913
+ minFov?: number;
1914
+ /**
1915
+ * 点位间移动动画速度 单位 m/s
1916
+ * @description
1917
+ * 这边设置的是速度,整体耗时会通过距离除速度计算得到
1918
+ */
1919
+ moveSpeed?: number;
1920
+ /** 鼠标焦点环自定义创建器 */
1921
+ intersectMeshCreator?: () => IntersectMeshInterface;
1922
+ }
1923
+
1924
+ /**
1925
+ * 解析 Work 数据
1926
+ * @param obj - work 数据,从如数开发者平台获取
1927
+ * @param options - 配置参数, 可以在此二次设置 baseURL 等参数
1928
+ * @param urlTransform - 配置参数, URL 解析规则
1929
+ * @returns - 签署过的 Work 数据结构
1930
+ */
1931
+ export declare function parseWork(obj: Work | LooseWork | string | any, options?: ParseWorkOptions, urlTransform?: (origin: string, absolute: string, relative: string, type: "panorama" | "texture" | "model") => void): Work;
1932
+
1933
+ export declare type ParseWorkOptions = {
1934
+ /** 重写 work 中的资源前缀 */
1935
+ baseURL?: string;
1936
+ /** work 中的资源地址使用短地址 */
1937
+ shortPath?: boolean;
1938
+ /** work 中的资源使用 jsonp 方式发布 */
1939
+ jsonp?: boolean;
1940
+ /** work 中模型是否计算bvh碰撞数,默认计算 true */
1941
+ modelBvh?: boolean;
1942
+ };
1943
+
1944
+ /** PBM 模型组 */
1945
+ export declare class PBMContainer extends THREE_2.Group {
1946
+ /** 是否需要更新按需渲染 */
1947
+ needsRender: boolean;
1948
+ private enableTransparent;
1949
+ /** 获取是否有透明参数 */
1950
+ getTransparent(): boolean;
1951
+ /** 设置透明参数 */
1952
+ setTransparent(bool: boolean): void;
1953
+ /** 获取材质参数 */
1954
+ getMaterial(): PBMParameters | null;
1955
+ /** 设置材质参数 */
1956
+ setMaterial(parameters: Partial<PBMParameters>): void;
1957
+ /** 析构材质 */
1958
+ disposeMaterial(): void;
1959
+ /** 析构模型网格 */
1960
+ disposeGeometry(): void;
1961
+ }
1962
+
1963
+ /** PBM 模型组 */
1964
+ export declare class PBMGroup extends PBMContainer {
1965
+ /** 楼层序号 */
1966
+ floorIndex: number;
1967
+ }
1968
+
1969
+ /** PBM 材质 */
1970
+ export declare class PBMMaterial extends THREE_2.ShaderMaterial implements PBMParameters {
1971
+ /** 起始点 */
1972
+ pano0: PBMPanoPicture | null;
1973
+ /** 结束点 */
1974
+ pano1: PBMPanoPicture | null;
1975
+ /** 模型贴图和全景图的混合程度 [0-1] */
1976
+ modelAlpha: number;
1977
+ /** 全景图混合程度 [0-1] */
1978
+ progress: number;
1979
+ /** 全景图通过过度黑色混合 */
1980
+ useBlackTransition: boolean;
1981
+ perspToOrtho: number;
1982
+ /** 模型透明度 */
1983
+ opacity: number;
1984
+ originOpacity: number;
1985
+ /** 楼层参数*/
1986
+ floorIndex: number;
1987
+ /** 楼层切割参数*/
1988
+ floorInfo: THREE_2.Vector3 | null;
1989
+ /** 对外模型裁切参数*/
1990
+ clippers: ClipperParameter | ClipperParameter[] | null;
1991
+ /** 对内模型裁切参数 裁切平面*/
1992
+ clipperPlanesArray: Float32Array | null;
1993
+ /** 对内模型裁切参数 裁切盒关联楼层*/
1994
+ clipperFloors: number[] | null;
1995
+ /** 模型颜色*/
1996
+ modelColorInfo: THREE_2.Vector3 | null;
1997
+ constructor(parameters?: Partial<PBMParameters>);
1998
+ }
1999
+
2000
+ /** PBM 对象 */
2001
+ export declare class PBMMesh extends THREE_2.Mesh<THREE_2.BufferGeometry, PBMMaterial[]> {
2002
+ /** 楼层序号 */
2003
+ floorIndex: number;
2004
+ /** 是否需要更新按需渲染 */
2005
+ needsRender: boolean;
2006
+ }
2007
+
2008
+ export declare interface PBMPanoPicture {
2009
+ /** 起始点位全景图 */
2010
+ map: THREE_2.CubeTexture | TileCubeTextureTarget;
2011
+ /** 亮度增益 */
2012
+ luminanceMap: null | THREE_2.CubeTexture | TileCubeTextureTarget;
2013
+ /** 起始点全景图变换矩阵 4x4 */
2014
+ matrix: THREE_2.Matrix4;
2015
+ }
2016
+
2017
+ /** PBM 材质参数 */
2018
+ export declare interface PBMParameters {
2019
+ /** 起始点 */
2020
+ pano0: PBMPanoPicture | null;
2021
+ /** 结束点 */
2022
+ pano1: PBMPanoPicture | null;
2023
+ /** 模型贴图和全景图的混合程度 [0-1] */
2024
+ modelAlpha: number;
2025
+ /** 全景图混合程度 [0-1] */
2026
+ progress: number;
2027
+ /** 全景图通过过度黑色混合 */
2028
+ useBlackTransition: boolean;
2029
+ perspToOrtho: number;
2030
+ /** 模型透明度 */
2031
+ opacity: number;
2032
+ /** 楼层参数*/
2033
+ floorIndex: number;
2034
+ /** 楼层切割参数*/
2035
+ floorInfo?: THREE_2.Vector3 | null;
2036
+ /** 模型裁切参数(工程侧调用)*/
2037
+ clippers?: ClipperParameter | ClipperParameter[] | null;
2038
+ /** 模型裁切平面参数(内部调用) */
2039
+ clipperPlanesArray?: Float32Array | null;
2040
+ /** 模型裁切平面参数(内部调用) */
2041
+ clipperFloors?: number[] | null;
2042
+ /** 模型颜色*/
2043
+ modelColorInfo?: THREE_2.Vector3 | null;
2044
+ }
2045
+
2046
+ /**
2047
+ * 相机位姿
2048
+ * [[include: coordinate.md]]
2049
+ */
2050
+ export declare interface Pose {
2051
+ /** 相机偏航角 */
2052
+ longitude: number;
2053
+ /** 相机俯仰角 */
2054
+ latitude: number;
2055
+ /** 相机可视角度(垂直)*/
2056
+ fov: number;
2057
+ /** 相机位置*/
2058
+ offset: THREE_2.Vector3;
2059
+ /** 相机距离 */
2060
+ distance: number;
2061
+ }
2062
+
2063
+ export declare const PROXY_CONTROLLER_EVENT_NAMES: readonly ["cameraDirectionUpdate", "cameraUpdate", "cameraPositionUpdate", "panoSelected", "moveToPano", "moveToPanoCanceled", "panoWillArrive", "movingToPano", "panoArrived", "panoWillLoad", "panoLoaded", "panoLoadError", "initAnimationEnded", "initAnimationWillStart", "wantsGesture", "gesture", "wantsTapGesture", "tapGesture", "wantsPressGesture", "pressGesture", "wantsPanGesture", "wantsInteriaPan", "panGesture", "interiaPan", "wantsPinchGesture", "pinchGesture", "wantsMouseWheel", "mouseWheel", "wantsShowIntersectionOnModel", "intersectionOnModelUpdate", "intersectionHidden", "textureStartLoad", "textureLoading", "textureAbort", "textureLoaded", "textureError", "webXRSessionStart", "webXRSessionEnd", "webXRSelected"];
2064
+
2065
+ /** Five 场景*/
2066
+ export declare class Scene extends THREE_2.Scene {
2067
+ add(...objects: AddableObject[]): this;
2068
+ remove(...objects: AddableObject[]): this;
2069
+ }
2070
+
2071
+ /**
2072
+ * 显示区域裁剪参数
2073
+ * @description
2074
+ * 可通过初始化,或者 setScissor 方式设置
2075
+ * `scissor` 是将屏幕中的内容渲染到 `renderer` 的指定区域。
2076
+ * 页面整体长宽均为 `1`。通过类似 css 的 `left` `bottom` `width` `height` 来确定区域。
2077
+ */
2078
+ export declare interface Scissor {
2079
+ /** 距离左侧 */
2080
+ left: number;
2081
+ /** 距离下侧 */
2082
+ bottom: number;
2083
+ /** 宽度 */
2084
+ width: number;
2085
+ /** 高度 */
2086
+ height: number;
2087
+ }
2088
+
2089
+ /**
2090
+ * 状态
2091
+ * @description
2092
+ * ```text
2093
+ * 可以通过 five.state 和 five.setState 来获取和设置。
2094
+ * 通过 state 设置后,five 会通过合适的动画运动来达到设置的位置。
2095
+ * 来迎合一些通过数据驱动的场景。
2096
+ * ```
2097
+ */
2098
+ export declare interface State extends Pose {
2099
+ /** 模态 */
2100
+ mode: Mode;
2101
+ /** 观察点序号 */
2102
+ panoIndex: number;
2103
+ }
2104
+
2105
+ /**
2106
+ * 监听者模式
2107
+ * @template T - 预设的监听回调类型
2108
+ * @example
2109
+ * ```
2110
+ * new Subscribe<{
2111
+ * "foo": [arg1: number, arg2: string],
2112
+ * "bar": [arg: boolean],
2113
+ * }>()
2114
+ * ```
2115
+ */
2116
+ export declare class Subscribe<T extends SubscribeEventMap> {
2117
+ /**
2118
+ * 判断是否注册了事件
2119
+ * @param name - 事件类型
2120
+ */
2121
+ hasListener(name: keyof T): boolean;
2122
+ /**
2123
+ * 注册事件
2124
+ * @param name - 事件类型
2125
+ * @param callback - 事件回调函数
2126
+ * @param once - 是否只执行一次
2127
+ * @returns 解除事件
2128
+ * @template K - 预设的监听事件名称
2129
+ * @template C - 回调函数函数上下文
2130
+ */
2131
+ on<K extends keyof T>(name: K, callback: (...args: Parameters<T[K]>) => ReturnType<T[K]>, once?: boolean): () => void;
2132
+ /**
2133
+ * 注册事件(是否只执行一次)
2134
+ * @param name - 事件类型
2135
+ * @param callback - 事件回调函数
2136
+ * @returns 解除事件
2137
+ * @template K - 预设的监听事件名称
2138
+ * @template C - 回调函数函数上下文
2139
+ */
2140
+ once<K extends keyof T>(name: K, callback: (...args: Parameters<T[K]>) => ReturnType<T[K]>): () => void;
2141
+ /**
2142
+ * 解除事件
2143
+ *
2144
+ * 如果 name 不传的话解除对应所有事件
2145
+ * 如果 name, callback 不传的话解除所有name的所有事件
2146
+ * @param name - 事件类型
2147
+ * @param callback - 事件回调函数
2148
+ * @template K - 预设的监听事件名称
2149
+ */
2150
+ off<K extends keyof T>(name?: K, callback?: (...args: Parameters<T[K]>) => ReturnType<T[K]>): void;
2151
+ /**
2152
+ * 触发事件
2153
+ * @param name - 事件类型
2154
+ * @param data - 触发事件的数据
2155
+ * @returns canceled 是否被触发取消
2156
+ * @template K - 预设的监听事件名称
2157
+ */
2158
+ emit<K extends keyof T>(name: K, ...data: Parameters<T[K]>): boolean;
2159
+ }
2160
+
2161
+ export declare type SubscribeEventMap = {
2162
+ [name: string]: (...args: any[]) => void | boolean;
2163
+ };
2164
+
2165
+ export declare namespace SubscribeMixinType {
2166
+ export interface hasListener<T extends SubscribeEventMap> {
2167
+ (name: keyof T): boolean;
2168
+ }
2169
+ export interface on<T extends SubscribeEventMap> {
2170
+ <K extends keyof T>(name: K, callback: (...args: Parameters<T[K]>) => ReturnType<T[K]>, once?: boolean): () => void;
2171
+ }
2172
+ export interface once<T extends SubscribeEventMap> {
2173
+ <K extends keyof T>(name: K, callback: (...args: Parameters<T[K]>) => ReturnType<T[K]>): () => void;
2174
+ }
2175
+ export interface off<T extends SubscribeEventMap> {
2176
+ <K extends keyof T>(names?: K | K[], callback?: (...args: any[]) => any): void;
2177
+ }
2178
+ export interface emit<T extends SubscribeEventMap> {
2179
+ <K extends keyof T>(name: K, ...data: Parameters<T[K]>): boolean;
2180
+ }
2181
+ }
2182
+
2183
+ export declare class TextureLoader {
2184
+ private timeout?;
2185
+ private allowHosts?;
2186
+ private requestProxy?;
2187
+ private networkSubscribe?;
2188
+ constructor(options: NetworkOptions);
2189
+ setAllowHosts(allowHosts: string[]): void;
2190
+ setRequestProxy(requestProxy: (url: string) => string): void;
2191
+ setNetworkSubscribe(networkSubscribe: NetworkSubscribe): void;
2192
+ loadTexture(source: string, options?: {
2193
+ imageURL?: {
2194
+ transform?: (source: string, options: ImageURLOptions) => string;
2195
+ options?: ImageURLOptions;
2196
+ };
2197
+ flipY?: boolean;
2198
+ format?: THREE_2.PixelFormat;
2199
+ minFilter?: THREE_2.TextureFilter;
2200
+ magFilter?: THREE_2.TextureFilter;
2201
+ wrapS?: THREE_2.Wrapping;
2202
+ wrapT?: THREE_2.Wrapping;
2203
+ maxSize?: THREE_2.Vector2;
2204
+ preInit?: boolean;
2205
+ viaAjax?: boolean;
2206
+ }, onLoad?: (response: NetworkResponse<THREE_2.Texture>) => void, onError?: (error: Error) => void, onProgress?: (percent: number) => void, renderer?: THREE_2.WebGLRenderer): Promise<NetworkResponse<THREE_2.Texture>>;
2207
+ loadCubeTexture(sources: WorkCubeImage, options: {
2208
+ imageURL?: {
2209
+ transform?: (source: string, options: ImageURLOptions) => string;
2210
+ options?: ImageURLOptions;
2211
+ };
2212
+ format?: THREE_2.PixelFormat;
2213
+ minFilter?: THREE_2.TextureFilter;
2214
+ magFilter?: THREE_2.TextureFilter;
2215
+ wrapS?: THREE_2.Wrapping;
2216
+ wrapT?: THREE_2.Wrapping;
2217
+ preInit?: boolean;
2218
+ viaAjax?: boolean;
2219
+ }, onLoad: (response: NetworkResponse<THREE_2.CubeTexture, NetWorkMeta[]>) => void, onError: (error: Error) => void, onProgress: (percent: number) => void, renderer: THREE_2.WebGLRenderer): Promise<NetworkResponse<THREE_2.CubeTexture, NetWorkMeta[]>>;
2220
+ loadTiledCubeTexture(sources: WorkCubeImage, tileSources: WorkTile[], options: {
2221
+ tileImageSize?: number;
2222
+ tileMaxLevel?: number;
2223
+ imageURL?: {
2224
+ transform?: (source: string, options: ImageURLOptions) => string;
2225
+ options?: ImageURLOptions;
2226
+ };
2227
+ format?: THREE_2.PixelFormat;
2228
+ minFilter?: THREE_2.TextureFilter;
2229
+ magFilter?: THREE_2.TextureFilter;
2230
+ wrapS?: THREE_2.Wrapping;
2231
+ wrapT?: THREE_2.Wrapping;
2232
+ viaAjax?: boolean;
2233
+ }, onLoad: (response: NetworkResponse<TileCubeTextureTarget, NetWorkMeta[]>) => void, onError: (error: Error) => void, onProgress: (percent: number) => void, renderer: THREE_2.WebGLRenderer): Promise<NetworkResponse<TileCubeTextureTarget, NetWorkMeta[]>>;
2234
+ }
2235
+
2236
+ /**
2237
+ * 图片参数
2238
+ */
2239
+ export declare interface TextureOptions {
2240
+ /**
2241
+ * url 地址转化
2242
+ * @param url - 原始地址
2243
+ * @param options - 当前地址参数
2244
+ * @returns 转化后地址
2245
+ */
2246
+ transform?: (url: string, options: ImageURLOptions) => string;
2247
+ /** 图片尺寸参数 尽量使用 2 的幂次 如 256 512 1024 */
2248
+ size?: number;
2249
+ /** 图片质量参数(0-100) */
2250
+ quality?: number;
2251
+ /** 图片格式参数 */
2252
+ format?: "jpg" | "png" | "heif" | "webp" | "avif";
2253
+ /** 针对 textureOptions 是否自动通过模型贴图的数量计算需要的模型贴图的尺寸 默认 true */
2254
+ autoResize?: boolean;
2255
+ /** 锐化参数 海外不支持 */
2256
+ sharpen?: number;
2257
+ mappings?: ImageURLMappings;
2258
+ }
2259
+
2260
+ /**
2261
+ * A Tile3DHeader represents a tile as Tileset3D. When a tile is first created, its content is not loaded;
2262
+ * the content is loaded on-demand when needed based on the view.
2263
+ * Do not construct this directly, instead access tiles through {@link Tileset3D#tileVisible}.
2264
+ */
2265
+ export declare class Tile3D {
2266
+ cacheNode?: TileCacheNode<Tile3D>;
2267
+ tileset: Tileset3D;
2268
+ header: TilesetJSONNode;
2269
+ content?: TileContent;
2270
+ parent?: Tile3D;
2271
+ boundingVolume: TileOrientedBoundingBox;
2272
+ contentState: "UNLOADED" | "LOADING" | "PROCESSING" | "READY" | "FAILED";
2273
+ children: Tile3D[];
2274
+ depth: number;
2275
+ selectionDepth: number;
2276
+ transform: Matrix4;
2277
+ computedTransform: Matrix4;
2278
+ frameNumber: number;
2279
+ touchedFrameNumber: number;
2280
+ requestedFrameNumber: number;
2281
+ selectedFrameNumber: number;
2282
+ distanceToCamera: number;
2283
+ centerZDepth: number;
2284
+ screenSpaceError: number;
2285
+ visibilityPlaneMask: number;
2286
+ visible: boolean;
2287
+ shouldRefine: boolean;
2288
+ /**
2289
+ * @constructs
2290
+ * Create a TileHeader instance
2291
+ * @param tileset - Tileset3D instance
2292
+ * @param header - tile header - JSON loaded from a dataset
2293
+ * @param parentHeader - parent TileHeader instance
2294
+ */
2295
+ constructor(tileset: Tileset3D, header: TilesetJSONNode, parentHeader?: Tile3D);
2296
+ get id(): string;
2297
+ get refine(): "REPLACE" | "ADD";
2298
+ get type(): "EMPTY" | "SCENEGRAPH" | "MESH";
2299
+ get contentUrl(): string;
2300
+ get lodMetricType(): "geometricError";
2301
+ get lodMetricValue(): number;
2302
+ get hasEmptyContent(): boolean;
2303
+ get selected(): boolean;
2304
+ /** Returns true if tile is not an empty tile and not an external tileset */
2305
+ get hasRenderContent(): boolean;
2306
+ /** Returns true if tile has children */
2307
+ get hasChildren(): boolean;
2308
+ /**
2309
+ * Determines if the tile's content is ready. This is automatically `true` for
2310
+ * tiles with empty content.
2311
+ */
2312
+ get contentReady(): boolean;
2313
+ /**
2314
+ * Determines if the tile has available content to render. `true` if the tile's
2315
+ * content is ready or if it has expired content this renders while new content loads; otherwise,
2316
+ */
2317
+ get contentAvailable(): boolean;
2318
+ /** Returns true if tile has renderable content but it's unloaded */
2319
+ get hasUnloadedContent(): boolean;
2320
+ /**
2321
+ * Determines if the tile's content has not be requested. `true` if tile's
2322
+ * content has not be requested; otherwise, `false`.
2323
+ */
2324
+ get contentUnloaded(): boolean;
2325
+ get contentFailed(): boolean;
2326
+ /** Get the tile's screen space error. */
2327
+ getScreenSpaceError(frameState: TileFrameState, useParentLodMetric: boolean): number;
2328
+ private getPriority;
2329
+ /**
2330
+ * Requests the tile's content.
2331
+ * The request may not be made if the Request Scheduler can't prioritize it.
2332
+ */
2333
+ loadContent(): Promise<boolean>;
2334
+ unloadContent(): void;
2335
+ /**
2336
+ * Update the tile's visibility
2337
+ */
2338
+ updateVisibility(frameState: TileFrameState): void;
2339
+ private visibility;
2340
+ /**
2341
+ * Computes the (potentially approximate) distance from the closest point of the tile's bounding volume to the camera.
2342
+ * @param frameState - The frame state.
2343
+ * @returns The distance, in meters, or zero if the camera is inside the bounding volume.
2344
+ */
2345
+ private distanceToTile;
2346
+ private updateTransform;
2347
+ }
2348
+
2349
+ export declare class Tile3DModel extends PBMContainer {
2350
+ tileset?: Tileset3D;
2351
+ private options;
2352
+ private nodeGroup;
2353
+ private boundingGroup;
2354
+ private nodes;
2355
+ private boundings;
2356
+ private unloadTileQueue;
2357
+ private timer;
2358
+ private clock;
2359
+ private lastCameraTransform;
2360
+ private lastCameraAspect;
2361
+ private lastCameraFov;
2362
+ private sseDenominator;
2363
+ private lastCamera;
2364
+ private lastRenderer;
2365
+ private enabled;
2366
+ constructor(loaderOptions?: Partial<Tile3DModelLoaderOptions>);
2367
+ get enable(): boolean;
2368
+ set enable(value: boolean);
2369
+ load(url: WorkModelTiles): void;
2370
+ update(renderer: THREE_2.WebGLRenderer, camera: THREE_2.PerspectiveCamera): void;
2371
+ private tilesetUpdate;
2372
+ reset(): void;
2373
+ }
2374
+
2375
+ /** Advanced loader options */
2376
+ export declare interface Tile3DModelLoaderOptions {
2377
+ updateInterval: number;
2378
+ maxMemoryUsage: number;
2379
+ maxScreenSpaceError: number;
2380
+ viewDistanceScale: number;
2381
+ throttleRequests: boolean;
2382
+ maxRequests: number;
2383
+ onNodeCreated: (node: PBMGroup) => void;
2384
+ allowHosts?: string[];
2385
+ requestProxy?: (url: string) => string | Promise<string>;
2386
+ networkSubscribe?: NetworkSubscribe;
2387
+ maxDepth?: number;
2388
+ }
2389
+
2390
+ export declare class TileBoundingSphere {
2391
+ center: Vector3;
2392
+ radius: number;
2393
+ constructor(center?: number[], radius?: number);
2394
+ fromCenterRadius(center: number[], radius: number): this;
2395
+ fromCornerPoints(corner: number[], oppositeCorner: number[]): this;
2396
+ equals(right: TileBoundingSphere): boolean;
2397
+ clone(): TileBoundingSphere;
2398
+ union(boundingSphere: TileBoundingSphere): TileBoundingSphere;
2399
+ expand(point: number[]): this;
2400
+ transform(transform: Matrix4): this;
2401
+ distanceSquaredTo(point: number[]): number;
2402
+ distanceTo(point: number[]): number;
2403
+ intersectPlane(plane: TilePlane): 0 | 1 | -1;
2404
+ }
2405
+
2406
+ export declare interface TileBoundingVolume {
2407
+ /**
2408
+ * Applies a 4x4 affine transformation matrix to a bounding sphere.
2409
+ * @param sphere - The bounding sphere to apply the transformation to.
2410
+ * @param transform - The transformation matrix to apply to the bounding sphere.
2411
+ * @returns itself, i.e. the modified BoundingVolume.
2412
+ */
2413
+ transform(transform: readonly number[]): this;
2414
+ /** Computes the estimated distance squared from the closest point on a bounding sphere to a point. */
2415
+ distanceSquaredTo(point: readonly number[]): number;
2416
+ /** Computes the estimated distance from the closest point on a bounding sphere to a point. */
2417
+ distanceTo(point: readonly number[]): number;
2418
+ /**
2419
+ * Determines which side of a plane the oriented bounding box is located.
2420
+ *
2421
+ * @param plane - The plane to test against.
2422
+ * @returns
2423
+ * - `INTERSECTION.INSIDE` if the entire box is on the side of the plane the normal is pointing.
2424
+ * - `INTERSECTION.OUTSIDE` if the entire box is on the opposite side.
2425
+ * - `INTERSECTION.INTERSECTING` if the box intersects the plane.
2426
+ */
2427
+ intersectPlane(plane: TilePlane): number;
2428
+ }
2429
+
2430
+ export declare class TileCacheNode<T> {
2431
+ item: T;
2432
+ previous: TileCacheNode<T> | null;
2433
+ next: TileCacheNode<T> | null;
2434
+ constructor(item: T, previous: TileCacheNode<T> | null, next: TileCacheNode<T> | null);
2435
+ }
2436
+
2437
+ export declare interface TileContent {
2438
+ version: 1;
2439
+ magic: number;
2440
+ byteLength: number;
2441
+ header: {
2442
+ featureTableJsonByteLength: number;
2443
+ featureTableBinaryByteLength: number;
2444
+ batchTableJsonByteLength: number;
2445
+ batchTableBinaryByteLength: number;
2446
+ batchLength: number;
2447
+ };
2448
+ featureTableJson: Record<string, any>;
2449
+ featureTableBinary: Uint8Array;
2450
+ batchTableJson: Record<string, any>;
2451
+ batchTableBinary: Uint8Array;
2452
+ rotateYtoZ: boolean;
2453
+ gltfUpAxis: "X" | "Y" | "Z";
2454
+ gltfArrayBuffer: ArrayBuffer;
2455
+ gltfByteOffset: number;
2456
+ gltfByteLength: number;
2457
+ rtcCenter?: Float32Array;
2458
+ }
2459
+
2460
+ export declare interface TileCubeNode {
2461
+ level: number;
2462
+ face: "up" | "down" | "left" | "right" | "front" | "back";
2463
+ position: THREE_2.Vector2;
2464
+ size: number;
2465
+ box: THREE_2.Box3;
2466
+ children: TileCubeNode[];
2467
+ }
2468
+
2469
+ export declare class TileCubeTextureTarget {
2470
+ private tileTree;
2471
+ private tileSources;
2472
+ private options;
2473
+ private renderer;
2474
+ name: string;
2475
+ needsRender: boolean;
2476
+ private disposed;
2477
+ private loadedCubeNodes;
2478
+ private loadingCubeNodes;
2479
+ private baseCubeTexture;
2480
+ private _cubeRenderTarget;
2481
+ private textures;
2482
+ constructor(baseCubeTexture: THREE_2.CubeTexture, tileTree: TileCubeTree, tileSources: WorkTile[], options: {
2483
+ textureSize: number;
2484
+ tileImageSize: number;
2485
+ textureLoader: TextureLoader;
2486
+ imageURL?: {
2487
+ transform?: (source: string, options: ImageURLOptions) => string;
2488
+ options?: ImageURLOptions;
2489
+ };
2490
+ format?: THREE_2.PixelFormat;
2491
+ minFilter?: THREE_2.TextureFilter;
2492
+ magFilter?: THREE_2.TextureFilter;
2493
+ wrapS?: THREE_2.Wrapping;
2494
+ wrapT?: THREE_2.Wrapping;
2495
+ }, renderer: THREE_2.WebGLRenderer);
2496
+ get cubeRenderTarget(): THREE_2.WebGLCubeRenderTarget | null;
2497
+ set cubeRenderTarget(cubeRenderTarget: THREE_2.WebGLCubeRenderTarget | null);
2498
+ private requestTile;
2499
+ update(frustum: THREE_2.Frustum, level: number): void;
2500
+ get tilePending(): number;
2501
+ get texture(): THREE_2.Texture;
2502
+ dispose(): void;
2503
+ }
2504
+
2505
+ export declare interface TileCubeTree {
2506
+ children: TileCubeNode[];
2507
+ }
2508
+
2509
+ export declare class TileCullingVolume {
2510
+ static get MASK_OUTSIDE(): number;
2511
+ static get MASK_INSIDE(): number;
2512
+ static get MASK_INDETERMINATE(): number;
2513
+ planes: TilePlane[];
2514
+ constructor(planes?: TilePlane[]);
2515
+ fromBoundingSphere(boundingSphere: {
2516
+ center: Vector3;
2517
+ radius: number;
2518
+ }): this;
2519
+ computeVisibilityWithPlaneMask(boundingVolume: TileBoundingVolume, parentPlaneMask: number): number;
2520
+ }
2521
+
2522
+ export declare type TileFrameState = {
2523
+ camera: {
2524
+ position: number[];
2525
+ direction: number[];
2526
+ up: number[];
2527
+ };
2528
+ height: number;
2529
+ cullingVolume: TileCullingVolume;
2530
+ frameNumber: number;
2531
+ sseDenominator: number;
2532
+ };
2533
+
2534
+ export declare class TileOrientedBoundingBox {
2535
+ center: Vector3;
2536
+ halfAxes: Matrix3;
2537
+ constructor(center?: number[], halfAxes?: number[]);
2538
+ get halfSize(): number[];
2539
+ get quaternion(): Quaternion;
2540
+ fromCenterHalfSizeQuaternion(center: number[], halfSize: number[], quaternion: number[]): this;
2541
+ clone(): TileOrientedBoundingBox;
2542
+ equals(right: TileOrientedBoundingBox): boolean;
2543
+ getBoundingSphere(result?: TileBoundingSphere): TileBoundingSphere;
2544
+ intersectPlane(plane: TilePlane): 0 | 1 | -1;
2545
+ distanceTo(point: number[]): number;
2546
+ distanceSquaredTo(point: number[]): number;
2547
+ computePlaneDistances(position: Vector3, direction: Vector3, result?: number[]): number[];
2548
+ transform(transformation: number[]): this;
2549
+ }
2550
+
2551
+ export declare class TilePlane {
2552
+ normal: Vector3;
2553
+ distance: number;
2554
+ constructor(normal?: number[], distance?: number);
2555
+ fromNormalDistance(normal: number[], distance: number): this;
2556
+ fromPointNormal(point: number[], normal: number[]): this;
2557
+ fromCoefficients(a: number, b: number, c: number, d: number): this;
2558
+ clone(): TilePlane;
2559
+ equals(right: TilePlane): boolean;
2560
+ getPointDistance(point: number[]): number;
2561
+ transform(matrix4: Matrix4): this;
2562
+ projectPointOntoPlane(point: number[], result?: number[]): Vector3;
2563
+ }
2564
+
2565
+ /** Tracks one request */
2566
+ export declare type TileRequest<Identiy> = {
2567
+ identiy: Identiy;
2568
+ priority: number;
2569
+ getPriority: (identiy: Identiy) => number;
2570
+ resolve: (requestResult: TileRequestResult) => void;
2571
+ };
2572
+
2573
+ export declare type TileRequestResult = null | {
2574
+ done: () => void;
2575
+ };
2576
+
2577
+ /**
2578
+ * Used to issue a request, without having them "deeply queued" by the browser.
2579
+ * @todo - Track requests globally, across multiple servers
2580
+ */
2581
+ export declare class TileRequestScheduler<Identiy> {
2582
+ private props;
2583
+ private activeRequestCount;
2584
+ /** Tracks the number of active requests and prioritizes/cancels queued requests. */
2585
+ private requestQueue;
2586
+ private requestMap;
2587
+ private deferred;
2588
+ constructor(props?: TileRequestSchedulerOptions);
2589
+ /**
2590
+ * Called by an application that wants to issue a request, without having it deeply queued by the browser
2591
+ *
2592
+ * When the returned promise resolved, it is OK for the application to issue a request.
2593
+ * The promise resolves to an object that contains a `done` method.
2594
+ * When the application's request has completed (or failed), the application must call the `done` function
2595
+ *
2596
+ * @param identiy - Identiy
2597
+ * @param getPriority - will be called when request "slots" open up, allowing the caller to update priority or cancel the request Highest priority executes first, priority less than 0 cancels the request
2598
+ * @returns a promise resolves to a object (with a `done` field) when the request can be issued without queueing, resolves to `null` if the request has been cancelled (by the callback return less than 0). In this case the application should not issue the request
2599
+ */
2600
+ scheduleRequest(identiy: Identiy, getPriority?: (identiy: Identiy) => number): Promise<TileRequestResult>;
2601
+ private issueRequest;
2602
+ /** We check requests asynchronously, to prevent multiple updates */
2603
+ private issueNewRequests;
2604
+ /** Refresh all requests */
2605
+ private issueNewRequestsAsync;
2606
+ /** Ensure all requests have updated priorities, and that no longer valid requests are cancelled */
2607
+ private updateAllRequests;
2608
+ /** Update a single request by calling the callback */
2609
+ private updateRequest;
2610
+ }
2611
+
2612
+ /** RequestScheduler Options */
2613
+ export declare type TileRequestSchedulerOptions = {
2614
+ throttleRequests?: boolean;
2615
+ maxRequests?: number;
2616
+ };
2617
+
2618
+ export declare class Tileset3D {
2619
+ rawJson: any;
2620
+ options: Tileset3dOptions;
2621
+ root: Tile3D;
2622
+ traverser: Tileset3DTraverser;
2623
+ cache: TilesetCache;
2624
+ requestScheduler: TileRequestScheduler<string>;
2625
+ selectedTiles: Tile3D[];
2626
+ requestedTiles: Tile3D[];
2627
+ memoryUsageInBytes: number;
2628
+ frameNumber: number;
2629
+ private _tiles;
2630
+ private pendingCount;
2631
+ b3dmMapping: TilesetJSON['b3dmMapping'];
2632
+ /**
2633
+ * Create a new Tileset3D
2634
+ * @param json - TilesetJSON
2635
+ * @param options - Tileset3dOptions
2636
+ */
2637
+ constructor(json: TilesetJSON, options: Tileset3dOptions);
2638
+ get maxMemoryUsage(): number;
2639
+ get asset(): any;
2640
+ get type(): any;
2641
+ get basePath(): any;
2642
+ get modelMatrix(): Matrix4;
2643
+ get geometricError(): number;
2644
+ get lodMetricType(): number;
2645
+ get lodMetricValue(): number;
2646
+ get refine(): 'ADD' | "REPLACE";
2647
+ get tiles(): Tile3D[];
2648
+ get floorInfo(): TilesetJSON['floorInfo'];
2649
+ /** Release resources */
2650
+ reset(): void;
2651
+ /** Is the tileset loaded (update needs to have been called at least once) */
2652
+ isLoaded(): boolean;
2653
+ /**
2654
+ * The callback to post-process tiles after traversal procedure
2655
+ * @param frameState - frame state for tile culling
2656
+ */
2657
+ private onTraversalEnd;
2658
+ loadTile(tile: Tile3D): void;
2659
+ unloadTile(tile: Tile3D): void;
2660
+ }
2661
+
2662
+ export declare interface Tileset3dOptions {
2663
+ throttleRequests: boolean;
2664
+ maxRequests: number;
2665
+ maxMemoryUsage: number;
2666
+ modelMatrix: Matrix4;
2667
+ maxScreenSpaceError: number;
2668
+ viewDistanceScale: number;
2669
+ onTileLoad: (tile: Tile3D) => any;
2670
+ onTileUnload: (tile: Tile3D) => any;
2671
+ onTileError: (tile: Tile3D, message: string) => any;
2672
+ contentLoader: (tile: Tile3D) => Promise<void>;
2673
+ onTraversalComplete: (selectedTiles: Tile3D[]) => Tile3D[];
2674
+ allowHosts?: string[];
2675
+ requestProxy?: (url: string) => string | Promise<string>;
2676
+ networkSubscribe?: NetworkSubscribe;
2677
+ maxDepth?: number;
2678
+ }
2679
+
2680
+ export declare class Tileset3DTraverser {
2681
+ root: Tile3D | null;
2682
+ options: TilesetTraverserProps;
2683
+ requestedTiles: Record<string, Tile3D>;
2684
+ selectedTiles: Record<string, Tile3D>;
2685
+ emptyTiles: Record<string, Tile3D>;
2686
+ private _traversalStack;
2687
+ private _emptyTraversalStack;
2688
+ private _frameNumber;
2689
+ constructor(options: TilesetTraverserProps);
2690
+ traverse(root: Tile3D, frameState: TileFrameState): void;
2691
+ reset(): void;
2692
+ private executeTraversal;
2693
+ private updateChildTiles;
2694
+ private updateAndPushChildren;
2695
+ updateTile(tile: Tile3D, frameState: TileFrameState): void;
2696
+ selectTile(tile: Tile3D, frameState: TileFrameState): void;
2697
+ loadTile(tile: Tile3D, frameState: TileFrameState): void;
2698
+ touchTile(tile: Tile3D, frameState: TileFrameState): void;
2699
+ private canTraverse;
2700
+ private shouldLoadTile;
2701
+ private shouldSelectTile;
2702
+ private shouldRefine;
2703
+ private updateTileVisibility;
2704
+ private meetsScreenSpaceErrorEarly;
2705
+ private compareDistanceToCamera;
2706
+ private anyChildrenVisible;
2707
+ private everyChildrenVisibleIsLoaded;
2708
+ private executeEmptyTraversal;
2709
+ }
2710
+
2711
+ export declare class TilesetCache {
2712
+ private list;
2713
+ private sentinel;
2714
+ constructor();
2715
+ reset(): void;
2716
+ touch(tile: Tile3D): void;
2717
+ add(tile: Tile3D, addCallback?: (tile: Tile3D) => void): void;
2718
+ unloadTile(tile: Tile3D, unloadCallback?: (tile: Tile3D) => void): void;
2719
+ unloadTiles(isOverMemory: () => boolean, unloadCallback?: (tile: Tile3D) => void): void;
2720
+ }
2721
+
2722
+ export declare interface TilesetJSON {
2723
+ asset: {
2724
+ gltfUpAxis: "X" | "Y" | "Z";
2725
+ version: "1.0";
2726
+ };
2727
+ basePath: string;
2728
+ lodMetricType: "geometricError";
2729
+ geometricError: number;
2730
+ lodMetricValue: number;
2731
+ root: TilesetJSONNode;
2732
+ type: "TILES3D";
2733
+ floorInfo: {
2734
+ ground: number;
2735
+ height: number;
2736
+ }[];
2737
+ b3dmMapping: {
2738
+ b3dm_base_url: string;
2739
+ b3dm_url: Record<string, string>;
2740
+ };
2741
+ }
2742
+
2743
+ export declare interface TilesetJSONNode {
2744
+ boundingVolume: {
2745
+ box: number[];
2746
+ };
2747
+ content: {
2748
+ uri: string;
2749
+ };
2750
+ id: string;
2751
+ transform?: number[];
2752
+ contentUrl?: string;
2753
+ children: TilesetJSONNode[];
2754
+ lodMetricType: "geometricError";
2755
+ geometricError: number;
2756
+ lodMetricValue: number;
2757
+ refine: "REPLACE" | "ADD";
2758
+ type: "EMPTY" | "SCENEGRAPH" | "MESH";
2759
+ }
2760
+
2761
+ export declare type TilesetTraverserProps = {
2762
+ loadSiblings: boolean;
2763
+ skipLevelOfDetail: boolean;
2764
+ maxScreenSpaceError: number;
2765
+ maxDepth?: number;
2766
+ onTraversalEnd: (frameState: TileFrameState) => any;
2767
+ };
2768
+
2769
+ export declare interface TopviewControllerCustomInitArgs extends Omit<FloorplanControllerCustomInitArgs, "defaultLongitude" | "defaultLatitude" | "maxLatitude" | "minLatitude"> {
2770
+ }
2771
+
2772
+ export declare interface VRPanoramaControllerCustomInitArgs extends Omit<PanoramaControllerCustomInitArgs, "maxLatitude" | "minLatitude"> {
2773
+ }
2774
+
2775
+ export declare type WebXREventTypes = {
2776
+ /** WebXR模式开始,session完成坐标系设置*/
2777
+ webXRSessionStart(): void;
2778
+ /** WebXR模式结束,销毁session*/
2779
+ webXRSessionEnd(): void;
2780
+ };
2781
+
2782
+ export declare type WebXRSelectType = "Select" | "Squeeze";
2783
+
2784
+ export declare class Work {
2785
+ /** 名称 */
2786
+ name: string;
2787
+ /** 编号 */
2788
+ workCode: string;
2789
+ /** 允许访问的安全域名 */
2790
+ allowHosts: string[];
2791
+ /** 过期时间 */
2792
+ expire: Date;
2793
+ /** 初始化参数 */
2794
+ initial: WorkInitial;
2795
+ /** 模型参数 */
2796
+ model?: WorkModel;
2797
+ /** 全景点位信息 */
2798
+ observers: WorkObserver[];
2799
+ /** 数据签发人 */
2800
+ issuer: string;
2801
+ /** 原始数据 */
2802
+ raw: {
2803
+ works: string[];
2804
+ options: string;
2805
+ };
2806
+ /**
2807
+ * 解析 Work 数据
2808
+ * @param obj - work 数据,从如数开发者平台获取
2809
+ * @param options - 配置参数, 可以在此二次设置 baseURL 等参数
2810
+ * @param urlTransform - 配置参数, URL 解析规则
2811
+ * @returns - 签署过的 Work 数据结构
2812
+ */
2813
+ static parse: typeof parseWork;
2814
+ constructor();
2815
+ toJSON(): any;
2816
+ }
2817
+
2818
+ export declare interface WorkCubeImage {
2819
+ /** 全景图 up */
2820
+ up: string;
2821
+ /** 全景图 down */
2822
+ down: string;
2823
+ /** 全景图 right */
2824
+ right: string;
2825
+ /** 全景图 left */
2826
+ left: string;
2827
+ /** 全景图 front */
2828
+ front: string;
2829
+ /** 全景图 back */
2830
+ back: string;
2831
+ }
2832
+
2833
+ /** 全景图 */
2834
+ export declare interface WorkImage extends WorkCubeImage {
2835
+ /** 深度图 */
2836
+ depth?: string;
2837
+ /** 光照强度图 */
2838
+ luminance?: WorkCubeImage;
2839
+ /** 瓦片信息 */
2840
+ tiles?: WorkTile[];
2841
+ }
2842
+
2843
+ /** 初始化位姿参数 */
2844
+ export declare interface WorkInitial extends Omit<State, "offset" | "distance"> {
2845
+ }
2846
+
2847
+ /** 模型数据 */
2848
+ export declare interface WorkModel {
2849
+ /** 模型文件地址 at3d / domez */
2850
+ file: string;
2851
+ /** 模型贴图文件地址 */
2852
+ textures: string[];
2853
+ /** 模型贴图文件地址的父目录 */
2854
+ textureBase: string;
2855
+ /** 是否开启 bvh 碰撞树,开启会大大加快射线碰撞的执行效率 */
2856
+ bvh: boolean;
2857
+ tiles?: WorkModelTiles;
2858
+ }
2859
+
2860
+ /** 模型瓦片 */
2861
+ export declare interface WorkModelTiles {
2862
+ tileset_url: string;
2863
+ tileset_url_md5: string;
2864
+ b3md_mappings_url: string;
2865
+ b3md_mappings_url_md5: string;
2866
+ }
2867
+
2868
+ /** 每个点位的数据 */
2869
+ export declare interface WorkObserver {
2870
+ /** 点位序号 */
2871
+ panoIndex: number;
2872
+ /** 点位是否激活可用 */
2873
+ active: boolean;
2874
+ /** 点位是否可加载 */
2875
+ loadable: boolean;
2876
+ /** 点位全景图 */
2877
+ images: WorkImage;
2878
+ /** 点位视频 */
2879
+ video?: WorkVideo;
2880
+ /** 可以看到的相关点位序号 */
2881
+ visibleNodes: number[];
2882
+ /** 可以连通的相关点位序号 */
2883
+ accessibleNodes: number[];
2884
+ /** 点位和模型的旋转对齐关系四元数 */
2885
+ quaternion: THREE_2.Quaternion;
2886
+ /** 点位和模型的地面位置坐标关系 */
2887
+ standingPosition: THREE_2.Vector3;
2888
+ /** 点位和模型的观察点坐标关系 */
2889
+ position: THREE_2.Vector3;
2890
+ /** 点位所在楼层 */
2891
+ floorIndex: number;
2892
+ }
2893
+
2894
+ export declare interface WorkTile {
2895
+ level: number;
2896
+ size: number;
2897
+ up: string;
2898
+ down: string;
2899
+ right: string;
2900
+ left: string;
2901
+ front: string;
2902
+ back: string;
2903
+ }
2904
+
2905
+ /** 全景视频贴片 */
2906
+ export declare interface WorkVideo {
2907
+ /** 视频源 url */
2908
+ source: string;
2909
+ /** 视频源变化矩阵 */
2910
+ matrix: THREE_2.Matrix4;
2911
+ /** 视频源长宽尺寸 */
2912
+ size: THREE_2.Vector2;
2913
+ }
2914
+
2915
+ export declare class XRButton {
2916
+ static createButton(onClickHook: () => void): HTMLAnchorElement | HTMLButtonElement;
2917
+ }
2918
+
2919
+ export declare interface XRPanoramaControllerCustomInitArgs extends Omit<PanoramaControllerCustomInitArgs, "maxLatitude" | "minLatitude"> {
2920
+ }
2921
+
2922
+ export { }