@realsee/five-webgpu 1.0.0-alpha.5 → 1.0.0-alpha.6

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 (304) hide show
  1. package/ai_guides/api.md +9 -8
  2. package/ai_guides/features/camera-animation.md +1 -1
  3. package/ai_guides/features/event.md +0 -1
  4. package/ai_guides/features/five.md +8 -8
  5. package/ai_guides/features/gesture.md +1 -1
  6. package/ai_guides/features/load-external-model.md +6 -6
  7. package/ai_guides/features/load-progress.md +2 -2
  8. package/ai_guides/features/mode.md +3 -23
  9. package/ai_guides/features/model.md +1 -1
  10. package/ai_guides/features/state.md +2 -2
  11. package/ai_guides/features/ultra-hdr.md +41 -32
  12. package/ai_guides/quick-start.md +2 -2
  13. package/ai_guides/release_notes/6.8.md +2 -2
  14. package/ai_guides/support.md +0 -4
  15. package/docs/assets/hierarchy.js +1 -1
  16. package/docs/assets/navigation.js +1 -1
  17. package/docs/assets/search.js +1 -1
  18. package/docs/classes/index.AdaptiveLuminancePass.html +1 -1
  19. package/docs/classes/index.BoundingMesh.html +1 -1
  20. package/docs/classes/index.EffectComposer.html +1 -1
  21. package/docs/classes/index.EyeDomeLightingPass.html +1 -1
  22. package/docs/classes/index.Five.html +68 -67
  23. package/docs/classes/index.FivePass.html +1 -1
  24. package/docs/classes/index.FlowingFireworks3DPass.html +1 -1
  25. package/docs/classes/index.FlowingLight2DPass.html +1 -1
  26. package/docs/classes/index.FlowingLight3DPass.html +1 -1
  27. package/docs/classes/index.GaussianBlurPass.html +1 -1
  28. package/docs/classes/index.InternalWebGPURenderer.html +4 -4
  29. package/docs/classes/index.Model.html +1 -1
  30. package/docs/classes/index.ModelScene.html +1 -1
  31. package/docs/classes/index.NetworkSubscribe.html +1 -1
  32. package/docs/classes/index.PBMCustomNode.html +8 -8
  33. package/docs/classes/index.PBMGaussianSplattingNodeMaterial.html +8 -6
  34. package/docs/classes/index.PBMGaussianSplattingObject.html +10 -4
  35. package/docs/classes/index.PBMGaussianSplattingRenderMesh.html +26 -15
  36. package/docs/classes/index.PBMGroup.html +1 -1
  37. package/docs/classes/index.PBMMesh.html +1 -1
  38. package/docs/classes/index.PBMMeshBasicMaterial.html +11 -7
  39. package/docs/classes/index.PBMMeshBasicNodeMaterial.html +11 -7
  40. package/docs/classes/index.PBMMeshPanoOnlyMaterial.html +11 -7
  41. package/docs/classes/index.PBMMeshPanoOnlyNodeMaterial.html +11 -7
  42. package/docs/classes/index.PBMMeshPhongMaterial.html +11 -7
  43. package/docs/classes/index.PBMMeshPhongNodeMaterial.html +11 -7
  44. package/docs/classes/index.PBMMeshPhysicalMaterial.html +11 -7
  45. package/docs/classes/index.PBMMeshPhysicalNodeMaterial.html +11 -7
  46. package/docs/classes/index.PBMPanoFilter.html +8 -8
  47. package/docs/classes/index.PBMPointCloud.html +1 -1
  48. package/docs/classes/index.PBMSkinnedMesh.html +1 -1
  49. package/docs/classes/index.PBMUpdateable.html +1 -1
  50. package/docs/classes/index.PanoCircleMesh.html +1 -1
  51. package/docs/classes/index.PanoCircleMeshCustom.html +5 -5
  52. package/docs/classes/index.PanoCircleMeshSolid.html +1 -1
  53. package/docs/classes/index.Parameter.html +1 -1
  54. package/docs/classes/index.Subscribe.html +1 -1
  55. package/docs/classes/index.TextureLoader.html +4 -1
  56. package/docs/classes/index.Tile3D.html +23 -21
  57. package/docs/classes/index.TileNode.html +1 -1
  58. package/docs/classes/index.Tileset.html +4 -4
  59. package/docs/classes/index.TrajectoryNode.html +3 -3
  60. package/docs/classes/index.Work.html +20 -18
  61. package/docs/classes/index.WorkResolvedObserver.html +22 -22
  62. package/docs/documents/api.html +11 -10
  63. package/docs/documents/features_camera-animation.html +1 -1
  64. package/docs/documents/features_event.html +0 -1
  65. package/docs/documents/features_five.html +7 -7
  66. package/docs/documents/features_gesture.html +1 -1
  67. package/docs/documents/features_load-external-model.html +6 -6
  68. package/docs/documents/features_load-progress.html +1 -1
  69. package/docs/documents/features_mode.html +5 -15
  70. package/docs/documents/features_model.html +1 -1
  71. package/docs/documents/features_state.html +1 -1
  72. package/docs/documents/features_ultra-hdr.html +50 -44
  73. package/docs/documents/quick-start.html +1 -1
  74. package/docs/documents/release_notes_6.8.html +2 -2
  75. package/docs/documents/support.html +1 -3
  76. package/docs/functions/index.customNodesCacheKey.html +1 -1
  77. package/docs/functions/index.parseWork.html +1 -1
  78. package/docs/functions/index.workToJson.html +1 -1
  79. package/docs/hierarchy.html +1 -1
  80. package/docs/interfaces/index.AddableObject.html +1 -1
  81. package/docs/interfaces/index.AjaxOptions.html +1 -1
  82. package/docs/interfaces/index.BaseEvent.html +2 -2
  83. package/docs/interfaces/index.Clock.html +24 -0
  84. package/docs/interfaces/index.EventCallback.html +49 -47
  85. package/docs/interfaces/index.FiveInitArgs.html +49 -40
  86. package/docs/interfaces/index.GainmapCfgData.html +15 -0
  87. package/docs/interfaces/index.GestureEvent.html +2 -2
  88. package/docs/interfaces/index.IPBMMaterial.html +10 -6
  89. package/docs/interfaces/index.ImageOptions.html +1 -1
  90. package/docs/interfaces/index.IntersectEvent.html +2 -2
  91. package/docs/interfaces/index.IntersectMesh.html +1 -1
  92. package/docs/interfaces/index.IntersectMeshInterface.html +1 -1
  93. package/docs/interfaces/index.Intersection.html +1 -1
  94. package/docs/interfaces/index.LoosePanoWork.html +2 -2
  95. package/docs/interfaces/index.LooseWork.html +2 -2
  96. package/docs/interfaces/index.LooseWorkInitial.html +2 -2
  97. package/docs/interfaces/index.LooseWorkModel.html +2 -2
  98. package/docs/interfaces/index.LooseWorkObserver.html +2 -2
  99. package/docs/interfaces/index.LooseWorkPanorama.html +4 -3
  100. package/docs/interfaces/index.LooseWorkWithExtrinsics.html +15 -9
  101. package/docs/interfaces/index.ModeChangeEvent.html +2 -2
  102. package/docs/interfaces/index.ModelControllerCustomInitArgs.html +1 -1
  103. package/docs/interfaces/index.ModelEvent.html +2 -2
  104. package/docs/interfaces/index.ModelSceneEvent.html +2 -2
  105. package/docs/interfaces/index.ModelTileEvent.html +2 -2
  106. package/docs/interfaces/index.MovePanoOptions.html +1 -1
  107. package/docs/interfaces/index.NetworkAbortError.html +1 -1
  108. package/docs/interfaces/index.NetworkFirbiddenError.html +1 -1
  109. package/docs/interfaces/index.NetworkOptions.html +1 -1
  110. package/docs/interfaces/index.NetworkProxyError.html +1 -1
  111. package/docs/interfaces/index.NetworkResourceEvent.html +2 -2
  112. package/docs/interfaces/index.NetworkResponseError.html +1 -1
  113. package/docs/interfaces/index.NetworkTimeoutError.html +1 -1
  114. package/docs/interfaces/index.ObjectEvent.html +2 -2
  115. package/docs/interfaces/index.PBMClipperParameter.html +2 -2
  116. package/docs/interfaces/index.PBMCustomNodeContext.html +60 -12
  117. package/docs/interfaces/index.PBMCustomNodeOptions.html +4 -4
  118. package/docs/interfaces/index.PBMCustomNodePanoContext.html +12 -5
  119. package/docs/interfaces/index.PBMCustomNodeSlots.html +6 -6
  120. package/docs/interfaces/index.PBMPanoDepth.html +5 -5
  121. package/docs/interfaces/index.PBMPanoFilterValue.html +2 -2
  122. package/docs/interfaces/index.PBMPanoGainmap.html +6 -0
  123. package/docs/interfaces/index.PBMPanoPicture.html +9 -8
  124. package/docs/interfaces/index.PBMRefinedScreen.html +2 -2
  125. package/docs/interfaces/index.PanoCircleMeshCustomOptions.html +2 -2
  126. package/docs/interfaces/index.PanoCircleMeshInterface.html +1 -1
  127. package/docs/interfaces/index.PanoEvent.html +2 -2
  128. package/docs/interfaces/index.PanoTextureEvent.html +2 -2
  129. package/docs/interfaces/index.PanoramaControllerCustomInitArgs.html +9 -9
  130. package/docs/interfaces/index.PanoramaLikeControllerCustomInitArgs.html +1 -1
  131. package/docs/interfaces/index.ParameterMaterialValue.html +1 -1
  132. package/docs/interfaces/index.ParameterTilesetValue.html +1 -1
  133. package/docs/interfaces/index.ParameterValue.html +1 -1
  134. package/docs/interfaces/index.Pose.html +1 -1
  135. package/docs/interfaces/index.RenderEvent.html +2 -2
  136. package/docs/interfaces/index.ResolvedParameterValue.html +1 -1
  137. package/docs/interfaces/index.State.html +1 -1
  138. package/docs/interfaces/index.StateEvent.html +2 -2
  139. package/docs/interfaces/index.TextureOptions.html +1 -1
  140. package/docs/interfaces/index.TilesetOptions.html +7 -2
  141. package/docs/interfaces/index.TopviewControllerCustomInitArgs.html +1 -1
  142. package/docs/interfaces/index.VRPanoramaControllerCustomInitArgs.html +37 -0
  143. package/docs/interfaces/index.ViewLayer.html +23 -21
  144. package/docs/interfaces/index.WorkCubeHdrGainmapImage.html +10 -0
  145. package/docs/interfaces/index.WorkCubeImage.html +5 -9
  146. package/docs/interfaces/index.WorkImage.html +8 -12
  147. package/docs/interfaces/index.WorkInitial.html +8 -8
  148. package/docs/interfaces/index.WorkModel.html +8 -8
  149. package/docs/interfaces/index.WorkModelLayer.html +6 -6
  150. package/docs/interfaces/index.WorkObserver.html +23 -23
  151. package/docs/interfaces/index.WorkPanoramaJson.html +3 -2
  152. package/docs/interfaces/index.WorkTile.html +8 -12
  153. package/docs/interfaces/index.WorksEvent.html +2 -2
  154. package/docs/interfaces/index.XRControllerEvent.html +2 -2
  155. package/docs/interfaces/index.XRGestureEvent.html +2 -2
  156. package/docs/interfaces/index.XRSessionEvent.html +2 -2
  157. package/docs/modules/index.html +1 -1
  158. package/docs/types/index.ControllerCustomInitTypes.html +3 -2
  159. package/docs/types/index.ControllerEventTypes.html +25 -23
  160. package/docs/types/index.EventTypes.html +26 -26
  161. package/docs/types/index.Mode.html +2 -1
  162. package/docs/types/index.ParseOptions.html +14 -8
  163. package/docs/variables/index.GSPLAT_PIPELINE_AUTO.html +2 -0
  164. package/docs/variables/index.GSPLAT_PIPELINE_RASTER_CPU_SORT.html +2 -0
  165. package/docs/variables/index.GSPLAT_PIPELINE_RASTER_GPU_SORT.html +2 -0
  166. package/docs/variables/index.PROXY_CONTROLLER_EVENT_NAMES.html +1 -1
  167. package/docs/variables/index.controllersDefaultInitArgs.html +1 -1
  168. package/five/application/controllers.d.ts +4 -0
  169. package/five/application/events.d.ts +1 -1
  170. package/five/application/five.d.ts +4 -1
  171. package/five/application/fiveInitArgs.d.ts +13 -0
  172. package/five/application/mode.d.ts +2 -0
  173. package/five/cardboard/helper.d.ts +2 -0
  174. package/five/cardboard/index.d.ts +13 -0
  175. package/five/cardboard/sensor.d.ts +158 -0
  176. package/five/controllers/base.d.ts +3 -0
  177. package/five/controllers/events.d.ts +5 -3
  178. package/five/controllers/panorama.d.ts +2 -2
  179. package/five/controllers/vrPanorama.d.ts +56 -0
  180. package/five/core/panoVideo.d.ts +4 -1
  181. package/five/core/tiling.d.ts +25 -11
  182. package/five/gaussian-splatting/gpu-sort/prefixSumKernel.d.ts +65 -0
  183. package/five/gaussian-splatting/gpu-sort/radixSortModule.d.ts +128 -0
  184. package/five/gaussian-splatting/gpu-sort/shaders/prefixSum.d.ts +2 -0
  185. package/five/gaussian-splatting/gpu-sort/shaders/radixHistogram.d.ts +2 -0
  186. package/five/gaussian-splatting/gpu-sort/shaders/radixReorder.d.ts +2 -0
  187. package/five/gaussian-splatting/gpu-sort/shaders/sortKeygen.d.ts +2 -0
  188. package/five/gaussian-splatting/gpu-sort/sortAdapter.d.ts +234 -0
  189. package/five/gaussian-splatting/pipelines/cpuSortPipeline.d.ts +159 -0
  190. package/five/gaussian-splatting/pipelines/gpuSortPipeline.d.ts +98 -0
  191. package/five/gaussian-splatting/pipelines/gsplatPipeline.d.ts +104 -0
  192. package/five/gaussian-splatting/pipelines/pipelineMode.d.ts +42 -0
  193. package/five/gaussian-splatting/pipelines/sortThrottle.d.ts +45 -0
  194. package/five/index.d.ts +4 -1
  195. package/five/index.js +272 -269
  196. package/five/index.mjs +6979 -4610
  197. package/five/meshes/panoCircleMeshCustom.d.ts +1 -0
  198. package/five/model/index.d.ts +1 -1
  199. package/five/model/materials/pbmGaussianSplattingNodeMaterial.d.ts +4 -0
  200. package/five/model/materials/pbmMaterial.d.ts +113 -18
  201. package/five/model/materials/tsl/defines.d.ts +6 -1
  202. package/five/model/materials/tsl/outputBuilder.d.ts +1 -12
  203. package/five/model/materials/tsl/panoColor.d.ts +8 -2
  204. package/five/model/materials/tsl/utils.d.ts +13 -0
  205. package/five/model/objects/pbmGaussianSplattingObject.d.ts +9 -0
  206. package/five/model/objects/pbmGaussianSplattingRenderMesh.d.ts +67 -101
  207. package/five/model/tile3d/index.d.ts +2 -0
  208. package/five/model/tile3d/tileset.d.ts +5 -0
  209. package/five/model/tile3d/trajectory-content.d.ts +53 -0
  210. package/five/texture/loader.d.ts +6 -0
  211. package/five/types/cube.d.ts +0 -1
  212. package/five/utils/detector.d.ts +11 -1
  213. package/five/utils/error.d.ts +1 -0
  214. package/five/utils/event.d.ts +17 -1
  215. package/five/utils/gainmap-data.d.ts +23 -0
  216. package/five/work/index.d.ts +1 -1
  217. package/five/work/looseWorkType.d.ts +2 -1
  218. package/five/work/work.d.ts +30 -7
  219. package/five/work/workJsonType.d.ts +2 -1
  220. package/gltf-loader/gltf-object.d.ts +17 -0
  221. package/gltf-loader/index.d.ts +45 -0
  222. package/gltf-loader/index.js +255 -0
  223. package/gltf-loader/index.mjs +302 -0
  224. package/package.json +6 -1
  225. package/plugins/BackgroundPlugin/Controller.d.ts +20 -0
  226. package/plugins/BackgroundPlugin/index.d.ts +5 -0
  227. package/plugins/BackgroundPlugin/typings.d.ts +44 -0
  228. package/plugins/CSS2DPlugin/Controller.d.ts +59 -0
  229. package/plugins/CSS2DPlugin/index.d.ts +5 -0
  230. package/plugins/CSS2DPlugin/typing.d.ts +31 -0
  231. package/plugins/CSS3DPlugin/Controller.d.ts +64 -0
  232. package/plugins/CSS3DPlugin/index.d.ts +5 -0
  233. package/plugins/CSS3DPlugin/typing.d.ts +33 -0
  234. package/plugins/FloorplanPlugin/Controller.d.ts +100 -0
  235. package/plugins/FloorplanPlugin/index.d.ts +5 -0
  236. package/plugins/FloorplanPlugin/render/assets.d.ts +9 -0
  237. package/plugins/FloorplanPlugin/render/index.d.ts +35 -0
  238. package/plugins/FloorplanPlugin/render/isPointInPolygon.d.ts +5 -0
  239. package/plugins/FloorplanPlugin/render/renderFloor.d.ts +22 -0
  240. package/plugins/FloorplanPlugin/render/roomLabelVisibility.d.ts +10 -0
  241. package/plugins/FloorplanPlugin/typing.d.ts +156 -0
  242. package/plugins/FloorplanPlugin/typings/floorplanData.d.ts +112 -0
  243. package/plugins/FloorplanPlugin/typings/floorplanServerData.d.ts +78 -0
  244. package/plugins/FloorplanPlugin/typings/index.d.ts +2 -0
  245. package/plugins/FloorplanPlugin/utils/changeMode.d.ts +5 -0
  246. package/plugins/FloorplanPlugin/utils/changeModelCanvasOpacity.d.ts +6 -0
  247. package/plugins/FloorplanPlugin/utils/correctFiveState.d.ts +11 -0
  248. package/plugins/FloorplanPlugin/utils/equal.d.ts +9 -0
  249. package/plugins/FloorplanPlugin/utils/filter.d.ts +8 -0
  250. package/plugins/FloorplanPlugin/utils/fiveModelLoad.d.ts +6 -0
  251. package/plugins/FloorplanPlugin/utils/formatData.d.ts +6 -0
  252. package/plugins/FloorplanPlugin/utils/formatPosition.d.ts +33 -0
  253. package/plugins/FloorplanPlugin/utils/getDistanceFromModel.d.ts +6 -0
  254. package/plugins/FloorplanPlugin/utils/getPxmm.d.ts +19 -0
  255. package/plugins/FloorplanPlugin/utils/isTruelyObject.d.ts +4 -0
  256. package/plugins/FloorplanPlugin/utils/nearlyEqual.d.ts +8 -0
  257. package/plugins/FloorplanPlugin/utils/to.d.ts +5 -0
  258. package/plugins/Object3DHelperPlugin/Controller.d.ts +99 -0
  259. package/plugins/Object3DHelperPlugin/Controllers/BaseController.d.ts +142 -0
  260. package/plugins/Object3DHelperPlugin/Controllers/BoundingBoxController.d.ts +16 -0
  261. package/plugins/Object3DHelperPlugin/Controllers/MoveController.d.ts +66 -0
  262. package/plugins/Object3DHelperPlugin/Controllers/RotateController.d.ts +61 -0
  263. package/plugins/Object3DHelperPlugin/FiveControllerWrapper.d.ts +17 -0
  264. package/plugins/Object3DHelperPlugin/Helper/BaseHelper.d.ts +97 -0
  265. package/plugins/Object3DHelperPlugin/Helper/BoundingBoxHelper.d.ts +16 -0
  266. package/plugins/Object3DHelperPlugin/Helper/MoveHelper.d.ts +37 -0
  267. package/plugins/Object3DHelperPlugin/Helper/RotateHelper.d.ts +93 -0
  268. package/plugins/Object3DHelperPlugin/constant.d.ts +27 -0
  269. package/plugins/Object3DHelperPlugin/index.d.ts +6 -0
  270. package/plugins/Object3DHelperPlugin/typing.d.ts +143 -0
  271. package/plugins/Object3DHelperPlugin/utils/ArrowGroup.d.ts +22 -0
  272. package/plugins/Object3DHelperPlugin/utils/CenterHandle.d.ts +23 -0
  273. package/plugins/Object3DHelperPlugin/utils/PlaneHandle.d.ts +19 -0
  274. package/plugins/Object3DHelperPlugin/utils/calculateScaleByCamera.d.ts +5 -0
  275. package/plugins/Object3DHelperPlugin/utils/cameraHooks.d.ts +3 -0
  276. package/plugins/Object3DHelperPlugin/utils/direction.d.ts +14 -0
  277. package/plugins/Object3DHelperPlugin/utils/getMouseRaycaster.d.ts +5 -0
  278. package/plugins/Object3DHelperPlugin/utils/getOrthographicCameraDirection.d.ts +8 -0
  279. package/plugins/Object3DHelperPlugin/utils/setObjectQuaternion.d.ts +8 -0
  280. package/plugins/Object3DHelperPlugin/utils/solidGuide.d.ts +27 -0
  281. package/plugins/Object3DHelperPlugin/utils/tipsDom.d.ts +8 -0
  282. package/plugins/PanoAnimePlugin/Controller.d.ts +49 -0
  283. package/plugins/PanoAnimePlugin/index.d.ts +5 -0
  284. package/plugins/PanoAnimePlugin/typing.d.ts +37 -0
  285. package/plugins/index.d.ts +6 -0
  286. package/plugins/index.js +393 -3
  287. package/plugins/index.mjs +3421 -92
  288. package/plugins/thirdParty/CSS2DRenderer.d.ts +37 -0
  289. package/plugins/thirdParty/CSS3DRenderer.d.ts +45 -0
  290. package/plugins/thirdParty/OrbitControls.d.ts +78 -0
  291. package/plugins/thirdParty/domevents.d.ts +36 -0
  292. package/plugins/utils/clamp.d.ts +2 -0
  293. package/plugins/utils/uuid.d.ts +2 -0
  294. package/react/index.js +2 -2
  295. package/react/index.mjs +2 -2
  296. package/umd/five-gltf-loader.js +255 -0
  297. package/umd/five-plugins.js +461 -3
  298. package/umd/five-react.js +2 -2
  299. package/umd/five.js +350 -347
  300. package/docs/interfaces/index.PBMHDRConfig.html +0 -12
  301. package/five/gaussian-splatting/worker/dataWorker.d.ts +0 -1
  302. package/five/three-version-check.d.ts +0 -1
  303. package/five/utils/hdr-data.d.ts +0 -13
  304. package/five/utils/shaderContentFix.d.ts +0 -7
