three-base 2.0.67 → 2.0.69

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 (83) 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/EventMesh.d.ts +18 -18
  6. package/EventMesh.js +59 -59
  7. package/ExtrudeMesh.d.ts +111 -111
  8. package/ExtrudeMesh.js +363 -363
  9. package/FPScontrol.d.ts +45 -45
  10. package/FPScontrol.js +171 -171
  11. package/Fire/Fire.d.ts +28 -28
  12. package/Fire/Fire.js +79 -79
  13. package/Fire/FireGromtry.d.ts +9 -9
  14. package/Fire/FireGromtry.js +40 -40
  15. package/Fire/FireMaterial.d.ts +28 -28
  16. package/Fire/FireMaterial.js +32 -32
  17. package/InstancedMeshBase.d.ts +33 -24
  18. package/InstancedMeshBase.js +217 -190
  19. package/InstancedMeshBase.ts +57 -2
  20. package/KeyFrameAnimation.d.ts +25 -25
  21. package/KeyFrameAnimation.js +78 -78
  22. package/MeshBase.d.ts +32 -32
  23. package/MeshBase.js +172 -172
  24. package/Mirror.d.ts +25 -25
  25. package/Mirror.js +139 -139
  26. package/PlaneModal1/PlaneModal1.d.ts +31 -31
  27. package/PlaneModal1/PlaneModal1.js +105 -105
  28. package/PlaneModal1/index.d.ts +1 -1
  29. package/PlaneModal1/index.js +1 -1
  30. package/PlaneText.d.ts +44 -44
  31. package/PlaneText.js +30 -30
  32. package/PlaneWithHtml.d.ts +11 -11
  33. package/PlaneWithHtml.js +68 -68
  34. package/PointLight/PointLight.d.ts +13 -13
  35. package/PointLight/PointLight.js +64 -64
  36. package/PointLight/index.d.ts +1 -1
  37. package/PointLight/index.js +1 -1
  38. package/Sky/Sky.d.ts +13 -13
  39. package/Sky/Sky.js +28 -28
  40. package/Sky/index.d.ts +1 -1
  41. package/Sky/index.js +1 -1
  42. package/SpriteModal1/SpriteModal1.d.ts +30 -30
  43. package/SpriteModal1/SpriteModal1.js +110 -110
  44. package/SpriteModal1/index.d.ts +1 -1
  45. package/SpriteModal1/index.js +1 -1
  46. package/SpriteText.d.ts +45 -45
  47. package/SpriteText.js +163 -163
  48. package/SpriteText2.d.ts +47 -47
  49. package/SpriteText2.js +198 -198
  50. package/SpriteWithHtml.d.ts +7 -7
  51. package/SpriteWithHtml.js +49 -49
  52. package/Text3D/Text3D.d.ts +20 -20
  53. package/Text3D/Text3D.js +62 -62
  54. package/Text3D/fontController.d.ts +59 -59
  55. package/Text3D/fontController.js +200 -200
  56. package/Text3D/index.d.ts +1 -1
  57. package/Text3D/index.js +1 -1
  58. package/ThreeBase.d.ts +91 -91
  59. package/ThreeBase.js +611 -611
  60. package/ThreeMouse.d.ts +39 -39
  61. package/ThreeMouse.js +359 -359
  62. package/Transition.d.ts +40 -40
  63. package/Transition.js +207 -207
  64. package/index.d.ts +1 -1
  65. package/index.js +2 -2
  66. package/keyContorls.d.ts +25 -25
  67. package/keyContorls.js +98 -98
  68. package/package.json +1 -1
  69. package/pass/FullScreenQuad.d.ts +7 -7
  70. package/pass/FullScreenQuad.js +25 -25
  71. package/pass/glow_pass.d.ts +2 -2
  72. package/pass/glow_pass.js +236 -236
  73. package/pass/stroke_pass.d.ts +2 -2
  74. package/pass/stroke_pass.js +202 -202
  75. package/shaders/FXAAShaderMaterial.d.ts +3 -3
  76. package/shaders/FXAAShaderMaterial.js +21 -21
  77. package/shaders.d.ts +17 -17
  78. package/shaders.js +99 -99
  79. package/threeLoader.d.ts +26 -26
  80. package/threeLoader.js +189 -189
  81. package/threeLoader.ts +2 -2
  82. package/threeUtils.d.ts +47 -47
  83. package/threeUtils.js +266 -266
