three-base 1.129.0 → 1.129.2

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 (53) hide show
  1. package/index.js +34 -0
  2. package/index.ts +5 -1
  3. package/lib/{ApngTexture.ts → ApngTexture.js} +11 -41
  4. package/lib/{ApngTextureManage.ts → ApngTextureManage.js} +13 -56
  5. package/lib/EventMesh.js +59 -0
  6. package/lib/{ExtrudeMesh.ts → ExtrudeMesh.js} +77 -284
  7. package/lib/{FPScontrol.ts → FPScontrol.js} +25 -64
  8. package/lib/InstancedGroupMesh.js +63 -0
  9. package/lib/{KeyFrameAnimation.ts → KeyFrameAnimation.js} +19 -63
  10. package/lib/{PlaneText.ts → PlaneText.js} +5 -34
  11. package/lib/{PointLight.ts → PointLight.js} +4 -18
  12. package/lib/Sky/{Sky.ts → Sky.js} +4 -12
  13. package/lib/Text3D/Text3D.js +60 -0
  14. package/lib/Text3D/fontController.js +200 -0
  15. package/lib/Text3D/gentilis.json +811 -0
  16. package/lib/{ThreeBase.ts → ThreeBase.js} +75 -131
  17. package/lib/{ThreeMouse.ts → ThreeMouse.js} +61 -168
  18. package/lib/{Transition.ts → Transition.js} +30 -101
  19. package/lib/index.d.ts +22 -0
  20. package/lib/{keyContorls.ts → keyContorls.js} +11 -40
  21. package/lib/lib/ApngTexture.d.ts +13 -0
  22. package/lib/lib/ApngTextureManage.d.ts +18 -0
  23. package/lib/lib/EventMesh.d.ts +18 -0
  24. package/lib/lib/ExtrudeMesh.d.ts +111 -0
  25. package/lib/lib/FPScontrol.d.ts +44 -0
  26. package/lib/lib/InstancedGroupMesh.d.ts +10 -0
  27. package/lib/lib/KeyFrameAnimation.d.ts +25 -0
  28. package/lib/lib/PlaneText.d.ts +37 -0
  29. package/lib/lib/PointLight.d.ts +13 -0
  30. package/lib/lib/Sky/Sky.d.ts +13 -0
  31. package/lib/lib/Text3D/Text3D.d.ts +20 -0
  32. package/lib/lib/Text3D/fontController.d.ts +59 -0
  33. package/lib/lib/ThreeBase.d.ts +59 -0
  34. package/lib/lib/ThreeMouse.d.ts +39 -0
  35. package/lib/lib/Transition.d.ts +45 -0
  36. package/lib/lib/keyContorls.d.ts +25 -0
  37. package/lib/lib/planeModal1/PlaneModal1.d.ts +32 -0
  38. package/lib/lib/shaders.d.ts +17 -0
  39. package/lib/lib/spriteModal1/SpriteModal1.d.ts +31 -0
  40. package/lib/lib/threeLoader.d.ts +20 -0
  41. package/lib/lib/threeUtils.d.ts +41 -0
  42. package/lib/lib/type.d.ts +0 -0
  43. package/lib/planeModal1/{PlaneModal1.ts → PlaneModal1.js} +33 -77
  44. package/lib/{shaders.ts → shaders.js} +19 -38
  45. package/lib/spriteModal1/{SpriteModal1.ts → SpriteModal1.js} +33 -80
  46. package/lib/{threeLoader.ts → threeLoader.js} +19 -45
  47. package/lib/{threeUtils.ts → threeUtils.js} +81 -82
  48. package/lib/{type.ts → type.js} +1 -4
  49. package/package.json +7 -6
  50. package/lib/EventMesh.ts +0 -79
  51. package/lib/InstancedGroupMesh.ts +0 -80
  52. package/lib/text/Text2D.ts +0 -41
  53. package/lib/text/Text3D.ts +0 -20