@@ -12,7 +12,7 @@
12
12
  <p><strong>Definition</strong>: <a href="../../five/application/fiveInitArgs.d.ts">FiveInitArgs</a></p>
13
13
  </blockquote>
14
14
  <p><code>new Five(args)</code> 的初始化参数对象。</p>
15
- <pre><code class="typescript"><span class="hl-3">interface</span><span class="hl-1"> </span><span class="hl-7">FiveInitArgs</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-8">/** 外部传入的渲染器 (如果传入,部分渲染配置将失效) */</span><br/><span class="hl-1"> </span><span class="hl-6">renderer</span><span class="hl-1">?: </span><span class="hl-7">THREE</span><span class="hl-1">.</span><span class="hl-7">WebGLRenderer</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/**</span><br/><span class="hl-8"> * 屏幕渲染区域 { left, bottom, width, height }</span><br/><span class="hl-8"> * 必须配合外部 renderer 使用</span><br/><span class="hl-8"> */</span><br/><span class="hl-1"> </span><span class="hl-6">viewport</span><span class="hl-1">?: </span><span class="hl-7">Viewport</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/** 背景颜色 (默认 0x181A1C) */</span><br/><span class="hl-1"> </span><span class="hl-6">backgroundColor</span><span class="hl-1">?: </span><span class="hl-7">number</span><span class="hl-1"> | </span><span class="hl-7">THREE</span><span class="hl-1">.</span><span class="hl-7">Color</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/** 背景透明度 (0-1, 默认 1) */</span><br/><span class="hl-1"> </span><span class="hl-6">backgroundAlpha</span><span class="hl-1">?: </span><span class="hl-7">number</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/** 是否开启抗锯齿 (默认 false) */</span><br/><span class="hl-1"> </span><span class="hl-6">antialias</span><span class="hl-1">?: </span><span class="hl-7">boolean</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/** 全景图配置 (见 image-options.md) */</span><br/><span class="hl-1"> </span><span class="hl-6">imageOptions</span><span class="hl-1">?: </span><span class="hl-7">ImageOptions</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/** 贴图配置 (见 image-options.md) */</span><br/><span class="hl-1"> </span><span class="hl-6">textureOptions</span><span class="hl-1">?: </span><span class="hl-7">TextureOptions</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/** 是否按需渲染 (默认 true, 推荐开启以节省性能) */</span><br/><span class="hl-1"> </span><span class="hl-6">onlyRenderIfNeeds</span><span class="hl-1">?: </span><span class="hl-7">boolean</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/** 模式切换动画时长 (ms, 默认 1000) */</span><br/><span class="hl-1"> </span><span class="hl-6">modeChangeDuration</span><span class="hl-1">?: </span><span class="hl-7">number</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/** 是否支持滚轮缩放 (默认 true) */</span><br/><span class="hl-1"> </span><span class="hl-6">enableWheel</span><span class="hl-1">?: </span><span class="hl-7">boolean</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/** 插件列表 */</span><br/><span class="hl-1"> </span><span class="hl-6">plugins</span><span class="hl-1">?: </span><span class="hl-7">FivePlugin</span><span class="hl-1">[];</span><br/><span class="hl-1"> </span><span class="hl-8">/** 是否显示 Powered by Realsee */</span><br/><span class="hl-1"> </span><span class="hl-6">poweredByRealsee</span><span class="hl-1">?: </span><span class="hl-7">boolean</span><span class="hl-1">;</span><br/><span class="hl-1">}</span>
15
+ <pre><code class="typescript"><span class="hl-3">interface</span><span class="hl-1"> </span><span class="hl-7">FiveInitArgs</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-8">/** 外部传入的渲染器 (如果传入,部分渲染配置将失效) */</span><br/><span class="hl-1"> </span><span class="hl-6">renderer</span><span class="hl-1">?: </span><span class="hl-7">THREE</span><span class="hl-1">.</span><span class="hl-7">WebGPURenderer</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/**</span><br/><span class="hl-8"> * 屏幕渲染区域 { left, bottom, width, height }</span><br/><span class="hl-8"> * 必须配合外部 renderer 使用</span><br/><span class="hl-8"> */</span><br/><span class="hl-1"> </span><span class="hl-6">viewport</span><span class="hl-1">?: </span><span class="hl-7">Viewport</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/** 背景颜色 (默认 0x181A1C) */</span><br/><span class="hl-1"> </span><span class="hl-6">backgroundColor</span><span class="hl-1">?: </span><span class="hl-7">number</span><span class="hl-1"> | </span><span class="hl-7">THREE</span><span class="hl-1">.</span><span class="hl-7">Color</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/** 背景透明度 (0-1, 默认 1) */</span><br/><span class="hl-1"> </span><span class="hl-6">backgroundAlpha</span><span class="hl-1">?: </span><span class="hl-7">number</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/** 是否开启抗锯齿 (默认 false) */</span><br/><span class="hl-1"> </span><span class="hl-6">antialias</span><span class="hl-1">?: </span><span class="hl-7">boolean</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/** 全景图配置 (见 image-options.md) */</span><br/><span class="hl-1"> </span><span class="hl-6">imageOptions</span><span class="hl-1">?: </span><span class="hl-7">ImageOptions</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/** 贴图配置 (见 image-options.md) */</span><br/><span class="hl-1"> </span><span class="hl-6">textureOptions</span><span class="hl-1">?: </span><span class="hl-7">TextureOptions</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/** 是否按需渲染 (默认 true, 推荐开启以节省性能) */</span><br/><span class="hl-1"> </span><span class="hl-6">onlyRenderIfNeeds</span><span class="hl-1">?: </span><span class="hl-7">boolean</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/** 模式切换动画时长 (ms, 默认 800) */</span><br/><span class="hl-1"> </span><span class="hl-6">modeChangeDuration</span><span class="hl-1">?: </span><span class="hl-7">number</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/** 是否支持滚轮缩放 (默认 true) */</span><br/><span class="hl-1"> </span><span class="hl-6">enableWheel</span><span class="hl-1">?: </span><span class="hl-7">boolean</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">/** 插件列表 */</span><br/><span class="hl-1"> </span><span class="hl-6">plugins</span><span class="hl-1">?: </span><span class="hl-7">FivePlugin</span><span class="hl-1">[];</span><br/><span class="hl-1"> </span><span class="hl-8">/** 是否显示 Powered by Realsee */</span><br/><span class="hl-1"> </span><span class="hl-6">poweredByRealsee</span><span class="hl-1">?: </span><span class="hl-7">boolean</span><span class="hl-1">;</span><br/><span class="hl-1">}</span>
16
16
  </code><button type="button">Copy</button></pre>
