three-base 2.0.129 → 2.0.134

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/ApngTexture.d.ts +13 -13
  2. package/ApngTexture.js +61 -61
  3. package/ApngTextureManage.d.ts +18 -18
  4. package/ApngTextureManage.js +87 -87
  5. package/DirectionalLight.d.ts +6 -0
  6. package/DirectionalLight.js +68 -0
  7. package/EventMesh.d.ts +18 -18
  8. package/EventMesh.js +59 -59
  9. package/ExtrudeMesh.d.ts +112 -112
  10. package/ExtrudeMesh.js +366 -366
  11. package/FPScontrol.d.ts +71 -50
  12. package/FPScontrol.js +505 -232
  13. package/Fire/Fire.d.ts +28 -28
  14. package/Fire/Fire.js +79 -79
  15. package/Fire/FireGromtry.d.ts +9 -9
  16. package/Fire/FireGromtry.js +40 -40
  17. package/Fire/FireMaterial.d.ts +28 -28
  18. package/Fire/FireMaterial.js +32 -32
  19. package/Fire/index.d.ts +1 -1
  20. package/Fire/index.js +1 -1
  21. package/Grass/Grass.d.ts +8 -8
  22. package/Grass/Grass.js +38 -38
  23. package/Grass/index.d.ts +1 -1
  24. package/Grass/index.js +1 -1
  25. package/Ground1/Ground1.d.ts +11 -11
  26. package/Ground1/Ground1.js +54 -54
  27. package/Ground1/index.d.ts +1 -1
  28. package/Ground1/index.js +1 -1
  29. package/InstancedMeshBase.d.ts +39 -39
  30. package/InstancedMeshBase.js +293 -293
  31. package/KeyFrameAnimation.d.ts +25 -25
  32. package/KeyFrameAnimation.js +78 -78
  33. package/MeshBase.d.ts +35 -35
  34. package/MeshBase.js +223 -223
  35. package/Mirror.d.ts +25 -25
  36. package/Mirror.js +139 -139
  37. package/PipeMesh/PathGeometry.d.ts +44 -44
  38. package/PipeMesh/PathGeometry.js +300 -300
  39. package/PipeMesh/PathPoint.d.ts +17 -17
  40. package/PipeMesh/PathPoint.js +31 -31
  41. package/PipeMesh/PathPointList.d.ts +31 -31
  42. package/PipeMesh/PathPointList.js +208 -208
  43. package/PipeMesh/PathTubeGeometry.d.ts +25 -25
  44. package/PipeMesh/PathTubeGeometry.js +130 -130
  45. package/PipeMesh/PipeMesh.d.ts +25 -25
  46. package/PipeMesh/PipeMesh.js +63 -63
  47. package/PipeMesh/index.d.ts +1 -1
  48. package/PipeMesh/index.js +1 -1
  49. package/PlaneModal1/PlaneModal1.d.ts +31 -31
  50. package/PlaneModal1/PlaneModal1.js +105 -105
  51. package/PlaneModal1/index.d.ts +1 -1
  52. package/PlaneModal1/index.js +1 -1
  53. package/PlaneText.d.ts +39 -39
  54. package/PlaneText.js +30 -30
  55. package/PlaneWithHtml.d.ts +11 -11
  56. package/PlaneWithHtml.js +63 -68
  57. package/PointLight/PointLight.d.ts +14 -13
  58. package/PointLight/PointLight.js +70 -64
  59. package/PointLight/index.d.ts +1 -1
  60. package/PointLight/index.js +1 -1
  61. package/Sky/Sky.d.ts +9 -9
  62. package/Sky/Sky.js +22 -22
  63. package/Sky/index.d.ts +1 -1
  64. package/Sky/index.js +1 -1
  65. package/SpotLight.d.ts +6 -0
  66. package/SpotLight.js +72 -0
  67. package/SpriteModal1/SpriteModal1.d.ts +30 -30
  68. package/SpriteModal1/SpriteModal1.js +110 -110
  69. package/SpriteModal1/index.d.ts +1 -1
  70. package/SpriteModal1/index.js +1 -1
  71. package/SpriteText.d.ts +45 -45
  72. package/SpriteText.js +163 -163
  73. package/SpriteText2.d.ts +47 -47
  74. package/SpriteText2.js +198 -198
  75. package/SpriteWithHtml.d.ts +7 -7
  76. package/SpriteWithHtml.js +44 -49
  77. package/Text3D/Text3D.d.ts +20 -20
  78. package/Text3D/Text3D.js +62 -62
  79. package/Text3D/fontController.d.ts +59 -59
  80. package/Text3D/fontController.js +199 -199
  81. package/Text3D/index.d.ts +1 -1
  82. package/Text3D/index.js +1 -1
  83. package/ThreeBase.d.ts +97 -81
  84. package/ThreeBase.js +613 -559
  85. package/ThreeMouse.d.ts +40 -40
  86. package/ThreeMouse.js +407 -409
  87. package/Transition.d.ts +40 -40
  88. package/Transition.js +210 -207
  89. package/Water/Water.d.ts +5 -0
  90. package/Water/Water.js +26 -0
  91. package/Water/waternormals.jpg +0 -0
  92. package/declare.d.ts +167 -0
  93. package/index.d.ts +1 -1
  94. package/index.js +2 -2
  95. package/keyContorls.d.ts +25 -25
  96. package/keyContorls.js +98 -98
  97. package/package.json +1 -1
  98. package/pass/bloom_pass.d.ts +2 -2
  99. package/pass/bloom_pass.js +99 -99
  100. package/pass/cover_pass.d.ts +2 -2
  101. package/pass/cover_pass.js +95 -95
  102. package/pass/frosted_glass_pass.d.ts +2 -0
  103. package/pass/frosted_glass_pass.js +275 -0
  104. package/pass/fsQuad.d.ts +9 -9
  105. package/pass/fsQuad.js +28 -28
  106. package/pass/glow_pass.d.ts +2 -2
  107. package/pass/glow_pass.js +310 -254
  108. package/pass/ssao_pass.d.ts +11 -0
  109. package/pass/ssao_pass.js +294 -0
  110. package/pass/stroke_pass.d.ts +2 -2
  111. package/pass/stroke_pass.js +199 -199
  112. package/shaders/FXAAShaderMaterial.d.ts +3 -3
  113. package/shaders/FXAAShaderMaterial.js +21 -21
  114. package/shaders/baseTextureToRenderShader.d.ts +2 -2
  115. package/shaders/baseTextureToRenderShader.js +14 -14
  116. package/shaders/copyShader.d.ts +3 -3
  117. package/shaders/copyShader.js +14 -14
  118. package/shaders.d.ts +5 -5
  119. package/shaders.js +42 -42
  120. package/threeLoader.d.ts +34 -34
  121. package/threeLoader.js +527 -527
  122. package/threeUtils.d.ts +52 -52
  123. package/threeUtils.js +330 -330