@@ -1,48 +1,48 @@
1
- /*
2
- * @Author: xiaosihan
3
- * @Date: 2023-05-09 00:35:17
4
- * @Last Modified by: xiaosihan
5
- * @Last Modified time: 2023-05-09 02:33:28
6
- */
7
- import { LinearFilter, RGBAFormat, Vector2, WebGLRenderTarget, ShaderMaterial, NoBlending, Scene, RawShaderMaterial, Color, NormalBlending, ShaderChunk, DepthTexture, DepthFormat, UnsignedShortType } from "three";
8
- import FullScreenQuad from "./FullScreenQuad";
9
- // 选中对象的深度纹理
10
- const selectDepthTexture = (() => {
11
- const baseDepthTexture = new DepthTexture(4096, 4096);
12
- baseDepthTexture.format = DepthFormat;
13
- baseDepthTexture.type = UnsignedShortType;
14
- baseDepthTexture.anisotropy = 16;
15
- return baseDepthTexture;
16
- })();
17
- // 选中对象的纹理
18
- const selectTextureTarget = new WebGLRenderTarget(512, 512, {
19
- minFilter: LinearFilter,
20
- magFilter: LinearFilter,
21
- format: RGBAFormat,
22
- depthTexture: selectDepthTexture,
23
- anisotropy: 16,
24
- });
25
- // 深度测试后的选中纹理
26
- const selectDethpTestTextureTarget = new WebGLRenderTarget(512, 512, {
27
- minFilter: LinearFilter,
28
- magFilter: LinearFilter,
29
- format: RGBAFormat,
30
- anisotropy: 16,
31
- });
32
- // 由于不能同时读写自己的纹理
33
- const blur1TextureTarget = new WebGLRenderTarget(512, 512, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat });
34
- // 所以需要用2个模糊纹理相互读写
35
- const blur2TextureTarget = new WebGLRenderTarget(512, 512, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat });
36
- const size = new Vector2();
37
- // 创建一个渲染工具 用于处理纹理
38
- const fsQuad = new FullScreenQuad(); // 渲染辅助器
39
- //深度比对纹理
40
- const depthTestShader = new ShaderMaterial({
41
- uniforms: {
42
- map: { value: null }, // 贴图纹理
43
- baseDepth: { value: null }, // 整个场景的深度纹理
44
- selectDepth: { value: null }, // 选中的对象深度纹理
45
- },
1
+ /*
2
+ * @Author: xiaosihan
3
+ * @Date: 2023-05-09 00:35:17
4
+ * @Last Modified by: xiaosihan
5
+ * @Last Modified time: 2023-05-09 02:33:28
6
+ */
7
+ import { LinearFilter, RGBAFormat, Vector2, WebGLRenderTarget, ShaderMaterial, NoBlending, Scene, RawShaderMaterial, Color, NormalBlending, ShaderChunk, DepthTexture, DepthFormat, UnsignedShortType } from "three";
8
+ import FullScreenQuad from "./FullScreenQuad";
9
+ // 选中对象的深度纹理
10
+ const selectDepthTexture = (() => {
11
+ const baseDepthTexture = new DepthTexture(4096, 4096);
12
+ baseDepthTexture.format = DepthFormat;
13
+ baseDepthTexture.type = UnsignedShortType;
14
+ baseDepthTexture.anisotropy = 16;
15
+ return baseDepthTexture;
16
+ })();
17
+ // 选中对象的纹理
18
+ const selectTextureTarget = new WebGLRenderTarget(512, 512, {
19
+ minFilter: LinearFilter,
20
+ magFilter: LinearFilter,
21
+ format: RGBAFormat,
22
+ depthTexture: selectDepthTexture,
23
+ anisotropy: 16,
24
+ });
25
+ // 深度测试后的选中纹理
26
+ const selectDethpTestTextureTarget = new WebGLRenderTarget(512, 512, {
27
+ minFilter: LinearFilter,
28
+ magFilter: LinearFilter,
29
+ format: RGBAFormat,
30
+ anisotropy: 16,
31
+ });
32
+ // 由于不能同时读写自己的纹理
33
+ const blur1TextureTarget = new WebGLRenderTarget(512, 512, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat });
34
+ // 所以需要用2个模糊纹理相互读写
35
+ const blur2TextureTarget = new WebGLRenderTarget(512, 512, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat });
36
+ const size = new Vector2();
37
+ // 创建一个渲染工具 用于处理纹理
38
+ const fsQuad = new FullScreenQuad(); // 渲染辅助器
39
+ //深度比对纹理
40
+ const depthTestShader = new ShaderMaterial({
41
+ uniforms: {
42
+ map: { value: null },
43
+ baseDepth: { value: null },
44
+ selectDepth: { value: null }, // 选中的对象深度纹理
45
+ },
46
46
  vertexShader: `
47
47
  ${ShaderChunk.common}
48
48
  ${ShaderChunk.logdepthbuf_pars_vertex}
@@ -54,7 +54,7 @@ const depthTestShader = new ShaderMaterial({
54
54
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
55
55
  ${ShaderChunk.logdepthbuf_vertex}
56
56
  }
57
- `,
57
+ `,
58
58
  fragmentShader: `
59
59
  ${ShaderChunk.logdepthbuf_pars_fragment}
60
60
  uniform sampler2D map;
@@ -68,18 +68,18 @@ const depthTestShader = new ShaderMaterial({
68
68
  gl_FragColor = texture2D(map, vUv);
69
69
  ${ShaderChunk.logdepthbuf_fragment}
70
70
  }
71
- `,
72
- blending: NoBlending, // 渲染时不与背景融合计算 直接替换
73
- depthTest: true,
74
- depthWrite: true,
75
- transparent: true
76
- });
77
- // 抗锯齿着色器
78
- const FXAAShaderMaterial = new ShaderMaterial({
79
- uniforms: {
80
- tDiffuse: { value: null }, // 贴图纹理
81
- resolution: { value: new Vector2(1 / 1024, 1 / 1024) }
82
- },
71
+ `,
72
+ blending: NoBlending,
73
+ depthTest: true,
74
+ depthWrite: true,
75
+ transparent: true
76
+ });
77
+ // 抗锯齿着色器
78
+ const FXAAShaderMaterial = new ShaderMaterial({
79
+ uniforms: {
80
+ tDiffuse: { value: null },
81
+ resolution: { value: new Vector2(1 / 1024, 1 / 1024) }
82
+ },
83
83
  vertexShader: `
84
84
  ${ShaderChunk.common}
85
85
  ${ShaderChunk.logdepthbuf_pars_vertex}
@@ -89,7 +89,7 @@ const FXAAShaderMaterial = new ShaderMaterial({
89
89
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
90
90
  ${ShaderChunk.logdepthbuf_vertex}
91
91
  }
92
- `,
92
+ `,
93
93
  fragmentShader: `
94
94
  ${ShaderChunk.logdepthbuf_pars_fragment}
95
95
  precision highp float;
@@ -304,49 +304,49 @@ const FXAAShaderMaterial = new ShaderMaterial({
304
304
  );
305
305
  ${ShaderChunk.logdepthbuf_fragment}
306
306
  }
307
- `,
308
- blending: NoBlending, // 渲染时不与背景融合计算 直接替换
309
- depthTest: false,
310
- depthWrite: false,
311
- transparent: true
312
- });
313
- // 描边着色器
314
- const blurShader = new RawShaderMaterial({
315
- uniforms: {
316
- tDiffuse: { value: null },
317
- color: { value: new Color("#0f0") }, // 没有被挡住的地方的颜色绿色
318
- width: { value: 1.0 },
319
- opacity: { value: 1.0 },
320
- resolution: { value: new Vector2(1 / 512, 1 / 512) }, // 渲染器的分辨率
321
- offset: {
322
- value: [
323
- new Vector2(0.000, 1.000),
324
- new Vector2(0.259, 0.966),
325
- new Vector2(0.500, 0.866),
326
- new Vector2(0.707, 0.707),
327
- new Vector2(0.866, 0.500),
328
- new Vector2(0.966, 0.259),
329
- new Vector2(1.000, 0.000),
330
- new Vector2(0.966, -0.259),
331
- new Vector2(0.866, -0.500),
332
- new Vector2(0.707, -0.707),
333
- new Vector2(0.500, -0.866),
334
- new Vector2(0.259, -0.966),
335
- new Vector2(0.000, -1.000),
336
- new Vector2(-0.259, -0.966),
337
- new Vector2(-0.500, -0.866),
338
- new Vector2(-0.707, -0.707),
339
- new Vector2(-0.866, -0.500),
340
- new Vector2(-0.966, -0.259),
341
- new Vector2(-1.000, -0.000),
342
- new Vector2(-0.966, 0.259),
343
- new Vector2(-0.866, 0.500),
344
- new Vector2(-0.707, 0.707),
345
- new Vector2(-0.500, 0.866),
346
- new Vector2(-0.259, 0.966)
347
- ]
348
- }
349
- },
307
+ `,
308
+ blending: NoBlending,
309
+ depthTest: false,
310
+ depthWrite: false,
311
+ transparent: true
312
+ });
313
+ // 描边着色器
314
+ const blurShader = new RawShaderMaterial({
315
+ uniforms: {
316
+ tDiffuse: { value: null },
317
+ color: { value: new Color("#0f0") },
318
+ width: { value: 1.0 },
319
+ opacity: { value: 1.0 },
320
+ resolution: { value: new Vector2(1 / 512, 1 / 512) },
321
+ offset: {
322
+ value: [
323
+ new Vector2(0.000, 1.000),
324
+ new Vector2(0.259, 0.966),
325
+ new Vector2(0.500, 0.866),
326
+ new Vector2(0.707, 0.707),
327
+ new Vector2(0.866, 0.500),
328
+ new Vector2(0.966, 0.259),
329
+ new Vector2(1.000, 0.000),
330
+ new Vector2(0.966, -0.259),
331
+ new Vector2(0.866, -0.500),
332
+ new Vector2(0.707, -0.707),
333
+ new Vector2(0.500, -0.866),
334
+ new Vector2(0.259, -0.966),
335
+ new Vector2(0.000, -1.000),
336
+ new Vector2(-0.259, -0.966),
337
+ new Vector2(-0.500, -0.866),
338
+ new Vector2(-0.707, -0.707),
339
+ new Vector2(-0.866, -0.500),
340
+ new Vector2(-0.966, -0.259),
341
+ new Vector2(-1.000, -0.000),
342
+ new Vector2(-0.966, 0.259),
343
+ new Vector2(-0.866, 0.500),
344
+ new Vector2(-0.707, 0.707),
345
+ new Vector2(-0.500, 0.866),
346
+ new Vector2(-0.259, 0.966)
347
+ ]
348
+ }
349
+ },
350
350
  vertexShader: `
351
351
  attribute vec3 position;
352
352
  attribute vec2 uv;
@@ -354,7 +354,7 @@ const blurShader = new RawShaderMaterial({
354
354
  void main() {
355
355
  vUv = uv;
356
356
  gl_Position = vec4(position, 1.0);
357
- }`,
357
+ }`,
358
358
  fragmentShader: `
359
359
  #ifdef GL_ES
360
360
  precision highp float;
@@ -390,18 +390,18 @@ const blurShader = new RawShaderMaterial({
390
390
  } else {
391
391
  gl_FragColor = stroke();
392
392
  }
393
- }`,
394
- blending: NoBlending, // 渲染时不与背景融合计算 直接替换
395
- depthTest: false,
396
- depthWrite: false,
397
- transparent: true
398
- });
399
- // 过滤着色器
400
- const filterSelectShader = new RawShaderMaterial({
401
- uniforms: {
402
- selectTexture: { value: null },
403
- blurTexture: { value: null }
404
- },
393
+ }`,
394
+ blending: NoBlending,
395
+ depthTest: false,
396
+ depthWrite: false,
397
+ transparent: true
398
+ });
399
+ // 过滤着色器
400
+ const filterSelectShader = new RawShaderMaterial({
401
+ uniforms: {
402
+ selectTexture: { value: null },
403
+ blurTexture: { value: null }
404
+ },
405
405
  vertexShader: `
406
406
  attribute vec3 position;
407
407
  attribute vec2 uv;
@@ -410,7 +410,7 @@ const filterSelectShader = new RawShaderMaterial({
410
410
  vUv = uv;
411
411
  gl_Position = vec4(position, 1.0);
412
412
  }
413
- `,
413
+ `,
414
414
  fragmentShader: `
415
415
  #ifdef GL_ES
416
416
  precision highp float;
@@ -423,16 +423,16 @@ const filterSelectShader = new RawShaderMaterial({
423
423
  gl_FragColor = texture2D(blurTexture, vUv);
424
424
  gl_FragColor.a -= (texture2D(selectTexture, vUv).a);
425
425
  }
426
- `,
427
- blending: NoBlending, // 渲染时不与背景融合计算 直接替换
428
- depthTest: false,
429
- depthWrite: false,
430
- transparent: true
431
- });
432
- const copyShader = new ShaderMaterial({
433
- uniforms: {
434
- map: { value: null }, // 贴图纹理
435
- },
426
+ `,
427
+ blending: NoBlending,
428
+ depthTest: false,
429
+ depthWrite: false,
430
+ transparent: true
431
+ });
432
+ const copyShader = new ShaderMaterial({
433
+ uniforms: {
434
+ map: { value: null }, // 贴图纹理
435
+ },
436
436
  vertexShader: `
437
437
  ${ShaderChunk.common}
438
438
  ${ShaderChunk.logdepthbuf_pars_vertex}
@@ -444,7 +444,7 @@ const copyShader = new ShaderMaterial({
444
444
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
445
445
  ${ShaderChunk.logdepthbuf_vertex}
446
446
  }
447
- `,
447
+ `,
448
448
  fragmentShader: `
449
449
  ${ShaderChunk.logdepthbuf_pars_fragment}
450
450
  uniform sampler2D map;
@@ -453,78 +453,78 @@ const copyShader = new ShaderMaterial({
453
453
  gl_FragColor = texture2D(map, vUv);
454
454
  ${ShaderChunk.logdepthbuf_fragment}
455
455
  }
456
- `,
457
- depthTest: true,
458
- depthWrite: true,
459
- transparent: true
460
- });
461
- // 场景对象
462
- const scene = new Scene();
463
- // 对象描边
464
- export default function stroke_pass(renderer, camera, object3d, baseDepthTexture) {
465
- const { stroke_enable = false, stroke_color = "#04fa12", stroke_width = 1 } = object3d.userData;
466
- if (!stroke_enable || stroke_width === 0) {
467
- return;
468
- }
469
- // 保存原帧缓冲区
470
- const originRenderTarget = renderer.getRenderTarget();
471
- // 设置选中目标的帧缓冲区
472
- renderer.getSize(size);
473
- size.multiplyScalar(window.devicePixelRatio);
474
- selectTextureTarget.setSize(size.x, size.y);
475
- selectDethpTestTextureTarget.setSize(size.x, size.y);
476
- blur1TextureTarget.setSize(size.x, size.y);
477
- blur2TextureTarget.setSize(size.x, size.y);
478
- renderer.setRenderTarget(selectTextureTarget);
479
- scene.children = [object3d];
480
- renderer.clear();
481
- renderer.render(scene, camera);
482
- // 设置描边着色器的分辨率
483
- blurShader.uniforms.resolution.value.set(1 / size.x, 1 / size.y);
484
- // 设置抗锯齿着色器的分辨率
485
- FXAAShaderMaterial.uniforms.resolution.value.set(1 / size.x, 1 / size.y);
486
- //描边颜色
487
- blurShader.uniforms.color.value.set(stroke_color);
488
- blurShader.uniforms.width.value = 1;
489
- //深度测试
490
- renderer.setRenderTarget(selectDethpTestTextureTarget);
491
- renderer.clear();
492
- depthTestShader.uniforms.map.value = selectTextureTarget.texture;
493
- depthTestShader.uniforms.baseDepth.value = baseDepthTexture;
494
- depthTestShader.uniforms.selectDepth.value = selectDepthTexture;
495
- fsQuad.render(renderer, depthTestShader);
496
- //一次描边
497
- renderer.setRenderTarget(blur1TextureTarget);
498
- blurShader.uniforms.tDiffuse.value = selectDethpTestTextureTarget.texture;
499
- fsQuad.render(renderer, blurShader);
500
- //二次描边
501
- renderer.setRenderTarget(blur2TextureTarget);
502
- blurShader.uniforms.tDiffuse.value = blur1TextureTarget.texture;
503
- fsQuad.render(renderer, blurShader);
504
- for (let i = 0; i < stroke_width - 2; i++) {
505
- //一次描边
506
- renderer.setRenderTarget(blur1TextureTarget);
507
- blurShader.uniforms.tDiffuse.value = blur2TextureTarget.texture;
508
- fsQuad.render(renderer, blurShader);
509
- //二次描边
510
- renderer.setRenderTarget(blur2TextureTarget);
511
- blurShader.uniforms.tDiffuse.value = blur1TextureTarget.texture;
512
- fsQuad.render(renderer, blurShader);
513
- }
514
- //最后抗锯齿
515
- renderer.setRenderTarget(blur1TextureTarget);
516
- FXAAShaderMaterial.uniforms.tDiffuse.value = blur2TextureTarget.texture;
517
- fsQuad.render(renderer, FXAAShaderMaterial);
518
- // 还原帧缓冲区 减去原始纹理保留描边
519
- renderer.setRenderTarget(originRenderTarget);
520
- filterSelectShader.uniforms.selectTexture.value = selectDethpTestTextureTarget.texture;
521
- filterSelectShader.uniforms.blurTexture.value = blur1TextureTarget.texture;
522
- filterSelectShader.blending = NormalBlending; // 与有的纹理融合计算 保留前面通道传递下来的纹理
523
- fsQuad.render(renderer, filterSelectShader);
524
- // 调试代码
525
- // renderer.setRenderTarget(null);
526
- // renderer.clearDepth();
527
- // copyShader.uniforms.tDiffuse.value = blur2TextureTarget.texture;
528
- // fsQuad.render(renderer, copyShader);
529
- // return;
530
- }
456
+ `,
457
+ depthTest: true,
458
+ depthWrite: true,
459
+ transparent: true
460
+ });
461
+ // 场景对象
462
+ const scene = new Scene();
463
+ // 对象描边
464
+ export default function stroke_pass(renderer, camera, object3d, baseDepthTexture) {
465
+ const { stroke_enable = false, stroke_color = "#04fa12", stroke_width = 1 } = object3d.userData;
466
+ if (!stroke_enable || stroke_width === 0) {
467
+ return;
468
+ }
469
+ // 保存原帧缓冲区
470
+ const originRenderTarget = renderer.getRenderTarget();
471
+ // 设置选中目标的帧缓冲区
472
+ renderer.getSize(size);
473
+ size.multiplyScalar(window.devicePixelRatio);
474
+ selectTextureTarget.setSize(size.x, size.y);
475
+ selectDethpTestTextureTarget.setSize(size.x, size.y);
476
+ blur1TextureTarget.setSize(size.x, size.y);
477
+ blur2TextureTarget.setSize(size.x, size.y);
478
+ renderer.setRenderTarget(selectTextureTarget);
479
+ scene.children = [object3d];
480
+ renderer.clear();
481
+ renderer.render(scene, camera);
482
+ // 设置描边着色器的分辨率
483
+ blurShader.uniforms.resolution.value.set(1 / size.x, 1 / size.y);
484
+ // 设置抗锯齿着色器的分辨率
485
+ FXAAShaderMaterial.uniforms.resolution.value.set(1 / size.x, 1 / size.y);
486
+ //描边颜色
487
+ blurShader.uniforms.color.value.set(stroke_color);
488
+ blurShader.uniforms.width.value = 1;
489
+ //深度测试
490
+ renderer.setRenderTarget(selectDethpTestTextureTarget);
491
+ renderer.clear();
492
+ depthTestShader.uniforms.map.value = selectTextureTarget.texture;
493
+ depthTestShader.uniforms.baseDepth.value = baseDepthTexture;
494
+ depthTestShader.uniforms.selectDepth.value = selectDepthTexture;
495
+ fsQuad.render(renderer, depthTestShader);
496
+ //一次描边
497
+ renderer.setRenderTarget(blur1TextureTarget);
498
+ blurShader.uniforms.tDiffuse.value = selectDethpTestTextureTarget.texture;
499
+ fsQuad.render(renderer, blurShader);
500
+ //二次描边
501
+ renderer.setRenderTarget(blur2TextureTarget);
502
+ blurShader.uniforms.tDiffuse.value = blur1TextureTarget.texture;
503
+ fsQuad.render(renderer, blurShader);
504
+ for (let i = 0; i < stroke_width - 2; i++) {
505
+ //一次描边
506
+ renderer.setRenderTarget(blur1TextureTarget);
507
+ blurShader.uniforms.tDiffuse.value = blur2TextureTarget.texture;
508
+ fsQuad.render(renderer, blurShader);
509
+ //二次描边
510
+ renderer.setRenderTarget(blur2TextureTarget);
511
+ blurShader.uniforms.tDiffuse.value = blur1TextureTarget.texture;
512
+ fsQuad.render(renderer, blurShader);
513
+ }
514
+ //最后抗锯齿
515
+ renderer.setRenderTarget(blur1TextureTarget);
516
+ FXAAShaderMaterial.uniforms.tDiffuse.value = blur2TextureTarget.texture;
517
+ fsQuad.render(renderer, FXAAShaderMaterial);
518
+ // 还原帧缓冲区 减去原始纹理保留描边
519
+ renderer.setRenderTarget(originRenderTarget);
520
+ filterSelectShader.uniforms.selectTexture.value = selectDethpTestTextureTarget.texture;
521
+ filterSelectShader.uniforms.blurTexture.value = blur1TextureTarget.texture;
522
+ filterSelectShader.blending = NormalBlending; // 与有的纹理融合计算 保留前面通道传递下来的纹理
523
+ fsQuad.render(renderer, filterSelectShader);
524
+ // 调试代码
525
+ // renderer.setRenderTarget(null);
526
+ // renderer.clearDepth();
527
+ // copyShader.uniforms.tDiffuse.value = blur2TextureTarget.texture;
528
+ // fsQuad.render(renderer, copyShader);
529
+ // return;
530
+ }
@@ -1,3 +1,3 @@
1
- import { ShaderMaterial } from "three";
2
- declare const FXAAShaderMaterial: ShaderMaterial;
3
- export default FXAAShaderMaterial;
1
+ import { ShaderMaterial } from "three";
2
+ declare const FXAAShaderMaterial: ShaderMaterial;
3
+ export default FXAAShaderMaterial;
@@ -1,16 +1,16 @@
1
- /*
2
- * @Author: xiaosihan
3
- * @Date: 2024-01-20 05:10:37
4
- * @Last Modified by: xiaosihan
5
- * @Last Modified time: 2024-01-20 05:10:57
6
- */
7
- import { NoBlending, ShaderChunk, ShaderMaterial, Vector2 } from "three";
8
- // 抗锯齿着色器
9
- const FXAAShaderMaterial = new ShaderMaterial({
10
- uniforms: {
11
- tDiffuse: { value: null }, // 贴图纹理
12
- resolution: { value: new Vector2(1 / 1024, 1 / 1024) }
13
- },
1
+ /*
2
+ * @Author: xiaosihan
3
+ * @Date: 2024-01-20 05:10:37
4
+ * @Last Modified by: xiaosihan
5
+ * @Last Modified time: 2024-01-20 05:10:57
6
+ */
7
+ import { NoBlending, ShaderChunk, ShaderMaterial, Vector2 } from "three";
8
+ // 抗锯齿着色器
9
+ const FXAAShaderMaterial = new ShaderMaterial({
10
+ uniforms: {
11
+ tDiffuse: { value: null },
12
+ resolution: { value: new Vector2(1 / 1024, 1 / 1024) }
13
+ },
14
14
  vertexShader: `
15
15
  ${ShaderChunk.common}
16
16
  ${ShaderChunk.logdepthbuf_pars_vertex}
@@ -20,7 +20,7 @@ const FXAAShaderMaterial = new ShaderMaterial({
20
20
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
21
21
  ${ShaderChunk.logdepthbuf_vertex}
22
22
  }
23
- `,
23
+ `,
24
24
  fragmentShader: `
25
25
  ${ShaderChunk.logdepthbuf_pars_fragment}
26
26
  precision highp float;
@@ -235,10 +235,10 @@ const FXAAShaderMaterial = new ShaderMaterial({
235
235
  );
236
236
  ${ShaderChunk.logdepthbuf_fragment}
237
237
  }
238
- `,
239
- blending: NoBlending, // 渲染时不与背景融合计算 直接替换
240
- depthTest: false,
241
- depthWrite: false,
242
- transparent: true
243
- });
244
- export default FXAAShaderMaterial;
238
+ `,
239
+ blending: NoBlending,
240
+ depthTest: false,
241
+ depthWrite: false,
242
+ transparent: true
243
+ });
244
+ export default FXAAShaderMaterial;
package/shaders.d.ts CHANGED
@@ -1,17 +1,17 @@
1
- import { Mesh, OrthographicCamera, ShaderMaterial, WebGLRenderer } from "three";
2
- declare class FullScreenQuad {
3
- constructor();
4
- _mesh: Mesh;
5
- dispose(): void;
6
- render(renderer: WebGLRenderer): void;
7
- get material(): import("three").Material | import("three").Material[];
8
- set material(value: import("three").Material | import("three").Material[]);
9
- }
10
- export declare const fullScreenMesh: FullScreenQuad;
11
- export declare const orthographicCamera: OrthographicCamera;
12
- export declare const clearShader: ShaderMaterial;
13
- export declare const intersectionShader: ShaderMaterial;
14
- export declare const coptyShader: ShaderMaterial;
15
- export declare const strokeShader: ShaderMaterial;
16
- export declare const gaussBlurShader: ShaderMaterial;
17
- export {};
1
+ import { Mesh, OrthographicCamera, ShaderMaterial, WebGLRenderer } from "three";
2
+ declare class FullScreenQuad {
3
+ constructor();
4
+ _mesh: Mesh;
5
+ dispose(): void;
6
+ render(renderer: WebGLRenderer): void;
7
+ get material(): import("three").Material | import("three").Material[];
8
+ set material(value: import("three").Material | import("three").Material[]);
9
+ }
10
+ export declare const fullScreenMesh: FullScreenQuad;
11
+ export declare const orthographicCamera: OrthographicCamera;
12
+ export declare const clearShader: ShaderMaterial;
13
+ export declare const intersectionShader: ShaderMaterial;
14
+ export declare const coptyShader: ShaderMaterial;
15
+ export declare const strokeShader: ShaderMaterial;
16
+ export declare const gaussBlurShader: ShaderMaterial;
17
+ export {};