17
17
 
18
18
  <h2 id="concepts" class="tsd-anchor-link">Concepts<a href="#concepts" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
@@ -25,7 +25,7 @@
25
25
  <h3 id="rendering-loop-渲染循环" class="tsd-anchor-link">Rendering Loop (渲染循环)<a href="#rendering-loop-渲染循环" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
26
26
  <p>Five 内部维护了一个 <code>requestAnimationFrame</code> 循环。</p>
27
27
  <ul>
28
- <li><strong>按需渲染</strong>: 默认开启 <code>onlyRenderIfNeeds</code>,仅在画面发生变化(如视角移动、数据加载)时才触发 WebGL 绘制,大幅降低能耗。</li>
28
+ <li><strong>按需渲染</strong>: 默认开启 <code>onlyRenderIfNeeds</code>,仅在画面发生变化(如视角移动、数据加载)时才触发渲染,大幅降低能耗。</li>
29
29
  <li><strong>手动触发</strong>: 可以通过 <code>five.needsRender = true</code> 强制下一帧进行渲染。</li>
30
30
  </ul>
31
31
  <h3 id="resource-loading-资源加载" class="tsd-anchor-link">Resource Loading (资源加载)<a href="#resource-loading-资源加载" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
@@ -72,7 +72,7 @@
72
72
  <tr>
