three-base 2.0.137 → 2.0.145
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/DirectionalLight.d.ts +2 -2
- package/DirectionalLight.js +1 -1
- package/DirectionalLight.ts +70 -0
- package/EventMap.d.ts +103 -0
- package/EventMap.js +17 -0
- package/EventMap.ts +139 -0
- package/EventMesh.ts +60 -0
- package/ExtrudeMesh.js +1 -25
- package/ExtrudeMesh.ts +553 -0
- package/FPScontrol.d.ts +448 -15
- package/FPScontrol.js +1448 -266
- package/FPScontrol.ts +1855 -0
- package/Fire/Fire.d.ts +4 -4
- package/Fire/Fire.js +8 -7
- package/Fire/Fire.ts +89 -0
- package/Fire/{FireGromtry.d.ts → FireGeometry.d.ts} +2 -2
- package/Fire/{FireGromtry.js → FireGeometry.js} +1 -1
- package/Fire/FireGeometry.ts +40 -0
- package/Fire/FireMaterial.d.ts +3 -3
- package/Fire/FireMaterial.js +1 -1
- package/Fire/FireMaterial.ts +89 -0
- package/Fire/index.d.ts +1 -0
- package/Fire/index.js +1 -0
- package/Fire/index.ts +2 -0
- package/GLTFDracoLoader.d.ts +71 -0
- package/GLTFDracoLoader.js +266 -0
- package/GLTFDracoLoader.ts +430 -0
- package/Grass/Grass.d.ts +2 -2
- package/Grass/Grass.ts +38 -0
- package/Grass/index.d.ts +1 -0
- package/Grass/index.js +1 -0
- package/Grass/index.ts +2 -0
- package/Ground1/Ground1.d.ts +2 -3
- package/Ground1/Ground1.js +64 -60
- package/Ground1/Ground1.ts +114 -0
- package/Ground1/index.ts +1 -0
- package/MeshBase.d.ts +1 -0
- package/MeshBase.js +37 -13
- package/MeshBase.ts +253 -0
- package/Mirror.d.ts +3 -3
- package/Mirror.js +7 -3
- package/Mirror.ts +203 -0
- package/MktMesh/MktMesh.d.ts +301 -0
- package/MktMesh/MktMesh.js +1064 -0
- package/MktMesh/MktMesh.ts +1096 -0
- package/MktMesh/assetUrl.d.ts +59 -0
- package/MktMesh/assetUrl.js +154 -0
- package/MktMesh/assetUrl.ts +155 -0
- package/MktMesh/mktMappingShader.d.ts +12 -0
- package/MktMesh/mktMappingShader.js +139 -0
- package/MktMesh/mktMappingShader.ts +139 -0
- package/MktMesh/mktShader.d.ts +263 -0
- package/MktMesh/mktShader.js +1248 -0
- package/MktMesh/mktShader.ts +1344 -0
- package/MktMesh/panoBitmapTexture.d.ts +25 -0
- package/MktMesh/panoBitmapTexture.js +52 -0
- package/MktMesh/panoBitmapTexture.ts +54 -0
- package/MktMesh/panoSlotBind.d.ts +29 -0
- package/MktMesh/panoSlotBind.js +106 -0
- package/MktMesh/panoSlotBind.ts +153 -0
- package/MktMesh/panoSlotRoster.d.ts +22 -0
- package/MktMesh/panoSlotRoster.js +169 -0
- package/MktMesh/panoSlotRoster.ts +168 -0
- package/MktMesh/panoTileStitcher.d.ts +119 -0
- package/MktMesh/panoTileStitcher.js +533 -0
- package/MktMesh/panoTileStitcher.ts +616 -0
- package/MktMesh/types.d.ts +75 -0
- package/MktMesh/types.js +1 -0
- package/MktMesh/types.ts +87 -0
- package/MktMesh/wallCapTessellate.d.ts +33 -0
- package/MktMesh/wallCapTessellate.js +97 -0
- package/MktMesh/wallCapTessellate.ts +68 -0
- package/PipeMesh/PathGeometry.js +9 -2
- package/PipeMesh/PathGeometry.ts +343 -0
- package/PipeMesh/PathPoint.ts +36 -0
- package/PipeMesh/PathPointList.js +1 -0
- package/PipeMesh/PathPointList.ts +227 -0
- package/PipeMesh/PathTubeGeometry.ts +146 -0
- package/PipeMesh/PipeMesh.d.ts +1 -1
- package/PipeMesh/PipeMesh.js +1 -1
- package/PipeMesh/PipeMesh.ts +76 -0
- package/PipeMesh/index.ts +1 -0
- package/PlaneModal1/PlaneModal1.d.ts +16 -13
- package/PlaneModal1/PlaneModal1.js +4 -0
- package/PlaneModal1/PlaneModal1.ts +138 -0
- package/PlaneModal1/index.ts +1 -0
- package/PlaneText.d.ts +2 -14
- package/PlaneText.js +7 -2
- package/PlaneText.ts +55 -0
- package/PlaneWithHtml.d.ts +4 -2
- package/PlaneWithHtml.js +2 -1
- package/PlaneWithHtml.ts +70 -0
- package/PointLight/PointLight.d.ts +3 -4
- package/PointLight/PointLight.js +1 -7
- package/PointLight/PointLight.ts +67 -0
- package/PointLight/index.ts +1 -0
- package/README.md +110 -79
- package/Sky/Sky.ts +22 -0
- package/Sky/index.ts +1 -0
- package/SpotLight.d.ts +2 -2
- package/SpotLight.js +1 -1
- package/SpotLight.ts +74 -0
- package/SpriteModal1/SpriteModal1.d.ts +16 -13
- package/SpriteModal1/SpriteModal1.js +8 -2
- package/SpriteModal1/SpriteModal1.ts +146 -0
- package/SpriteModal1/index.ts +1 -0
- package/SpriteText.d.ts +14 -13
- package/SpriteText.js +22 -9
- package/SpriteText.ts +205 -0
- package/SpriteText2.d.ts +9 -8
- package/SpriteText2.js +57 -32
- package/SpriteText2.ts +258 -0
- package/SpriteText3.d.ts +86 -0
- package/SpriteText3.js +519 -0
- package/SpriteText3.ts +599 -0
- package/SpriteWithHtml.d.ts +4 -2
- package/SpriteWithHtml.ts +50 -0
- package/Text3D/Text3D.js +17 -21
- package/Text3D/Text3D.ts +77 -0
- package/Text3D/fontController.d.ts +10 -9
- package/Text3D/fontController.js +17 -50
- package/Text3D/fontController.ts +209 -0
- package/Text3D/index.ts +1 -0
- package/ThreeBase.d.ts +168 -31
- package/ThreeBase.js +663 -117
- package/ThreeBase.ts +1314 -0
- package/ThreeMouse.d.ts +20 -7
- package/ThreeMouse.js +78 -32
- package/ThreeMouse.ts +472 -0
- package/Transition.d.ts +12 -7
- package/Transition.js +26 -27
- package/Transition.ts +242 -0
- package/Water/Water.js +21 -3
- package/Water/Water.ts +45 -0
- package/Water/index.d.ts +2 -0
- package/Water/index.js +2 -0
- package/Water/index.ts +2 -0
- package/WaterFlow/FloatingDuck.d.ts +88 -0
- package/WaterFlow/FloatingDuck.js +307 -0
- package/WaterFlow/FloatingDuck.ts +445 -0
- package/WaterFlow/GPUFluidSimulation.d.ts +56 -0
- package/WaterFlow/GPUFluidSimulation.js +785 -0
- package/WaterFlow/GPUFluidSimulation.ts +827 -0
- package/WaterFlow/ReservoirSystem.d.ts +106 -0
- package/WaterFlow/ReservoirSystem.js +621 -0
- package/WaterFlow/ReservoirSystem.ts +754 -0
- package/WaterFlow/SPHField.d.ts +35 -0
- package/WaterFlow/SPHField.js +204 -0
- package/WaterFlow/SPHField.ts +228 -0
- package/WaterFlow/ScreenSpaceFluidPass.d.ts +69 -0
- package/WaterFlow/ScreenSpaceFluidPass.js +736 -0
- package/WaterFlow/ScreenSpaceFluidPass.ts +789 -0
- package/WaterFlow/ShallowWaterSurface.d.ts +45 -0
- package/WaterFlow/ShallowWaterSurface.js +441 -0
- package/WaterFlow/ShallowWaterSurface.ts +510 -0
- package/WaterFlow/WaterFlow.d.ts +87 -0
- package/WaterFlow/WaterFlow.js +171 -0
- package/WaterFlow/WaterFlow.ts +219 -0
- package/WaterFlow/types.d.ts +161 -0
- package/WaterFlow/types.js +1 -0
- package/WaterFlow/types.ts +189 -0
- package/WaterFlow/waterFlowPass.d.ts +3 -0
- package/WaterFlow/waterFlowPass.js +20 -0
- package/WaterFlow/waterFlowPass.ts +40 -0
- package/collisionOBB.d.ts +42 -0
- package/collisionOBB.js +112 -0
- package/collisionOBB.ts +108 -0
- package/declare.d.ts +25 -167
- package/index.js +0 -1
- package/index.ts +1 -0
- package/instanced/InstancedBatch.d.ts +57 -0
- package/instanced/InstancedBatch.js +348 -0
- package/instanced/InstancedBatch.ts +406 -0
- package/instanced/InstancedChild.d.ts +174 -0
- package/instanced/InstancedChild.js +264 -0
- package/instanced/InstancedChild.ts +327 -0
- package/instanced/InstancedGroup.d.ts +43 -0
- package/instanced/InstancedGroup.js +126 -0
- package/instanced/InstancedGroup.ts +137 -0
- package/{InstancedMeshBase.d.ts → instanced/InstancedMeshBase.d.ts} +6 -7
- package/{InstancedMeshBase.js → instanced/InstancedMeshBase.js} +36 -47
- package/instanced/InstancedMeshBase.ts +292 -0
- package/instanced/InstancedTemplate.d.ts +46 -0
- package/instanced/InstancedTemplate.js +125 -0
- package/instanced/InstancedTemplate.ts +188 -0
- package/keyControls.d.ts +29 -0
- package/{keyContorls.js → keyControls.js} +10 -7
- package/keyControls.ts +107 -0
- package/lensflare/LensFlare.d.ts +39 -0
- package/lensflare/LensFlare.js +373 -0
- package/lensflare/LensFlare.ts +448 -0
- package/lensflare/lensflare0.png +0 -0
- package/lensflare/lensflare3.png +0 -0
- package/lensflare/lensflare_custom.png +0 -0
- package/lensflare/lensflare_hex_ghost.png +0 -0
- package/lensflare/lensflare_hex_main.png +0 -0
- package/package.json +104 -25
- package/pass/bloom_pass.d.ts +1 -1
- package/pass/bloom_pass.js +127 -40
- package/pass/bloom_pass.ts +243 -0
- package/pass/cover_pass.d.ts +1 -1
- package/pass/cover_pass.js +55 -32
- package/pass/cover_pass.ts +182 -0
- package/pass/debugDepthState.d.ts +20 -0
- package/pass/debugDepthState.js +9 -0
- package/pass/debugDepthState.ts +22 -0
- package/pass/depthTestBias.d.ts +12 -0
- package/pass/depthTestBias.js +12 -0
- package/pass/depthTestBias.ts +12 -0
- package/pass/effectUserData.d.ts +27 -0
- package/pass/effectUserData.js +1 -0
- package/pass/effectUserData.ts +46 -0
- package/pass/frosted_glass_pass.d.ts +1 -1
- package/pass/frosted_glass_pass.js +45 -64
- package/pass/frosted_glass_pass.ts +288 -0
- package/pass/fsQuad.d.ts +2 -2
- package/pass/fsQuad.ts +34 -0
- package/pass/glow_pass.d.ts +1 -1
- package/pass/glow_pass.js +288 -72
- package/pass/glow_pass.ts +654 -0
- package/pass/screen_bloom_pass.d.ts +11 -0
- package/pass/screen_bloom_pass.js +235 -0
- package/pass/screen_bloom_pass.ts +263 -0
- package/pass/ssao_pass.d.ts +78 -3
- package/pass/ssao_pass.js +642 -206
- package/pass/ssao_pass.ts +918 -0
- package/pass/stroke_pass.d.ts +1 -1
- package/pass/stroke_pass.js +187 -116
- package/pass/stroke_pass.ts +638 -0
- package/shaders/FXAAShaderMaterial.js +5 -48
- package/shaders/FXAAShaderMaterial.ts +201 -0
- package/shaders/baseDepthVisShader.d.ts +11 -0
- package/shaders/baseDepthVisShader.js +36 -0
- package/shaders/baseDepthVisShader.ts +36 -0
- package/shaders/baseTextureToRenderShader.js +46 -51
- package/shaders/baseTextureToRenderShader.ts +232 -0
- package/shaders/copyShader.js +2 -3
- package/shaders/copyShader.ts +32 -0
- package/shaders/debugDepthCompareShader.d.ts +14 -0
- package/shaders/debugDepthCompareShader.js +49 -0
- package/shaders/debugDepthCompareShader.ts +50 -0
- package/shaders/debugDepthJudgeShader.d.ts +18 -0
- package/shaders/debugDepthJudgeShader.js +52 -0
- package/shaders/debugDepthJudgeShader.ts +54 -0
- package/shaders/debugExcludedShader.d.ts +13 -0
- package/shaders/debugExcludedShader.js +46 -0
- package/shaders/debugExcludedShader.ts +48 -0
- package/spriteTextBg.d.ts +1 -0
- package/spriteTextBg.js +20 -0
- package/spriteTextBg.ts +20 -0
- package/threeLoader.d.ts +8 -7
- package/threeLoader.js +58 -67
- package/threeLoader.ts +525 -0
- package/threeUtils.d.ts +2 -1
- package/threeUtils.js +24 -25
- package/threeUtils.ts +373 -0
- package/types.d.ts +2 -0
- package/types.js +6 -0
- package/types.ts +8 -0
- package/ApngTexture.d.ts +0 -13
- package/ApngTexture.js +0 -61
- package/ApngTextureManage.d.ts +0 -18
- package/ApngTextureManage.js +0 -87
- package/KeyFrameAnimation.d.ts +0 -25
- package/KeyFrameAnimation.js +0 -78
- package/keyContorls.d.ts +0 -25
- package/lib/draco/draco_decoder.js +0 -34
- package/lib/draco/draco_decoder.wasm +0 -0
- package/lib/draco/draco_wasm_wrapper.js +0 -117
- package/pass/emissive_ao_pass.d.ts +0 -13
- package/pass/emissive_ao_pass.js +0 -370
- package/shaders.d.ts +0 -5
- package/shaders.js +0 -93
package/ThreeMouse.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import { Object3D, Raycaster, Scene, Vector2, WebGLRenderer } from "three";
|
|
2
|
-
import {
|
|
1
|
+
import { Camera, Intersection, Object3D, Raycaster, Scene, Vector2, WebGLRenderer } from "three";
|
|
2
|
+
import { computeBoundsTree, acceleratedRaycast } from "three-mesh-bvh";
|
|
3
|
+
import type InstancedGroup from "./instanced/InstancedGroup";
|
|
4
|
+
/** Patch Mesh.raycast with BVH acceleration. Call once before using ThreeMouse. */
|
|
5
|
+
export declare function initBVHRaycast(): void;
|
|
6
|
+
export { computeBoundsTree, acceleratedRaycast };
|
|
3
7
|
export interface ThreeMouseEvent extends Intersection {
|
|
4
8
|
e: MouseEvent;
|
|
5
9
|
renderer: WebGLRenderer;
|
|
@@ -10,6 +14,7 @@ export interface ThreeMouseEvent extends Intersection {
|
|
|
10
14
|
x: number;
|
|
11
15
|
y: number;
|
|
12
16
|
}
|
|
17
|
+
export type MouseEventType = "leftclick" | "rightclick" | "click" | "dbclick" | "mouseenter" | "mouseleave" | "mousemove" | "mousedown" | "mouseup";
|
|
13
18
|
/**
|
|
14
19
|
* js 专用的鼠标拾取模型对象
|
|
15
20
|
*/
|
|
@@ -18,6 +23,7 @@ export default class ThreeMouse {
|
|
|
18
23
|
_renderer: WebGLRenderer;
|
|
19
24
|
_camera: Camera;
|
|
20
25
|
_scene: Scene;
|
|
26
|
+
instancedGroup?: InstancedGroup;
|
|
21
27
|
_mosePosition: Vector2;
|
|
22
28
|
_mouseDownPosition: Vector2;
|
|
23
29
|
_mesh_on?: Object3D;
|
|
@@ -25,16 +31,23 @@ export default class ThreeMouse {
|
|
|
25
31
|
_raycaster: Raycaster;
|
|
26
32
|
_frame: number;
|
|
27
33
|
_mouseInRenderer: boolean;
|
|
28
|
-
_mousemoveEvent?: MouseEvent;
|
|
29
|
-
_mouseEvent?: MouseEvent;
|
|
34
|
+
_mousemoveEvent?: MouseEvent | PointerEvent;
|
|
35
|
+
_mouseEvent?: MouseEvent | PointerEvent;
|
|
30
36
|
_object3ds: Object3D[];
|
|
31
37
|
_click_num: number;
|
|
32
38
|
_getSelected(object3ds: Object3D[]): Intersection | undefined;
|
|
33
|
-
hasEvent(object?: Object3D, types?: Array<
|
|
34
|
-
hasCursor(object?: Object3D): boolean;
|
|
39
|
+
hasEvent(object?: Object3D, types?: Array<MouseEventType>): boolean;
|
|
40
|
+
hasCursor(object?: Object3D): boolean | undefined;
|
|
41
|
+
private resolveTarget;
|
|
35
42
|
dispatchEvent(): void;
|
|
36
43
|
_mouseleave: (e: MouseEvent) => void;
|
|
37
44
|
_mousemove: (e: MouseEvent) => void;
|
|
38
|
-
_mousedown: (e:
|
|
45
|
+
_mousedown: (e: PointerEvent) => void;
|
|
39
46
|
_mouseup: import("lodash").DebouncedFunc<(e: PointerEvent) => Promise<void>>;
|
|
47
|
+
/** 设置 Points(点云)拾取阈值(世界单位),数值越大越容易点中。
|
|
48
|
+
* 全景纹理标记改用 Points 后,通过它调节点击命中范围。 */
|
|
49
|
+
setPointsThreshold(threshold: number): void;
|
|
50
|
+
/** 移除 canvas 上的所有鼠标/指针事件监听(渲染器销毁时调用)。
|
|
51
|
+
* 注:mouseenter 为内联匿名监听,销毁时 canvas 已脱离 DOM,无需显式移除。 */
|
|
52
|
+
dispose(): void;
|
|
40
53
|
}
|
package/ThreeMouse.js
CHANGED
|
@@ -3,13 +3,22 @@
|
|
|
3
3
|
//
|
|
4
4
|
//
|
|
5
5
|
//
|
|
6
|
-
//
|
|
7
|
-
import { Raycaster, Vector2 } from "three";
|
|
8
|
-
import { Mesh } from "three";
|
|
6
|
+
// 启动鼠标事件
|
|
7
|
+
import { InstancedMesh, Mesh, Raycaster, Vector2 } from "three";
|
|
9
8
|
import { debounce } from "lodash";
|
|
10
9
|
import { computeBoundsTree, acceleratedRaycast } from "three-mesh-bvh";
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
/** 安全地分发事件到 Object3D 对象 */
|
|
11
|
+
function dispatchObjectEvent(object, event) {
|
|
12
|
+
// 使用双重断言来安全地传递事件对象
|
|
13
|
+
object.dispatchEvent(event);
|
|
14
|
+
}
|
|
15
|
+
/** Patch Mesh.raycast with BVH acceleration. Call once before using ThreeMouse. */
|
|
16
|
+
export function initBVHRaycast() {
|
|
17
|
+
if (Mesh.prototype.raycast !== acceleratedRaycast) {
|
|
18
|
+
Mesh.prototype.raycast = acceleratedRaycast;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export { computeBoundsTree, acceleratedRaycast };
|
|
13
22
|
/**
|
|
14
23
|
* js 专用的鼠标拾取模型对象
|
|
15
24
|
*/
|
|
@@ -31,6 +40,8 @@ export default class ThreeMouse {
|
|
|
31
40
|
_renderer;
|
|
32
41
|
_camera;
|
|
33
42
|
_scene;
|
|
43
|
+
// 固定的实例化分组器(由 ThreeBase 注入),用于把 InstancedMesh 命中路由到 InstancedChild
|
|
44
|
+
instancedGroup;
|
|
34
45
|
// 鼠标在渲染器上面的位置
|
|
35
46
|
_mosePosition = new Vector2(0, 0);
|
|
36
47
|
// 鼠标按下的位置 如果和鼠标弹起的位置相同 才算一次有效的点击事件
|
|
@@ -70,17 +81,11 @@ export default class ThreeMouse {
|
|
|
70
81
|
if (object["userData"] && object["userData"]["enableEvent"] === false) {
|
|
71
82
|
return false;
|
|
72
83
|
}
|
|
84
|
+
// 注意:three 的 hasEventListener(type, null) 因 indexOf(null) 永远 -1 而恒返回 false,
|
|
85
|
+
// 无法用来判断"是否存在任意监听器"。改为直接读取私有 _listeners 表判断该类型是否有监听。
|
|
86
|
+
const listeners = object._listeners;
|
|
73
87
|
const hasevent = types.some((type) => {
|
|
74
|
-
|
|
75
|
-
if (object["_listeners"] &&
|
|
76
|
-
object["_listeners"][type] &&
|
|
77
|
-
object["_listeners"][type][0]) {
|
|
78
|
-
return true;
|
|
79
|
-
}
|
|
80
|
-
// if (object["userData"] && object["userData"]["cursor"]) {
|
|
81
|
-
// return true;
|
|
82
|
-
// }
|
|
83
|
-
return false;
|
|
88
|
+
return !!(listeners && listeners[type] && listeners[type].length > 0);
|
|
84
89
|
});
|
|
85
90
|
return hasevent;
|
|
86
91
|
}
|
|
@@ -97,11 +102,26 @@ export default class ThreeMouse {
|
|
|
97
102
|
return true;
|
|
98
103
|
}
|
|
99
104
|
}
|
|
105
|
+
// 把命中的对象解析为事件派发目标:若命中 InstancedMesh 且属于某个 batch,
|
|
106
|
+
// 则路由到对应的 InstancedChild(逻辑实例),使实例成为透明事件接收端。
|
|
107
|
+
resolveTarget(object, instanceId) {
|
|
108
|
+
if (object instanceof InstancedMesh && this.instancedGroup) {
|
|
109
|
+
const child = this.instancedGroup.resolveInstance(object, instanceId);
|
|
110
|
+
if (child) {
|
|
111
|
+
return child;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return object;
|
|
115
|
+
}
|
|
100
116
|
// 分发鼠标拾取事件
|
|
101
117
|
dispatchEvent() {
|
|
102
118
|
// 提取有事件的对象
|
|
103
119
|
const meshs = [];
|
|
104
120
|
this._scene.traverseVisible((mesh) => {
|
|
121
|
+
// 逻辑实例节点(InstancedChild)自身不渲染、无几何,跳过收集(命中由 InstancedMesh 路由回来)
|
|
122
|
+
if (mesh.userData?.__instancedChild) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
105
125
|
// 判断对象是否有指定的事件
|
|
106
126
|
if (this.hasCursor(mesh) ||
|
|
107
127
|
this.hasEvent(mesh, [
|
|
@@ -115,7 +135,7 @@ export default class ThreeMouse {
|
|
|
115
135
|
"mousedown",
|
|
116
136
|
"mouseup",
|
|
117
137
|
])) {
|
|
118
|
-
if (mesh
|
|
138
|
+
if (mesh instanceof Mesh &&
|
|
119
139
|
!mesh.geometry.boundsTree &&
|
|
120
140
|
mesh.geometry.attributes.position &&
|
|
121
141
|
mesh.geometry.attributes.position.count > 0) {
|
|
@@ -126,6 +146,10 @@ export default class ThreeMouse {
|
|
|
126
146
|
}
|
|
127
147
|
});
|
|
128
148
|
this._object3ds = meshs;
|
|
149
|
+
// 收集可拾取的 InstancedMesh(仅含注册了监听的已就绪 batch)
|
|
150
|
+
if (this.instancedGroup) {
|
|
151
|
+
this.instancedGroup.collectPickable(meshs);
|
|
152
|
+
}
|
|
129
153
|
// 没有鼠标事件就不往下执行了
|
|
130
154
|
if (!this._mousemoveEvent || !this._mouseInRenderer) {
|
|
131
155
|
return;
|
|
@@ -147,22 +171,26 @@ export default class ThreeMouse {
|
|
|
147
171
|
x: this._mousemoveEvent.x,
|
|
148
172
|
y: this._mousemoveEvent.y,
|
|
149
173
|
});
|
|
174
|
+
// 命中 InstancedMesh 时,把派发目标重定向到对应的 InstancedChild
|
|
175
|
+
const _target = this.resolveTarget(intersection.object, intersection.instanceId);
|
|
176
|
+
if (_target)
|
|
177
|
+
MouseEvent.object = _target;
|
|
150
178
|
// 触发滑动事件
|
|
151
179
|
if (this._mesh_on === MouseEvent.object) {
|
|
152
180
|
if (this.hasEvent(MouseEvent.object, ["mousemove"])) {
|
|
153
181
|
MouseEvent.type = "mousemove";
|
|
154
|
-
MouseEvent.object
|
|
182
|
+
dispatchObjectEvent(MouseEvent.object, MouseEvent);
|
|
155
183
|
}
|
|
156
184
|
// 鼠标划入滑出事件
|
|
157
185
|
}
|
|
158
186
|
else if (this._mesh_on !== MouseEvent.object) {
|
|
159
187
|
if (this.hasEvent(this._mesh_on, ["mouseleave"])) {
|
|
160
188
|
MouseEvent.type = "mouseleave";
|
|
161
|
-
this._mesh_on
|
|
189
|
+
dispatchObjectEvent(this._mesh_on, MouseEvent);
|
|
162
190
|
}
|
|
163
191
|
if (this.hasEvent(MouseEvent.object, ["mouseenter"])) {
|
|
164
192
|
MouseEvent.type = "mouseenter";
|
|
165
|
-
MouseEvent.object
|
|
193
|
+
dispatchObjectEvent(MouseEvent.object, MouseEvent);
|
|
166
194
|
}
|
|
167
195
|
}
|
|
168
196
|
this._mesh_on = MouseEvent.object || undefined; // 设置为当前鼠标上的对象
|
|
@@ -179,7 +207,7 @@ export default class ThreeMouse {
|
|
|
179
207
|
else {
|
|
180
208
|
if (this.hasEvent(this._mesh_on, ["mouseleave"])) {
|
|
181
209
|
// 鼠标离开事件
|
|
182
|
-
this._mesh_on
|
|
210
|
+
dispatchObjectEvent(this._mesh_on, {
|
|
183
211
|
e: this._mouseEvent,
|
|
184
212
|
renderer: this._renderer,
|
|
185
213
|
camera: this._camera,
|
|
@@ -202,7 +230,7 @@ export default class ThreeMouse {
|
|
|
202
230
|
this._mouseInRenderer = false;
|
|
203
231
|
// 鼠标离开事件
|
|
204
232
|
if (this._mousemoveEvent && this.hasEvent(this._mesh_on, ["mouseleave"])) {
|
|
205
|
-
this._mesh_on
|
|
233
|
+
dispatchObjectEvent(this._mesh_on, {
|
|
206
234
|
e: this._mouseEvent,
|
|
207
235
|
renderer: this._renderer,
|
|
208
236
|
camera: this._camera,
|
|
@@ -242,10 +270,12 @@ export default class ThreeMouse {
|
|
|
242
270
|
if (!intersection || !this._mousemoveEvent) {
|
|
243
271
|
return;
|
|
244
272
|
}
|
|
245
|
-
|
|
273
|
+
// 命中 InstancedMesh 时把派发目标重定向到 InstancedChild,并改写 intersection.object
|
|
274
|
+
this._mesh_Down = this._mesh_on = this.resolveTarget(intersection.object, intersection.instanceId);
|
|
275
|
+
intersection.object = this._mesh_Down;
|
|
246
276
|
// 触发鼠标按下事件
|
|
247
277
|
if (this.hasEvent(this._mesh_Down, ["mousedown"])) {
|
|
248
|
-
this._mesh_Down
|
|
278
|
+
dispatchObjectEvent(this._mesh_Down, {
|
|
249
279
|
e: this._mouseEvent,
|
|
250
280
|
...intersection,
|
|
251
281
|
renderer: this._renderer,
|
|
@@ -268,9 +298,11 @@ export default class ThreeMouse {
|
|
|
268
298
|
if (!intersection || !this._mousemoveEvent) {
|
|
269
299
|
return;
|
|
270
300
|
}
|
|
271
|
-
|
|
301
|
+
// 命中 InstancedMesh 时把派发目标重定向到 InstancedChild,并改写 intersection.object
|
|
302
|
+
this._mesh_on = this.resolveTarget(intersection.object, intersection.instanceId);
|
|
303
|
+
intersection.object = this._mesh_on;
|
|
272
304
|
if (this.hasEvent(this._mesh_on, ["mouseup"])) {
|
|
273
|
-
this._mesh_on
|
|
305
|
+
dispatchObjectEvent(this._mesh_on, {
|
|
274
306
|
e: this._mouseEvent,
|
|
275
307
|
...intersection,
|
|
276
308
|
renderer: this._renderer,
|
|
@@ -295,7 +327,7 @@ export default class ThreeMouse {
|
|
|
295
327
|
// 只点击了一次
|
|
296
328
|
if (this._click_num === 1) {
|
|
297
329
|
if (this.hasEvent(this._mesh_Down, ["click"])) {
|
|
298
|
-
this._mesh_Down
|
|
330
|
+
dispatchObjectEvent(this._mesh_Down, {
|
|
299
331
|
e: this._mouseEvent,
|
|
300
332
|
...intersection,
|
|
301
333
|
renderer: this._renderer,
|
|
@@ -309,7 +341,7 @@ export default class ThreeMouse {
|
|
|
309
341
|
});
|
|
310
342
|
}
|
|
311
343
|
if (this.hasEvent(this._mesh_Down, ["leftclick"]) && e.button === 0) {
|
|
312
|
-
this._mesh_Down
|
|
344
|
+
dispatchObjectEvent(this._mesh_Down, {
|
|
313
345
|
e: this._mouseEvent,
|
|
314
346
|
...intersection,
|
|
315
347
|
renderer: this._renderer,
|
|
@@ -324,7 +356,7 @@ export default class ThreeMouse {
|
|
|
324
356
|
}
|
|
325
357
|
if (this.hasEvent(this._mesh_Down, ["rightclick"]) &&
|
|
326
358
|
e.button === 2) {
|
|
327
|
-
this._mesh_Down
|
|
359
|
+
dispatchObjectEvent(this._mesh_Down, {
|
|
328
360
|
e: this._mouseEvent,
|
|
329
361
|
...intersection,
|
|
330
362
|
renderer: this._renderer,
|
|
@@ -342,7 +374,7 @@ export default class ThreeMouse {
|
|
|
342
374
|
if (this.hasEvent(this._mesh_Down, ["dbclick"]) &&
|
|
343
375
|
new Date().valueOf() - this._click_num > 1 &&
|
|
344
376
|
e.button === 0) {
|
|
345
|
-
this._mesh_Down
|
|
377
|
+
dispatchObjectEvent(this._mesh_Down, {
|
|
346
378
|
e: this._mouseEvent,
|
|
347
379
|
...intersection,
|
|
348
380
|
renderer: this._renderer,
|
|
@@ -359,7 +391,7 @@ export default class ThreeMouse {
|
|
|
359
391
|
}
|
|
360
392
|
else {
|
|
361
393
|
if (this.hasEvent(this._mesh_Down, ["click"])) {
|
|
362
|
-
this._mesh_Down
|
|
394
|
+
dispatchObjectEvent(this._mesh_Down, {
|
|
363
395
|
e: this._mouseEvent,
|
|
364
396
|
...intersection,
|
|
365
397
|
renderer: this._renderer,
|
|
@@ -373,7 +405,7 @@ export default class ThreeMouse {
|
|
|
373
405
|
});
|
|
374
406
|
}
|
|
375
407
|
if (this.hasEvent(this._mesh_Down, ["leftclick"]) && e.button === 0) {
|
|
376
|
-
this._mesh_Down
|
|
408
|
+
dispatchObjectEvent(this._mesh_Down, {
|
|
377
409
|
e: this._mouseEvent,
|
|
378
410
|
...intersection,
|
|
379
411
|
renderer: this._renderer,
|
|
@@ -387,7 +419,7 @@ export default class ThreeMouse {
|
|
|
387
419
|
});
|
|
388
420
|
}
|
|
389
421
|
if (this.hasEvent(this._mesh_Down, ["rightclick"]) && e.button === 2) {
|
|
390
|
-
this._mesh_Down
|
|
422
|
+
dispatchObjectEvent(this._mesh_Down, {
|
|
391
423
|
e: this._mouseEvent,
|
|
392
424
|
...intersection,
|
|
393
425
|
renderer: this._renderer,
|
|
@@ -404,4 +436,18 @@ export default class ThreeMouse {
|
|
|
404
436
|
this._click_num = 0;
|
|
405
437
|
}
|
|
406
438
|
});
|
|
439
|
+
/** 设置 Points(点云)拾取阈值(世界单位),数值越大越容易点中。
|
|
440
|
+
* 全景纹理标记改用 Points 后,通过它调节点击命中范围。 */
|
|
441
|
+
setPointsThreshold(threshold) {
|
|
442
|
+
this._raycaster.params.Points.threshold = threshold;
|
|
443
|
+
}
|
|
444
|
+
/** 移除 canvas 上的所有鼠标/指针事件监听(渲染器销毁时调用)。
|
|
445
|
+
* 注:mouseenter 为内联匿名监听,销毁时 canvas 已脱离 DOM,无需显式移除。 */
|
|
446
|
+
dispose() {
|
|
447
|
+
const dom = this._renderer.domElement;
|
|
448
|
+
dom.removeEventListener("mouseleave", this._mouseleave, true);
|
|
449
|
+
dom.removeEventListener("mousemove", this._mousemove, true);
|
|
450
|
+
dom.removeEventListener("pointerdown", this._mousedown, true);
|
|
451
|
+
dom.removeEventListener("pointerup", this._mouseup, true);
|
|
452
|
+
}
|
|
407
453
|
}
|