package/declare.d.ts ADDED
@@ -0,0 +1,167 @@
1
+ // three 子路径模块声明
2
+ declare module "three/src/math/MathUtils" {
3
+ export { degToRad, generateUUID, radToDeg, clamp, mapLinear, lerp, randFloat, randFloatSpread, seedRandom } from "three";
4
+ }
5
+ declare module "three/src/math/Vector3" {
6
+ export { Vector3 } from "three";
7
+ }
8
+
9
+ // three examples 声明
10
+ declare module "three/examples/jsm/controls/OrbitControls.js" {
11
+ export { OrbitControls } from "three/examples/jsm/controls/OrbitControls";
12
+ }
13
+ declare module "three/examples/jsm/loaders/DRACOLoader" {
14
+ export class DRACOLoader {
15
+ setDecoderPath(path: string): void;
16
+ setDecoderConfig(config: object): void;
17
+ preload(): void;
18
+ dispose(): void;
19
+ }
20
+ }
21
+ declare module "three/examples/jsm/loaders/FBXLoader" {
22
+ import { Loader, Group } from "three";
23
+ export class FBXLoader extends Loader {
24
+ load(url: string, onLoad?: (object: Group) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): Group;
25
+ parse(FBXBuffer: ArrayBuffer | string, path: string): Group;
26
+ }
27
+ }
28
+ declare module "three/examples/jsm/loaders/GLTFLoader" {
29
+ import { Loader, Group, AnimationClip, Scene } from "three";
30
+ export class GLTFLoader extends Loader {
31
+ load(url: string, onLoad?: (gltf: GLTF) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): void;
32
+ setDRACOLoader(dracoLoader: any): this;
33
+ parse(data: ArrayBuffer | string, path: string, onLoad: (gltf: GLTF) => void, onError?: (event: ErrorEvent) => void): void;
34
+ }
35
+ export interface GLTF {
36
+ scene: Scene;
37
+ scenes: Scene[];
38
+ cameras: any[];
39
+ animations: AnimationClip[];
40
+ asset: object;
41
+ }
42
+ }
43
+ declare module "three/examples/jsm/loaders/MTLLoader" {
44
+ import { Loader, Material } from "three";
45
+ export class MTLLoader extends Loader {
46
+ load(url: string, onLoad?: (materials: MTLLoader.MaterialCreator) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): void;
47
+ parse(text: string): MTLLoader.MaterialCreator;
48
+ }
49
+ export namespace MTLLoader {
50
+ class MaterialCreator {
51
+ materials: { [key: string]: Material };
52
+ asynchornous: boolean;
53
+ setCrossOrigin(origin: string): void;
54
+ setManager(manager: any): void;
55
+ setMaterials(materials: object): void;
56
+ preload(): void;
57
+ }
58
+ }
59
+ }
60
+ declare module "three/examples/jsm/loaders/OBJLoader" {
61
+ import { Loader, Group, Material } from "three";
62
+ export class OBJLoader extends Loader {
63
+ load(url: string, onLoad?: (object: Group) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): Group;
64
+ setMaterials(materials: any): this;
65
+ parse(text: string): Group;
66
+ materials: { [key: string]: Material };
67
+ }
68
+ }
69
+ declare module "three/examples/jsm/loaders/STLLoader" {
70
+ import { Loader, BufferGeometry } from "three";
71
+ export class STLLoader extends Loader {
72
+ load(url: string, onLoad?: (geometry: BufferGeometry) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): void;
73
+ parse(data: ArrayBuffer | string): BufferGeometry;
74
+ }
75
+ }
76
+ declare module "three/examples/jsm/loaders/USDZLoader" {
77
+ import { Loader, Group } from "three";
78
+ export class USDZLoader extends Loader {
79
+ load(url: string, onLoad?: (object: Group) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): void;
80
+ loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<Group>;
81
+ parse(buffer: ArrayBuffer): Group;
82
+ }
83
+ }
84
+ declare module "three/examples/jsm/math/Capsule" {
85
+ import { Vector3 } from "three";
86
+ export class Capsule {
87
+ start: Vector3;
88
+ end: Vector3;
89
+ radius: number;
90
+ constructor(start?: Vector3, end?: Vector3, radius?: number);
91
+ clone(): Capsule;
92
+ set(start: Vector3, end: Vector3, radius: number): this;
93
+ copy(capsule: Capsule): this;
94
+ translate(v: Vector3): this;
95
+ getPointAtDistance(distance: number, target: Vector3): Vector3;
96
+ }
97
+ }
98
+ declare module "three/examples/jsm/math/Octree" {
99
+ import { Box3, Sphere, Triangle, Vector3, Ray, Mesh, Object3D } from "three";
100
+ interface OctreeRaycastResult {
101
+ distance: number;
102
+ point: Vector3;
103
+ face: any;
104
+ object: any;
105
+ position: Vector3;
106
+ }
107
+ export class Octree {
108
+ box: Box3;
109
+ constructor(box?: Box3);
110
+ addTriangle(triangle: Triangle): this;
111
+ addMesh(mesh: Mesh): this;
112
+ reset(): this;
113
+ build(): this;
114
+ raycast(ray: Ray): OctreeRaycastResult[];
115
+ intersectsSphere(sphere: Sphere): boolean;
116
+ fromGraphNode(object: Object3D): this;
117
+ rayIntersect(ray: Ray): OctreeRaycastResult;
118
+ split(depth?: number): void;
119
+ clear(): this;
120
+ }
121
+ }
122
+ declare module "three/examples/jsm/objects/Water" {
123
+ import { Mesh, Texture, Vector3 } from "three";
124
+ export interface WaterOptions {
125
+ textureWidth?: number;
126
+ textureHeight?: number;
127
+ clipBias?: number;
128
+ alpha?: number;
129
+ time?: number;
130
+ waterNormals?: Texture;
131
+ sunDirection?: Vector3;
132
+ sunColor?: number | string;
133
+ waterColor?: number | string;
134
+ eye?: Vector3;
135
+ distortionScale?: number;
136
+ side?: number;
137
+ fog?: boolean;
138
+ }
139
+ export class Water extends Mesh {
140
+ material: any;
141
+ constructor(geometry: any, options: WaterOptions);
142
+ }
143
+ }
144
+ declare module "three/examples/jsm/utils/SkeletonUtils" {
145
+ import { Object3D } from "three";
146
+ export function clone(source: Object3D): Object3D;
147
+ export function retarget(target: Object3D, source: Object3D, options?: any): void;
148
+ export function retargetClip(target: Object3D, source: Object3D, clip: any, options?: any): any;
149
+ }
150
+ declare module "three/examples/jsm/postprocessing/UnrealBloomPass" {
151
+ import { Pass } from "three/examples/jsm/postprocessing/Pass";
152
+ import { Vector2 } from "three";
153
+ export class UnrealBloomPass extends Pass {
154
+ constructor(resolution: Vector2, strength: number, radius: number, threshold: number);
155
+ strength: number;
156
+ radius: number;
157
+ threshold: number;
158
+ setSize(width: number, height: number): void;
159
+ render(renderer: any, writeBuffer: any, readBuffer: any, deltaTime: number, maskActive: boolean): void;
160
+ }
161
+ }
162
+ declare module "three/examples/jsm/exporters/GLTFExporter" {
163
+ export class GLTFExporter {
164
+ parse(input: any, onDone: (gltf: any) => void, onError?: (error: ErrorEvent) => void, options?: any): void;
165
+ parseAsync(input: any, options?: any): Promise<any>;
166
+ }
167
+ }
package/index.d.ts CHANGED
@@ -1 +1 @@
1
- export { default } from "./ThreeBase";
1
+ export { default } from "./ThreeBase";
package/index.js CHANGED
@@ -1,2 +1,2 @@
1
- // 基类
2
- export { default } from "./ThreeBase";
1
+ // 基类
2
+ export { default } from "./ThreeBase";
package/keyContorls.d.ts CHANGED
@@ -1,25 +1,25 @@
1
- import { EventDispatcher, EventListener, Vector3 } from "three";
2
- /**
3
- * 键盘 使用 ↑↓←→ 控制 x z 方向, 小键盘 1 0 控制 y 方向
4
- *
5
- * @class KeyContorls
6
- * @extends {EventDispatcher}
7
- */
8
- declare class KeyContorls extends EventDispatcher {
9
- constructor();
10
- uuid: string;
11
- direction: Vector3;
12
- add(e: any): void;
13
- delete(e: any): void;
14
- enter(e: any): void;
15
- keyDown: (e: any) => void;
16
- _listeners?: {
17
- [key: string]: Array<any>;
18
- };
19
- removeEvent: import("lodash").DebouncedFuncLeading<(type: string) => void>;
20
- addEventListener<T extends string>(type: T, listener: EventListener<{}, T, this>): void;
21
- addEvent(): void;
22
- dispose(): void;
23
- }
24
- declare const keyContorls: KeyContorls;
25
- export default keyContorls;
1
+ import { EventDispatcher, EventListener, Vector3 } from "three";
2
+ /**
3
+ * 键盘 使用 ↑↓←→ 控制 x z 方向, 小键盘 1 0 控制 y 方向
4
+ *
5
+ * @class KeyContorls
6
+ * @extends {EventDispatcher}
7
+ */
8
+ declare class KeyContorls extends EventDispatcher {
9
+ constructor();
10
+ uuid: any;
11
+ direction: Vector3;
12
+ add(e: any): void;
13
+ delete(e: any): void;
14
+ enter(e: any): void;
15
+ keyDown: (e: any) => void;
16
+ _listeners?: {
17
+ [key: string]: Array<any>;
18
+ };
19
+ removeEvent: import("lodash").DebouncedFuncLeading<(type: string) => void>;
20
+ addEventListener<T extends string>(type: T, listener: EventListener<{}, T, this>): void;
21
+ addEvent(): void;
22
+ dispose(): void;
23
+ }
24
+ declare const keyContorls: KeyContorls;
25
+ export default keyContorls;
package/keyContorls.js CHANGED
@@ -1,98 +1,98 @@
1
- /*
2
- * @Author: xiaosihan
3
- * @Date: 2022-03-20 14:48:33
4
- * @Last Modified by: xiaosihan
5
- * @Last Modified time: 2022-09-30 00:12:28
6
- */
7
- import { throttle } from "lodash";
8
- import { EventDispatcher, Vector3 } from "three";
9
- import { generateUUID } from "three/src/math/MathUtils";
10
- /**
11
- * 键盘 使用 ↑↓←→ 控制 x z 方向, 小键盘 1 0 控制 y 方向
12
- *
13
- * @class KeyContorls
14
- * @extends {EventDispatcher}
15
- */
16
- class KeyContorls extends EventDispatcher {
17
- constructor() {
18
- super();
19
- this.addEvent();
20
- }
21
- uuid = generateUUID();
22
- direction = new Vector3(0, 0, 0);
23
- // 添加事件需要由外部实现
24
- add(e) {
25
- this.dispatchEvent({ ...e, type: "add" });
26
- }
27
- // 删除事件
28
- delete(e) {
29
- this.dispatchEvent({ ...e, type: "delete" });
30
- }
31
- // 回车按钮
32
- enter(e) {
33
- this.dispatchEvent({ ...e, type: "enter" });
34
- }
35
- keyDown = (e) => {
36
- switch (e.keyCode) {
37
- case 46: // 删除按钮
38
- this.delete(e);
39
- return;
40
- case 13: // 回车按钮
41
- this.enter(e);
42
- return;
43
- case 97: // 小键盘1
44
- this.direction.set(0, 1, 0);
45
- break;
46
- case 96: // 小键盘0
47
- this.direction.set(0, -1, 0);
48
- break;
49
- case 35: //
50
- this.direction.set(0, 0.001, 0);
51
- break;
52
- case 45:
53
- this.direction.set(0, -0.001, 0);
54
- break;
55
- case 38: // 前
56
- this.direction.set(0, 0, -1);
57
- break;
58
- case 37: // 后
59
- this.direction.set(-1, 0, 0);
60
- break;
61
- case 40: // 左
62
- this.direction.set(0, 0, 1);
63
- break;
64
- case 39: // 右
65
- this.direction.set(1, 0, 0);
66
- break;
67
- default:
68
- return;
69
- }
70
- if (e.shiftKey) {
71
- this.direction.multiplyScalar(0.001);
72
- }
73
- if (e.ctrlKey) {
74
- this.direction.multiplyScalar(0.1);
75
- }
76
- this.dispatchEvent({
77
- type: "change",
78
- direction: this.direction
79
- });
80
- };
81
- _listeners;
82
- // 节流 删除事件监听
83
- removeEvent = throttle((type) => {
84
- this._listeners = undefined;
85
- }, 1000, { trailing: false });
86
- addEventListener(type, listener) {
87
- this.removeEvent(type);
88
- super.addEventListener(type, listener);
89
- }
90
- addEvent() {
91
- document.addEventListener("keydown", this.keyDown);
92
- }
93
- dispose() {
94
- document.removeEventListener("keydown", this.keyDown);
95
- }
96
- }
97
- const keyContorls = new KeyContorls();
98
- export default keyContorls;
1
+ /*
2
+ * @Author: xiaosihan
3
+ * @Date: 2022-03-20 14:48:33
4
+ * @Last Modified by: xiaosihan
5
+ * @Last Modified time: 2022-09-30 00:12:28
6
+ */
7
+ import { throttle } from "lodash";
8
+ import { EventDispatcher, Vector3 } from "three";
9
+ import { generateUUID } from "three/src/math/MathUtils";
10
+ /**
11
+ * 键盘 使用 ↑↓←→ 控制 x z 方向, 小键盘 1 0 控制 y 方向
12
+ *
13
+ * @class KeyContorls
14
+ * @extends {EventDispatcher}
15
+ */
16
+ class KeyContorls extends EventDispatcher {
17
+ constructor() {
18
+ super();
19
+ this.addEvent();
20
+ }
21
+ uuid = generateUUID();
22
+ direction = new Vector3(0, 0, 0);
23
+ // 添加事件需要由外部实现
24
+ add(e) {
25
+ this.dispatchEvent({ ...e, type: "add" });
26
+ }
27
+ // 删除事件
28
+ delete(e) {
29
+ this.dispatchEvent({ ...e, type: "delete" });
30
+ }
31
+ // 回车按钮
32
+ enter(e) {
33
+ this.dispatchEvent({ ...e, type: "enter" });
34
+ }
35
+ keyDown = (e) => {
36
+ switch (e.keyCode) {
37
+ case 46: // 删除按钮
38
+ this.delete(e);
39
+ return;
40
+ case 13: // 回车按钮
41
+ this.enter(e);
42
+ return;
43
+ case 97: // 小键盘1
44
+ this.direction.set(0, 1, 0);
45
+ break;
46
+ case 96: // 小键盘0
47
+ this.direction.set(0, -1, 0);
48
+ break;
49
+ case 35: //
50
+ this.direction.set(0, 0.001, 0);
51
+ break;
52
+ case 45:
53
+ this.direction.set(0, -0.001, 0);
54
+ break;
55
+ case 38: // 前
56
+ this.direction.set(0, 0, -1);
57
+ break;
58
+ case 37: // 后
59
+ this.direction.set(-1, 0, 0);
60
+ break;
61
+ case 40: // 左
62
+ this.direction.set(0, 0, 1);
63
+ break;
64
+ case 39: // 右
65
+ this.direction.set(1, 0, 0);
66
+ break;
67
+ default:
68
+ return;
69
+ }
70
+ if (e.shiftKey) {
71
+ this.direction.multiplyScalar(0.001);
72
+ }
73
+ if (e.ctrlKey) {
74
+ this.direction.multiplyScalar(0.1);
75
+ }
76
+ this.dispatchEvent({
77
+ type: "change",
78
+ direction: this.direction
79
+ });
80
+ };
81
+ _listeners;
82
+ // 节流 删除事件监听
83
+ removeEvent = throttle((type) => {
84
+ this._listeners = undefined;
85
+ }, 1000, { trailing: false });
86
+ addEventListener(type, listener) {
87
+ this.removeEvent(type);
88
+ super.addEventListener(type, listener);
89
+ }
90
+ addEvent() {
91
+ document.addEventListener("keydown", this.keyDown);
92
+ }
93
+ dispose() {
94
+ document.removeEventListener("keydown", this.keyDown);
95
+ }
96
+ }
97
+ const keyContorls = new KeyContorls();
98
+ export default keyContorls;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "three-base",
3
- "version": "2.0.129",
3
+ "version": "2.0.134",
4
4
  "description": "three 3d three-base",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -1,2 +1,2 @@