73
73
  <td style="text-align:left"><code>modeChangeDuration</code></td>
74
74
  <td style="text-align:left"><code>number</code></td>
75
- <td style="text-align:left"><code>1000</code></td>
75
+ <td style="text-align:left"><code>800</code></td>
76
76
  <td style="text-align:left">模式切换动画时长 (ms)</td>
77
77
  </tr>
78
78
  <tr>
@@ -91,7 +91,7 @@
91
91
 
92
92
  <h3 id="进阶用法:自定义渲染器与视口" class="tsd-anchor-link">进阶用法:自定义渲染器与视口<a href="#进阶用法:自定义渲染器与视口" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
93
93
  <p>使用外部渲染器并指定视口区域(例如用于分屏渲染)。</p>
94
- <pre><code class="typescript"><span class="hl-10">import</span><span class="hl-1"> </span><span class="hl-3">*</span><span class="hl-1"> </span><span class="hl-10">as</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1"> </span><span class="hl-10">from</span><span class="hl-1"> </span><span class="hl-9">&quot;three/webgpu&quot;</span><span class="hl-1">;</span><br/><span class="hl-10">import</span><span class="hl-1"> { </span><span class="hl-6">Five</span><span class="hl-1"> } </span><span class="hl-10">from</span><span class="hl-1"> </span><span class="hl-9">&quot;@realsee/five-webgpu&quot;</span><span class="hl-1">;</span><br/><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">renderer</span><span class="hl-1"> = </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">WebGLRenderer</span><span class="hl-1">();</span><br/><span class="hl-6">renderer</span><span class="hl-1">.</span><span class="hl-5">setSize</span><span class="hl-1">(</span><span class="hl-6">window</span><span class="hl-1">.</span><span class="hl-6">innerWidth</span><span class="hl-1">, </span><span class="hl-6">window</span><span class="hl-1">.</span><span class="hl-6">innerHeight</span><span class="hl-1">);</span><br/><span class="hl-6">document</span><span class="hl-1">.</span><span class="hl-6">body</span><span class="hl-1">.</span><span class="hl-5">appendChild</span><span class="hl-1">(</span><span class="hl-6">renderer</span><span class="hl-1">.</span><span class="hl-6">domElement</span><span class="hl-1">);</span><br/><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">five</span><span class="hl-1"> = </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-5">Five</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-6">renderer:</span><span class="hl-1"> </span><span class="hl-6">renderer</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">viewport:</span><span class="hl-1"> { </span><span class="hl-6">left:</span><span class="hl-1"> </span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-6">bottom:</span><span class="hl-1"> </span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-6">width:</span><span class="hl-1"> </span><span class="hl-11">0.5</span><span class="hl-1">, </span><span class="hl-6">height:</span><span class="hl-1"> </span><span class="hl-11">1</span><span class="hl-1"> } </span><span class="hl-8">// 仅占用左半屏</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">load</span><span class="hl-1">(</span><span class="hl-6">workData</span><span class="hl-1">);</span>
94
+ <pre><code class="typescript"><span class="hl-10">import</span><span class="hl-1"> </span><span class="hl-3">*</span><span class="hl-1"> </span><span class="hl-10">as</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1"> </span><span class="hl-10">from</span><span class="hl-1"> </span><span class="hl-9">&quot;three/webgpu&quot;</span><span class="hl-1">;</span><br/><span class="hl-10">import</span><span class="hl-1"> { </span><span class="hl-6">Five</span><span class="hl-1"> } </span><span class="hl-10">from</span><span class="hl-1"> </span><span class="hl-9">&quot;@realsee/five-webgpu&quot;</span><span class="hl-1">;</span><br/><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">renderer</span><span class="hl-1"> = </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">WebGPURenderer</span><span class="hl-1">();</span><br/><span class="hl-6">renderer</span><span class="hl-1">.</span><span class="hl-5">setSize</span><span class="hl-1">(</span><span class="hl-6">window</span><span class="hl-1">.</span><span class="hl-6">innerWidth</span><span class="hl-1">, </span><span class="hl-6">window</span><span class="hl-1">.</span><span class="hl-6">innerHeight</span><span class="hl-1">);</span><br/><span class="hl-6">document</span><span class="hl-1">.</span><span class="hl-6">body</span><span class="hl-1">.</span><span class="hl-5">appendChild</span><span class="hl-1">(</span><span class="hl-6">renderer</span><span class="hl-1">.</span><span class="hl-6">domElement</span><span class="hl-1">);</span><br/><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">five</span><span class="hl-1"> = </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-5">Five</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-6">renderer:</span><span class="hl-1"> </span><span class="hl-6">renderer</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">viewport:</span><span class="hl-1"> { </span><span class="hl-6">left:</span><span class="hl-1"> </span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-6">bottom:</span><span class="hl-1"> </span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-6">width:</span><span class="hl-1"> </span><span class="hl-11">0.5</span><span class="hl-1">, </span><span class="hl-6">height:</span><span class="hl-1"> </span><span class="hl-11">1</span><span class="hl-1"> } </span><span class="hl-8">// 仅占用左半屏</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">load</span><span class="hl-1">(</span><span class="hl-6">workData</span><span class="hl-1">);</span>
95
95
  </code><button type="button">Copy</button></pre>
96
96
 
97
97
  <h3 id="进阶用法:自定义相机动画" class="tsd-anchor-link">进阶用法:自定义相机动画<a href="#进阶用法:自定义相机动画" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
@@ -109,8 +109,8 @@
109
109
  <h3 id="实例方法-instance-methods" class="tsd-anchor-link">实例方法 (Instance Methods)<a href="#实例方法-instance-methods" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
110
110
  <ul>
111
111
  <li><strong><code>appendTo(element: HTMLElement)</code></strong>: 将 canvas 挂载到指定 DOM 元素。</li>
112
- <li><strong><code>load(work: Work, state?: State, duration?: number)</code></strong>: 加载场景数据。详见 <a href="features_work.html">work.md</a>。</li>
113
- <li><strong><code>dispose()</code></strong>: 销毁实例,释放 WebGL 上下文与内存。</li>
112
+ <li><strong><code>load(inputWork, state?: &quot;inherit&quot; | &quot;initial&quot; | Partial&lt;State&gt;, options?: number | FiveLoadOptions, userAction?: boolean)</code></strong>: 加载场景数据。详见 <a href="features_work.html">work.md</a>。</li>
113
+ <li><strong><code>dispose()</code></strong>: 销毁实例并释放相关渲染资源。</li>
114
114
  <li><strong><code>updateCamera(pose: Partial&lt;Pose&gt;, duration: number, userAction?: boolean)</code></strong>: 移动相机(不触发点位移动)。移动相机的视角或位置,不会改变当前所在的 PanoIndex。如果动画中途被打断,Promise 会被 reject。</li>
115
115
  <li><strong><code>updateCameraWithKeyframes(keyframes: { progress: number; value: Pose; key?: string }[], duration: number, userAction?: boolean)</code></strong>: 通过关键帧动画移动相机。</li>
116
116
  <li><strong><code>refresh()</code></strong>: 强制刷新画布尺寸。通常在窗口 resize 时调用,Five 会自动监听 resize,但在某些布局变化场景下可能需要手动调用。</li>
@@ -127,7 +127,7 @@
127
127
  </li>
128
128
  </ul>
129
129
  </li>
130
- <li><strong><code>setState(state: Partial&lt;State&gt;, options?: ChangeStateOptions)</code></strong>: 变更当前状态(如点位、视角)。详见 <a href="features_state.html">state.md</a>。</li>
130
+ <li><strong><code>setState(state: Partial&lt;State&gt;, immediately?: boolean, userAction?: boolean)</code></strong>: 变更当前状态(如点位、视角)。详见 <a href="features_state.html">state.md</a>。</li>
131
131
  <li><strong><code>on(event, callback)</code> / <code>off(event, callback)</code></strong>: 事件监听。详见 <a href="features_event.html">event.md</a>。</li>
