@realsee/five 6.9.0-alpha.0 → 6.9.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai_guides/3dgs-current-branch-changes.md +237 -0
- package/docs/assets/hierarchy.js +1 -1
- package/docs/assets/highlight.css +18 -18
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/five.AdaptiveLuminancePass.html +1 -1
- package/docs/classes/five.BoundingMesh.html +1 -1
- package/docs/classes/five.Camera.html +1 -1
- package/docs/classes/five.EyeDomeLightingPass.html +1 -1
- package/docs/classes/five.Five.html +4 -4
- package/docs/classes/five.FivePass.html +1 -1
- package/docs/classes/five.FlowingFireworks3DPass.html +30 -0
- package/docs/classes/five.FlowingLight2DPass.html +1 -1
- package/docs/classes/five.FlowingLight3DPass.html +1 -1
- package/docs/classes/five.GaussianBlurPass.html +1 -1
- package/docs/classes/five.InternalWebGLRenderer.html +1 -1
- package/docs/classes/five.Model.html +2 -2
- package/docs/classes/five.ModelScene.html +1 -1
- package/docs/classes/five.NetworkSubscribe.html +2 -2
- package/docs/classes/five.PBMContainer.html +1 -1
- package/docs/classes/five.PBMCustomShader.html +2 -2
- package/docs/classes/five.PBMGSObject.html +7 -7
- package/docs/classes/five.PBMGroup.html +1 -1
- package/docs/classes/five.PBMMesh.html +1 -1
- package/docs/classes/five.PBMMeshMaterial.html +1 -1
- package/docs/classes/five.PBMPanoFilter.html +2 -2
- package/docs/classes/five.PBMPointCloud.html +1 -1
- package/docs/classes/five.PBMPointCloudMaterial.html +1 -1
- package/docs/classes/five.PBMSkinnedMesh.html +1 -1
- package/docs/classes/five.PBMUpdateable.html +2 -2
- package/docs/classes/five.PanoCircleMesh.html +1 -1
- package/docs/classes/five.PanoCircleMeshCustom.html +1 -1
- package/docs/classes/five.PanoCircleMeshSolid.html +1 -1
- package/docs/classes/five.Parameter.html +1 -1
- package/docs/classes/five.Scene.html +1 -1
- package/docs/classes/five.Subscribe.html +2 -2
- package/docs/classes/five.Tile3D.html +1 -1
- package/docs/classes/five.TileNode.html +1 -1
- package/docs/classes/five.TrajectoryNode.html +1 -1
- package/docs/classes/five.WorkResolvedObserver.html +2 -2
- package/docs/classes/gltf-loader.DDSLoader.html +1 -1
- package/docs/classes/gltf-loader.DRACOLoader.html +1 -1
- package/docs/classes/gltf-loader.GLTFLoader.html +2 -2
- package/docs/classes/gltf-loader.GLTFObject.html +1 -1
- package/docs/classes/gltf-loader.THREEGLTFLoader.html +1 -1
- package/docs/classes/line.Line.html +1 -1
- package/docs/classes/line.LineGeometry.html +1 -1
- package/docs/classes/line.LineMaterial.html +1 -1
- package/docs/classes/line.LineSegmentsGeometry.html +1 -1
- package/docs/classes/line.THREE_Line2.html +1 -1
- package/docs/classes/line.THREE_LineSegments2.html +1 -1
- package/docs/classes/plugins.BasePlugin.Controller.html +1 -1
- package/docs/classes/plugins.CSS2DObject.html +1 -1
- package/docs/classes/plugins.CSS3DObject.html +1 -1
- package/docs/classes/plugins.CSS3DSprite.html +1 -1
- package/docs/classes/plugins.InstancedPrefabBufferGeometry.html +1 -1
- package/docs/classes/plugins.Object3DHelperController.html +1 -1
- package/docs/classes/plugins.PointBufferGeometry.html +1 -1
- package/docs/classes/plugins.PrefabBufferGeometry.html +1 -1
- package/docs/classes/plugins.RoundedBoxGeometry.html +1 -1
- package/docs/classes/react.Store.html +1 -1
- package/docs/classes/sticker.Sticker.html +2 -2
- package/docs/classes/vfx.Airflow.html +1 -1
- package/docs/classes/vfx.Flame.html +1 -1
- package/docs/classes/vfx.Particle.html +1 -1
- package/docs/classes/vfx.ParticleGPU.html +1 -1
- package/docs/classes/vfx.SpotLight.html +1 -1
- package/docs/documents/3dgs-current-branch-changes.html +205 -0
- package/docs/documents/api.html +6 -6
- package/docs/documents/features_3dtile.html +4 -4
- package/docs/documents/features_camera-animation.html +10 -10
- package/docs/documents/features_clipper.html +3 -3
- package/docs/documents/features_coordinate-system.html +3 -3
- package/docs/documents/features_event.html +10 -10
- package/docs/documents/features_five.html +4 -4
- package/docs/documents/features_flowing-fireworks-3d-pass.html +7 -7
- package/docs/documents/features_flowing-light-2d-pass.html +11 -11
- package/docs/documents/features_flowing-light-3d-pass.html +11 -11
- package/docs/documents/features_gaussian-blur-pass.html +6 -6
- package/docs/documents/features_gesture.html +6 -6
- package/docs/documents/features_get-screen-pixels.html +4 -4
- package/docs/documents/features_image-options.html +5 -5
- package/docs/documents/features_load-external-model.html +8 -8
- package/docs/documents/features_load-progress.html +7 -7
- package/docs/documents/features_material.html +3 -3
- package/docs/documents/features_mode.html +11 -11
- package/docs/documents/features_model.html +4 -4
- package/docs/documents/features_move-pano-effect.html +5 -5
- package/docs/documents/features_multi-work.html +5 -5
- package/docs/documents/features_pano-filter.html +3 -3
- package/docs/documents/features_pano-tile.html +4 -4
- package/docs/documents/features_pano-uv.html +4 -4
- package/docs/documents/features_parameter.html +7 -7
- package/docs/documents/features_plugin.html +4 -4
- package/docs/documents/features_postprocessing.html +5 -5
- package/docs/documents/features_raycast.html +4 -4
- package/docs/documents/features_request-proxy.html +4 -4
- package/docs/documents/features_screen-project.html +3 -3
- package/docs/documents/features_state.html +4 -4
- package/docs/documents/features_view-layer.html +4 -4
- package/docs/documents/features_work.html +5 -5
- package/docs/documents/quick-start.html +2 -2
- package/docs/documents/release_notes_6.6.html +4 -4
- package/docs/documents/release_notes_6.7.html +14 -14
- package/docs/documents/release_notes_6.8.html +4 -4
- package/docs/functions/react.useFiveAction.html +6 -6
- package/docs/functions/react.useFiveCurrentObserver.html +1 -1
- package/docs/functions/react.useFiveCurrentState.html +1 -1
- package/docs/functions/react.useFiveEventCallback.html +1 -1
- package/docs/functions/react.useFiveFloor.html +1 -1
- package/docs/functions/react.useFiveHelper.html +1 -1
- package/docs/functions/react.useFiveModelIntersectRaycaster.html +2 -2
- package/docs/functions/react.useFiveProject2d.html +2 -2
- package/docs/functions/react.useFiveSceneEffect.html +1 -1
- package/docs/functions/react.useFiveWork.html +2 -2
- package/docs/functions/vue.useFiveAction.html +8 -8
- package/docs/functions/vue.useFiveCurrentObserver.html +1 -1
- package/docs/functions/vue.useFiveCurrentState.html +1 -1
- package/docs/functions/vue.useFiveEventCallback.html +1 -1
- package/docs/functions/vue.useFiveFloor.html +1 -1
- package/docs/functions/vue.useFiveHelper.html +1 -1
- package/docs/functions/vue.useFiveModelIntersectRaycaster.html +2 -2
- package/docs/functions/vue.useFiveProject2d.html +2 -2
- package/docs/functions/vue.useFiveState.html +1 -1
- package/docs/functions/vue.useFiveWorks.html +2 -2
- package/docs/hierarchy.html +1 -1
- package/docs/interfaces/five.AddableObject.html +1 -1
- package/docs/interfaces/five.AjaxOptions.html +1 -1
- package/docs/interfaces/five.BaseEvent.html +1 -1
- package/docs/interfaces/five.BaseExtendableEvent.html +1 -1
- package/docs/interfaces/five.EventCallback.html +1 -1
- package/docs/interfaces/five.FiveInitArgs.html +2 -2
- package/docs/interfaces/five.GestureEvent.html +1 -1
- package/docs/interfaces/five.ImageOptions.html +1 -1
- package/docs/interfaces/five.IntersectEvent.html +1 -1
- package/docs/interfaces/five.IntersectMesh.html +1 -1
- package/docs/interfaces/five.IntersectMeshInterface.html +1 -1
- package/docs/interfaces/five.Intersection.html +1 -1
- package/docs/interfaces/five.LooseWorkWithExtrinsics.html +1 -1
- package/docs/interfaces/five.ModeChangeEvent.html +1 -1
- package/docs/interfaces/five.ModelControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/five.ModelEvent.html +1 -1
- package/docs/interfaces/five.ModelSceneEvent.html +1 -1
- package/docs/interfaces/five.ModelTileEvent.html +1 -1
- package/docs/interfaces/five.MovePanoOptions.html +1 -1
- package/docs/interfaces/five.NetworkAbortError.html +1 -1
- package/docs/interfaces/five.NetworkFirbiddenError.html +1 -1
- package/docs/interfaces/five.NetworkOptions.html +1 -1
- package/docs/interfaces/five.NetworkProxyError.html +1 -1
- package/docs/interfaces/five.NetworkResourceEvent.html +1 -1
- package/docs/interfaces/five.NetworkResponseError.html +1 -1
- package/docs/interfaces/five.NetworkTimeoutError.html +1 -1
- package/docs/interfaces/five.ObjectEvent.html +1 -1
- package/docs/interfaces/five.PBMMaterial.html +1 -1
- package/docs/interfaces/five.PBMMeshMaterialParameters.html +1 -1
- package/docs/interfaces/five.PBMPointCloudMaterialParameters.html +1 -1
- package/docs/interfaces/five.PanoCircleMeshInterface.html +1 -1
- package/docs/interfaces/five.PanoEvent.html +1 -1
- package/docs/interfaces/five.PanoPrepareEvent.html +1 -1
- package/docs/interfaces/five.PanoTextureEvent.html +1 -1
- package/docs/interfaces/five.PanoramaControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/five.PanoramaLikeControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/five.ParameterMaterialValue.html +1 -1
- package/docs/interfaces/five.ParameterTilesetValue.html +1 -1
- package/docs/interfaces/five.ParameterValue.html +1 -1
- package/docs/interfaces/five.Pose.html +1 -1
- package/docs/interfaces/five.RenderEvent.html +1 -1
- package/docs/interfaces/five.ResolvedParameterValue.html +1 -1
- package/docs/interfaces/five.State.html +1 -1
- package/docs/interfaces/five.StateEvent.html +1 -1
- package/docs/interfaces/five.TextureOptions.html +1 -1
- package/docs/interfaces/five.TopviewControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/five.VRPanoramaControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/five.ViewLayer.html +1 -1
- package/docs/interfaces/five.WorkCubeImage.html +1 -1
- package/docs/interfaces/five.WorkImage.html +1 -1
- package/docs/interfaces/five.WorkObserver.html +2 -2
- package/docs/interfaces/five.WorkObserverProto.html +1 -1
- package/docs/interfaces/five.WorkTile.html +1 -1
- package/docs/interfaces/five.WorksEvent.html +1 -1
- package/docs/interfaces/five.XRControllerEvent.html +1 -1
- package/docs/interfaces/five.XRGestureEvent.html +1 -1
- package/docs/interfaces/five.XRPanoramaControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/five.XRSessionEvent.html +1 -1
- package/docs/interfaces/plugins.BackgroundPluginController.html +1 -1
- package/docs/interfaces/plugins.BackgroundPluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.BasePlugin.State.html +1 -1
- package/docs/interfaces/plugins.CSS2DPluginController.html +1 -1
- package/docs/interfaces/plugins.CSS2DPluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.CSS2DPluginType.State.html +1 -1
- package/docs/interfaces/plugins.CSS3DPluginController.html +1 -1
- package/docs/interfaces/plugins.CSS3DPluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.CSS3DPluginType.State.html +1 -1
- package/docs/interfaces/plugins.DynamicPathLinePluginController.html +1 -1
- package/docs/interfaces/plugins.DynamicPathLinePluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.DynamicPathLinePluginType.State.html +1 -1
- package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationController.html +1 -1
- package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationPluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationPluginType.State.html +1 -1
- package/docs/interfaces/plugins.ItemMaskController.html +1 -1
- package/docs/interfaces/plugins.ItemMaskPluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.ItemMaskPluginType.State.html +1 -1
- package/docs/interfaces/plugins.Object3DHelperPluginType.BaseController.html +1 -1
- package/docs/interfaces/plugins.Object3DHelperPluginType.BaseHelper.html +1 -1
- package/docs/interfaces/plugins.Object3DHelperPluginType.BoundingBoxController.html +1 -1
- package/docs/interfaces/plugins.Object3DHelperPluginType.MoveController.html +1 -1
- package/docs/interfaces/plugins.Object3DHelperPluginType.MoveHelperAbstract.html +1 -1
- package/docs/interfaces/plugins.Object3DHelperPluginType.RotateController.html +1 -1
- package/docs/interfaces/plugins.Object3DHelperPluginType.RotateHelperAbstract.html +1 -1
- package/docs/interfaces/plugins.OrientationPluginController.html +1 -1
- package/docs/interfaces/plugins.OrientationPluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.OrientationPluginType.State.html +1 -1
- package/docs/interfaces/plugins.PanoAnimeController.html +1 -1
- package/docs/interfaces/plugins.PanoAnimePluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.PanoAnimePluginType.State.html +1 -1
- package/docs/interfaces/plugins.PluginTemplateType.EventMap.html +1 -1
- package/docs/interfaces/plugins.PluginTemplateType.State.html +1 -1
- package/docs/interfaces/plugins.TrajectoryController.html +1 -1
- package/docs/interfaces/react.FiveInjectionTypes.html +2 -2
- package/docs/interfaces/react.UseFivePluginOptions.html +1 -1
- package/docs/interfaces/react.UseFivePluginOptionsWithCreate.html +1 -1
- package/docs/modules/five.html +1 -1
- package/docs/modules.html +1 -1
- package/docs/types/five.FlowingFireworks3DPassLine.html +16 -0
- package/docs/types/five.ParseOptions.html +1 -1
- package/docs/types/plugins.BasePlugin.EventMap.html +1 -1
- package/docs/variables/react.FiveCanvas.html +1 -1
- package/docs/variables/react.useFiveScene.html +1 -1
- package/docs/variables/vue.FiveCanvas.html +1 -1
- package/docs/variables/vue.FiveProvider.html +1 -1
- package/five/index.js +177 -106
- package/five/index.mjs +795 -639
- package/five/model/objects/pbmGaussianSplattingObject.d.ts +5 -5
- package/five/renderer/index.d.ts +1 -1
- package/five/renderer/postprocessing/index.d.ts +1 -1
- package/five/renderer/postprocessing/passes/flowing-fireworks-3d-pass.d.ts +4 -5
- package/gltf-loader/index.js +3 -3
- package/gltf-loader/index.mjs +3 -3
- package/line/index.js +3 -3
- package/line/index.mjs +3 -3
- package/package.json +1 -1
- package/{pbmGaussianSplattingObject-B2uXNUOB.cjs → pbmGaussianSplattingObject-C6i7CUTu.cjs} +3 -3
- package/{pbmGaussianSplattingObject-yJQySQfR.js → pbmGaussianSplattingObject-CaE6q4r-.js} +16 -20
- package/plugins/index.js +2 -2
- package/plugins/index.mjs +2 -2
- package/react/index.js +2 -2
- package/react/index.mjs +2 -2
- package/shader-lib/index.js +2 -2
- package/shader-lib/index.mjs +2 -2
- package/sticker/index.js +3 -3
- package/sticker/index.mjs +3 -3
- package/umd/five-gltf-loader.js +3 -3
- package/umd/five-line.js +3 -3
- package/umd/five-plugins.js +2 -2
- package/umd/five-react.js +2 -2
- package/umd/five-shader-lib.js +2 -2
- package/umd/five-sticker.js +3 -3
- package/umd/five-vfx.js +2 -2
- package/umd/five-vue.js +2 -2
- package/umd/five.js +151 -80
- package/vfx/index.js +2 -2
- package/vfx/index.mjs +2 -2
- package/vue/index.js +2 -2
- package/vue/index.mjs +2 -2
- package/work-downloader/index.js +2 -2
- package/work-downloader/index.mjs +2 -2
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<blockquote>
|
|
11
11
|
<p><strong>Definition</strong>: <a href="../../five/application/fiveInitArgs.d.ts">FiveInitArgs</a></p>
|
|
12
12
|
</blockquote>
|
|
13
|
-
<pre><code class="typescript"><span class="hl-
|
|
13
|
+
<pre><code class="typescript"><span class="hl-8">interface</span><span class="hl-1"> </span><span class="hl-9">FiveInitArgs</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">/**</span><br/><span class="hl-7"> * 请求代理函数</span><br/><span class="hl-7"> * </span><span class="hl-8">@description</span><span class="hl-7"> 在 Five 内部发起任何网络请求(如加载图片、模型、配置)之前调用。</span><br/><span class="hl-7"> * </span><span class="hl-8">@param</span><span class="hl-7"> </span><span class="hl-5">url</span><span class="hl-7"> - 原始请求 URL</span><br/><span class="hl-7"> * </span><span class="hl-8">@returns</span><span class="hl-7"> 修改后的 URL (string) 或异步返回修改后的 URL (Promise<string>)</span><br/><span class="hl-7"> */</span><br/><span class="hl-1"> </span><span class="hl-4">requestProxy</span><span class="hl-1">?: (</span><span class="hl-5">url</span><span class="hl-1">: </span><span class="hl-9">string</span><span class="hl-1">) </span><span class="hl-8">=></span><span class="hl-1"> </span><span class="hl-9">string</span><span class="hl-1"> | </span><span class="hl-9">Promise</span><span class="hl-1"><</span><span class="hl-9">string</span><span class="hl-1">>;</span><br/><span class="hl-1">}</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>
|
|
@@ -46,17 +46,17 @@
|
|
|
46
46
|
<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>
|
|
47
47
|
<h3 id="1-基础用法:cdn-域名替换" class="tsd-anchor-link">1. 基础用法:CDN 域名替换<a href="#1-基础用法:cdn-域名替换" 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>
|
|
48
48
|
<p>将图片资源请求分散到不同的 CDN 节点,加速加载。</p>
|
|
49
|
-
<pre><code class="typescript"><span class="hl-
|
|
49
|
+
<pre><code class="typescript"><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">five</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-4">Five</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-4">requestProxy</span><span class="hl-5">:</span><span class="hl-1"> (</span><span class="hl-5">url</span><span class="hl-1">) </span><span class="hl-8">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">// 简单的字符串替换示例</span><br/><span class="hl-1"> </span><span class="hl-11">return</span><span class="hl-1"> </span><span class="hl-5">url</span><span class="hl-1">.</span><span class="hl-4">replace</span><span class="hl-1">(</span><span class="hl-10">'//vrlab-public.ljcdn.com/'</span><span class="hl-1">, </span><span class="hl-10">'//vr-public.realsee-cdn.cn/'</span><span class="hl-1">);</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">});</span>
|
|
50
50
|
</code><button type="button">Copy</button></pre>
|
|
51
51
|
|
|
52
52
|
<h3 id="2-进阶用法:异步鉴权-async-auth" class="tsd-anchor-link">2. 进阶用法:异步鉴权 (Async Auth)<a href="#2-进阶用法:异步鉴权-async-auth" 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>对于需要动态获取 Token 的场景,可以使用 <code>Promise</code> 异步返回 URL。</p>
|
|
54
|
-
<pre><code class="typescript"><span class="hl-
|
|
54
|
+
<pre><code class="typescript"><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">five</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-4">Five</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-4">requestProxy</span><span class="hl-5">:</span><span class="hl-1"> </span><span class="hl-8">async</span><span class="hl-1"> (</span><span class="hl-5">url</span><span class="hl-1">) </span><span class="hl-8">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">// 仅对私有桶资源进行签名</span><br/><span class="hl-1"> </span><span class="hl-11">if</span><span class="hl-1"> (</span><span class="hl-5">url</span><span class="hl-1">.</span><span class="hl-4">includes</span><span class="hl-1">(</span><span class="hl-10">'private-bucket'</span><span class="hl-1">)) {</span><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">token</span><span class="hl-1"> = </span><span class="hl-11">await</span><span class="hl-1"> </span><span class="hl-4">fetchToken</span><span class="hl-1">(); </span><span class="hl-7">// 假设 fetchToken 是一个获取鉴权的异步函数</span><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">separator</span><span class="hl-1"> = </span><span class="hl-5">url</span><span class="hl-1">.</span><span class="hl-4">includes</span><span class="hl-1">(</span><span class="hl-10">'?'</span><span class="hl-1">) ? </span><span class="hl-10">'&'</span><span class="hl-1"> : </span><span class="hl-10">'?'</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-11">return</span><span class="hl-1"> </span><span class="hl-10">`</span><span class="hl-8">${</span><span class="hl-5">url</span><span class="hl-8">}${</span><span class="hl-5">separator</span><span class="hl-8">}</span><span class="hl-10">token=</span><span class="hl-8">${</span><span class="hl-5">token</span><span class="hl-8">}</span><span class="hl-10">`</span><span class="hl-1">;</span><br/><span class="hl-1"> }</span><br/><span class="hl-1"> </span><span class="hl-11">return</span><span class="hl-1"> </span><span class="hl-5">url</span><span class="hl-1">;</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">});</span>
|
|
55
55
|
</code><button type="button">Copy</button></pre>
|
|
56
56
|
|
|
57
57
|
<h3 id="3-开发调试:本地资源代理" class="tsd-anchor-link">3. 开发调试:本地资源代理<a href="#3-开发调试:本地资源代理" 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>
|
|
58
58
|
<p>在开发阶段,将特定资源重定向到本地文件。</p>
|
|
59
|
-
<pre><code class="typescript"><span class="hl-
|
|
59
|
+
<pre><code class="typescript"><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">proxyMap</span><span class="hl-1">: </span><span class="hl-9">Record</span><span class="hl-1"><</span><span class="hl-9">string</span><span class="hl-1">, </span><span class="hl-9">string</span><span class="hl-1">> = {};</span><br/><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">five</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-4">Five</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-4">requestProxy</span><span class="hl-5">:</span><span class="hl-1"> (</span><span class="hl-5">url</span><span class="hl-1">) </span><span class="hl-8">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">// 如果该 URL 在映射表中存在(例如通过 <input type="file"> 加载的本地 Blob URL),则使用映射值</span><br/><span class="hl-1"> </span><span class="hl-11">if</span><span class="hl-1"> (</span><span class="hl-5">proxyMap</span><span class="hl-1">[</span><span class="hl-5">url</span><span class="hl-1">]) {</span><br/><span class="hl-1"> </span><span class="hl-5">console</span><span class="hl-1">.</span><span class="hl-4">log</span><span class="hl-1">(</span><span class="hl-10">`[Proxy] Redirecting </span><span class="hl-8">${</span><span class="hl-5">url</span><span class="hl-8">}</span><span class="hl-10"> -> </span><span class="hl-8">${</span><span class="hl-5">proxyMap</span><span class="hl-12">[</span><span class="hl-5">url</span><span class="hl-12">]</span><span class="hl-8">}</span><span class="hl-10">`</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-11">return</span><span class="hl-1"> </span><span class="hl-5">proxyMap</span><span class="hl-1">[</span><span class="hl-5">url</span><span class="hl-1">];</span><br/><span class="hl-1"> }</span><br/><span class="hl-1"> </span><span class="hl-11">return</span><span class="hl-1"> </span><span class="hl-5">url</span><span class="hl-1">;</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">});</span>
|
|
60
60
|
</code><button type="button">Copy</button></pre>
|
|
61
61
|
|
|
62
62
|
<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>
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<blockquote>
|
|
10
10
|
<p><strong>Definition</strong>: <a href="../../five/application/five.d.ts">Five</a></p>
|
|
11
11
|
</blockquote>
|
|
12
|
-
<pre><code class="typescript"><span class="hl-
|
|
12
|
+
<pre><code class="typescript"><span class="hl-7">// defined in Five class</span><br/><span class="hl-8">interface</span><span class="hl-1"> </span><span class="hl-9">Five</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">/**</span><br/><span class="hl-7"> * 计算三维坐标对应到屏幕的二维坐标</span><br/><span class="hl-7"> * </span><span class="hl-8">@param</span><span class="hl-7"> </span><span class="hl-5">vector</span><span class="hl-7"> - 三维空间坐标 (World Space)</span><br/><span class="hl-7"> * </span><span class="hl-8">@param</span><span class="hl-7"> </span><span class="hl-5">testModel</span><span class="hl-7"> - 是否进行模型遮挡检测 (默认 false)。如果为 true,且该点被模型遮挡,则返回 null。</span><br/><span class="hl-7"> * </span><span class="hl-8">@returns</span><span class="hl-7"> 二维屏幕坐标 (相对于 Canvas 左上角) 或 null (如果点在视野外或被遮挡)</span><br/><span class="hl-7"> */</span><br/><span class="hl-1"> </span><span class="hl-4">project2d</span><span class="hl-1">(</span><span class="hl-5">vector</span><span class="hl-1">: </span><span class="hl-9">THREE</span><span class="hl-1">.</span><span class="hl-9">Vector3</span><span class="hl-1">, </span><span class="hl-5">testModel</span><span class="hl-1">?: </span><span class="hl-9">boolean</span><span class="hl-1">): </span><span class="hl-9">THREE</span><span class="hl-1">.</span><span class="hl-9">Vector2</span><span class="hl-1"> | </span><span class="hl-9">null</span><span class="hl-1">;</span><br/><span class="hl-1">}</span>
|
|
13
13
|
</code><button type="button">Copy</button></pre>
|
|
14
14
|
|
|
15
15
|
<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>
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
<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>
|
|
58
58
|
<h3 id="1-空间标签-3d-point-to-dom-label" class="tsd-anchor-link">1. 空间标签 (3D Point to DOM Label)<a href="#1-空间标签-3d-point-to-dom-label" 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>
|
|
59
59
|
<p>最典型的应用场景是在 3D 场景中的某个物体上方显示一个 HTML 标签。</p>
|
|
60
|
-
<pre><code class="typescript"><span class="hl-
|
|
60
|
+
<pre><code class="typescript"><span class="hl-11">import</span><span class="hl-1"> { </span><span class="hl-5">Five</span><span class="hl-1">, </span><span class="hl-5">Mode</span><span class="hl-1"> } </span><span class="hl-11">from</span><span class="hl-1"> </span><span class="hl-10">"@realsee/five"</span><span class="hl-1">;</span><br/><span class="hl-11">import</span><span class="hl-1"> </span><span class="hl-8">*</span><span class="hl-1"> </span><span class="hl-11">as</span><span class="hl-1"> </span><span class="hl-5">THREE</span><span class="hl-1"> </span><span class="hl-11">from</span><span class="hl-1"> </span><span class="hl-10">"three"</span><span class="hl-1">;</span><br/><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">five</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-4">Five</span><span class="hl-1">();</span><br/><span class="hl-7">// ... 初始化 five ...</span><br/><br/><span class="hl-7">// 1. 创建标签 DOM 元素</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">label</span><span class="hl-1"> = </span><span class="hl-5">document</span><span class="hl-1">.</span><span class="hl-4">createElement</span><span class="hl-1">(</span><span class="hl-10">"div"</span><span class="hl-1">);</span><br/><span class="hl-5">label</span><span class="hl-1">.</span><span class="hl-5">textContent</span><span class="hl-1"> = </span><span class="hl-10">"Living Room"</span><span class="hl-1">;</span><br/><span class="hl-5">label</span><span class="hl-1">.</span><span class="hl-5">style</span><span class="hl-1">.</span><span class="hl-5">position</span><span class="hl-1"> = </span><span class="hl-10">"absolute"</span><span class="hl-1">;</span><br/><span class="hl-5">label</span><span class="hl-1">.</span><span class="hl-5">style</span><span class="hl-1">.</span><span class="hl-5">padding</span><span class="hl-1"> = </span><span class="hl-10">"4px 8px"</span><span class="hl-1">;</span><br/><span class="hl-5">label</span><span class="hl-1">.</span><span class="hl-5">style</span><span class="hl-1">.</span><span class="hl-5">background</span><span class="hl-1"> = </span><span class="hl-10">"rgba(0, 0, 0, 0.6)"</span><span class="hl-1">;</span><br/><span class="hl-5">label</span><span class="hl-1">.</span><span class="hl-5">style</span><span class="hl-1">.</span><span class="hl-5">color</span><span class="hl-1"> = </span><span class="hl-10">"white"</span><span class="hl-1">;</span><br/><span class="hl-5">label</span><span class="hl-1">.</span><span class="hl-5">style</span><span class="hl-1">.</span><span class="hl-5">borderRadius</span><span class="hl-1"> = </span><span class="hl-10">"4px"</span><span class="hl-1">;</span><br/><span class="hl-5">label</span><span class="hl-1">.</span><span class="hl-5">style</span><span class="hl-1">.</span><span class="hl-5">pointerEvents</span><span class="hl-1"> = </span><span class="hl-10">"none"</span><span class="hl-1">; </span><span class="hl-7">// 避免阻挡鼠标事件</span><br/><span class="hl-5">label</span><span class="hl-1">.</span><span class="hl-5">style</span><span class="hl-1">.</span><span class="hl-5">transform</span><span class="hl-1"> = </span><span class="hl-10">"translate(-50%, -100%)"</span><span class="hl-1">; </span><span class="hl-7">// 居中并显示在点上方</span><br/><span class="hl-5">label</span><span class="hl-1">.</span><span class="hl-5">style</span><span class="hl-1">.</span><span class="hl-5">display</span><span class="hl-1"> = </span><span class="hl-10">"none"</span><span class="hl-1">; </span><span class="hl-7">// 默认隐藏</span><br/><span class="hl-5">document</span><span class="hl-1">.</span><span class="hl-5">body</span><span class="hl-1">.</span><span class="hl-4">appendChild</span><span class="hl-1">(</span><span class="hl-5">label</span><span class="hl-1">); </span><span class="hl-7">// 添加到 container (注意 container 的定位 context)</span><br/><br/><span class="hl-7">// 2. 定义目标空间坐标 (例如客厅中心)</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">targetPosition</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector3</span><span class="hl-1">(</span><span class="hl-3">1.5</span><span class="hl-1">, </span><span class="hl-3">2.0</span><span class="hl-1">, -</span><span class="hl-3">3.0</span><span class="hl-1">);</span><br/><br/><span class="hl-7">// 3. 在每一帧渲染时更新标签位置</span><br/><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">on</span><span class="hl-1">(</span><span class="hl-10">"render.prepare"</span><span class="hl-1">, () </span><span class="hl-8">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">// 计算屏幕坐标</span><br/><span class="hl-1"> </span><span class="hl-7">// 参数2: false 表示不检测遮挡 (性能更好);true 表示如果被墙挡住则隐藏</span><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">screenPos</span><span class="hl-1"> = </span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">project2d</span><span class="hl-1">(</span><span class="hl-5">targetPosition</span><span class="hl-1">, </span><span class="hl-8">true</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-11">if</span><span class="hl-1"> (</span><span class="hl-5">screenPos</span><span class="hl-1"> === </span><span class="hl-8">null</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-7">// 如果返回 null,说明点在相机背面,或者被遮挡(如果开启了 testModel)</span><br/><span class="hl-1"> </span><span class="hl-5">label</span><span class="hl-1">.</span><span class="hl-5">style</span><span class="hl-1">.</span><span class="hl-5">display</span><span class="hl-1"> = </span><span class="hl-10">"none"</span><span class="hl-1">;</span><br/><span class="hl-1"> } </span><span class="hl-11">else</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">label</span><span class="hl-1">.</span><span class="hl-5">style</span><span class="hl-1">.</span><span class="hl-5">display</span><span class="hl-1"> = </span><span class="hl-10">"block"</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-7">// 更新 DOM 位置</span><br/><span class="hl-1"> </span><span class="hl-7">// 注意:screenPos 是相对于 Canvas 的坐标。</span><br/><span class="hl-1"> </span><span class="hl-7">// 如果 Canvas 占满全屏,直接使用即可。</span><br/><span class="hl-1"> </span><span class="hl-7">// 如果 Canvas 有偏移,需加上 Canvas 的 offset。</span><br/><span class="hl-1"> </span><span class="hl-5">label</span><span class="hl-1">.</span><span class="hl-5">style</span><span class="hl-1">.</span><span class="hl-5">left</span><span class="hl-1"> = </span><span class="hl-10">`</span><span class="hl-8">${</span><span class="hl-5">screenPos</span><span class="hl-12">.</span><span class="hl-5">x</span><span class="hl-8">}</span><span class="hl-10">px`</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-5">label</span><span class="hl-1">.</span><span class="hl-5">style</span><span class="hl-1">.</span><span class="hl-5">top</span><span class="hl-1"> = </span><span class="hl-10">`</span><span class="hl-8">${</span><span class="hl-5">screenPos</span><span class="hl-12">.</span><span class="hl-5">y</span><span class="hl-8">}</span><span class="hl-10">px`</span><span class="hl-1">;</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">});</span>
|
|
61
61
|
</code><button type="button">Copy</button></pre>
|
|
62
62
|
|
|
63
63
|
<h3 id="2-屏幕点击转射线-screen-to-ray" class="tsd-anchor-link">2. 屏幕点击转射线 (Screen to Ray)<a href="#2-屏幕点击转射线-screen-to-ray" 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>
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
<blockquote>
|
|
66
66
|
<p><strong>注意</strong>: 更多射线检测细节请参考 <a href="features_raycast.html">Raycast</a>。</p>
|
|
67
67
|
</blockquote>
|
|
68
|
-
<pre><code class="typescript"><span class="hl-
|
|
68
|
+
<pre><code class="typescript"><span class="hl-11">import</span><span class="hl-1"> </span><span class="hl-8">*</span><span class="hl-1"> </span><span class="hl-11">as</span><span class="hl-1"> </span><span class="hl-5">THREE</span><span class="hl-1"> </span><span class="hl-11">from</span><span class="hl-1"> </span><span class="hl-10">"three"</span><span class="hl-1">;</span><br/><br/><span class="hl-7">// 假设 container 是 five 的容器元素</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">container</span><span class="hl-1"> = </span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">getElement</span><span class="hl-1">()!.</span><span class="hl-5">parentElement</span><span class="hl-1">!;</span><br/><br/><span class="hl-5">container</span><span class="hl-1">.</span><span class="hl-4">addEventListener</span><span class="hl-1">(</span><span class="hl-10">"click"</span><span class="hl-1">, (</span><span class="hl-5">event</span><span class="hl-1">) </span><span class="hl-8">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">raycaster</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Raycaster</span><span class="hl-1">();</span><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">mouse</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">();</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// 1. 计算 NDC 坐标 (x, y 范围 [-1, 1])</span><br/><span class="hl-1"> </span><span class="hl-7">// event.clientX/Y 是相对于视口的坐标</span><br/><span class="hl-1"> </span><span class="hl-7">// getBoundingClientRect 用于获取容器的位置</span><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">rect</span><span class="hl-1"> = </span><span class="hl-5">container</span><span class="hl-1">.</span><span class="hl-4">getBoundingClientRect</span><span class="hl-1">();</span><br/><br/><span class="hl-1"> </span><span class="hl-5">mouse</span><span class="hl-1">.</span><span class="hl-5">x</span><span class="hl-1"> = ((</span><span class="hl-5">event</span><span class="hl-1">.</span><span class="hl-5">clientX</span><span class="hl-1"> - </span><span class="hl-5">rect</span><span class="hl-1">.</span><span class="hl-5">left</span><span class="hl-1">) / </span><span class="hl-5">rect</span><span class="hl-1">.</span><span class="hl-5">width</span><span class="hl-1">) * </span><span class="hl-3">2</span><span class="hl-1"> - </span><span class="hl-3">1</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-5">mouse</span><span class="hl-1">.</span><span class="hl-5">y</span><span class="hl-1"> = -((</span><span class="hl-5">event</span><span class="hl-1">.</span><span class="hl-5">clientY</span><span class="hl-1"> - </span><span class="hl-5">rect</span><span class="hl-1">.</span><span class="hl-5">top</span><span class="hl-1">) / </span><span class="hl-5">rect</span><span class="hl-1">.</span><span class="hl-5">height</span><span class="hl-1">) * </span><span class="hl-3">2</span><span class="hl-1"> + </span><span class="hl-3">1</span><span class="hl-1">; </span><span class="hl-7">// 注意 Y 轴翻转</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// 2. 从相机发射射线</span><br/><span class="hl-1"> </span><span class="hl-5">raycaster</span><span class="hl-1">.</span><span class="hl-4">setFromCamera</span><span class="hl-1">(</span><span class="hl-5">mouse</span><span class="hl-1">, </span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-5">camera</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// 3. 进行相交检测</span><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">intersects</span><span class="hl-1"> = </span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-5">model</span><span class="hl-1">.</span><span class="hl-4">intersectRaycaster</span><span class="hl-1">(</span><span class="hl-5">raycaster</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-11">if</span><span class="hl-1"> (</span><span class="hl-5">intersects</span><span class="hl-1">.</span><span class="hl-5">length</span><span class="hl-1"> > </span><span class="hl-3">0</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-5">console</span><span class="hl-1">.</span><span class="hl-4">log</span><span class="hl-1">(</span><span class="hl-10">"Hit point:"</span><span class="hl-1">, </span><span class="hl-5">intersects</span><span class="hl-1">[</span><span class="hl-3">0</span><span class="hl-1">].</span><span class="hl-5">point</span><span class="hl-1">);</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">});</span>
|
|
69
69
|
</code><button type="button">Copy</button></pre>
|
|
70
70
|
|
|
71
71
|
<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>
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<p><strong>Definition</strong>: <a href="../../five/types/state.d.ts">State</a></p>
|
|
11
11
|
</blockquote>
|
|
12
12
|
<p><strong>State</strong> 类型定义如下(继承自 <code>Pose</code>):</p>
|
|
13
|
-
<pre><code class="ts"><span class="hl-
|
|
13
|
+
<pre><code class="ts"><span class="hl-11">import</span><span class="hl-1"> </span><span class="hl-8">*</span><span class="hl-1"> </span><span class="hl-11">as</span><span class="hl-1"> </span><span class="hl-5">THREE</span><span class="hl-1"> </span><span class="hl-11">from</span><span class="hl-1"> </span><span class="hl-10">"three"</span><span class="hl-1">;</span><br/><span class="hl-11">import</span><span class="hl-1"> { </span><span class="hl-5">Mode</span><span class="hl-1"> } </span><span class="hl-11">from</span><span class="hl-1"> </span><span class="hl-10">"@realsee/five"</span><span class="hl-1">;</span><br/><br/><span class="hl-8">interface</span><span class="hl-1"> </span><span class="hl-9">Pose</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">/** 相机偏航角 (水平方向),单位:弧度 */</span><br/><span class="hl-1"> </span><span class="hl-5">longitude</span><span class="hl-1">: </span><span class="hl-9">number</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-7">/** 相机俯仰角 (垂直方向),单位:弧度 */</span><br/><span class="hl-1"> </span><span class="hl-5">latitude</span><span class="hl-1">: </span><span class="hl-9">number</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-7">/** 相机垂直视场角,单位:度 */</span><br/><span class="hl-1"> </span><span class="hl-5">fov</span><span class="hl-1">: </span><span class="hl-9">number</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-7">/** 相机看向的目标中心点坐标 */</span><br/><span class="hl-1"> </span><span class="hl-5">offset</span><span class="hl-1">: </span><span class="hl-9">THREE</span><span class="hl-1">.</span><span class="hl-9">Vector3</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-7">/** 相机距离目标中心点的距离 */</span><br/><span class="hl-1"> </span><span class="hl-5">distance</span><span class="hl-1">: </span><span class="hl-9">number</span><span class="hl-1">;</span><br/><span class="hl-1">}</span><br/><br/><span class="hl-8">interface</span><span class="hl-1"> </span><span class="hl-9">State</span><span class="hl-1"> </span><span class="hl-8">extends</span><span class="hl-1"> </span><span class="hl-9">Pose</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">/** 显示模式 */</span><br/><span class="hl-1"> </span><span class="hl-5">mode</span><span class="hl-1">: </span><span class="hl-9">Mode</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-7">/** 当前点位的唯一标识 (workCode) */</span><br/><span class="hl-1"> </span><span class="hl-5">workCode</span><span class="hl-1">: </span><span class="hl-9">string</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-7">/** 当前点位在列表中的索引 */</span><br/><span class="hl-1"> </span><span class="hl-5">panoIndex</span><span class="hl-1">: </span><span class="hl-9">number</span><span class="hl-1">;</span><br/><span class="hl-1">}</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>
|
|
@@ -46,12 +46,12 @@
|
|
|
46
46
|
<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>
|
|
47
47
|
<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>
|
|
48
48
|
<p>使用 <code>setState</code> 更新状态:</p>
|
|
49
|
-
<pre><code class="ts"><span class="hl-
|
|
49
|
+
<pre><code class="ts"><span class="hl-7">// 切换到户型图模式,并旋转相机到 45 度</span><br/><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">setState</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-5">mode:</span><span class="hl-1"> </span><span class="hl-10">'Floorplan'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">longitude:</span><span class="hl-1"> </span><span class="hl-5">Math</span><span class="hl-1">.</span><span class="hl-6">PI</span><span class="hl-1"> / </span><span class="hl-3">4</span><br/><span class="hl-1">});</span>
|
|
50
50
|
</code><button type="button">Copy</button></pre>
|
|
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-
|
|
54
|
+
<pre><code class="ts"><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">state</span><span class="hl-1"> = </span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-5">state</span><span class="hl-1">;</span><br/><br/><span class="hl-7">// 在当前状态基础上,向右旋转 90 度,并略微拉远距离</span><br/><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">setState</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-5">longitude:</span><span class="hl-1"> </span><span class="hl-5">state</span><span class="hl-1">.</span><span class="hl-5">longitude</span><span class="hl-1"> + </span><span class="hl-5">Math</span><span class="hl-1">.</span><span class="hl-6">PI</span><span class="hl-1"> / </span><span class="hl-3">2</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">distance:</span><span class="hl-1"> </span><span class="hl-5">state</span><span class="hl-1">.</span><span class="hl-5">distance</span><span class="hl-1"> + </span><span class="hl-3">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>
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
<li><strong>异步更新</strong>: <code>setState</code> 触发的相机运动是异步动画过程。如果需要立即无动画跳转,可传递第二个参数 <code>immediately: true</code>。</li>
|
|
62
62
|
<li><strong>JSON 序列化</strong>: <code>State</code> 中的 <code>offset</code> 是 <code>THREE.Vector3</code> 实例,不能直接 <code>JSON.stringify</code>。保存时需手动提取 <code>{ x, y, z }</code>,恢复时需重新构造 <code>new THREE.Vector3(x, y, z)</code>。</li>
|
|
63
63
|
</ol>
|
|
64
|
-
<pre><code class="typescript"><span class="hl-
|
|
64
|
+
<pre><code class="typescript"><span class="hl-7">// 保存</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">snapshot</span><span class="hl-1"> = {</span><br/><span class="hl-1"> ...</span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-5">state</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">offset:</span><span class="hl-1"> { </span><span class="hl-5">x:</span><span class="hl-1"> </span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-5">state</span><span class="hl-1">.</span><span class="hl-5">offset</span><span class="hl-1">.</span><span class="hl-5">x</span><span class="hl-1">, </span><span class="hl-5">y:</span><span class="hl-1"> </span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-5">state</span><span class="hl-1">.</span><span class="hl-5">offset</span><span class="hl-1">.</span><span class="hl-5">y</span><span class="hl-1">, </span><span class="hl-5">z:</span><span class="hl-1"> </span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-5">state</span><span class="hl-1">.</span><span class="hl-5">offset</span><span class="hl-1">.</span><span class="hl-5">z</span><span class="hl-1"> }</span><br/><span class="hl-1">};</span><br/><span class="hl-5">localStorage</span><span class="hl-1">.</span><span class="hl-4">setItem</span><span class="hl-1">(</span><span class="hl-10">'fiveState'</span><span class="hl-1">, </span><span class="hl-6">JSON</span><span class="hl-1">.</span><span class="hl-4">stringify</span><span class="hl-1">(</span><span class="hl-5">snapshot</span><span class="hl-1">));</span><br/><br/><span class="hl-7">// 恢复</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">saved</span><span class="hl-1"> = </span><span class="hl-6">JSON</span><span class="hl-1">.</span><span class="hl-4">parse</span><span class="hl-1">(</span><span class="hl-5">localStorage</span><span class="hl-1">.</span><span class="hl-4">getItem</span><span class="hl-1">(</span><span class="hl-10">'fiveState'</span><span class="hl-1">)!);</span><br/><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">setState</span><span class="hl-1">({</span><br/><span class="hl-1"> ...</span><span class="hl-5">saved</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">offset:</span><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector3</span><span class="hl-1">(</span><span class="hl-5">saved</span><span class="hl-1">.</span><span class="hl-5">offset</span><span class="hl-1">.</span><span class="hl-5">x</span><span class="hl-1">, </span><span class="hl-5">saved</span><span class="hl-1">.</span><span class="hl-5">offset</span><span class="hl-1">.</span><span class="hl-5">y</span><span class="hl-1">, </span><span class="hl-5">saved</span><span class="hl-1">.</span><span class="hl-5">offset</span><span class="hl-1">.</span><span class="hl-5">z</span><span class="hl-1">)</span><br/><span class="hl-1">}, </span><span class="hl-8">true</span><span class="hl-1">);</span>
|
|
65
65
|
</code><button type="button">Copy</button></pre>
|
|
66
66
|
|
|
67
67
|
<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>
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<p><strong>Definition</strong>: <a href="../../five/model/view-layer.d.ts">ViewLayer</a>, <a href="../../five/model/view-layer.d.ts">ViewLayerInit</a></p>
|
|
11
11
|
</blockquote>
|
|
12
12
|
<p>ViewLayer 是一个具体的渲染图层,它对应一个具体的 3D 数据源(通常是一个 <code>.gltf</code> / <code>.b3dm</code> / <code>.pnts</code> 等 Tileset 入口)。</p>
|
|
13
|
-
<pre><code class="typescript"><span class="hl-
|
|
13
|
+
<pre><code class="typescript"><span class="hl-7">// 简化定义</span><br/><span class="hl-8">interface</span><span class="hl-1"> </span><span class="hl-9">ViewLayer</span><span class="hl-1"> </span><span class="hl-8">extends</span><span class="hl-1"> </span><span class="hl-9">Tile3D</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">/** 图层名称 (如 'mesh', 'point_cloud') */</span><br/><span class="hl-1"> </span><span class="hl-5">name</span><span class="hl-1">: </span><span class="hl-9">string</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-7">/** 图层类型 */</span><br/><span class="hl-1"> </span><span class="hl-5">type</span><span class="hl-1">: </span><span class="hl-10">"point_cloud"</span><span class="hl-1"> | </span><span class="hl-10">"mesh"</span><span class="hl-1"> | </span><span class="hl-10">"gaussian_splatting"</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-7">/** 独立的参数配置对象 */</span><br/><span class="hl-1"> </span><span class="hl-5">parameter</span><span class="hl-1">: </span><span class="hl-9">Parameter</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-7">/** 是否可见 */</span><br/><span class="hl-1"> </span><span class="hl-5">visible</span><span class="hl-1">: </span><span class="hl-9">boolean</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-7">/** 对应的 Tileset URL */</span><br/><span class="hl-1"> </span><span class="hl-5">tilesetUrl</span><span class="hl-1">: </span><span class="hl-9">string</span><span class="hl-1">;</span><br/><span class="hl-1">}</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>
|
|
@@ -133,15 +133,15 @@ Five 会遍历这个数组,为每一项创建一个 <code>ViewLayer</code> 实
|
|
|
133
133
|
</blockquote>
|
|
134
134
|
<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>
|
|
135
135
|
<h3 id="1-访问-viewlayer" class="tsd-anchor-link">1. 访问 ViewLayer<a href="#1-访问-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>
|
|
136
|
-
<pre><code class="typescript"><span class="hl-
|
|
136
|
+
<pre><code class="typescript"><span class="hl-7">// 获取当前模型</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">model</span><span class="hl-1"> = </span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-5">model</span><span class="hl-1">;</span><br/><br/><span class="hl-7">// 遍历所有图层</span><br/><span class="hl-5">model</span><span class="hl-1">.</span><span class="hl-5">viewLayers</span><span class="hl-1">.</span><span class="hl-4">forEach</span><span class="hl-1">(</span><span class="hl-5">layer</span><span class="hl-1"> </span><span class="hl-8">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">console</span><span class="hl-1">.</span><span class="hl-4">log</span><span class="hl-1">(</span><span class="hl-10">`Layer Name: </span><span class="hl-8">${</span><span class="hl-5">layer</span><span class="hl-12">.</span><span class="hl-5">name</span><span class="hl-8">}</span><span class="hl-10">, Type: </span><span class="hl-8">${</span><span class="hl-5">layer</span><span class="hl-12">.</span><span class="hl-5">type</span><span class="hl-8">}</span><span class="hl-10">`</span><span class="hl-1">);</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-7">// 查找特定的图层 (例如点云层)</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">pointCloudLayer</span><span class="hl-1"> = </span><span class="hl-5">model</span><span class="hl-1">.</span><span class="hl-5">viewLayers</span><span class="hl-1">.</span><span class="hl-4">find</span><span class="hl-1">(</span><span class="hl-5">layer</span><span class="hl-1"> </span><span class="hl-8">=></span><span class="hl-1"> </span><span class="hl-5">layer</span><span class="hl-1">.</span><span class="hl-5">type</span><span class="hl-1"> === </span><span class="hl-10">'point_cloud'</span><span class="hl-1">);</span>
|
|
137
137
|
</code><button type="button">Copy</button></pre>
|
|
138
138
|
|
|
139
139
|
<h3 id="2-独立控制图层可见性" class="tsd-anchor-link">2. 独立控制图层可见性<a href="#2-独立控制图层可见性" 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>
|
|
140
|
-
<pre><code class="typescript"><span class="hl-
|
|
140
|
+
<pre><code class="typescript"><span class="hl-7">// 方式 A: 运行时控制</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">meshLayer</span><span class="hl-1"> = </span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-5">model</span><span class="hl-1">.</span><span class="hl-5">viewLayers</span><span class="hl-1">.</span><span class="hl-4">find</span><span class="hl-1">(</span><span class="hl-5">layer</span><span class="hl-1"> </span><span class="hl-8">=></span><span class="hl-1"> </span><span class="hl-5">layer</span><span class="hl-1">.</span><span class="hl-5">type</span><span class="hl-1"> === </span><span class="hl-10">'mesh'</span><span class="hl-1">);</span><br/><br/><span class="hl-11">if</span><span class="hl-1"> (</span><span class="hl-5">meshLayer</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-7">// 隐藏模型层,只看点云</span><br/><span class="hl-1"> </span><span class="hl-5">meshLayer</span><span class="hl-1">.</span><span class="hl-5">visible</span><span class="hl-1"> = </span><span class="hl-8">false</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-7">// 或者通过 parameter 设置</span><br/><span class="hl-1"> </span><span class="hl-7">// meshLayer.parameter.set('visible', false);</span><br/><span class="hl-1">}</span><br/><br/><span class="hl-7">// 方式 B: 加载时控制 (初始化时仅显示 mesh)</span><br/><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">load</span><span class="hl-1">(</span><span class="hl-5">work</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-5">model:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-10">"3d-tiles"</span><span class="hl-5">:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">showLayers:</span><span class="hl-1"> [</span><span class="hl-10">'mesh'</span><span class="hl-1">] </span><span class="hl-7">// 仅显示 mesh 层,隐藏 point_cloud 等其他层</span><br/><span class="hl-1"> }</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">});</span>
|
|
141
141
|
</code><button type="button">Copy</button></pre>
|
|
142
142
|
|
|
143
143
|
<h3 id="3-修改特定图层的渲染参数" class="tsd-anchor-link">3. 修改特定图层的渲染参数<a href="#3-修改特定图层的渲染参数" 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>
|
|
144
|
-
<pre><code class="typescript"><span class="hl-
|
|
144
|
+
<pre><code class="typescript"><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">pointCloudLayer</span><span class="hl-1"> = </span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-5">model</span><span class="hl-1">.</span><span class="hl-5">viewLayers</span><span class="hl-1">.</span><span class="hl-4">find</span><span class="hl-1">(</span><span class="hl-5">layer</span><span class="hl-1"> </span><span class="hl-8">=></span><span class="hl-1"> </span><span class="hl-5">layer</span><span class="hl-1">.</span><span class="hl-5">type</span><span class="hl-1"> === </span><span class="hl-10">'point_cloud'</span><span class="hl-1">);</span><br/><br/><span class="hl-11">if</span><span class="hl-1"> (</span><span class="hl-5">pointCloudLayer</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-7">// 仅修改点云层的点大小,不影响其他模型</span><br/><span class="hl-1"> </span><span class="hl-5">pointCloudLayer</span><span class="hl-1">.</span><span class="hl-5">parameter</span><span class="hl-1">.</span><span class="hl-4">set</span><span class="hl-1">(</span><span class="hl-10">'pointSize'</span><span class="hl-1">, </span><span class="hl-3">2.0</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// 仅修改点云层的最大显存占用</span><br/><span class="hl-1"> </span><span class="hl-5">pointCloudLayer</span><span class="hl-1">.</span><span class="hl-5">parameter</span><span class="hl-1">.</span><span class="hl-4">set</span><span class="hl-1">(</span><span class="hl-10">'maxMemoryUsage'</span><span class="hl-1">, </span><span class="hl-3">128</span><span class="hl-1">);</span><br/><span class="hl-1">}</span>
|
|
145
145
|
</code><button type="button">Copy</button></pre>
|
|
146
146
|
|
|
147
147
|
<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>
|