@@ -1,13 +1,12 @@
1
1
  /*
2
- * @Author: xiaosihan
3
- * @Date: 2021-12-20 13:38:22
2
+ * @Author: xiaosihan
3
+ * @Date: 2021-12-20 13:38:22
4
4
  * @Last Modified by: xiaosihan
5
5
  * @Last Modified time: 2023-03-30 11:00:20
6
6
  */
7
-
8
7
  import elementResizeEvent from "element-resize-event";
9
8
  import { round } from "lodash";
10
- import { AxesHelper, EventDispatcher, GridHelper, LinearFilter, MOUSE, NoBlending, NormalBlending, Object3D, PerspectiveCamera, RGBAFormat, Scene, Texture, TOUCH, Vector2, Vector3, WebGLRenderer, WebGLRenderTarget } from "three";
9
+ import { AxesHelper, EventDispatcher, GridHelper, LinearFilter, Mesh, MOUSE, NoBlending, NormalBlending, PerspectiveCamera, RGBAFormat, Scene, TOUCH, Vector2, Vector3, WebGLRenderer, WebGLRenderTarget } from "three";
11
10
  import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
12
11
  import { generateUUID } from "three/src/math/MathUtils";
13
12
  import { clearShader, coptyShader, fullScreenMesh, gaussBlurShader, strokeShader } from "./shaders";
@@ -15,41 +14,32 @@ import threeLoader from "./threeLoader";
15
14
  import ThreeMouse from "./ThreeMouse";
16
15
  import threeUtils from "./threeUtils";
17
16
  import Transition from "./Transition";
18
-
19
17
  // three.js 的基础对象
20
18
  export default class ThreeBase extends EventDispatcher {
21
-
22
19
  constructor() {
23
20
  super();
24
21
  this.init();
25
22
  }
26
-
27
23
  // 公用渲染目标1
28
24
  renderTarget = new WebGLRenderTarget(128, 128, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat });
29
-
30
25
  // 渲染目标2
31
26
  renderTarget2 = new WebGLRenderTarget(128, 128, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat });
32
-
33
27
  // 公用二维向量
34
28
  tempVector2 = new Vector2();
35
-
36
29
  // 公用的三维向量
37
30
  tempVector3 = new Vector3();
38
-
39
31
  //渲染器的尺寸
40
32
  size = new Vector2(0, 0);
41
-
42
33
  // 渲染器对象