132
132
  </ul>
133
133
  <h2 id="related" class="tsd-anchor-link">Related<a href="#related" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
@@ -16,7 +16,7 @@
16
16
  <h2 id="concepts" class="tsd-anchor-link">Concepts<a href="#concepts" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
17
17
  <p>Five 的手势系统基于 Hammer.js 封装,主要包含以下几种手势:</p>
18
18
  <ul>
19
- <li><strong>gesture.create</strong>: 所有事件创建时。</li>
19
+ <li><strong>gesture.fire</strong>: 任意事件被触发。</li>
20
20
  <li><strong>gesture.pan</strong>: 拖拽/平移。</li>
21
21
  <li><strong>gesture.pinch</strong>: 双指缩放。</li>
22
22
  <li><strong>gesture.tap</strong>: 点击。</li>
@@ -11,23 +11,23 @@
11
11
  <p><strong>Definition</strong>: <a href="../../five/model/loaders/shared.d.ts">LoadResultType</a></p>
12
12
  </blockquote>
13
13
  <p>所有加载函数均返回 <code>Promise&lt;LoadResultType&gt;</code>。</p>
14
- <pre><code class="typescript"><span class="hl-8">// 通用返回类型</span><br/><span class="hl-10">export</span><span class="hl-1"> </span><span class="hl-3">type</span><span class="hl-1"> </span><span class="hl-7">LoadResultType</span><span class="hl-1">&lt;</span><span class="hl-7">Scene</span><span class="hl-1"> = </span><span class="hl-7">THREE</span><span class="hl-1">.</span><span class="hl-7">Object3D</span><span class="hl-1">&gt; = {</span><br/><span class="hl-1"> </span><span class="hl-6">type</span><span class="hl-1">: </span><span class="hl-9">&#39;gltf&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;obj&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;ply&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;fbx&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;pbm&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;splat&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;spz&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;b3dm&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;pnts&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;at3d&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;dome&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;domez&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;x3p&#39;</span><span class="hl-1">; </span><span class="hl-8">// 模型类型</span><br/><span class="hl-1"> </span><span class="hl-6">modelUpAxis</span><span class="hl-1">: </span><span class="hl-9">&#39;Y&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;Z&#39;</span><span class="hl-1">; </span><span class="hl-8">// 原始模型的上轴</span><br/><span class="hl-1"> </span><span class="hl-6">upAxis</span><span class="hl-1">: </span><span class="hl-9">&#39;Y&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;Z&#39;</span><span class="hl-1">; </span><span class="hl-8">// 输出模型的上轴 (通常为 Z)</span><br/><span class="hl-1"> </span><span class="hl-6">byteLength</span><span class="hl-1">: </span><span class="hl-7">number</span><span class="hl-1">; </span><span class="hl-8">// 文件字节大小</span><br/><span class="hl-1"> </span><span class="hl-6">memoryUsage</span><span class="hl-1">: </span><span class="hl-7">number</span><span class="hl-1">; </span><span class="hl-8">// 显存/内存占用估算</span><br/><span class="hl-1"> </span><span class="hl-6">uri</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1">; </span><span class="hl-8">// 模型地址</span><br/><span class="hl-1"> </span><span class="hl-6">scene</span><span class="hl-1">: </span><span class="hl-7">Scene</span><span class="hl-1">; </span><span class="hl-8">// Three.js 对象 (Group 或 Object3D),可直接添加到场景</span><br/><span class="hl-1"> </span><span class="hl-6">textures</span><span class="hl-1">: </span><span class="hl-7">THREE</span><span class="hl-1">.</span><span class="hl-7">Texture</span><span class="hl-1">[]; </span><span class="hl-8">// 加载的纹理列表</span><br/><span class="hl-1"> </span><span class="hl-6">animations</span><span class="hl-1">: </span><span class="hl-7">THREE</span><span class="hl-1">.</span><span class="hl-7">AnimationClip</span><span class="hl-1">[]; </span><span class="hl-8">// 动画剪辑列表</span><br/><span class="hl-1"> </span><span class="hl-6">rtcCenter</span><span class="hl-1">?: </span><span class="hl-7">THREE</span><span class="hl-1">.</span><span class="hl-7">Vector3</span><span class="hl-1">; </span><span class="hl-8">// 若存在 RTC (Relative To Center) 坐标偏移</span><br/><span class="hl-1"> </span><span class="hl-5">dispose</span><span class="hl-1">: () </span><span class="hl-3">=&gt;</span><span class="hl-1"> </span><span class="hl-7">void</span><span class="hl-1">; </span><span class="hl-8">// 销毁资源函数</span><br/><span class="hl-1">}</span><br/><br/><span class="hl-8">// 通用配置项接口</span><br/><span class="hl-3">interface</span><span class="hl-1"> </span><span class="hl-7">BaseLoaderOptions</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">upAxis</span><span class="hl-1">?: </span><span class="hl-9">&#39;Y&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;Z&#39;</span><span class="hl-1">; </span><span class="hl-8">// 期望输出的上轴,默认为 &#39;Z&#39; (Five 坐标系)</span><br/><span class="hl-1"> </span><span class="hl-6">modelUpAxis</span><span class="hl-1">?: </span><span class="hl-9">&#39;Y&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;Z&#39;</span><span class="hl-1">; </span><span class="hl-8">// (部分加载器支持) 原始模型的上轴,用于自动旋转修正</span><br/><span class="hl-1"> </span><span class="hl-6">fetcher</span><span class="hl-1">?: </span><span class="hl-7">Fetcher</span><span class="hl-1">; </span><span class="hl-8">// 自定义网络请求 Fetcher</span><br/><span class="hl-1"> </span><span class="hl-6">light</span><span class="hl-1">?: </span><span class="hl-7">boolean</span><span class="hl-1">; </span><span class="hl-8">// 是否使用简化/无光照材质 (取决于加载器实现)</span><br/><span class="hl-1"> </span><span class="hl-5">onDownloadProgress</span><span class="hl-1">?: (</span><span class="hl-6">progress</span><span class="hl-1">: { </span><span class="hl-6">loaded</span><span class="hl-1">: </span><span class="hl-7">number</span><span class="hl-1">, </span><span class="hl-6">total</span><span class="hl-1">: </span><span class="hl-7">number</span><span class="hl-1"> }) </span><span class="hl-3">=&gt;</span><span class="hl-1"> </span><span class="hl-7">void</span><span class="hl-1">; </span><span class="hl-8">// 下载进度回调</span><br/><span class="hl-1">}</span>
14
+ <pre><code class="typescript"><span class="hl-8">// 通用返回类型</span><br/><span class="hl-10">export</span><span class="hl-1"> </span><span class="hl-3">type</span><span class="hl-1"> </span><span class="hl-7">LoadResultType</span><span class="hl-1">&lt;</span><span class="hl-7">Scene</span><span class="hl-1"> = </span><span class="hl-7">THREE</span><span class="hl-1">.</span><span class="hl-7">Object3D</span><span class="hl-1">&gt; = {</span><br/><span class="hl-1"> </span><span class="hl-6">type</span><span class="hl-1">: </span><span class="hl-9">&#39;gltf&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;obj&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;ply&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;fbx&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;pbm&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;splat&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;spz&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;b3dm&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;pnts&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;at3d&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;dome&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;domez&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;x3p&#39;</span><span class="hl-1">; </span><span class="hl-8">// 模型类型</span><br/><span class="hl-1"> </span><span class="hl-6">modelUpAxis</span><span class="hl-1">: </span><span class="hl-9">&#39;Y&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;Z&#39;</span><span class="hl-1">; </span><span class="hl-8">// 原始模型的上轴</span><br/><span class="hl-1"> </span><span class="hl-6">upAxis</span><span class="hl-1">: </span><span class="hl-9">&#39;Y&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;Z&#39;</span><span class="hl-1">; </span><span class="hl-8">// 输出模型的上轴 (通常为 Z)</span><br/><span class="hl-1"> </span><span class="hl-6">byteLength</span><span class="hl-1">: </span><span class="hl-7">number</span><span class="hl-1">; </span><span class="hl-8">// 文件字节大小</span><br/><span class="hl-1"> </span><span class="hl-6">memoryUsage</span><span class="hl-1">: </span><span class="hl-7">number</span><span class="hl-1">; </span><span class="hl-8">// 显存/内存占用估算</span><br/><span class="hl-1"> </span><span class="hl-6">uri</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1">; </span><span class="hl-8">// 模型地址</span><br/><span class="hl-1"> </span><span class="hl-6">scene</span><span class="hl-1">: </span><span class="hl-7">Scene</span><span class="hl-1">; </span><span class="hl-8">// Three.js 对象 (Group 或 Object3D),可直接添加到场景</span><br/><span class="hl-1"> </span><span class="hl-6">textures</span><span class="hl-1">: </span><span class="hl-7">THREE</span><span class="hl-1">.</span><span class="hl-7">Texture</span><span class="hl-1">[]; </span><span class="hl-8">// 加载的纹理列表</span><br/><span class="hl-1"> </span><span class="hl-6">animations</span><span class="hl-1">: </span><span class="hl-7">THREE</span><span class="hl-1">.</span><span class="hl-7">AnimationClip</span><span class="hl-1">[]; </span><span class="hl-8">// 动画剪辑列表</span><br/><span class="hl-1"> </span><span class="hl-6">rtcCenter</span><span class="hl-1">?: </span><span class="hl-7">THREE</span><span class="hl-1">.</span><span class="hl-7">Vector3</span><span class="hl-1">; </span><span class="hl-8">// 若存在 RTC (Relative To Center) 坐标偏移</span><br/><span class="hl-1"> </span><span class="hl-5">dispose</span><span class="hl-1">: () </span><span class="hl-3">=&gt;</span><span class="hl-1"> </span><span class="hl-7">void</span><span class="hl-1">; </span><span class="hl-8">// 销毁资源函数</span><br/><span class="hl-1">}</span><br/><br/><span class="hl-8">// 通用配置项接口</span><br/><span class="hl-3">interface</span><span class="hl-1"> </span><span class="hl-7">BaseLoaderOptions</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">upAxis</span><span class="hl-1">?: </span><span class="hl-9">&#39;Y&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;Z&#39;</span><span class="hl-1">; </span><span class="hl-8">// 期望输出的上轴,默认为 &#39;Z&#39;(加载器输出坐标系)</span><br/><span class="hl-1"> </span><span class="hl-6">modelUpAxis</span><span class="hl-1">?: </span><span class="hl-9">&#39;Y&#39;</span><span class="hl-1"> | </span><span class="hl-9">&#39;Z&#39;</span><span class="hl-1">; </span><span class="hl-8">// (部分加载器支持) 原始模型的上轴,用于自动旋转修正</span><br/><span class="hl-1"> </span><span class="hl-6">fetcher</span><span class="hl-1">?: </span><span class="hl-7">Fetcher</span><span class="hl-1">; </span><span class="hl-8">// 自定义网络请求 Fetcher</span><br/><span class="hl-1"> </span><span class="hl-6">light</span><span class="hl-1">?: </span><span class="hl-7">boolean</span><span class="hl-1">; </span><span class="hl-8">// 是否使用简化/无光照材质 (取决于加载器实现)</span><br/><span class="hl-1"> </span><span class="hl-5">onDownloadProgress</span><span class="hl-1">?: (</span><span class="hl-6">progress</span><span class="hl-1">: { </span><span class="hl-6">loaded</span><span class="hl-1">: </span><span class="hl-7">number</span><span class="hl-1">, </span><span class="hl-6">total</span><span class="hl-1">: </span><span class="hl-7">number</span><span class="hl-1"> }) </span><span class="hl-3">=&gt;</span><span class="hl-1"> </span><span class="hl-7">void</span><span class="hl-1">; </span><span class="hl-8">// 下载进度回调</span><br/><span class="hl-1">}</span>
15
15
  </code><button type="button">Copy</button></pre>
