@realsee/five 6.8.9 → 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 +10 -13
- 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/five.loadSpz.html +1 -1
- 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.SplatData.html +3 -6
- 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/gaussian-splatting/layerRegistry.d.ts +10 -0
- package/five/gaussian-splatting/orderTexture.d.ts +18 -0
- package/five/gaussian-splatting/reorderPass.d.ts +34 -0
- package/five/gaussian-splatting/shStore.d.ts +16 -0
- package/five/gaussian-splatting/splatAssembler.d.ts +60 -0
- package/five/gaussian-splatting/tileTexture.d.ts +10 -0
- package/five/gaussian-splatting/transformStore.d.ts +20 -0
- package/five/index.js +305 -169
- package/five/index.mjs +6684 -6508
- package/five/model/index.d.ts +0 -1
- package/five/model/loaders/spz.d.ts +19 -3
- package/five/model/objects/pbmGaussianSplattingObject.d.ts +10 -14
- package/five/model/objects/pbmGaussianSplattingRenderMesh.d.ts +48 -42
- 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 +2 -2
- package/pbmGaussianSplattingObject-C6i7CUTu.cjs +255 -0
- package/pbmGaussianSplattingObject-CaE6q4r-.js +324 -0
- 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 +218 -82
- 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
- package/docs/functions/five.loadSplat.html +0 -1
- package/five/gaussian-splatting/util/renderData.d.ts +0 -68
- package/five/model/loaders/splat.d.ts +0 -8
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
<p><strong>Definition</strong>: <a href="../../five/renderer/postprocessing/passes/gaussian-blur-pass.d.ts">GaussianBlurPass</a></p>
|
|
12
12
|
</blockquote>
|
|
13
13
|
<p><code>GaussianBlurPass</code> 是 <code>FivePass</code> 的子类,用于实现高斯模糊效果。其核心接口如下:</p>
|
|
14
|
-
<pre><code class="ts"><span class="hl-
|
|
14
|
+
<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">FivePass</span><span class="hl-1"> } </span><span class="hl-11">from</span><span class="hl-1"> </span><span class="hl-10">'./pass'</span><span class="hl-1">;</span><br/><span class="hl-11">import</span><span class="hl-1"> { </span><span class="hl-11">type</span><span class="hl-1"> </span><span class="hl-5">Camera</span><span class="hl-1"> } </span><span class="hl-11">from</span><span class="hl-1"> </span><span class="hl-10">'../../../core/camera'</span><span class="hl-1">;</span><br/><br/><span class="hl-11">export</span><span class="hl-1"> </span><span class="hl-8">class</span><span class="hl-1"> </span><span class="hl-9">GaussianBlurPass</span><span class="hl-1"> </span><span class="hl-8">extends</span><span class="hl-1"> </span><span class="hl-9">FivePass</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-8">constructor</span><span class="hl-1">(</span><span class="hl-5">camera</span><span class="hl-1">: </span><span class="hl-9">Camera</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-8">public</span><span class="hl-1"> </span><span class="hl-4">setRadius</span><span class="hl-1">(</span><span class="hl-5">radius</span><span class="hl-1">: </span><span class="hl-9">number</span><span class="hl-1">): </span><span class="hl-9">void</span><span class="hl-1">;</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// 渲染方法(由 EffectComposer 调用)</span><br/><span class="hl-1"> </span><span class="hl-8">public</span><span class="hl-1"> </span><span class="hl-4">render</span><span class="hl-1">(</span><br/><span class="hl-1"> </span><span class="hl-5">renderer</span><span class="hl-1">: </span><span class="hl-9">THREE</span><span class="hl-1">.</span><span class="hl-9">WebGLRenderer</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">writeBuffer</span><span class="hl-1">: </span><span class="hl-9">THREE</span><span class="hl-1">.</span><span class="hl-9">WebGLRenderTarget</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">readBuffer</span><span class="hl-1">: </span><span class="hl-9">THREE</span><span class="hl-1">.</span><span class="hl-9">WebGLRenderTarget</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">deltaTime</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-5">maskActive</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-9">void</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-8">public</span><span class="hl-1"> </span><span class="hl-4">dispose</span><span class="hl-1">(): </span><span class="hl-9">void</span><span class="hl-1">;</span><br/><span class="hl-1">}</span>
|
|
15
15
|
</code><button type="button">Copy</button></pre>
|
|
16
16
|
|
|
17
17
|
<h3 id="shader-uniforms-内部-shader-参数" class="tsd-anchor-link">Shader Uniforms (内部 Shader 参数)<a href="#shader-uniforms-内部-shader-参数" 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>
|
|
@@ -113,20 +113,20 @@
|
|
|
113
113
|
<p>释放 Shader Material 和 FullScreenQuad 资源。在销毁 Pass 时必须调用,以防内存泄漏。</p>
|
|
114
114
|
<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>
|
|
115
115
|
<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>
|
|
116
|
-
<pre><code class="ts"><span class="hl-
|
|
116
|
+
<pre><code class="ts"><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-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-5">GaussianBlurPass</span><span class="hl-1"> } </span><span class="hl-11">from</span><span class="hl-1"> </span><span class="hl-10">'../../lib/five/renderer/postprocessing'</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/><br/><span class="hl-7">// 使用 Five 的 addPass() 方法添加后处理通道</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">blurPass</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-4">GaussianBlurPass</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/><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">addPass</span><span class="hl-1">(</span><span class="hl-5">blurPass</span><span class="hl-1">);</span><br/><br/><span class="hl-7">// 动画循环由 Five 内部管理</span><br/><span class="hl-8">function</span><span class="hl-1"> </span><span class="hl-4">animate</span><span class="hl-1">() {</span><br/><span class="hl-1"> </span><span class="hl-4">requestAnimationFrame</span><span class="hl-1">(</span><span class="hl-5">animate</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-4">render</span><span class="hl-1">();</span><br/><span class="hl-1">}</span><br/><span class="hl-4">animate</span><span class="hl-1">();</span>
|
|
117
117
|
</code><button type="button">Copy</button></pre>
|
|
118
118
|
|
|
119
119
|
<h3 id="进阶用法-advanced-usage" class="tsd-anchor-link">进阶用法 (Advanced Usage)<a href="#进阶用法-advanced-usage" 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>
|
|
120
120
|
<h4 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></h4>
|
|
121
|
-
<pre><code class="ts"><span class="hl-
|
|
121
|
+
<pre><code class="ts"><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">blurPass</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-4">GaussianBlurPass</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/><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">addPass</span><span class="hl-1">(</span><span class="hl-5">blurPass</span><span class="hl-1">);</span><br/><br/><span class="hl-7">// 响应用户输入调整模糊半径</span><br/><span class="hl-5">document</span><span class="hl-1">.</span><span class="hl-4">addEventListener</span><span class="hl-1">(</span><span class="hl-10">'keydown'</span><span class="hl-1">, (</span><span class="hl-5">e</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-11">if</span><span class="hl-1"> (</span><span class="hl-5">e</span><span class="hl-1">.</span><span class="hl-5">key</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-8">const</span><span class="hl-1"> </span><span class="hl-6">current</span><span class="hl-1"> = </span><span class="hl-5">blurPass</span><span class="hl-1">[</span><span class="hl-10">'material'</span><span class="hl-1">].</span><span class="hl-5">uniforms</span><span class="hl-1">.</span><span class="hl-5">radius</span><span class="hl-1">.</span><span class="hl-5">value</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-5">blurPass</span><span class="hl-1">.</span><span class="hl-4">setRadius</span><span class="hl-1">(</span><span class="hl-5">Math</span><span class="hl-1">.</span><span class="hl-4">min</span><span class="hl-1">(</span><span class="hl-3">8</span><span class="hl-1">, </span><span class="hl-5">current</span><span class="hl-1"> + </span><span class="hl-3">0.5</span><span class="hl-1">));</span><br/><span class="hl-1"> }</span><br/><span class="hl-1"> </span><span class="hl-11">if</span><span class="hl-1"> (</span><span class="hl-5">e</span><span class="hl-1">.</span><span class="hl-5">key</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-8">const</span><span class="hl-1"> </span><span class="hl-6">current</span><span class="hl-1"> = </span><span class="hl-5">blurPass</span><span class="hl-1">[</span><span class="hl-10">'material'</span><span class="hl-1">].</span><span class="hl-5">uniforms</span><span class="hl-1">.</span><span class="hl-5">radius</span><span class="hl-1">.</span><span class="hl-5">value</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-5">blurPass</span><span class="hl-1">.</span><span class="hl-4">setRadius</span><span class="hl-1">(</span><span class="hl-5">Math</span><span class="hl-1">.</span><span class="hl-4">max</span><span class="hl-1">(</span><span class="hl-3">0</span><span class="hl-1">, </span><span class="hl-5">current</span><span class="hl-1"> - </span><span class="hl-3">0.5</span><span class="hl-1">));</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">});</span>
|
|
122
122
|
</code><button type="button">Copy</button></pre>
|
|
123
123
|
|
|
124
124
|
<h4 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></h4>
|
|
125
|
-
<pre><code class="ts"><span class="hl-
|
|
125
|
+
<pre><code class="ts"><span class="hl-7">// Five 的 addPass() 会自动管理后处理链</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">blurPass</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-4">GaussianBlurPass</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/><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">addPass</span><span class="hl-1">(</span><span class="hl-5">blurPass</span><span class="hl-1">);</span><br/><br/><span class="hl-7">// 可添加其他后处理通道</span><br/><span class="hl-7">// five.addPass(otherPass);</span>
|
|
126
126
|
</code><button type="button">Copy</button></pre>
|
|
127
127
|
|
|
128
128
|
<h4 id="修改高斯标准差-advanced" class="tsd-anchor-link">修改高斯标准差 (Advanced)<a href="#修改高斯标准差-advanced" 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>
|
|
129
|
-
<pre><code class="ts"><span class="hl-
|
|
129
|
+
<pre><code class="ts"><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">blurPass</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-4">GaussianBlurPass</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/><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">addPass</span><span class="hl-1">(</span><span class="hl-5">blurPass</span><span class="hl-1">);</span><br/><br/><span class="hl-7">// 获取 Material 并直接修改 sigma</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">sigmaMaterial</span><span class="hl-1"> = </span><span class="hl-5">blurPass</span><span class="hl-1">[</span><span class="hl-10">'material'</span><span class="hl-1">] </span><span class="hl-11">as</span><span class="hl-1"> </span><span class="hl-9">THREE</span><span class="hl-1">.</span><span class="hl-9">ShaderMaterial</span><span class="hl-1">;</span><br/><span class="hl-5">sigmaMaterial</span><span class="hl-1">.</span><span class="hl-5">uniforms</span><span class="hl-1">.</span><span class="hl-5">sigma</span><span class="hl-1">.</span><span class="hl-5">value</span><span class="hl-1"> = </span><span class="hl-3">2.0</span><span class="hl-1">; </span><span class="hl-7">// 调整标准差(更强锐利)</span>
|
|
130
130
|
</code><button type="button">Copy</button></pre>
|
|
131
131
|
|
|
132
132
|
<h2 id="debugging" class="tsd-anchor-link">Debugging<a href="#debugging" 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>
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
<li>考虑在低端设备上禁用该通道(设置 <code>blurPass.enabled = false</code>)。</li>
|
|
142
142
|
</ul>
|
|
143
143
|
<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>
|
|
144
|
-
<pre><code class="ts"><span class="hl-
|
|
144
|
+
<pre><code class="ts"><span class="hl-7">// 监控当前模糊参数</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">blurPass</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-4">GaussianBlurPass</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/><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">'Blur Radius:'</span><span class="hl-1">, </span><span class="hl-5">blurPass</span><span class="hl-1">[</span><span class="hl-10">'material'</span><span class="hl-1">].</span><span class="hl-5">uniforms</span><span class="hl-1">.</span><span class="hl-5">radius</span><span class="hl-1">.</span><span class="hl-5">value</span><span class="hl-1">);</span><br/><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">'Blur Sigma:'</span><span class="hl-1">, </span><span class="hl-5">blurPass</span><span class="hl-1">[</span><span class="hl-10">'material'</span><span class="hl-1">].</span><span class="hl-5">uniforms</span><span class="hl-1">.</span><span class="hl-5">sigma</span><span class="hl-1">.</span><span class="hl-5">value</span><span class="hl-1">);</span><br/><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">'Resolution:'</span><span class="hl-1">, </span><span class="hl-5">blurPass</span><span class="hl-1">[</span><span class="hl-10">'material'</span><span class="hl-1">].</span><span class="hl-5">uniforms</span><span class="hl-1">.</span><span class="hl-5">resolution</span><span class="hl-1">.</span><span class="hl-5">value</span><span class="hl-1">);</span>
|
|
145
145
|
</code><button type="button">Copy</button></pre>
|
|
146
146
|
|
|
147
147
|
<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/utils/event.d.ts">GestureEvent</a></p>
|
|
11
11
|
</blockquote>
|
|
12
12
|
<p>所有手势事件的回调参数均为 <code>GestureEvent</code> 类型:</p>
|
|
13
|
-
<pre><code class="typescript"><span class="hl-
|
|
13
|
+
<pre><code class="typescript"><span class="hl-11">import</span><span class="hl-1"> { </span><span class="hl-5">State</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">interface</span><span class="hl-1"> </span><span class="hl-9">GestureEvent</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">type</span><span class="hl-1">: </span><span class="hl-9">string</span><span class="hl-1">; </span><span class="hl-7">// 事件类型,如 "gesture.tap"</span><br/><span class="hl-1"> </span><span class="hl-5">timeStamp</span><span class="hl-1">: </span><span class="hl-9">number</span><span class="hl-1">; </span><span class="hl-7">// 时间戳</span><br/><span class="hl-1"> </span><span class="hl-5">target</span><span class="hl-1">: </span><span class="hl-9">EventTarget</span><span class="hl-1"> | </span><span class="hl-9">null</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-5">pointerType</span><span class="hl-1">: </span><span class="hl-10">'touch'</span><span class="hl-1"> | </span><span class="hl-10">'pen'</span><span class="hl-1"> | </span><span class="hl-10">'mouse'</span><span class="hl-1"> | </span><span class="hl-10">'kinect'</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">center</span><span class="hl-1">: {</span><br/><span class="hl-1"> </span><span class="hl-5">x</span><span class="hl-1">: </span><span class="hl-9">number</span><span class="hl-1">; </span><span class="hl-7">// 屏幕 X 坐标</span><br/><span class="hl-1"> </span><span class="hl-5">y</span><span class="hl-1">: </span><span class="hl-9">number</span><span class="hl-1">; </span><span class="hl-7">// 屏幕 Y 坐标</span><br/><span class="hl-1"> </span><span class="hl-5">raycaster</span><span class="hl-1">: </span><span class="hl-9">THREE</span><span class="hl-1">.</span><span class="hl-9">Raycaster</span><span class="hl-1">; </span><span class="hl-7">// 从相机发出的射线(已包含坐标变换)</span><br/><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">state</span><span class="hl-1">: </span><span class="hl-9">State</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">userAction</span><span class="hl-1">: </span><span class="hl-9">boolean</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-4">preventDefault</span><span class="hl-1">(): </span><span class="hl-9">void</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-5">defaultPrevented</span><span class="hl-1">: </span><span class="hl-9">boolean</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>
|
|
@@ -79,25 +79,25 @@
|
|
|
79
79
|
<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>
|
|
80
80
|
<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>
|
|
81
81
|
<p>监听点击事件并打印日志:</p>
|
|
82
|
-
<pre><code class="typescript"><span class="hl-
|
|
82
|
+
<pre><code class="typescript"><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">"gesture.tap"</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-5">console</span><span class="hl-1">.</span><span class="hl-4">log</span><span class="hl-1">(</span><span class="hl-10">"点击位置:"</span><span class="hl-1">, </span><span class="hl-5">event</span><span class="hl-1">.</span><span class="hl-5">center</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">center</span><span class="hl-1">.</span><span class="hl-5">y</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-7">// event.center.raycaster 可以用来做射线检测</span><br/><span class="hl-1">});</span>
|
|
83
83
|
</code><button type="button">Copy</button></pre>
|
|
84
84
|
|
|
85
85
|
<h3 id="场景交互:点击添加标签球-add-label-on-click" class="tsd-anchor-link">场景交互:点击添加标签球 (Add Label on Click)<a href="#场景交互:点击添加标签球-add-label-on-click" 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>
|
|
86
86
|
<p>这个示例展示了如何通过点击事件在场景中添加一个红色的球体,并阻止 Five 默认的点位移动行为。</p>
|
|
87
|
-
<pre><code class="typescript"><span class="hl-
|
|
87
|
+
<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/><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-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">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/><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">"gesture.tap"</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-7">// 1. 阻止默认行为(防止点击地面时 Five 自动走点或切换模式)</span><br/><span class="hl-1"> </span><span class="hl-5">event</span><span class="hl-1">.</span><span class="hl-4">preventDefault</span><span class="hl-1">();</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// 2. 获取射线</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-5">event</span><span class="hl-1">.</span><span class="hl-5">center</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-7">// 3. 检测与模型的碰撞</span><br/><span class="hl-1"> </span><span class="hl-7">// five.model.intersectRaycaster 是 Five 提供的便捷方法,会自动检测所有可见模型</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-8">const</span><span class="hl-1"> </span><span class="hl-6">intersect</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><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">point</span><span class="hl-1"> = </span><span class="hl-5">intersect</span><span class="hl-1">.</span><span class="hl-5">point</span><span class="hl-1">; </span><span class="hl-7">// 碰撞点世界坐标</span><br/><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">"点击到了模型,坐标:"</span><span class="hl-1">, </span><span class="hl-5">point</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// 4. 创建一个小球</span><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">geometry</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">SphereGeometry</span><span class="hl-1">(</span><span class="hl-3">0.1</span><span class="hl-1">, </span><span class="hl-3">32</span><span class="hl-1">, </span><span class="hl-3">32</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">material</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">MeshBasicMaterial</span><span class="hl-1">({ </span><span class="hl-5">color:</span><span class="hl-1"> </span><span class="hl-3">0xff0000</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">sphere</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">Mesh</span><span class="hl-1">(</span><span class="hl-5">geometry</span><span class="hl-1">, </span><span class="hl-5">material</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// 5. 设置位置并添加到场景</span><br/><span class="hl-1"> </span><span class="hl-5">sphere</span><span class="hl-1">.</span><span class="hl-5">position</span><span class="hl-1">.</span><span class="hl-4">copy</span><span class="hl-1">(</span><span class="hl-5">point</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">scene</span><span class="hl-1">.</span><span class="hl-4">add</span><span class="hl-1">(</span><span class="hl-5">sphere</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">five</span><span class="hl-1">.</span><span class="hl-5">needsRender</span><span class="hl-1"> = </span><span class="hl-8">true</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">console</span><span class="hl-1">.</span><span class="hl-4">log</span><span class="hl-1">(</span><span class="hl-10">"未点击到任何模型"</span><span class="hl-1">);</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">});</span>
|
|
88
88
|
</code><button type="button">Copy</button></pre>
|
|
89
89
|
|
|
90
90
|
<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>
|
|
91
|
-
<pre><code class="typescript"><span class="hl-
|
|
91
|
+
<pre><code class="typescript"><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">"gesture.pinch"</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-7">// 获取当前 FOV</span><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">currentFov</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">fov</span><span class="hl-1">;</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// 假设我们限制 FOV 在 80 到 100 之间</span><br/><span class="hl-1"> </span><span class="hl-7">// 注意:这只是逻辑演示,Five 内部有自己的 minFov/maxFov 配置,</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">currentFov</span><span class="hl-1"> < </span><span class="hl-3">80</span><span class="hl-1"> || </span><span class="hl-5">currentFov</span><span class="hl-1"> > </span><span class="hl-3">100</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-7">// 阻止 Five 的默认缩放</span><br/><span class="hl-1"> </span><span class="hl-5">event</span><span class="hl-1">.</span><span class="hl-4">preventDefault</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">"已达到缩放极限"</span><span class="hl-1">);</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">});</span>
|
|
92
92
|
</code><button type="button">Copy</button></pre>
|
|
93
93
|
|
|
94
94
|
<h2 id="debugging" class="tsd-anchor-link">Debugging<a href="#debugging" 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>
|
|
95
95
|
<ul>
|
|
96
|
-
<li><strong>查看事件触发</strong>: 在控制台监听所有手势。<pre><code class="typescript"><span class="hl-1">[</span><span class="hl-
|
|
96
|
+
<li><strong>查看事件触发</strong>: 在控制台监听所有手势。<pre><code class="typescript"><span class="hl-1">[</span><span class="hl-10">"pan"</span><span class="hl-1">, </span><span class="hl-10">"tap"</span><span class="hl-1">, </span><span class="hl-10">"pinch"</span><span class="hl-1">, </span><span class="hl-10">"press"</span><span class="hl-1">].</span><span class="hl-4">forEach</span><span class="hl-1">(</span><span class="hl-5">type</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">five</span><span class="hl-1">.</span><span class="hl-4">on</span><span class="hl-1">(</span><span class="hl-10">`gesture.</span><span class="hl-8">${</span><span class="hl-5">type</span><span class="hl-8">}</span><span class="hl-10">`</span><span class="hl-1"> </span><span class="hl-11">as</span><span class="hl-1"> </span><span class="hl-9">any</span><span class="hl-1">, (</span><span class="hl-5">e</span><span class="hl-1">) </span><span class="hl-8">=></span><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-5">type</span><span class="hl-1">, </span><span class="hl-5">e</span><span class="hl-1">));</span><br/><span class="hl-1">});</span>
|
|
97
97
|
</code><button type="button">Copy</button></pre>
|
|
98
98
|
|
|
99
99
|
</li>
|
|
100
|
-
<li><strong>Helper Line</strong>: 如果射线检测不准,可以画出射线辅助线。<pre><code class="typescript"><span class="hl-
|
|
100
|
+
<li><strong>Helper Line</strong>: 如果射线检测不准,可以画出射线辅助线。<pre><code class="typescript"><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-5">scene</span><span class="hl-1">.</span><span class="hl-4">add</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">ArrowHelper</span><span class="hl-1">(</span><span class="hl-5">raycaster</span><span class="hl-1">.</span><span class="hl-5">ray</span><span class="hl-1">.</span><span class="hl-5">direction</span><span class="hl-1">, </span><span class="hl-5">raycaster</span><span class="hl-1">.</span><span class="hl-5">ray</span><span class="hl-1">.</span><span class="hl-5">origin</span><span class="hl-1">, </span><span class="hl-3">10</span><span class="hl-1">, </span><span class="hl-3">0xff0000</span><span class="hl-1">));</span><br/><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-5">needsRender</span><span class="hl-1"> = </span><span class="hl-8">true</span><span class="hl-1">;</span>
|
|
101
101
|
</code><button type="button">Copy</button></pre>
|
|
102
102
|
|
|
103
103
|
</li>
|
|
@@ -11,11 +11,11 @@
|
|
|
11
11
|
</blockquote>
|
|
12
12
|
<p><code>five.getPixels</code> 支持两种调用方式:参数列表(旧版)和对象参数(推荐)。</p>
|
|
13
13
|
<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>
|
|
14
|
-
<pre><code class="typescript"><span class="hl-
|
|
14
|
+
<pre><code class="typescript"><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">getPixels</span><span class="hl-1">(</span><span class="hl-5">options</span><span class="hl-1">: </span><span class="hl-5">GetPixelsOptions</span><span class="hl-1">): </span><span class="hl-5">Uint8Array</span><span class="hl-1"> | </span><span class="hl-5">Uint8ClampedArray</span><span class="hl-1">;</span><br/><br/><span class="hl-8">interface</span><span class="hl-1"> </span><span class="hl-9">GetPixelsOptions</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">/** 获取像素区域的起始坐标 x (基于 Canvas 左下角,除非 flipY 为 true) */</span><br/><span class="hl-1"> </span><span class="hl-5">x</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">/** 获取像素区域的起始坐标 y */</span><br/><span class="hl-1"> </span><span class="hl-5">y</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">width</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">height</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">/** 获取区域的像素比 (默认 1) */</span><br/><span class="hl-1"> </span><span class="hl-5">pixelRatio</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">/** 是否显示辅助元素 (默认 false) */</span><br/><span class="hl-1"> </span><span class="hl-5">helperVisible</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">/** 是否跳过全景图渲染 (仅渲染模型) */</span><br/><span class="hl-1"> </span><span class="hl-5">skipPanorama</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">/** 是否 Y 轴翻转 (通常设为 true 以匹配 Canvas 2D 坐标系) */</span><br/><span class="hl-1"> </span><span class="hl-5">flipY</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">/** 存储数组 (可选,复用数组以提升性能) */</span><br/><span class="hl-1"> </span><span class="hl-5">buffer</span><span class="hl-1">?: </span><span class="hl-9">Uint8Array</span><span class="hl-1"> | </span><span class="hl-9">Uint8ClampedArray</span><span class="hl-1">;</span><br/><span class="hl-1">}</span>
|
|
15
15
|
</code><button type="button">Copy</button></pre>
|
|
16
16
|
|
|
17
17
|
<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>
|
|
18
|
-
<pre><code class="typescript"><span class="hl-
|
|
18
|
+
<pre><code class="typescript"><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">getPixels</span><span class="hl-1">(</span><br/><span class="hl-1"> </span><span class="hl-5">x</span><span class="hl-1">: </span><span class="hl-5">number</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">y</span><span class="hl-1">: </span><span class="hl-5">number</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">width</span><span class="hl-1">: </span><span class="hl-5">number</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">height</span><span class="hl-1">: </span><span class="hl-5">number</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">pixelRatio</span><span class="hl-1">?: </span><span class="hl-5">number</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">flipY</span><span class="hl-1">?: </span><span class="hl-5">boolean</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">buffer</span><span class="hl-1">?: </span><span class="hl-5">Uint8Array</span><span class="hl-1"> | </span><span class="hl-5">Uint8ClampedArray</span><br/><span class="hl-1">): </span><span class="hl-5">Uint8Array</span><span class="hl-1"> | </span><span class="hl-5">Uint8ClampedArray</span><span class="hl-1">;</span>
|
|
19
19
|
</code><button type="button">Copy</button></pre>
|
|
20
20
|
|
|
21
21
|
<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>
|
|
@@ -39,12 +39,12 @@
|
|
|
39
39
|
<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>
|
|
40
40
|
<h3 id="放大镜-magnifier" class="tsd-anchor-link">放大镜 (Magnifier)<a href="#放大镜-magnifier" 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>
|
|
41
41
|
<p>这是一个经典的放大镜实现示例。通过获取鼠标周围的像素,并以更高的 <code>pixelRatio</code> 重新渲染,从而获得清晰的放大效果。</p>
|
|
42
|
-
<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">'three'</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">'@realsee/five'</span><span class="hl-1">;</span><br/><br/><span class="hl-8">// 假设有一个用于显示的 canvas</span><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">magnifierCanvas</span><span class="hl-1"> = </span><span class="hl-6">document</span><span class="hl-1">.</span><span class="hl-5">getElementById</span><span class="hl-1">(</span><span class="hl-9">'magnifier-canvas'</span><span class="hl-1">) </span><span class="hl-10">as</span><span class="hl-1"> </span><span class="hl-7">HTMLCanvasElement</span><span class="hl-1">;</span><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">ctx</span><span class="hl-1"> = </span><span class="hl-6">magnifierCanvas</span><span class="hl-1">.</span><span class="hl-5">getContext</span><span class="hl-1">(</span><span class="hl-9">'2d'</span><span class="hl-1">)!;</span><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">magnifierSize</span><span class="hl-1"> = </span><span class="hl-11">200</span><span class="hl-1">; </span><span class="hl-8">// 放大镜尺寸 200px</span><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">scale</span><span class="hl-1"> = </span><span class="hl-11">2</span><span class="hl-1">; </span><span class="hl-8">// 放大倍数</span><br/><br/><span class="hl-8">// 预先创建 Buffer 以提升性能</span><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">pixelWidth</span><span class="hl-1"> = </span><span class="hl-6">magnifierSize</span><span class="hl-1"> * </span><span class="hl-6">scale</span><span class="hl-1">;</span><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">pixelHeight</span><span class="hl-1"> = </span><span class="hl-6">magnifierSize</span><span class="hl-1"> * </span><span class="hl-6">scale</span><span class="hl-1">;</span><br/><span class="hl-3">let</span><span class="hl-1"> </span><span class="hl-6">magnifierImageData</span><span class="hl-1"> = </span><span class="hl-6">ctx</span><span class="hl-1">.</span><span class="hl-5">createImageData</span><span class="hl-1">(</span><span class="hl-6">pixelWidth</span><span class="hl-1">, </span><span class="hl-6">pixelHeight</span><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">'gesture.mousemove'</span><span class="hl-1">, (</span><span class="hl-6">event</span><span class="hl-1">) </span><span class="hl-3">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-8">// 1. 获取鼠标在 Canvas 上的坐标</span><br/><span class="hl-1"> </span><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">mouse</span><span class="hl-1"> = </span><span class="hl-6">event</span><span class="hl-1">.</span><span class="hl-6">pointers</span><span class="hl-1">[</span><span class="hl-11">0</span><span class="hl-1">]?.</span><span class="hl-6">coords</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-10">if</span><span class="hl-1"> (!</span><span class="hl-6">mouse</span><span class="hl-1">) </span><span class="hl-10">return</span><span class="hl-1">;</span><br/><br/><span class="hl-1"> </span><span class="hl-8">// 转换归一化坐标 (-1 到 1) 到 像素坐标</span><br/><span class="hl-1"> </span><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">renderSize</span><span class="hl-1"> = </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">getSize</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">Vector2</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">x</span><span class="hl-1"> = (</span><span class="hl-6">mouse</span><span class="hl-1">.</span><span class="hl-6">x</span><span class="hl-1"> + </span><span class="hl-11">1</span><span class="hl-1">) / </span><span class="hl-11">2</span><span class="hl-1"> * </span><span class="hl-6">renderSize</span><span class="hl-1">.</span><span class="hl-6">x</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">y</span><span class="hl-1"> = (</span><span class="hl-6">mouse</span><span class="hl-1">.</span><span class="hl-6">y</span><span class="hl-1"> + </span><span class="hl-11">1</span><span class="hl-1">) / </span><span class="hl-11">2</span><span class="hl-1"> * </span><span class="hl-6">renderSize</span><span class="hl-1">.</span><span class="hl-6">y</span><span class="hl-1">;</span><br/><br/><span class="hl-1"> </span><span class="hl-8">// 2. 获取像素数据</span><br/><span class="hl-1"> </span><span class="hl-8">// 注意:我们以更高的分辨率 (pixelRatio * scale) 渲染小区域,从而获得“无损”放大效果</span><br/><span class="hl-1"> </span><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">pixelRatio</span><span class="hl-1"> = </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-6">renderer</span><span class="hl-1">?.</span><span class="hl-5">getPixelRatio</span><span class="hl-1">() ?? </span><span class="hl-11">1</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">targetPixelRatio</span><span class="hl-1"> = </span><span class="hl-6">Math</span><span class="hl-1">.</span><span class="hl-5">ceil</span><span class="hl-1">(</span><span class="hl-6">pixelRatio</span><span class="hl-1"> * </span><span class="hl-6">scale</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">getPixels</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-6">x:</span><span class="hl-1"> </span><span class="hl-6">x</span><span class="hl-1"> - </span><span class="hl-6">magnifierSize</span><span class="hl-1"> / </span><span class="hl-11">2</span><span class="hl-1">, </span><span class="hl-8">// 居中</span><br/><span class="hl-1"> </span><span class="hl-6">y:</span><span class="hl-1"> </span><span class="hl-6">y</span><span class="hl-1"> - </span><span class="hl-6">magnifierSize</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">width:</span><span class="hl-1"> </span><span class="hl-6">magnifierSize</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">height:</span><span class="hl-1"> </span><span class="hl-6">magnifierSize</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">pixelRatio:</span><span class="hl-1"> </span><span class="hl-6">targetPixelRatio</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">flipY:</span><span class="hl-1"> </span><span class="hl-3">true</span><span class="hl-1">, </span><span class="hl-8">// 翻转以适配 Canvas 2D</span><br/><span class="hl-1"> </span><span class="hl-6">buffer:</span><span class="hl-1"> </span><span class="hl-6">magnifierImageData</span><span class="hl-1">.</span><span class="hl-6">data</span><span class="hl-1">, </span><span class="hl-8">// 复用 buffer</span><br/><span class="hl-1"> </span><span class="hl-6">helperVisible:</span><span class="hl-1"> </span><span class="hl-3">false</span><span class="hl-1">, </span><span class="hl-8">// 隐藏辅助线等干扰元素</span><br/><span class="hl-1"> });</span><br/><br/><span class="hl-1"> </span><span class="hl-8">// 3. 将数据绘制到放大镜 Canvas 上</span><br/><span class="hl-1"> </span><span class="hl-8">// 需要调整 Canvas 尺寸以匹配数据</span><br/><span class="hl-1"> </span><span class="hl-6">magnifierCanvas</span><span class="hl-1">.</span><span class="hl-6">width</span><span class="hl-1"> = </span><span class="hl-6">pixelWidth</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-6">magnifierCanvas</span><span class="hl-1">.</span><span class="hl-6">height</span><span class="hl-1"> = </span><span class="hl-6">pixelHeight</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-6">ctx</span><span class="hl-1">.</span><span class="hl-5">putImageData</span><span class="hl-1">(</span><span class="hl-6">magnifierImageData</span><span class="hl-1">, </span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-11">0</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-8">// 4. 更新放大镜位置 (CSS)</span><br/><span class="hl-1"> </span><span class="hl-6">magnifierCanvas</span><span class="hl-1">.</span><span class="hl-6">style</span><span class="hl-1">.</span><span class="hl-6">left</span><span class="hl-1"> = </span><span class="hl-9">`</span><span class="hl-3">${</span><span class="hl-6">x</span><span class="hl-12"> </span><span class="hl-1">-</span><span class="hl-12"> </span><span class="hl-6">magnifierSize</span><span class="hl-12"> </span><span class="hl-1">/</span><span class="hl-12"> </span><span class="hl-11">2</span><span class="hl-3">}</span><span class="hl-9">px`</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-6">magnifierCanvas</span><span class="hl-1">.</span><span class="hl-6">style</span><span class="hl-1">.</span><span class="hl-6">top</span><span class="hl-1"> = </span><span class="hl-9">`</span><span class="hl-3">${</span><span class="hl-6">renderSize</span><span class="hl-12">.</span><span class="hl-6">y</span><span class="hl-12"> </span><span class="hl-1">-</span><span class="hl-12"> </span><span class="hl-6">y</span><span class="hl-12"> </span><span class="hl-1">-</span><span class="hl-12"> </span><span class="hl-6">magnifierSize</span><span class="hl-12"> </span><span class="hl-1">/</span><span class="hl-12"> </span><span class="hl-11">2</span><span class="hl-3">}</span><span class="hl-9">px`</span><span class="hl-1">; </span><span class="hl-8">// 注意 Y 轴方向</span><br/><span class="hl-1">});</span>
|
|
42
|
+
<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/><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-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-7">// 假设有一个用于显示的 canvas</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">magnifierCanvas</span><span class="hl-1"> = </span><span class="hl-5">document</span><span class="hl-1">.</span><span class="hl-4">getElementById</span><span class="hl-1">(</span><span class="hl-10">'magnifier-canvas'</span><span class="hl-1">) </span><span class="hl-11">as</span><span class="hl-1"> </span><span class="hl-9">HTMLCanvasElement</span><span class="hl-1">;</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">ctx</span><span class="hl-1"> = </span><span class="hl-5">magnifierCanvas</span><span class="hl-1">.</span><span class="hl-4">getContext</span><span class="hl-1">(</span><span class="hl-10">'2d'</span><span class="hl-1">)!;</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">magnifierSize</span><span class="hl-1"> = </span><span class="hl-3">200</span><span class="hl-1">; </span><span class="hl-7">// 放大镜尺寸 200px</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">scale</span><span class="hl-1"> = </span><span class="hl-3">2</span><span class="hl-1">; </span><span class="hl-7">// 放大倍数</span><br/><br/><span class="hl-7">// 预先创建 Buffer 以提升性能</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">pixelWidth</span><span class="hl-1"> = </span><span class="hl-5">magnifierSize</span><span class="hl-1"> * </span><span class="hl-5">scale</span><span class="hl-1">;</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">pixelHeight</span><span class="hl-1"> = </span><span class="hl-5">magnifierSize</span><span class="hl-1"> * </span><span class="hl-5">scale</span><span class="hl-1">;</span><br/><span class="hl-8">let</span><span class="hl-1"> </span><span class="hl-5">magnifierImageData</span><span class="hl-1"> = </span><span class="hl-5">ctx</span><span class="hl-1">.</span><span class="hl-4">createImageData</span><span class="hl-1">(</span><span class="hl-5">pixelWidth</span><span class="hl-1">, </span><span class="hl-5">pixelHeight</span><span class="hl-1">);</span><br/><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">'gesture.mousemove'</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-7">// 1. 获取鼠标在 Canvas 上的坐标</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-5">event</span><span class="hl-1">.</span><span class="hl-5">pointers</span><span class="hl-1">[</span><span class="hl-3">0</span><span class="hl-1">]?.</span><span class="hl-5">coords</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-11">if</span><span class="hl-1"> (!</span><span class="hl-5">mouse</span><span class="hl-1">) </span><span class="hl-11">return</span><span class="hl-1">;</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// 转换归一化坐标 (-1 到 1) 到 像素坐标</span><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">renderSize</span><span class="hl-1"> = </span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">getSize</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/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">x</span><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-3">1</span><span class="hl-1">) / </span><span class="hl-3">2</span><span class="hl-1"> * </span><span class="hl-5">renderSize</span><span class="hl-1">.</span><span class="hl-5">x</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">y</span><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-3">1</span><span class="hl-1">) / </span><span class="hl-3">2</span><span class="hl-1"> * </span><span class="hl-5">renderSize</span><span class="hl-1">.</span><span class="hl-5">y</span><span class="hl-1">;</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// 2. 获取像素数据</span><br/><span class="hl-1"> </span><span class="hl-7">// 注意:我们以更高的分辨率 (pixelRatio * scale) 渲染小区域,从而获得“无损”放大效果</span><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">pixelRatio</span><span class="hl-1"> = </span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-5">renderer</span><span class="hl-1">?.</span><span class="hl-4">getPixelRatio</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-8">const</span><span class="hl-1"> </span><span class="hl-6">targetPixelRatio</span><span class="hl-1"> = </span><span class="hl-5">Math</span><span class="hl-1">.</span><span class="hl-4">ceil</span><span class="hl-1">(</span><span class="hl-5">pixelRatio</span><span class="hl-1"> * </span><span class="hl-5">scale</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">getPixels</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-5">x:</span><span class="hl-1"> </span><span class="hl-5">x</span><span class="hl-1"> - </span><span class="hl-5">magnifierSize</span><span class="hl-1"> / </span><span class="hl-3">2</span><span class="hl-1">, </span><span class="hl-7">// 居中</span><br/><span class="hl-1"> </span><span class="hl-5">y:</span><span class="hl-1"> </span><span class="hl-5">y</span><span class="hl-1"> - </span><span class="hl-5">magnifierSize</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">width:</span><span class="hl-1"> </span><span class="hl-5">magnifierSize</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">height:</span><span class="hl-1"> </span><span class="hl-5">magnifierSize</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">pixelRatio:</span><span class="hl-1"> </span><span class="hl-5">targetPixelRatio</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">flipY:</span><span class="hl-1"> </span><span class="hl-8">true</span><span class="hl-1">, </span><span class="hl-7">// 翻转以适配 Canvas 2D</span><br/><span class="hl-1"> </span><span class="hl-5">buffer:</span><span class="hl-1"> </span><span class="hl-5">magnifierImageData</span><span class="hl-1">.</span><span class="hl-5">data</span><span class="hl-1">, </span><span class="hl-7">// 复用 buffer</span><br/><span class="hl-1"> </span><span class="hl-5">helperVisible:</span><span class="hl-1"> </span><span class="hl-8">false</span><span class="hl-1">, </span><span class="hl-7">// 隐藏辅助线等干扰元素</span><br/><span class="hl-1"> });</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// 3. 将数据绘制到放大镜 Canvas 上</span><br/><span class="hl-1"> </span><span class="hl-7">// 需要调整 Canvas 尺寸以匹配数据</span><br/><span class="hl-1"> </span><span class="hl-5">magnifierCanvas</span><span class="hl-1">.</span><span class="hl-5">width</span><span class="hl-1"> = </span><span class="hl-5">pixelWidth</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-5">magnifierCanvas</span><span class="hl-1">.</span><span class="hl-5">height</span><span class="hl-1"> = </span><span class="hl-5">pixelHeight</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-5">ctx</span><span class="hl-1">.</span><span class="hl-4">putImageData</span><span class="hl-1">(</span><span class="hl-5">magnifierImageData</span><span class="hl-1">, </span><span class="hl-3">0</span><span class="hl-1">, </span><span class="hl-3">0</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// 4. 更新放大镜位置 (CSS)</span><br/><span class="hl-1"> </span><span class="hl-5">magnifierCanvas</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">x</span><span class="hl-12"> </span><span class="hl-1">-</span><span class="hl-12"> </span><span class="hl-5">magnifierSize</span><span class="hl-12"> </span><span class="hl-1">/</span><span class="hl-12"> </span><span class="hl-3">2</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">magnifierCanvas</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">renderSize</span><span class="hl-12">.</span><span class="hl-5">y</span><span class="hl-12"> </span><span class="hl-1">-</span><span class="hl-12"> </span><span class="hl-5">y</span><span class="hl-12"> </span><span class="hl-1">-</span><span class="hl-12"> </span><span class="hl-5">magnifierSize</span><span class="hl-12"> </span><span class="hl-1">/</span><span class="hl-12"> </span><span class="hl-3">2</span><span class="hl-8">}</span><span class="hl-10">px`</span><span class="hl-1">; </span><span class="hl-7">// 注意 Y 轴方向</span><br/><span class="hl-1">});</span>
|
|
43
43
|
</code><button type="button">Copy</button></pre>
|
|
44
44
|
|
|
45
45
|
<h3 id="获取中心点颜色-color-picker" class="tsd-anchor-link">获取中心点颜色 (Color Picker)<a href="#获取中心点颜色-color-picker" 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>
|
|
46
46
|
<p>获取屏幕中心点的颜色。</p>
|
|
47
|
-
<pre><code class="typescript"><span class="hl-
|
|
47
|
+
<pre><code class="typescript"><span class="hl-8">function</span><span class="hl-1"> </span><span class="hl-4">getCenterColor</span><span class="hl-1">(</span><span class="hl-5">five</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-8">const</span><span class="hl-1"> </span><span class="hl-6">size</span><span class="hl-1"> = </span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">getSize</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/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">x</span><span class="hl-1"> = </span><span class="hl-5">size</span><span class="hl-1">.</span><span class="hl-5">x</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-8">const</span><span class="hl-1"> </span><span class="hl-6">y</span><span class="hl-1"> = </span><span class="hl-5">size</span><span class="hl-1">.</span><span class="hl-5">y</span><span class="hl-1"> / </span><span class="hl-3">2</span><span class="hl-1">;</span><br/><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">pixels</span><span class="hl-1"> = </span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">getPixels</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-5">x:</span><span class="hl-1"> </span><span class="hl-5">x</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">y:</span><span class="hl-1"> </span><span class="hl-5">y</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">width:</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">height:</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">flipY:</span><span class="hl-1"> </span><span class="hl-8">true</span><br/><span class="hl-1"> });</span><br/><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">r</span><span class="hl-1"> = </span><span class="hl-5">pixels</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-8">const</span><span class="hl-1"> </span><span class="hl-6">g</span><span class="hl-1"> = </span><span class="hl-5">pixels</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-8">const</span><span class="hl-1"> </span><span class="hl-6">b</span><span class="hl-1"> = </span><span class="hl-5">pixels</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-8">const</span><span class="hl-1"> </span><span class="hl-6">a</span><span class="hl-1"> = </span><span class="hl-5">pixels</span><span class="hl-1">[</span><span class="hl-3">3</span><span class="hl-1">];</span><br/><br/><span class="hl-1"> </span><span class="hl-11">return</span><span class="hl-1"> </span><span class="hl-10">`rgba(</span><span class="hl-8">${</span><span class="hl-5">r</span><span class="hl-8">}</span><span class="hl-10">, </span><span class="hl-8">${</span><span class="hl-5">g</span><span class="hl-8">}</span><span class="hl-10">, </span><span class="hl-8">${</span><span class="hl-5">b</span><span class="hl-8">}</span><span class="hl-10">, </span><span class="hl-8">${</span><span class="hl-5">a</span><span class="hl-12"> </span><span class="hl-1">/</span><span class="hl-12"> </span><span class="hl-3">255</span><span class="hl-8">}</span><span class="hl-10">)`</span><span class="hl-1">;</span><br/><span class="hl-1">}</span>
|
|
48
48
|
</code><button type="button">Copy</button></pre>
|
|
49
49
|
|
|
50
50
|
<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>
|