43
34
  renderer = (() => {
44
35
  const renderer = new WebGLRenderer({
45
- alpha: true,// 透明背景
46
- antialias: true, // 阴影抗锯齿
47
- precision: "highp", //precision:highp/mediump/lowp着色精度选择
48
- logarithmicDepthBuffer: true, // 对数深度缓冲区 避免当2个面完全重合时闪烁
49
- preserveDrawingBuffer: false, // 是否保存绘图缓冲
36
+ alpha: true,
37
+ antialias: true,
38
+ precision: "highp",
39
+ logarithmicDepthBuffer: true,
40
+ preserveDrawingBuffer: false,
50
41
  stencil: false, // 模版
51
42
  });
52
-
53
43
  renderer.domElement.id = generateUUID();
54
44
  renderer.localClippingEnabled = true;
55
45
  renderer.setPixelRatio(window.devicePixelRatio);
@@ -57,16 +47,12 @@ export default class ThreeBase extends EventDispatcher {
57
47
  threeLoader.setAnisotropy(renderer.capabilities.getMaxAnisotropy());
58
48
  return renderer;
59
49
  })();
60
-
61
50
  //透视相机
62
51
  camera = new PerspectiveCamera(45, 1, 0.0001, 10000);
63
-
64
52
  // 场景对象
65
53
  scene = new Scene();
66
-
67
54
  ///鼠标事件对象
68
55
  threeMouse = new ThreeMouse(this.renderer, this.camera, this.scene);
69
-
70
56
  // 轨道控制器
71
57
  controls = (() => {
72
58
  const controls = new OrbitControls(this.camera, this.renderer.domElement);
@@ -80,18 +66,16 @@ export default class ThreeBase extends EventDispatcher {
80
66
  controls.screenSpacePanning = true;
81
67
  return controls;
82
68
  })();
83
-
84
69
  // 上下文是否被销毁了
85
70
  isRendererContextLost = false;
86
-
87
71
  // 设置 dom 容器
88
- async setContainer(div: HTMLDivElement | null) {
72
+ async setContainer(div) {
89
73
  if (div) {
90
74
  //删除这个容器里面的所有canvas
91
75
  const canvas = div.getElementsByTagName("canvas");
92
- for (let c of canvas) c.remove();
76
+ for (let c of canvas)
77
+ c.remove();
93
78
  div.append(this.renderer.domElement);
94
-
95
79
  // 监听容器的尺寸的改变
96
80
  elementResizeEvent(div, () => {
97
81
  let rect = window.getComputedStyle(div);
@@ -99,7 +83,6 @@ export default class ThreeBase extends EventDispatcher {
99
83
  let height = parseInt(rect.height);
100
84
  this.resize(width, height);
101
85
  });
102
-
103
86
  // 如果上下文被销毁了, 就恢复上下文
104
87
  if (this.isRendererContextLost) {
105
88
  //@ts-ignore
@@ -108,20 +91,17 @@ export default class ThreeBase extends EventDispatcher {
108
91
  await new Promise(resolve => requestAnimationFrame(resolve));
109
92
  this.renderer.domElement.style.opacity = "1";
110
93
  }
111
-
112
94
  let rect = window.getComputedStyle(div);
113
95
  let width = parseInt(rect.width);
114
96
  let height = parseInt(rect.height);
115
97
  this.resize(width, height);
116
-
117
98
  // 开启时时渲染
118
99
  threeUtils.removeEventListener("requestAnimationFrame", this.renderBindThis);
119
100
  threeUtils.addEventListener("requestAnimationFrame", this.renderBindThis);
120
101
  }
121
102
  }
122
-
123
103
  // 修改尺寸
124
- resize(width: number, height: number) {
104
+ resize(width, height) {
125
105
  this.camera.aspect = width / height;
126
106
  this.camera.updateProjectionMatrix();
127
107
  this.renderer.setPixelRatio(window.devicePixelRatio);
@@ -131,7 +111,6 @@ export default class ThreeBase extends EventDispatcher {
131
111
  this.renderer.clear();
132
112
  this.renderer.render(this.scene, this.camera);
133
113
  }
134
-
135
114
  // 控制器的位置缓动的计算的顶点对象
136
115
  controlsPosition = (() => {
137
116
  const controlsPosition = new Transition({ x: 100, y: 100, z: 100 });
@@ -143,7 +122,6 @@ export default class ThreeBase extends EventDispatcher {
143
122
  });
144
123
  return controlsPosition;
145
124
  })();
146
-
147
125
  // 控制器的 朝向带缓动的计算的顶点对象
148
126
  controlsCenter = (() => {
149
127
  const controlsCenter = new Transition({ x: 0, y: 0, z: 0 });
@@ -155,7 +133,6 @@ export default class ThreeBase extends EventDispatcher {
155
133
  });
156
134
  return controlsCenter;
157
135
  })();
158
-
159
136
  init() {
160
137
  // 非开发模式添加网格辅助线
161
138
  if (threeUtils.isDev) {
@@ -165,75 +142,51 @@ export default class ThreeBase extends EventDispatcher {
165
142
  const axesHelper = new AxesHelper(10000);
166
143
  this.scene.add(axesHelper);
167
144
  }
168
-
169
145
  // 资源加载进度有更新时, 需要渲染
170
146
  threeLoader.addEventListener("progress", () => {
171
147
  this.needRender = true;
172
148
  });
173
-
174
149
  }
175
-
176
150
  // 重置控制器的位置
177
- resetLookAt({ position, center, }: { position?: Vector3, center?: Vector3, }) {
178
-
151
+ resetLookAt({ position, center, }) {
179
152
  // 停止控制器的惯性
180
153
  this.controls.enableDamping = false;
181
154
  this.controls.saveState();
182
155
  this.controls.update();
183
156
  this.controls.reset();
184
157
  this.controls.enableDamping = true;
185
-
186
158
  position && this.controlsPosition.reset({ x: position.x, y: position.y, z: position.z });
187
159
  center && this.controlsCenter.reset({ x: center.x, y: center.y, z: center.z });
188
160
  this.needRender = true;
189
161
  }
190
-
191
162
  // 设置控制器的位置 以动画的方式移动控制器
192
- async setLookAt({ position, center, duration = 1000 }: { position?: Vector3, center?: Vector3, duration?: number }) {
193
-
163
+ async setLookAt({ position, center, duration = 1000 }) {
194
164
  // 停止控制器的惯性
195
165
  this.controls.enableDamping = false;
196
166
  this.controls.saveState();
197
167
  this.controls.update();
198
168
  this.controls.reset();
199
169
  this.controls.enableDamping = true;
200
-
201
170
  let currentPosition = this.camera.position.clone();
202
171
  let currentCenter = this.controls.target.clone();
203
-
204
- if (position) {
205
- this.controlsPosition
206
- .setDuration(duration)
207
- .reset({
208
- x: currentPosition.x,
209
- y: currentPosition.y,
210
- z: currentPosition.z
211
- })
212
- .set({
213
- x: position.x,
214
- y: position.y,
215
- z: position.z
216
- });
217
- }
218
-
219
- if (center) {
220
- this.controlsCenter
221
- .setDuration(duration)
222
- .reset({
223
- x: currentCenter.x,
224
- y: currentCenter.y,
225
- z: currentCenter.z
226
- }).set({
227
- x: center.x,
228
- y: center.y,
229
- z: center.z
230
- });
231
- }
232
-
233
172
  // 等待动画执行完成
234
- await new Promise(resolve => setTimeout(resolve, Math.max(this.controlsCenter._duration, this.controlsPosition._duration)));
173
+ await Promise.all([
174
+ new Promise(async (resolve, reject) => {
175
+ if (position) {
176
+ this.controlsPosition.setDuration(duration).reset({ x: currentPosition.x, y: currentPosition.y, z: currentPosition.z });
177
+ await this.controlsPosition.set({ x: position.x, y: position.y, z: position.z });
178
+ }
179
+ resolve();
180
+ }),
181
+ new Promise(async (resolve, reject) => {
182
+ if (center) {
183
+ this.controlsCenter.setDuration(duration).reset({ x: currentCenter.x, y: currentCenter.y, z: currentCenter.z });
184
+ await this.controlsCenter.set({ x: center.x, y: center.y, z: center.z });
185
+ }
186
+ resolve();
187
+ }),
188
+ ]);
235
189
  }
236
-
237
190
  // 获取控制的位置和朝向 保留3位小数
238
191
  getLookAt() {
239
192
  const position = this.camera.position.toArray().map(v => round(v, 3));
@@ -242,30 +195,26 @@ export default class ThreeBase extends EventDispatcher {
242
195
  center: new Vector3(...center),
243
196
  position: new Vector3(...position),
244
197
  centerPosition: `center: new Vector3(${center.join(",")}),position: new Vector3(${position.join(",")})`
245
- }
198
+ };
246
199
  }
247
-
248
200
  // 三维向量转化成屏幕上的2维向量
249
- v3tov2(v3: Vector3) {
201
+ v3tov2(v3) {
250
202
  v3.project(this.camera);
251
203
  const v2 = new Vector2((v3.x + 1) * this.size.x * 0.5, (-v3.y + 1) * this.size.y * 0.5);
252
204
  return v2;
253
205
  }
254
-
255
206
  // 控制器类型
256
- controlType: "OrbitControls" | "MapControls" = "OrbitControls";
257
-
258
- // 记录一下空间平移方式
207
+ controlType = "OrbitControls";
208
+ // 记录一下空间平移方式 在切换控制器的时候保留一下平移方式
259
209
  originScreenSpacePanning = false;
260
-
261
210
  //改变控制器的类型
262
- setControlType(controlType: "OrbitControls" | "MapControls") {
263
-
211
+ setControlType(controlType) {
264
212
  if (controlType === "OrbitControls") {
265
213
  this.controls.screenSpacePanning = this.originScreenSpacePanning;
266
214
  this.controls.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };
267
215
  this.controls.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };
268
- } else if (controlType === "MapControls") {
216
+ }
217
+ else if (controlType === "MapControls") {
269
218
  this.originScreenSpacePanning = this.controls.screenSpacePanning;
270
219
  // pan orthogonal to world-space direction camera.up
271
220
  this.controls.screenSpacePanning = false;
@@ -274,16 +223,11 @@ export default class ThreeBase extends EventDispatcher {
274
223
  this.controls.touches.ONE = TOUCH.PAN;
275
224
  this.controls.touches.TWO = TOUCH.DOLLY_ROTATE;
276
225
  }
277
-
278
226
  }
279
-
280
227
  // 是否自动渲染
281
228
  autoRender = true;
282
-
283
229
  //是否需要渲染, 当autoRender=false的时候就需要 手动触发渲染
284
230
  needRender = false;
285
-
286
-
287
231
  // 停止渲染
288
232
  stopRender() {
289
233
  threeUtils.removeEventListener("requestAnimationFrame", this.renderBindThis);
@@ -293,44 +237,34 @@ export default class ThreeBase extends EventDispatcher {
293
237
  this.resize(100, 100);
294
238
  this.renderer.domElement.style.opacity = "0";
295
239
  }
296
-
297
240
  // 渲染场景
298
241
  render() {
299
-
300
242
  // 控制器在移动时鼠标不能操作
301
243
  this.controls.enabled = (this.controlsPosition.isDone() || this.controlsCenter.isDone());
302
-
303
244
  // canvas 没有在页面上面的话 就跳过渲染
304
245
  if (!threeUtils.inDocument(this.renderer.domElement)) {
305
246
  this.stopRender();
306
247
  return;
307
248
  }
308
-
309
249
  // 分发鼠标事件
310
250
  this.threeMouse.dispatchEvent();
311
-
312
251
  // 在不自动渲染时, needRender=false 就跳过渲染
313
252
  if (!this.autoRender && !this.needRender) {
314
253
  return;
315
254
  }
316
255
  this.needRender = false;
317
-
318
256
  if (this.controls.enabled) {
319
257
  this.controls.update();
320
258
  }
321
-
322
259
  this.renderer.clear();
323
-
324
260
  // 渲染场景
325
261
  this.dispatchEvent({ type: "beforeRender" });
326
262
  this.renderer.render(this.scene, this.camera);
327
263
  this.dispatchEvent({ type: "afterRender" });
328
264
  }
329
-
330
265
  renderBindThis = this.render.bind(this);
331
-
332
266
  // 下载渲染图
333
- download(fileName: string = "download") {
267
+ download(fileName = "download") {
334
268
  this.render();
335
269
  const base64 = this.renderer.domElement.toDataURL('image/png');
336
270
  let saveLink = document.createElement("a");
@@ -339,9 +273,36 @@ export default class ThreeBase extends EventDispatcher {
339
273
  document.body.append(saveLink);
340
274
  saveLink.click();
341
275
  }
342
-
276
+ _preMesh = new Mesh();
277
+ _preRT = new WebGLRenderTarget(128, 128, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat });
278
+ //预加载纹理图片
279
+ async preloadTexture(src) {
280
+ const texture = threeLoader.getTexture(src);
281
+ while (texture && !texture.image || !texture.image.complete) {
282
+ await new Promise(resolve => setTimeout(resolve, 50));
283
+ }
284
+ // 添加到计划任务中去
285
+ threeUtils.addWork(() => {
286
+ const originRenderTarget = this.renderer.getRenderTarget();
287
+ this.renderer.setRenderTarget(this._preRT);
288
+ this._preMesh.material.map = texture;
289
+ this.renderer.render(this._preMesh, this.camera);
290
+ this.renderer.setRenderTarget(originRenderTarget);
291
+ });
292
+ }
293
+ //预加载网格
294
+ async preloadGeometry(geometry) {
295
+ // 添加到计划任务中去
296
+ threeUtils.addWork(() => {
297
+ const originRenderTarget = this.renderer.getRenderTarget();
298
+ this.renderer.setRenderTarget(this._preRT);
299
+ this._preMesh.geometry = geometry;
300
+ this.renderer.render(this._preMesh, this.camera);
301
+ this.renderer.setRenderTarget(originRenderTarget);
302
+ });
303
+ }
343
304
  // 清理渲染目标
344
- clearRendererTargte(rendererTarget: WebGLRenderTarget | null) {
305
+ clearRendererTargte(rendererTarget) {
345
306
  const originTarget = this.renderer.getRenderTarget();
346
307
  this.renderer.setRenderTarget(rendererTarget);
347
308
  fullScreenMesh.material = clearShader;
@@ -349,9 +310,8 @@ export default class ThreeBase extends EventDispatcher {
349
310
  this.renderer.clearDepth();
350
311
  this.renderer.setRenderTarget(originTarget);
351
312
  }
352
-
353
313
  // 拷贝纹理到渲染目标
354
- copyTextureToRenderTarget(texture: Texture, rendererTarget: WebGLRenderTarget | null, alpha: boolean = false, opactity: number = 1) {
314
+ copyTextureToRenderTarget(texture, rendererTarget, alpha = false, opactity = 1) {
355
315
  const originTarget = this.renderer.getRenderTarget();
356
316
  if (rendererTarget) {
357
317
  this.renderer.getSize(this.tempVector2);
@@ -365,9 +325,8 @@ export default class ThreeBase extends EventDispatcher {
365
325
  fullScreenMesh.render(this.renderer);
366
326
  this.renderer.setRenderTarget(originTarget);
367
327
  }
368
-
369
328
  // 把对象绘制到渲染目标中
370
- object3dToRendererTarget(obj: Object3D, rendererTarget: WebGLRenderTarget) {
329
+ object3dToRendererTarget(obj, rendererTarget) {
371
330
  this.clearRendererTargte(rendererTarget);
372
331
  const originTarget = this.renderer.getRenderTarget();
373
332
  this.renderer.setRenderTarget(rendererTarget);
@@ -376,15 +335,13 @@ export default class ThreeBase extends EventDispatcher {
376
335
  this.renderer.render(obj, this.camera);
377
336
  this.renderer.setRenderTarget(originTarget);
378
337
  }
379
-
380
338
  // 给渲染目标的内容加描边
381
- rendererTagetAddStroke(rendererTarget: WebGLRenderTarget, strockWidth: number, color: string, opacity: number) {
339
+ rendererTagetAddStroke(rendererTarget, strockWidth, color, opacity) {
382
340
  const originTarget = this.renderer.getRenderTarget();
383
341
  this.clearRendererTargte(this.renderTarget2);
384
342
  this.renderer.setRenderTarget(this.renderTarget2);
385
343
  this.renderer.getSize(this.tempVector2);
386
344
  this.renderTarget2.setSize(this.tempVector2.x, this.tempVector2.y);
387
-
388
345
  fullScreenMesh.material = strokeShader;
389
346
  strokeShader.uniforms.map.value = rendererTarget.texture;
390
347
  strokeShader.uniforms.resolution.value.set(this.tempVector2.x, this.tempVector2.y);
@@ -392,59 +349,46 @@ export default class ThreeBase extends EventDispatcher {
392
349
  strokeShader.uniforms.strokeColor.value.set(color);
393
350
  strokeShader.uniforms.opacity.value = opacity;
394
351
  fullScreenMesh.render(this.renderer);
395
-
396
352
  this.copyTextureToRenderTarget(this.renderTarget2.texture, rendererTarget, true);
397
-
398
353
  this.renderer.setRenderTarget(originTarget);
399
354
  }
400
-
401
355
  // 渲染对象的描边
402
- renderObject3dStroke(obj: Object3D, strockWidth: number, color: string, opacity: number) {
356
+ renderObject3dStroke(obj, strockWidth, color, opacity) {
403
357
  this.object3dToRendererTarget(obj, this.renderTarget);
404
358
  this.rendererTagetAddStroke(this.renderTarget, strockWidth, color, opacity);
405
359
  this.copyTextureToRenderTarget(this.renderTarget.texture, null);
406
360
  }
407
-
408
361
  //给渲染目标加上高斯模糊计算
409
- renderTargetgaussBlur(rendererTarget: WebGLRenderTarget, radius: number, opacity: number) {
362
+ renderTargetgaussBlur(rendererTarget, radius, opacity) {
410
363
  const originTarget = this.renderer.getRenderTarget();
411
-
412
364
  this.clearRendererTargte(this.renderTarget2);
413
365
  this.renderer.setRenderTarget(this.renderTarget2);
414
366
  this.renderer.getSize(this.tempVector2);
415
367
  this.renderTarget2.setSize(this.tempVector2.x, this.tempVector2.y);
416
-
417
368
  fullScreenMesh.material = gaussBlurShader;
418
369
  gaussBlurShader.uniforms.map.value = rendererTarget.texture;
419
370
  gaussBlurShader.uniforms.radius.value = radius;
420
371
  gaussBlurShader.uniforms.opacity.value = opacity;
421
372
  gaussBlurShader.uniforms.resolution.value.set(this.tempVector2.x, this.tempVector2.y);
422
373
  fullScreenMesh.render(this.renderer);
423
-
424
374
  this.copyTextureToRenderTarget(this.renderTarget2.texture, rendererTarget, true);
425
-
426
375
  this.renderer.setRenderTarget(originTarget);
427
376
  }
428
-
429
377
  // 渲染目标上的纹理添加辉光效果
430
- renderTargetAddGlow(renderTarget: WebGLRenderTarget, width: number, color: string) {
431
-
378
+ renderTargetAddGlow(renderTarget, width, color) {
432
379
  this.rendererTagetAddStroke(renderTarget, 1 * width, color, 0.3);
433
380
  this.rendererTagetAddStroke(renderTarget, 2 * width, color, 0.2);
434
381
  this.rendererTagetAddStroke(renderTarget, 3 * width, color, 0.05);
435
-
436
382
  this.renderTargetgaussBlur(renderTarget, 1, 1);
437
383
  this.renderTargetgaussBlur(renderTarget, 1, 1);
438
384
  this.renderTargetgaussBlur(renderTarget, 1, 1);
439
385
  }
440
-
441
386
  // 渲染 渲染目标
442
- renderRendererTarget(renderTarget: WebGLRenderTarget, alpha: boolean = false) {
387
+ renderRendererTarget(renderTarget, alpha = false) {
443
388
  coptyShader.uniforms.map.value = renderTarget.texture;
444
389
  coptyShader.uniforms.opacity.value = 1.0;
445
390
  fullScreenMesh.material = coptyShader;
446
391
  coptyShader.blending = alpha ? NoBlending : NormalBlending;
447
392
  fullScreenMesh.render(this.renderer);
448
393
  }
449
-
450
- }
394
+ }