16
16
 
17
17
  <h2 id="concepts" class="tsd-anchor-link">Concepts<a href="#concepts" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
18
18
  <h3 id="独立加载函数-standalone-functions" class="tsd-anchor-link">独立加载函数 (Standalone Functions)<a href="#独立加载函数-standalone-functions" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
19
19
  <p>这些加载函数(如 <code>loadGltf</code>, <code>loadPly</code>)是 <code>@realsee/five-webgpu</code> 包导出的<strong>独立函数</strong>,而非 <code>Five</code> 实例的方法。你需要单独引入它们使用。</p>
20
20
  <h3 id="坐标系转换-up-axis-conversion" class="tsd-anchor-link">坐标系转换 (Up-Axis Conversion)<a href="#坐标系转换-up-axis-conversion" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
21
- <p>Five 使用 <strong>Z-up</strong> (Z 轴向上) 的右手坐标系。
21
+ <p>Five 运行时场景使用 <strong>Y-up</strong> (Y 轴向上) 的右手坐标系;加载器默认输出通常为 <strong>Z-up</strong>。
22
22
  许多外部模型(如 standard GLTF, FBX)通常是 <strong>Y-up</strong> 的。
23
23
  加载器提供了 <code>upAxis</code> 和 <code>modelUpAxis</code> 选项来自动处理旋转:</p>
24
24
  <ul>
25
- <li><code>upAxis</code>: 你期望得到的结果坐标系上轴(通常保持默认 'Z')。</li>
25
+ <li><code>upAxis</code>: 你期望得到的加载器输出坐标系上轴(通常保持默认 'Z')。</li>
26
26
  <li><code>modelUpAxis</code>: 原始文件的上轴(如 GLTF 默认为 'Y',PLY 默认为 'Z')。
27
- 如果不指定,加载器会尝试使用合理的默认值将模型旋转到 Z 轴向上。</li>
27
+ 如果不指定,加载器会使用各自的默认值;将结果直接添加到 <code>five.scene</code> 时,应按需设置 <code>upAxis: 'Y'</code> 与 Five 的运行时坐标系对齐。</li>
28
28
  </ul>
29
29
  <h3 id="资源销毁-disposal" class="tsd-anchor-link">资源销毁 (Disposal)<a href="#资源销毁-disposal" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
30
- <p>加载的模型包含 Geometry、Material 和 Texture 等 WebGL 资源。当你不再需要该模型时(例如切换场景或移除物体),<strong>必须</strong>调用返回结果中的 <code>dispose()</code> 方法来释放内存,否则会导致内存泄漏。</p>
30
+ <p>加载的模型包含 Geometry、Material 和 Texture 等 GPU 资源。当你不再需要该模型时(例如切换场景或移除物体),<strong>必须</strong>调用返回结果中的 <code>dispose()</code> 方法来释放资源,否则会导致内存泄漏。</p>
31
31
  <h3 id="fetcher" class="tsd-anchor-link">Fetcher<a href="#fetcher" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
32
32
  <p>所有加载器支持传入自定义 <code>fetcher</code>。这在需要鉴权、自定义 Header 或处理特定 CDN 逻辑时非常有用。如果不传,默认使用内部的 <code>internalFetcher</code>。</p>
33
33
  <h2 id="configuration" class="tsd-anchor-link">Configuration<a href="#configuration" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
@@ -537,7 +537,7 @@
537
537
  </code><button type="button">Copy</button></pre>
538
538
 
539
539
  <h3 id="进阶用法:加载高斯泼溅-gaussian-splat" class="tsd-anchor-link">进阶用法:加载高斯泼溅 (Gaussian Splat)<a href="#进阶用法:加载高斯泼溅-gaussian-splat" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
540
- <pre><code class="typescript"><span class="hl-10">import</span><span class="hl-1"> { </span><span class="hl-6">loadSplat</span><span class="hl-1"> } </span><span class="hl-10">from</span><span class="hl-1"> </span><span class="hl-9">&#39;@realsee/five-webgpu&#39;</span><span class="hl-1">;</span><br/><br/><span class="hl-5">loadSplat</span><span class="hl-1">(</span><span class="hl-9">&#39;https://example.com/scene.splat&#39;</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-6">modelUpAxis:</span><span class="hl-1"> </span><span class="hl-9">&#39;Y&#39;</span><span class="hl-1">, </span><span class="hl-8">// 假设原始数据是 Y-up</span><br/><span class="hl-1"> </span><span class="hl-6">upAxis:</span><span class="hl-1"> </span><span class="hl-9">&#39;Z&#39;</span><span class="hl-1">, </span><span class="hl-8">// 转换到 Five 的 Z-up</span><br/><span class="hl-1">}).</span><span class="hl-5">then</span><span class="hl-1">((</span><span class="hl-6">result</span><span class="hl-1">) </span><span class="hl-3">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">splatMesh</span><span class="hl-1"> = </span><span class="hl-6">result</span><span class="hl-1">.</span><span class="hl-6">scene</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-6">scene</span><span class="hl-1">.</span><span class="hl-5">add</span><span class="hl-1">(</span><span class="hl-6">splatMesh</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-6">needsRender</span><span class="hl-1"> = </span><span class="hl-3">true</span><span class="hl-1">;</span><br/><span class="hl-1">});</span>
540
+ <pre><code class="typescript"><span class="hl-10">import</span><span class="hl-1"> { </span><span class="hl-6">loadSplat</span><span class="hl-1"> } </span><span class="hl-10">from</span><span class="hl-1"> </span><span class="hl-9">&#39;@realsee/five-webgpu&#39;</span><span class="hl-1">;</span><br/><br/><span class="hl-5">loadSplat</span><span class="hl-1">(</span><span class="hl-9">&#39;https://example.com/scene.splat&#39;</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-6">modelUpAxis:</span><span class="hl-1"> </span><span class="hl-9">&#39;Y&#39;</span><span class="hl-1">, </span><span class="hl-8">// 假设原始数据是 Y-up</span><br/><span class="hl-1"> </span><span class="hl-6">upAxis:</span><span class="hl-1"> </span><span class="hl-9">&#39;Y&#39;</span><span class="hl-1">, </span><span class="hl-8">// 转换到 Five 的 Y-up 运行时坐标系</span><br/><span class="hl-1">}).</span><span class="hl-5">then</span><span class="hl-1">((</span><span class="hl-6">result</span><span class="hl-1">) </span><span class="hl-3">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">splatMesh</span><span class="hl-1"> = </span><span class="hl-6">result</span><span class="hl-1">.</span><span class="hl-6">scene</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-6">scene</span><span class="hl-1">.</span><span class="hl-5">add</span><span class="hl-1">(</span><span class="hl-6">splatMesh</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-6">needsRender</span><span class="hl-1"> = </span><span class="hl-3">true</span><span class="hl-1">;</span><br/><span class="hl-1">});</span>
541
541
  </code><button type="button">Copy</button></pre>
542
542
 
543
543
  <h3 id="进阶用法:自定义-ply-属性映射-custom-ply-properties" class="tsd-anchor-link">进阶用法:自定义 PLY 属性映射 (Custom PLY Properties)<a href="#进阶用法:自定义-ply-属性映射-custom-ply-properties" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
@@ -80,7 +80,7 @@
80
80
 