1
- import { WebGLRenderer, Camera, Object3D, DepthTexture, WebGLRenderTarget } from "three";
2
- export default function bloom_pass(renderer: WebGLRenderer, camera: Camera, object3d: Object3D, baseRenderTarget: WebGLRenderTarget, baseDepthTexture: DepthTexture, devicePixelRatio: number): void;
1
+ import { WebGLRenderer, Camera, Object3D, DepthTexture, WebGLRenderTarget } from "three";
2
+ export default function bloom_pass(renderer: WebGLRenderer, camera: Camera, object3d: Object3D, baseRenderTarget: WebGLRenderTarget, baseDepthTexture: DepthTexture, devicePixelRatio: number): void;
@@ -1,43 +1,43 @@
1
- /*
2
- * @Author: xiaosihan
3
- * @Date: 2024-09-23 21:51:29
4
- * @Last Modified by: xiaosihan
5
- * @Last Modified time: 2025-01-28 05:05:49
6
- */
7
- import { DepthTexture, DepthFormat, LinearFilter, RGBAFormat, UnsignedShortType, WebGLRenderTarget, Scene, Vector2, ShaderChunk, NoBlending, ShaderMaterial, AdditiveBlending, } from "three";
8
- import { UnrealBloomPass } from "three/examples/jsm/postprocessing/UnrealBloomPass";
9
- import copyShader from "../shaders/copyShader";
10
- import fsQuad from "./fsQuad";
11
- // 选中对象的深度纹理
12
- const selectDepthTexture = (() => {
13
- const baseDepthTexture = new DepthTexture(4096, 4096);
14
- baseDepthTexture.format = DepthFormat;
15
- baseDepthTexture.type = UnsignedShortType;
16
- baseDepthTexture.anisotropy = 16;
17
- return baseDepthTexture;
18
- })();
19
- // 选中对象的纹理
20
- const selectTextureTarget = new WebGLRenderTarget(512, 512, {
21
- minFilter: LinearFilter,
22
- magFilter: LinearFilter,
23
- format: RGBAFormat,
24
- depthTexture: selectDepthTexture,
25
- anisotropy: 16,
26
- });
27
- // 深度测试后的选中纹理
28
- const selectDethpTestTextureTarget = new WebGLRenderTarget(512, 512, {
29
- minFilter: LinearFilter,
30
- magFilter: LinearFilter,
31
- format: RGBAFormat,
32
- anisotropy: 16,
33
- });
34
- //深度比对纹理
35
- const depthTestShader = new ShaderMaterial({
36
- uniforms: {
37
- map: { value: null },
38
- baseDepth: { value: null },
39
- selectDepth: { value: null }, // 选中的对象深度纹理
40
- },
1
+ /*
2
+ * @Author: xiaosihan
3
+ * @Date: 2024-09-23 21:51:29
4
+ * @Last Modified by: xiaosihan
5
+ * @Last Modified time: 2025-01-28 05:05:49
6
+ */
7
+ import { DepthTexture, DepthFormat, LinearFilter, RGBAFormat, UnsignedShortType, WebGLRenderTarget, Scene, Vector2, ShaderChunk, NoBlending, ShaderMaterial, AdditiveBlending } from "three";
8
+ import { UnrealBloomPass } from "three/examples/jsm/postprocessing/UnrealBloomPass";
9
+ import copyShader from "../shaders/copyShader";
10
+ import fsQuad from "./fsQuad";
11
+ // 选中对象的深度纹理
12
+ const selectDepthTexture = (() => {
13
+ const baseDepthTexture = new DepthTexture(4096, 4096);
14
+ baseDepthTexture.format = DepthFormat;
15
+ baseDepthTexture.type = UnsignedShortType;
16
+ baseDepthTexture.anisotropy = 16;
17
+ return baseDepthTexture;
18
+ })();
19
+ // 选中对象的纹理
20
+ const selectTextureTarget = new WebGLRenderTarget(512, 512, {
21
+ minFilter: LinearFilter,
22
+ magFilter: LinearFilter,
23
+ format: RGBAFormat,
24
+ depthTexture: selectDepthTexture,
25
+ anisotropy: 16,
26
+ });
27
+ // 深度测试后的选中纹理
28
+ const selectDethpTestTextureTarget = new WebGLRenderTarget(512, 512, {
29
+ minFilter: LinearFilter,
30
+ magFilter: LinearFilter,
31
+ format: RGBAFormat,
32
+ anisotropy: 16,
33
+ });
34
+ //深度比对纹理
35
+ const depthTestShader = new ShaderMaterial({
36
+ uniforms: {
37
+ map: { value: null }, // 贴图纹理
38
+ baseDepth: { value: null }, // 整个场景的深度纹理
39
+ selectDepth: { value: null }, // 选中的对象深度纹理
40
+ },
41
41
  vertexShader: `
42
42
  ${ShaderChunk.common}
43
43
  ${ShaderChunk.logdepthbuf_pars_vertex}
@@ -47,7 +47,7 @@ const depthTestShader = new ShaderMaterial({
47
47
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
48
48
  ${ShaderChunk.logdepthbuf_vertex}
49
49
  }
50
- `,
50
+ `,
51
51
  fragmentShader: `
52
52
  ${ShaderChunk.logdepthbuf_pars_fragment}
53
53
  uniform sampler2D map;
@@ -64,61 +64,61 @@ const depthTestShader = new ShaderMaterial({
64
64
  gl_FragColor = texture2D(map, vUv);
65
65
  ${ShaderChunk.logdepthbuf_fragment}
66
66
  }
67
- `,
68
- blending: NoBlending,
69
- depthTest: true,
70
- depthWrite: true,
71
- transparent: true,
72
- });
73
- const blendMaterial = copyShader.clone();
74
- blendMaterial.blending = AdditiveBlending;
75
- const size = new Vector2();
76
- // 场景对象
77
- const scene = new Scene();
78
- const bloomPass = new UnrealBloomPass(new Vector2(1024, 1024), 1.5, 0.4, 0.85);
79
- // bloomPass.threshold = params.threshold;
80
- // bloomPass.strength = params.strength;
81
- // bloomPass.radius = params.radius;
82
- // 发光后期通道
83
- export default function bloom_pass(renderer, camera, object3d, baseRenderTarget, baseDepthTexture, devicePixelRatio) {
84
- const { bloom_enable = false, bloom_threshold = 1.5, bloom_strength = 0.4, bloom_radius = 0.85, } = object3d.userData;
85
- // 不满足条件就不渲染发光效果
86
- if (!bloom_enable || (bloom_strength === 0) || (bloom_radius === 0)) {
87
- return;
88
- }
89
- bloomPass.threshold = bloom_threshold;
90
- bloomPass.strength = bloom_strength;
91
- bloomPass.radius = bloom_radius;
92
- // 保存原帧缓冲区
93
- const originRenderTarget = renderer.getRenderTarget();
94
- // 设置选中目标的帧缓冲区
95
- renderer.getSize(size);
96
- size.multiplyScalar(devicePixelRatio);
97
- bloomPass.setSize(size.x, size.y);
98
- selectTextureTarget.setSize(size.x, size.y);
99
- selectDethpTestTextureTarget.setSize(size.x, size.y);
100
- renderer.setRenderTarget(selectTextureTarget);
101
- scene.children = [object3d];
102
- renderer.clear();
103
- renderer.render(scene, camera);
104
- //使用深度纹理提取选中的对象未被遮挡的像素点
105
- renderer.setRenderTarget(selectDethpTestTextureTarget);
106
- renderer.clear();
107
- depthTestShader.uniforms.map.value = baseRenderTarget.texture;
108
- depthTestShader.uniforms.baseDepth.value = baseDepthTexture;
109
- depthTestShader.uniforms.selectDepth.value = selectDepthTexture;
110
- fsQuad.render(renderer, depthTestShader);
111
- // 渲染辉光
112
- bloomPass.render(renderer, selectDethpTestTextureTarget, selectDethpTestTextureTarget, 0, false);
113
- // 将发光效果与原始帧缓冲区混合
114
- renderer.setRenderTarget(originRenderTarget);
115
- renderer.clearDepth();
116
- blendMaterial.uniforms.map.value = selectDethpTestTextureTarget.texture;
117
- fsQuad.render(renderer, blendMaterial);
118
- // 调试代码
119
- // renderer.setRenderTarget(null);
120
- // renderer.clearDepth();
121
- // copyShader.uniforms.map.value = blur2TextureTarget.texture;
122
- // fsQuad.render(renderer, copyShader);
123
- // return;
124
- }
67
+ `,
68
+ blending: NoBlending, // 渲染时不与背景融合计算 直接替换
69
+ depthTest: true,
70
+ depthWrite: true,
71
+ transparent: true,
72
+ });
73
+ const blendMaterial = copyShader.clone();
74
+ blendMaterial.blending = AdditiveBlending;
75
+ const size = new Vector2();
76
+ // 场景对象
77
+ const scene = new Scene();
78
+ const bloomPass = new UnrealBloomPass(new Vector2(1024, 1024), 1.5, 0.4, 0.85);
79
+ // bloomPass.threshold = params.threshold;
80
+ // bloomPass.strength = params.strength;
81
+ // bloomPass.radius = params.radius;
82
+ // 发光后期通道
83
+ export default function bloom_pass(renderer, camera, object3d, baseRenderTarget, baseDepthTexture, devicePixelRatio) {
84
+ const { bloom_enable = false, bloom_threshold = 1.5, bloom_strength = 0.4, bloom_radius = 0.85, } = object3d.userData;
85
+ // 不满足条件就不渲染发光效果
86
+ if (!bloom_enable || (bloom_strength === 0) || (bloom_radius === 0)) {
87
+ return;
88
+ }
89
+ bloomPass.threshold = bloom_threshold;
90
+ bloomPass.strength = bloom_strength;
91
+ bloomPass.radius = bloom_radius;
92
+ // 保存原帧缓冲区
93
+ const originRenderTarget = renderer.getRenderTarget();
94
+ // 设置选中目标的帧缓冲区
95
+ renderer.getSize(size);
96
+ size.multiplyScalar(devicePixelRatio);
97
+ bloomPass.setSize(size.x, size.y);
98
+ selectTextureTarget.setSize(size.x, size.y);
99
+ selectDethpTestTextureTarget.setSize(size.x, size.y);
100
+ renderer.setRenderTarget(selectTextureTarget);
101
+ scene.children = [object3d];
102
+ renderer.clear();
103
+ renderer.render(scene, camera);
104
+ //使用深度纹理提取选中的对象未被遮挡的像素点
105
+ renderer.setRenderTarget(selectDethpTestTextureTarget);
106
+ renderer.clear();
107
+ depthTestShader.uniforms.map.value = baseRenderTarget.texture;
108
+ depthTestShader.uniforms.baseDepth.value = baseDepthTexture;
109
+ depthTestShader.uniforms.selectDepth.value = selectDepthTexture;
110
+ fsQuad.render(renderer, depthTestShader);
111
+ // 渲染辉光
112
+ bloomPass.render(renderer, selectDethpTestTextureTarget, selectDethpTestTextureTarget, 0, false);
113
+ // 将发光效果与原始帧缓冲区混合
114
+ renderer.setRenderTarget(originRenderTarget);
115
+ renderer.clearDepth();
116
+ blendMaterial.uniforms.map.value = selectDethpTestTextureTarget.texture;
117
+ fsQuad.render(renderer, blendMaterial);
118
+ // 调试代码
119
+ // renderer.setRenderTarget(null);
120
+ // renderer.clearDepth();
121
+ // copyShader.uniforms.map.value = blur2TextureTarget.texture;
122
+ // fsQuad.render(renderer, copyShader);
123
+ // return;
124
+ }
@@ -1,2 +1,2 @@
1
- import { Camera, DepthTexture, Object3D, WebGLRenderer } from "three";
2
- export default function cover_pass(renderer: WebGLRenderer, camera: Camera, object3d: Object3D, baseDepthTexture: DepthTexture, devicePixelRatio: number): void;
1
+ import { Camera, DepthTexture, Object3D, WebGLRenderer } from "three";
2
+ export default function cover_pass(renderer: WebGLRenderer, camera: Camera, object3d: Object3D, baseDepthTexture: DepthTexture, devicePixelRatio: number): void;