81
81
  <h4 id="tile-lifecycle-monitoring-tile-生命周期监控" class="tsd-anchor-link">Tile Lifecycle Monitoring (Tile 生命周期监控)<a href="#tile-lifecycle-monitoring-tile-生命周期监控" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4>
82
82
  <p>监控单个 Tile 的加载与卸载事件,用于更精细的调试或资源统计。</p>
83
- <pre><code class="ts"><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">on</span><span class="hl-1">(</span><span class="hl-9">&quot;model.tileLoad&quot;</span><span class="hl-1">, (</span><span class="hl-6">tile</span><span class="hl-1">) </span><span class="hl-3">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">console</span><span class="hl-1">.</span><span class="hl-5">log</span><span class="hl-1">(</span><span class="hl-9">`Tile loaded: </span><span class="hl-3">${</span><span class="hl-6">tile</span><span class="hl-12">.</span><span class="hl-6">debugLabel</span><span class="hl-3">}</span><span class="hl-9">, Size: </span><span class="hl-3">${</span><span class="hl-6">tile</span><span class="hl-12">.</span><span class="hl-6">content</span><span class="hl-12">.</span><span class="hl-6">byteLength</span><span class="hl-3">}</span><span class="hl-9">`</span><span class="hl-1">);</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">on</span><span class="hl-1">(</span><span class="hl-9">&quot;model.tileUnload&quot;</span><span class="hl-1">, (</span><span class="hl-6">tile</span><span class="hl-1">) </span><span class="hl-3">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">console</span><span class="hl-1">.</span><span class="hl-5">log</span><span class="hl-1">(</span><span class="hl-9">`Tile unloaded: </span><span class="hl-3">${</span><span class="hl-6">tile</span><span class="hl-12">.</span><span class="hl-6">debugLabel</span><span class="hl-3">}</span><span class="hl-9">`</span><span class="hl-1">);</span><br/><span class="hl-1">});</span>
83
+ <pre><code class="ts"><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">on</span><span class="hl-1">(</span><span class="hl-9">&quot;models.tileLoad&quot;</span><span class="hl-1">, ({ </span><span class="hl-6">tile</span><span class="hl-1"> }) </span><span class="hl-3">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">console</span><span class="hl-1">.</span><span class="hl-5">log</span><span class="hl-1">(</span><span class="hl-9">`Tile loaded: </span><span class="hl-3">${</span><span class="hl-6">tile</span><span class="hl-12">.</span><span class="hl-6">debugLabel</span><span class="hl-3">}</span><span class="hl-9">, Size: </span><span class="hl-3">${</span><span class="hl-6">tile</span><span class="hl-12">.</span><span class="hl-6">content</span><span class="hl-12">.</span><span class="hl-6">byteLength</span><span class="hl-3">}</span><span class="hl-9">`</span><span class="hl-1">);</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">on</span><span class="hl-1">(</span><span class="hl-9">&quot;models.tileUnload&quot;</span><span class="hl-1">, ({ </span><span class="hl-6">tile</span><span class="hl-1"> }) </span><span class="hl-3">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">console</span><span class="hl-1">.</span><span class="hl-5">log</span><span class="hl-1">(</span><span class="hl-9">`Tile unloaded: </span><span class="hl-3">${</span><span class="hl-6">tile</span><span class="hl-12">.</span><span class="hl-6">debugLabel</span><span class="hl-3">}</span><span class="hl-9">`</span><span class="hl-1">);</span><br/><span class="hl-1">});</span>
84
84
  </code><button type="button">Copy</button></pre>
85
85
 
86
86
  <h3 id="2-panorama-loading-全景图加载" class="tsd-anchor-link">2. Panorama Loading (全景图加载)<a href="#2-panorama-loading-全景图加载" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
@@ -1,8 +1,8 @@
1
1
  <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>features/mode | 如视 Five SDK</title><meta name="description" content="Documentation for 如视 Five SDK"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">如视 Five SDK</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">features/mode</a></li></ul></div><div class="tsd-panel tsd-typography"><h1 id="mode-模式" class="tsd-anchor-link">Mode (模式)<a href="#mode-模式" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h1>
2
2
  <ul>
3
- <li><strong>Summary</strong>: Five 支持多种交互模式,包括全景漫游、模型浏览、VR/XR 等,适用于不同的看房场景。</li>
4
- <li><strong>Schema</strong>: 字符串枚举类型,定义了 6 种交互模式。</li>
5
- <li><strong>Concepts</strong>: Panorama, Mapview, Floorplan, Topview, Model, VR/XR。</li>
3
+ <li><strong>Summary</strong>: Five 支持全景漫游、模型浏览等五种交互模式,适用于不同的看房场景。</li>
4
+ <li><strong>Schema</strong>: 字符串枚举类型,定义了 5 种交互模式。</li>
5
+ <li><strong>Concepts</strong>: Panorama, Mapview, Floorplan, Topview, Model。</li>
6
6
  <li><strong>Examples</strong>: 模式切换与事件监听。</li>
7
7
  </ul>
8
8
  <h2 id="schema" class="tsd-anchor-link">Schema<a href="#schema" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
@@ -10,7 +10,7 @@
10
10
  <p><strong>Definition</strong>: <a href="../../five/application/mode.d.ts">Mode</a>, <a href="../../five/application/fiveInitArgs.d.ts">FiveInitArgs</a></p>
11
11
  </blockquote>
12
12
  <p><strong>Mode</strong> 类型定义如下:</p>
13
- <pre><code class="ts"><span class="hl-3">type</span><span class="hl-1"> </span><span class="hl-7">Mode</span><span class="hl-1"> =</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Panorama&quot;</span><span class="hl-1"> </span><span class="hl-8">// 全景图游走模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Mapview&quot;</span><span class="hl-1"> </span><span class="hl-8">// 模型地图模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Floorplan&quot;</span><span class="hl-1"> </span><span class="hl-8">// 模型户型图模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Topview&quot;</span><span class="hl-1"> </span><span class="hl-8">// 模型平面图模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Model&quot;</span><span class="hl-1"> </span><span class="hl-8">// 模型游走模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;VRPanorama&quot;</span><span class="hl-1"> </span><span class="hl-8">// Cardboard VR 眼镜模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;XRPanorama&quot;</span><span class="hl-1"> </span><span class="hl-8">// WebXR 虚拟现实 VR 眼镜模式</span>
13
+ <pre><code class="ts"><span class="hl-3">type</span><span class="hl-1"> </span><span class="hl-7">Mode</span><span class="hl-1"> =</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Panorama&quot;</span><span class="hl-1"> </span><span class="hl-8">// 全景图游走模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Mapview&quot;</span><span class="hl-1"> </span><span class="hl-8">// 模型地图模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Floorplan&quot;</span><span class="hl-1"> </span><span class="hl-8">// 模型户型图模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Topview&quot;</span><span class="hl-1"> </span><span class="hl-8">// 模型平面图模式</span><br/><span class="hl-1"> | </span><span class="hl-9">&quot;Model&quot;</span><span class="hl-1"> </span><span class="hl-8">// 模型游走模式</span>
14
14
  </code><button type="button">Copy</button></pre>
15
15
 
16
16
  <h2 id="concepts" class="tsd-anchor-link">Concepts<a href="#concepts" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
@@ -40,11 +40,6 @@
40
40
  <li>交互:鼠标拖拽 / Pan手势旋转视角;滚轮 / Pinch手势缩放视场角;点击 / Tap移动到指定位置。</li>
41
41
  </ul>
42
42
  </li>
43
- <li><strong>VRPanorama / XRPanorama</strong>: 适配 VR 设备(如 Google Cardboard, Apple Vision Pro 等)的沉浸式模式。
44
- <ul>
45
- <li>交互:配合设备手柄或头部追踪,基本交互逻辑同 Panorama。</li>
46
- </ul>
47
- </li>
48
43
  </ul>
49
44
  <h2 id="configuration" class="tsd-anchor-link">Configuration<a href="#configuration" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
50
45
  <p>初始化 <code>new Five()</code> 时,可以通过配置参数对各个模式进行个性化定制。</p>
@@ -69,11 +64,6 @@
69
64
  <pre><code class="typescript"><span class="hl-3">interface</span><span class="hl-1"> </span><span class="hl-7">ModelConfig</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">moveSpeed</span><span class="hl-1">?: </span><span class="hl-7">number</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-6">defaultFov</span><span class="hl-1">?: </span><span class="hl-7">number</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">// ... 同 Panorama 基础配置</span><br/><span class="hl-1">}</span>
70
65
  </code><button type="button">Copy</button></pre>
71
66
 
72
- <h3 id="vrpanorama-xrpanorama-vr-模式" class="tsd-anchor-link">VRPanorama / XRPanorama (VR 模式)<a href="#vrpanorama-xrpanorama-vr-模式" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
73
- <p>继承自 Panorama 配置,但移除了俯仰角限制(<code>maxLatitude</code>, <code>minLatitude</code>),因为 VR 模式下视角由设备姿态控制。</p>
74
- <pre><code class="typescript"><span class="hl-3">interface</span><span class="hl-1"> </span><span class="hl-7">VRPanoramaConfig</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-8">// ... 同 Panorama 基础配置</span><br/><span class="hl-1"> </span><span class="hl-8">// 移除: maxLatitude, minLatitude</span><br/><span class="hl-1">}</span><br/><br/><span class="hl-3">interface</span><span class="hl-1"> </span><span class="hl-7">XRPanoramaConfig</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-8">// ... 同 Panorama 基础配置</span><br/><span class="hl-1"> </span><span class="hl-8">// 移除: maxLatitude, minLatitude</span><br/><span class="hl-1">}</span>
75
- </code><button type="button">Copy</button></pre>
76
-
77
67
  <h2 id="examples" class="tsd-anchor-link">Examples<a href="#examples" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
78
68
  <h3 id="快速上手-quick-example" class="tsd-anchor-link">快速上手 (Quick Example)<a href="#快速上手-quick-example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
79
69
  <p>使用 <code>setState</code> 切换模式:</p>
@@ -111,4 +101,4 @@
111
101
  <pre><code class="yaml"><span class="hl-0">tags</span><span class="hl-1">: [</span><span class="hl-2">mode</span><span class="hl-1">, </span><span class="hl-2">state</span><span class="hl-1">, </span><span class="hl-2">interaction</span><span class="hl-1">]</span>
112
102
  </code><button type="button">Copy</button></pre>
113
103
 
114
- </div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#mode-模式"><span>Mode (模式)</span></a><ul><li><a href="#schema"><span>Schema</span></a></li><li><a href="#concepts"><span>Concepts</span></a></li><li><a href="#configuration"><span>Configuration</span></a></li><li><ul><li><a href="#panorama-全景漫游"><span>Panorama (全景漫游)</span></a></li><li><a href="#mapview-模型地图"><span>Mapview (模型地图)</span></a></li><li><a href="#floorplan-模型户型"><span>Floorplan (模型户型)</span></a></li><li><a href="#topview-模型平面"><span>Topview (模型平面)</span></a></li><li><a href="#model-模型漫游"><span>Model (模型漫游)</span></a></li><li><a href="#vrpanorama-xrpanorama-vr-模式"><span>VR<wbr/>Panorama / <wbr/>XR<wbr/>Panorama (<wbr/>VR 模式)</span></a></li></ul></li><li><a href="#examples"><span>Examples</span></a></li><li><ul><li><a href="#快速上手-quick-example"><span>快速上手 (<wbr/>Quick <wbr/>Example)</span></a></li><li><a href="#初始化配置示例-initialization-configuration-example"><span>初始化配置示例 (<wbr/>Initialization <wbr/>Configuration <wbr/>Example)</span></a></li><li><a href="#动态修改配置-update-configuration"><span>动态修改配置 (<wbr/>Update <wbr/>Configuration)</span></a></li><li><a href="#进阶用法-advanced-usage"><span>进阶用法 (<wbr/>Advanced <wbr/>Usage)</span></a></li></ul></li><li><a href="#common-pitfalls"><span>Common <wbr/>Pitfalls</span></a></li><li><a href="#related"><span>Related</span></a></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">如视 Five SDK</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
104
+ </div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#mode-模式"><span>Mode (模式)</span></a><ul><li><a href="#schema"><span>Schema</span></a></li><li><a href="#concepts"><span>Concepts</span></a></li><li><a href="#configuration"><span>Configuration</span></a></li><li><ul><li><a href="#panorama-全景漫游"><span>Panorama (全景漫游)</span></a></li><li><a href="#mapview-模型地图"><span>Mapview (模型地图)</span></a></li><li><a href="#floorplan-模型户型"><span>Floorplan (模型户型)</span></a></li><li><a href="#topview-模型平面"><span>Topview (模型平面)</span></a></li><li><a href="#model-模型漫游"><span>Model (模型漫游)</span></a></li></ul></li><li><a href="#examples"><span>Examples</span></a></li><li><ul><li><a href="#快速上手-quick-example"><span>快速上手 (<wbr/>Quick <wbr/>Example)</span></a></li><li><a href="#初始化配置示例-initialization-configuration-example"><span>初始化配置示例 (<wbr/>Initialization <wbr/>Configuration <wbr/>Example)</span></a></li><li><a href="#动态修改配置-update-configuration"><span>动态修改配置 (<wbr/>Update <wbr/>Configuration)</span></a></li><li><a href="#进阶用法-advanced-usage"><span>进阶用法 (<wbr/>Advanced <wbr/>Usage)</span></a></li></ul></li><li><a href="#common-pitfalls"><span>Common <wbr/>Pitfalls</span></a></li><li><a href="#related"><span>Related</span></a></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">如视 Five SDK</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
@@ -115,7 +115,7 @@ Model 加载完成后,会自动根据 Work 数据生成对应的 ViewLayer,
115
115
  </table>
116
116
  <h2 id="examples" class="tsd-anchor-link">Examples<a href="#examples" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
117
117
  <h3 id="获取并操作当前模型" class="tsd-anchor-link">获取并操作当前模型<a href="#获取并操作当前模型" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
118
- <pre><code class="typescript"><span class="hl-8">// 获取当前模型</span><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">model</span><span class="hl-1"> = </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-6">models</span><span class="hl-1">[</span><span class="hl-11">0</span><span class="hl-1">];</span><br/><br/><span class="hl-10">if</span><span class="hl-1"> (</span><span class="hl-6">model</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-6">console</span><span class="hl-1">.</span><span class="hl-5">log</span><span class="hl-1">(</span><span class="hl-9">&quot;模型对应 Work 名称:&quot;</span><span class="hl-1">, </span><span class="hl-6">model</span><span class="hl-1">.</span><span class="hl-6">work</span><span class="hl-1">.</span><span class="hl-6">name</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-6">console</span><span class="hl-1">.</span><span class="hl-5">log</span><span class="hl-1">(</span><span class="hl-9">&quot;模型是否细化完成:&quot;</span><span class="hl-1">, </span><span class="hl-6">model</span><span class="hl-1">.</span><span class="hl-6">refined</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-8">// 监听模型细化事件</span><br/><span class="hl-1"> </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">on</span><span class="hl-1">(</span><span class="hl-9">&quot;model.refined&quot;</span><span class="hl-1">, () </span><span class="hl-3">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">console</span><span class="hl-1">.</span><span class="hl-5">log</span><span class="hl-1">(</span><span class="hl-9">&quot;模型高清资源加载完毕&quot;</span><span class="hl-1">);</span><br/><span class="hl-1"> });</span><br/><span class="hl-1">}</span>
118
+ <pre><code class="typescript"><span class="hl-8">// 获取当前模型</span><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">model</span><span class="hl-1"> = </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-6">models</span><span class="hl-1">[</span><span class="hl-11">0</span><span class="hl-1">];</span><br/><br/><span class="hl-10">if</span><span class="hl-1"> (</span><span class="hl-6">model</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-6">console</span><span class="hl-1">.</span><span class="hl-5">log</span><span class="hl-1">(</span><span class="hl-9">&quot;模型对应 Work 名称:&quot;</span><span class="hl-1">, </span><span class="hl-6">model</span><span class="hl-1">.</span><span class="hl-6">work</span><span class="hl-1">.</span><span class="hl-6">name</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-6">console</span><span class="hl-1">.</span><span class="hl-5">log</span><span class="hl-1">(</span><span class="hl-9">&quot;模型是否细化完成:&quot;</span><span class="hl-1">, </span><span class="hl-6">model</span><span class="hl-1">.</span><span class="hl-6">refined</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-8">// 监听模型细化事件</span><br/><span class="hl-1"> </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">on</span><span class="hl-1">(</span><span class="hl-9">&quot;models.refined&quot;</span><span class="hl-1">, () </span><span class="hl-3">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">console</span><span class="hl-1">.</span><span class="hl-5">log</span><span class="hl-1">(</span><span class="hl-9">&quot;模型高清资源加载完毕&quot;</span><span class="hl-1">);</span><br/><span class="hl-1"> });</span><br/><span class="hl-1">}</span>
119
119
  </code><button type="button">Copy</button></pre>
120
120
 
121
121
  <h3 id="遍历-viewlayer" class="tsd-anchor-link">遍历 ViewLayer<a href="#遍历-viewlayer" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
@@ -51,7 +51,7 @@
51
51
 
52
52
  <h3 id="详细示例-detailed-example" class="tsd-anchor-link">详细示例 (Detailed Example)<a href="#详细示例-detailed-example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
53
53
  <p>获取当前状态并基于此修改:</p>
54
- <pre><code class="ts"><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">state</span><span class="hl-1"> = </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-6">state</span><span class="hl-1">;</span><br/><br/><span class="hl-8">// 在当前状态基础上,向右旋转 90 度,并略微拉远距离</span><br/><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">setState</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-6">longitude:</span><span class="hl-1"> </span><span class="hl-6">tate</span><span class="hl-1">.</span><span class="hl-6">longitude</span><span class="hl-1"> + </span><span class="hl-6">Math</span><span class="hl-1">.</span><span class="hl-4">PI</span><span class="hl-1"> / </span><span class="hl-11">2</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">distance:</span><span class="hl-1"> </span><span class="hl-6">tate</span><span class="hl-1">.</span><span class="hl-6">distance</span><span class="hl-1"> + </span><span class="hl-11">2.0</span><br/><span class="hl-1">});</span>
54
+ <pre><code class="ts"><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">state</span><span class="hl-1"> = </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-6">state</span><span class="hl-1">;</span><br/><br/><span class="hl-8">// 在当前状态基础上,向右旋转 90 度,并略微拉远距离</span><br/><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">setState</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-6">longitude:</span><span class="hl-1"> </span><span class="hl-6">state</span><span class="hl-1">.</span><span class="hl-6">longitude</span><span class="hl-1"> + </span><span class="hl-6">Math</span><span class="hl-1">.</span><span class="hl-4">PI</span><span class="hl-1"> / </span><span class="hl-11">2</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">distance:</span><span class="hl-1"> </span><span class="hl-6">state</span><span class="hl-1">.</span><span class="hl-6">distance</span><span class="hl-1"> + </span><span class="hl-11">2.0</span><br/><span class="hl-1">});</span>
55
55
  </code><button type="button">Copy</button></pre>
56
56
 
57
57
  <h2 id="common-pitfalls" class="tsd-anchor-link">Common Pitfalls<a href="#common-pitfalls" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>