three-base 2.0.142 → 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 +6 -6
- package/DirectionalLight.js +68 -68
- package/EventMap.d.ts +103 -103
- package/EventMap.js +17 -17
- package/EventMesh.d.ts +18 -18
- package/EventMesh.js +59 -59
- package/ExtrudeMesh.d.ts +112 -112
- package/ExtrudeMesh.js +342 -342
- package/FPScontrol.d.ts +511 -511
- package/FPScontrol.js +1799 -1799
- package/FPScontrol.ts +1855 -1855
- package/Fire/Fire.d.ts +28 -28
- package/Fire/Fire.js +80 -80
- package/Fire/FireGeometry.d.ts +9 -9
- package/Fire/FireGeometry.js +40 -40
- package/Fire/FireMaterial.d.ts +28 -28
- package/Fire/FireMaterial.js +32 -32
- package/Fire/index.d.ts +2 -2
- package/Fire/index.js +2 -2
- package/GLTFDracoLoader.d.ts +71 -71
- package/GLTFDracoLoader.js +266 -266
- package/GLTFDracoLoader.ts +1 -1
- package/Grass/Grass.d.ts +8 -8
- package/Grass/Grass.js +38 -38
- package/Grass/index.d.ts +2 -2
- package/Grass/index.js +2 -2
- package/Ground1/Ground1.d.ts +10 -10
- package/Ground1/Ground1.js +71 -71
- package/Ground1/index.d.ts +1 -1
- package/Ground1/index.js +1 -1
- package/MeshBase.d.ts +36 -36
- package/MeshBase.js +247 -247
- package/Mirror.d.ts +25 -25
- package/Mirror.js +143 -143
- package/MktMesh/MktMesh.d.ts +301 -291
- package/MktMesh/MktMesh.js +1064 -1045
- package/MktMesh/MktMesh.ts +32 -11
- package/MktMesh/assetUrl.d.ts +59 -35
- package/MktMesh/assetUrl.js +154 -69
- package/MktMesh/assetUrl.ts +155 -69
- package/MktMesh/mktMappingShader.d.ts +12 -12
- package/MktMesh/mktMappingShader.js +138 -138
- package/MktMesh/mktMappingShader.ts +139 -139
- package/MktMesh/mktShader.d.ts +263 -263
- package/MktMesh/mktShader.js +1236 -1236
- package/MktMesh/mktShader.ts +1344 -1344
- package/MktMesh/panoBitmapTexture.d.ts +25 -25
- package/MktMesh/panoBitmapTexture.js +52 -52
- package/MktMesh/panoBitmapTexture.ts +54 -54
- package/MktMesh/panoSlotBind.d.ts +29 -29
- package/MktMesh/panoSlotBind.js +106 -106
- package/MktMesh/panoSlotBind.ts +153 -153
- package/MktMesh/panoSlotRoster.d.ts +22 -22
- package/MktMesh/panoSlotRoster.js +169 -169
- package/MktMesh/panoSlotRoster.ts +168 -168
- package/MktMesh/panoTileStitcher.d.ts +119 -119
- package/MktMesh/panoTileStitcher.js +529 -529
- package/MktMesh/panoTileStitcher.ts +616 -616
- package/MktMesh/types.d.ts +75 -75
- package/MktMesh/types.js +1 -1
- package/MktMesh/wallCapTessellate.d.ts +33 -33
- package/MktMesh/wallCapTessellate.js +97 -97
- package/MktMesh/wallCapTessellate.ts +68 -68
- package/PipeMesh/PathGeometry.d.ts +44 -44
- package/PipeMesh/PathGeometry.js +307 -307
- package/PipeMesh/PathPoint.d.ts +17 -17
- package/PipeMesh/PathPoint.js +31 -31
- package/PipeMesh/PathPointList.d.ts +31 -31
- package/PipeMesh/PathPointList.js +209 -209
- package/PipeMesh/PathTubeGeometry.d.ts +25 -25
- package/PipeMesh/PathTubeGeometry.js +130 -130
- package/PipeMesh/PipeMesh.d.ts +25 -25
- package/PipeMesh/PipeMesh.js +63 -63
- package/PipeMesh/index.d.ts +1 -1
- package/PipeMesh/index.js +1 -1
- package/PlaneModal1/PlaneModal1.d.ts +34 -34
- package/PlaneModal1/PlaneModal1.js +109 -109
- package/PlaneModal1/index.d.ts +1 -1
- package/PlaneModal1/index.js +1 -1
- package/PlaneText.d.ts +27 -27
- package/PlaneText.js +35 -35
- package/PlaneWithHtml.d.ts +13 -13
- package/PlaneWithHtml.js +64 -64
- package/PointLight/PointLight.d.ts +13 -13
- package/PointLight/PointLight.js +64 -64
- package/PointLight/index.d.ts +1 -1
- package/PointLight/index.js +1 -1
- package/Sky/Sky.d.ts +9 -9
- package/Sky/Sky.js +22 -22
- package/Sky/index.d.ts +1 -1
- package/Sky/index.js +1 -1
- package/SpotLight.d.ts +6 -6
- package/SpotLight.js +72 -72
- package/SpriteModal1/SpriteModal1.d.ts +33 -33
- package/SpriteModal1/SpriteModal1.js +116 -116
- package/SpriteModal1/index.d.ts +1 -1
- package/SpriteModal1/index.js +1 -1
- package/SpriteText.d.ts +46 -46
- package/SpriteText.js +176 -176
- package/SpriteText2.d.ts +48 -48
- package/SpriteText2.js +223 -223
- package/SpriteText3.d.ts +86 -86
- package/SpriteText3.js +517 -517
- package/SpriteText3.ts +599 -599
- package/SpriteWithHtml.d.ts +9 -9
- package/SpriteWithHtml.js +44 -44
- package/Text3D/Text3D.d.ts +20 -20
- package/Text3D/Text3D.js +58 -58
- package/Text3D/fontController.d.ts +60 -60
- package/Text3D/fontController.js +166 -166
- package/Text3D/index.d.ts +1 -1
- package/Text3D/index.js +1 -1
- package/ThreeBase.d.ts +248 -248
- package/ThreeBase.js +1202 -1202
- package/ThreeBase.ts +1314 -1314
- package/ThreeMouse.d.ts +53 -54
- package/ThreeMouse.js +453 -453
- package/Transition.d.ts +45 -45
- package/Transition.js +209 -209
- package/Water/Water.d.ts +5 -5
- package/Water/Water.js +44 -44
- package/Water/index.d.ts +2 -2
- package/Water/index.js +2 -2
- package/WaterFlow/FloatingDuck.d.ts +88 -88
- package/WaterFlow/FloatingDuck.js +307 -307
- package/WaterFlow/FloatingDuck.ts +445 -445
- package/WaterFlow/GPUFluidSimulation.d.ts +56 -56
- package/WaterFlow/GPUFluidSimulation.js +781 -781
- package/WaterFlow/GPUFluidSimulation.ts +827 -827
- package/WaterFlow/ReservoirSystem.d.ts +106 -106
- package/WaterFlow/ReservoirSystem.js +611 -611
- package/WaterFlow/ReservoirSystem.ts +754 -754
- package/WaterFlow/SPHField.d.ts +35 -35
- package/WaterFlow/SPHField.js +203 -203
- package/WaterFlow/SPHField.ts +228 -228
- package/WaterFlow/ScreenSpaceFluidPass.d.ts +69 -69
- package/WaterFlow/ScreenSpaceFluidPass.js +728 -728
- package/WaterFlow/ScreenSpaceFluidPass.ts +789 -789
- package/WaterFlow/ShallowWaterSurface.d.ts +45 -45
- package/WaterFlow/ShallowWaterSurface.js +438 -438
- package/WaterFlow/ShallowWaterSurface.ts +510 -510
- package/WaterFlow/WaterFlow.d.ts +87 -87
- package/WaterFlow/WaterFlow.js +171 -171
- package/WaterFlow/WaterFlow.ts +219 -219
- package/WaterFlow/types.d.ts +161 -161
- package/WaterFlow/types.js +1 -1
- package/WaterFlow/types.ts +189 -189
- package/WaterFlow/waterFlowPass.d.ts +3 -3
- package/WaterFlow/waterFlowPass.js +20 -20
- package/WaterFlow/waterFlowPass.ts +40 -40
- package/collisionOBB.d.ts +42 -42
- package/collisionOBB.js +112 -112
- package/collisionOBB.ts +108 -108
- package/declare.d.ts +25 -25
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/instanced/InstancedBatch.d.ts +57 -57
- package/instanced/InstancedBatch.js +348 -348
- package/instanced/InstancedBatch.ts +406 -406
- package/instanced/InstancedChild.d.ts +174 -174
- package/instanced/InstancedChild.js +264 -264
- package/instanced/InstancedChild.ts +327 -327
- package/instanced/InstancedGroup.d.ts +43 -43
- package/instanced/InstancedGroup.js +126 -126
- package/instanced/InstancedGroup.ts +137 -137
- package/instanced/InstancedMeshBase.d.ts +38 -38
- package/instanced/InstancedMeshBase.js +282 -282
- package/instanced/InstancedTemplate.d.ts +46 -46
- package/instanced/InstancedTemplate.js +125 -125
- package/keyControls.d.ts +29 -30
- package/keyControls.js +101 -101
- package/lensflare/LensFlare.d.ts +39 -39
- package/lensflare/LensFlare.js +284 -284
- package/package.json +6 -1
- package/pass/bloom_pass.d.ts +2 -2
- package/pass/bloom_pass.js +174 -174
- package/pass/cover_pass.d.ts +2 -2
- package/pass/cover_pass.js +108 -108
- package/pass/debugDepthState.d.ts +20 -20
- package/pass/debugDepthState.js +9 -9
- package/pass/debugDepthState.ts +22 -22
- package/pass/depthTestBias.d.ts +12 -12
- package/pass/depthTestBias.js +12 -12
- package/pass/depthTestBias.ts +12 -12
- package/pass/effectUserData.d.ts +27 -27
- package/pass/effectUserData.js +1 -1
- package/pass/effectUserData.ts +46 -46
- package/pass/frosted_glass_pass.d.ts +2 -2
- package/pass/frosted_glass_pass.js +150 -150
- package/pass/fsQuad.d.ts +9 -9
- package/pass/fsQuad.js +28 -28
- package/pass/glow_pass.d.ts +2 -2
- package/pass/glow_pass.js +350 -350
- package/pass/screen_bloom_pass.d.ts +11 -11
- package/pass/screen_bloom_pass.js +136 -136
- package/pass/ssao_pass.d.ts +88 -88
- package/pass/ssao_pass.js +799 -799
- package/pass/ssao_pass.ts +918 -918
- package/pass/stroke_pass.d.ts +2 -2
- package/pass/stroke_pass.js +267 -267
- package/shaders/FXAAShaderMaterial.d.ts +3 -3
- package/shaders/FXAAShaderMaterial.js +20 -20
- package/shaders/baseDepthVisShader.d.ts +11 -11
- package/shaders/baseDepthVisShader.js +36 -36
- package/shaders/baseDepthVisShader.ts +36 -36
- package/shaders/baseTextureToRenderShader.d.ts +2 -2
- package/shaders/baseTextureToRenderShader.js +19 -19
- package/shaders/copyShader.d.ts +3 -3
- package/shaders/copyShader.js +13 -13
- package/shaders/debugDepthCompareShader.d.ts +14 -14
- package/shaders/debugDepthCompareShader.js +49 -49
- package/shaders/debugDepthCompareShader.ts +50 -50
- package/shaders/debugDepthJudgeShader.d.ts +18 -18
- package/shaders/debugDepthJudgeShader.js +52 -52
- package/shaders/debugDepthJudgeShader.ts +54 -54
- package/shaders/debugExcludedShader.d.ts +13 -13
- package/shaders/debugExcludedShader.js +46 -46
- package/shaders/debugExcludedShader.ts +48 -48
- package/spriteTextBg.d.ts +1 -1
- package/spriteTextBg.js +20 -20
- package/spriteTextBg.ts +20 -20
- package/threeLoader.d.ts +35 -35
- package/threeLoader.js +518 -518
- package/threeUtils.d.ts +53 -53
- package/threeUtils.js +329 -329
- package/types.d.ts +2 -2
- package/types.js +6 -6
package/Fire/Fire.d.ts
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import { Clock, Points, Vector2, WebGLRenderer, Scene, Camera, BufferGeometry, Material, Group } from "three";
|
|
2
|
-
import FireGeometry from "./FireGeometry";
|
|
3
|
-
import FireMaterial from "./FireMaterial";
|
|
4
|
-
export default class Fire extends Points {
|
|
5
|
-
constructor();
|
|
6
|
-
geometry: FireGeometry;
|
|
7
|
-
material: FireMaterial;
|
|
8
|
-
fireColor: string;
|
|
9
|
-
fireScale: number;
|
|
10
|
-
fireRadius: number;
|
|
11
|
-
fireHeight: number;
|
|
12
|
-
particleCount: number;
|
|
13
|
-
isPerspectiveCamera: boolean;
|
|
14
|
-
size: Vector2;
|
|
15
|
-
cacheProps: {
|
|
16
|
-
fireColor: string;
|
|
17
|
-
fireScale: number;
|
|
18
|
-
fireRadius: number;
|
|
19
|
-
fireHeight: number;
|
|
20
|
-
particleCount: number;
|
|
21
|
-
width: number;
|
|
22
|
-
height: number;
|
|
23
|
-
isPerspectiveCamera: boolean;
|
|
24
|
-
};
|
|
25
|
-
updataFrame: number;
|
|
26
|
-
clock: Clock;
|
|
27
|
-
onBeforeRender(renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, material: Material, group: Group): void;
|
|
28
|
-
}
|
|
1
|
+
import { Clock, Points, Vector2, WebGLRenderer, Scene, Camera, BufferGeometry, Material, Group } from "three";
|
|
2
|
+
import FireGeometry from "./FireGeometry";
|
|
3
|
+
import FireMaterial from "./FireMaterial";
|
|
4
|
+
export default class Fire extends Points {
|
|
5
|
+
constructor();
|
|
6
|
+
geometry: FireGeometry;
|
|
7
|
+
material: FireMaterial;
|
|
8
|
+
fireColor: string;
|
|
9
|
+
fireScale: number;
|
|
10
|
+
fireRadius: number;
|
|
11
|
+
fireHeight: number;
|
|
12
|
+
particleCount: number;
|
|
13
|
+
isPerspectiveCamera: boolean;
|
|
14
|
+
size: Vector2;
|
|
15
|
+
cacheProps: {
|
|
16
|
+
fireColor: string;
|
|
17
|
+
fireScale: number;
|
|
18
|
+
fireRadius: number;
|
|
19
|
+
fireHeight: number;
|
|
20
|
+
particleCount: number;
|
|
21
|
+
width: number;
|
|
22
|
+
height: number;
|
|
23
|
+
isPerspectiveCamera: boolean;
|
|
24
|
+
};
|
|
25
|
+
updataFrame: number;
|
|
26
|
+
clock: Clock;
|
|
27
|
+
onBeforeRender(renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, material: Material, group: Group): void;
|
|
28
|
+
}
|
package/Fire/Fire.js
CHANGED
|
@@ -1,80 +1,80 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* @Author: xiaosihan
|
|
3
|
-
* @Date: 2024-06-17 02:15:58
|
|
4
|
-
* @Last Modified by: xiaosihan
|
|
5
|
-
* @Last Modified time: 2024-06-18 20:34:38
|
|
6
|
-
*/
|
|
7
|
-
import { Clock, Color, Points, Vector2, PerspectiveCamera } from "three";
|
|
8
|
-
import { MathUtils } from "three";
|
|
9
|
-
const { degToRad } = MathUtils;
|
|
10
|
-
import FireGeometry from "./FireGeometry";
|
|
11
|
-
import FireMaterial from "./FireMaterial";
|
|
12
|
-
// 粒子火焰效果
|
|
13
|
-
export default class Fire extends Points {
|
|
14
|
-
constructor() {
|
|
15
|
-
super();
|
|
16
|
-
}
|
|
17
|
-
geometry = new FireGeometry(0, 0, 0);
|
|
18
|
-
material = new FireMaterial();
|
|
19
|
-
// 火焰的颜色
|
|
20
|
-
fireColor = "#ff2200";
|
|
21
|
-
// 火焰的整体缩放值
|
|
22
|
-
fireScale = 1;
|
|
23
|
-
// 火焰的燃烧半径
|
|
24
|
-
fireRadius = 0.5;
|
|
25
|
-
// 火焰的高度
|
|
26
|
-
fireHeight = 3;
|
|
27
|
-
// 火焰的粒子数量
|
|
28
|
-
particleCount = 500;
|
|
29
|
-
// 是否是透视相机
|
|
30
|
-
isPerspectiveCamera = true;
|
|
31
|
-
//渲染器的尺寸
|
|
32
|
-
size = new Vector2();
|
|
33
|
-
// 缓存的参数
|
|
34
|
-
cacheProps = {
|
|
35
|
-
fireColor: "#ff2200",
|
|
36
|
-
fireScale: 0,
|
|
37
|
-
fireRadius: 0.5,
|
|
38
|
-
fireHeight: 3,
|
|
39
|
-
particleCount: 500,
|
|
40
|
-
width: 0,
|
|
41
|
-
height: 0,
|
|
42
|
-
isPerspectiveCamera: true
|
|
43
|
-
};
|
|
44
|
-
// 当前渲染的帧数
|
|
45
|
-
updataFrame = 0;
|
|
46
|
-
// 时钟对象
|
|
47
|
-
clock = new Clock();
|
|
48
|
-
onBeforeRender(renderer, scene, camera, geometry, material, group) {
|
|
49
|
-
const delta = this.clock.getDelta();
|
|
50
|
-
renderer.getSize(this.size);
|
|
51
|
-
if (this.cacheProps.fireColor !== this.fireColor ||
|
|
52
|
-
this.cacheProps.fireScale !== this.fireScale ||
|
|
53
|
-
this.cacheProps.fireRadius !== this.fireRadius ||
|
|
54
|
-
this.cacheProps.fireHeight !== this.fireHeight ||
|
|
55
|
-
this.cacheProps.particleCount !== this.particleCount ||
|
|
56
|
-
this.cacheProps.isPerspectiveCamera !== this.isPerspectiveCamera ||
|
|
57
|
-
this.cacheProps.width !== this.size.x ||
|
|
58
|
-
this.cacheProps.height !== this.size.y) {
|
|
59
|
-
this.cacheProps.fireColor = this.fireColor;
|
|
60
|
-
this.cacheProps.fireScale = this.fireScale;
|
|
61
|
-
this.cacheProps.fireRadius = this.fireRadius;
|
|
62
|
-
this.cacheProps.fireHeight = this.fireHeight;
|
|
63
|
-
this.cacheProps.particleCount = this.particleCount;
|
|
64
|
-
this.cacheProps.isPerspectiveCamera = this.isPerspectiveCamera;
|
|
65
|
-
this.cacheProps.width = this.size.x;
|
|
66
|
-
this.cacheProps.height = this.size.y;
|
|
67
|
-
this.geometry = new FireGeometry(this.fireRadius * this.fireScale, this.fireHeight * this.fireScale, this.particleCount);
|
|
68
|
-
this.material.uniforms.color.value = new Color(this.fireColor);
|
|
69
|
-
this.material.uniforms.size.value = this.fireScale * 0.4;
|
|
70
|
-
if (camera instanceof PerspectiveCamera) {
|
|
71
|
-
this.material.uniforms.heightOfNearPlane.value = Math.abs(this.size.y / (2 * Math.tan(degToRad(camera.fov * 0.5))));
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
this.material.uniforms.heightOfNearPlane.value = 0;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
this.isPerspectiveCamera = camera instanceof PerspectiveCamera;
|
|
78
|
-
this.material.uniforms.time.value = (this.material.uniforms.time.value + delta) % 1;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
* @Author: xiaosihan
|
|
3
|
+
* @Date: 2024-06-17 02:15:58
|
|
4
|
+
* @Last Modified by: xiaosihan
|
|
5
|
+
* @Last Modified time: 2024-06-18 20:34:38
|
|
6
|
+
*/
|
|
7
|
+
import { Clock, Color, Points, Vector2, PerspectiveCamera } from "three";
|
|
8
|
+
import { MathUtils } from "three";
|
|
9
|
+
const { degToRad } = MathUtils;
|
|
10
|
+
import FireGeometry from "./FireGeometry";
|
|
11
|
+
import FireMaterial from "./FireMaterial";
|
|
12
|
+
// 粒子火焰效果
|
|
13
|
+
export default class Fire extends Points {
|
|
14
|
+
constructor() {
|
|
15
|
+
super();
|
|
16
|
+
}
|
|
17
|
+
geometry = new FireGeometry(0, 0, 0);
|
|
18
|
+
material = new FireMaterial();
|
|
19
|
+
// 火焰的颜色
|
|
20
|
+
fireColor = "#ff2200";
|
|
21
|
+
// 火焰的整体缩放值
|
|
22
|
+
fireScale = 1;
|
|
23
|
+
// 火焰的燃烧半径
|
|
24
|
+
fireRadius = 0.5;
|
|
25
|
+
// 火焰的高度
|
|
26
|
+
fireHeight = 3;
|
|
27
|
+
// 火焰的粒子数量
|
|
28
|
+
particleCount = 500;
|
|
29
|
+
// 是否是透视相机
|
|
30
|
+
isPerspectiveCamera = true;
|
|
31
|
+
//渲染器的尺寸
|
|
32
|
+
size = new Vector2();
|
|
33
|
+
// 缓存的参数
|
|
34
|
+
cacheProps = {
|
|
35
|
+
fireColor: "#ff2200",
|
|
36
|
+
fireScale: 0,
|
|
37
|
+
fireRadius: 0.5,
|
|
38
|
+
fireHeight: 3,
|
|
39
|
+
particleCount: 500,
|
|
40
|
+
width: 0,
|
|
41
|
+
height: 0,
|
|
42
|
+
isPerspectiveCamera: true
|
|
43
|
+
};
|
|
44
|
+
// 当前渲染的帧数
|
|
45
|
+
updataFrame = 0;
|
|
46
|
+
// 时钟对象
|
|
47
|
+
clock = new Clock();
|
|
48
|
+
onBeforeRender(renderer, scene, camera, geometry, material, group) {
|
|
49
|
+
const delta = this.clock.getDelta();
|
|
50
|
+
renderer.getSize(this.size);
|
|
51
|
+
if (this.cacheProps.fireColor !== this.fireColor ||
|
|
52
|
+
this.cacheProps.fireScale !== this.fireScale ||
|
|
53
|
+
this.cacheProps.fireRadius !== this.fireRadius ||
|
|
54
|
+
this.cacheProps.fireHeight !== this.fireHeight ||
|
|
55
|
+
this.cacheProps.particleCount !== this.particleCount ||
|
|
56
|
+
this.cacheProps.isPerspectiveCamera !== this.isPerspectiveCamera ||
|
|
57
|
+
this.cacheProps.width !== this.size.x ||
|
|
58
|
+
this.cacheProps.height !== this.size.y) {
|
|
59
|
+
this.cacheProps.fireColor = this.fireColor;
|
|
60
|
+
this.cacheProps.fireScale = this.fireScale;
|
|
61
|
+
this.cacheProps.fireRadius = this.fireRadius;
|
|
62
|
+
this.cacheProps.fireHeight = this.fireHeight;
|
|
63
|
+
this.cacheProps.particleCount = this.particleCount;
|
|
64
|
+
this.cacheProps.isPerspectiveCamera = this.isPerspectiveCamera;
|
|
65
|
+
this.cacheProps.width = this.size.x;
|
|
66
|
+
this.cacheProps.height = this.size.y;
|
|
67
|
+
this.geometry = new FireGeometry(this.fireRadius * this.fireScale, this.fireHeight * this.fireScale, this.particleCount);
|
|
68
|
+
this.material.uniforms.color.value = new Color(this.fireColor);
|
|
69
|
+
this.material.uniforms.size.value = this.fireScale * 0.4;
|
|
70
|
+
if (camera instanceof PerspectiveCamera) {
|
|
71
|
+
this.material.uniforms.heightOfNearPlane.value = Math.abs(this.size.y / (2 * Math.tan(degToRad(camera.fov * 0.5))));
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
this.material.uniforms.heightOfNearPlane.value = 0;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
this.isPerspectiveCamera = camera instanceof PerspectiveCamera;
|
|
78
|
+
this.material.uniforms.time.value = (this.material.uniforms.time.value + delta) % 1;
|
|
79
|
+
}
|
|
80
|
+
}
|
package/Fire/FireGeometry.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export declare const SPRITE_ROW_LENGTH: number;
|
|
2
|
-
export declare const ONE_SPRITE_ROW_LENGTH: number;
|
|
3
|
-
import { BufferGeometry } from "three";
|
|
4
|
-
export default class FireGeometry extends BufferGeometry {
|
|
5
|
-
radius: number;
|
|
6
|
-
height: number;
|
|
7
|
-
particleCount: number;
|
|
8
|
-
constructor(radius?: number, height?: number, particleCount?: number);
|
|
9
|
-
}
|
|
1
|
+
export declare const SPRITE_ROW_LENGTH: number;
|
|
2
|
+
export declare const ONE_SPRITE_ROW_LENGTH: number;
|
|
3
|
+
import { BufferGeometry } from "three";
|
|
4
|
+
export default class FireGeometry extends BufferGeometry {
|
|
5
|
+
radius: number;
|
|
6
|
+
height: number;
|
|
7
|
+
particleCount: number;
|
|
8
|
+
constructor(radius?: number, height?: number, particleCount?: number);
|
|
9
|
+
}
|
package/Fire/FireGeometry.js
CHANGED
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* @Author: xiaosihan
|
|
3
|
-
* @Date: 2024-06-17 02:15:58
|
|
4
|
-
* @Last Modified by: xiaosihan
|
|
5
|
-
* @Last Modified time: 2024-06-18 18:12:37
|
|
6
|
-
*/
|
|
7
|
-
export const SPRITE_ROW_LENGTH = 4; // 粒子图片中图片数量
|
|
8
|
-
export const ONE_SPRITE_ROW_LENGTH = 1 / SPRITE_ROW_LENGTH; // 每一行的宽度
|
|
9
|
-
import { BufferAttribute, BufferGeometry } from "three";
|
|
10
|
-
// 粒子火焰顶点对象
|
|
11
|
-
export default class FireGeometry extends BufferGeometry {
|
|
12
|
-
radius = 0.5;
|
|
13
|
-
height = 3;
|
|
14
|
-
particleCount = 200;
|
|
15
|
-
constructor(radius = 0.5, height = 3, particleCount = 200) {
|
|
16
|
-
super();
|
|
17
|
-
const halfHeight = height * 0.5;
|
|
18
|
-
const position = new Float32Array(particleCount * 3);
|
|
19
|
-
const random = new Float32Array(particleCount);
|
|
20
|
-
const sprite = new Float32Array(particleCount);
|
|
21
|
-
for (let i = 0; i < particleCount; i++) {
|
|
22
|
-
const r = Math.sqrt(Math.random()) * radius;
|
|
23
|
-
const angle = Math.random() * 2 * Math.PI;
|
|
24
|
-
position[i * 3 + 0] = Math.cos(angle) * r;
|
|
25
|
-
position[i * 3 + 1] = (radius - r) / radius * halfHeight + halfHeight;
|
|
26
|
-
position[i * 3 + 2] = Math.sin(angle) * r;
|
|
27
|
-
sprite[i] = ONE_SPRITE_ROW_LENGTH * ((Math.random() * 4) | 0);
|
|
28
|
-
random[i] = Math.random();
|
|
29
|
-
if (i === 0) {
|
|
30
|
-
// to avoid going out of Frustum
|
|
31
|
-
position[i * 3 + 0] = 0;
|
|
32
|
-
position[i * 3 + 1] = 0;
|
|
33
|
-
position[i * 3 + 2] = 0;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
this.setAttribute('position', new BufferAttribute(position, 3));
|
|
37
|
-
this.setAttribute('random', new BufferAttribute(random, 1));
|
|
38
|
-
this.setAttribute('sprite', new BufferAttribute(sprite, 1));
|
|
39
|
-
}
|
|
40
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
* @Author: xiaosihan
|
|
3
|
+
* @Date: 2024-06-17 02:15:58
|
|
4
|
+
* @Last Modified by: xiaosihan
|
|
5
|
+
* @Last Modified time: 2024-06-18 18:12:37
|
|
6
|
+
*/
|
|
7
|
+
export const SPRITE_ROW_LENGTH = 4; // 粒子图片中图片数量
|
|
8
|
+
export const ONE_SPRITE_ROW_LENGTH = 1 / SPRITE_ROW_LENGTH; // 每一行的宽度
|
|
9
|
+
import { BufferAttribute, BufferGeometry } from "three";
|
|
10
|
+
// 粒子火焰顶点对象
|
|
11
|
+
export default class FireGeometry extends BufferGeometry {
|
|
12
|
+
radius = 0.5;
|
|
13
|
+
height = 3;
|
|
14
|
+
particleCount = 200;
|
|
15
|
+
constructor(radius = 0.5, height = 3, particleCount = 200) {
|
|
16
|
+
super();
|
|
17
|
+
const halfHeight = height * 0.5;
|
|
18
|
+
const position = new Float32Array(particleCount * 3);
|
|
19
|
+
const random = new Float32Array(particleCount);
|
|
20
|
+
const sprite = new Float32Array(particleCount);
|
|
21
|
+
for (let i = 0; i < particleCount; i++) {
|
|
22
|
+
const r = Math.sqrt(Math.random()) * radius;
|
|
23
|
+
const angle = Math.random() * 2 * Math.PI;
|
|
24
|
+
position[i * 3 + 0] = Math.cos(angle) * r;
|
|
25
|
+
position[i * 3 + 1] = (radius - r) / radius * halfHeight + halfHeight;
|
|
26
|
+
position[i * 3 + 2] = Math.sin(angle) * r;
|
|
27
|
+
sprite[i] = ONE_SPRITE_ROW_LENGTH * ((Math.random() * 4) | 0);
|
|
28
|
+
random[i] = Math.random();
|
|
29
|
+
if (i === 0) {
|
|
30
|
+
// to avoid going out of Frustum
|
|
31
|
+
position[i * 3 + 0] = 0;
|
|
32
|
+
position[i * 3 + 1] = 0;
|
|
33
|
+
position[i * 3 + 2] = 0;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
this.setAttribute('position', new BufferAttribute(position, 3));
|
|
37
|
+
this.setAttribute('random', new BufferAttribute(random, 1));
|
|
38
|
+
this.setAttribute('sprite', new BufferAttribute(sprite, 1));
|
|
39
|
+
}
|
|
40
|
+
}
|
package/Fire/FireMaterial.d.ts
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import { Blending, Color, ShaderMaterial, Texture } from "three";
|
|
2
|
-
export default class FireMaterial extends ShaderMaterial {
|
|
3
|
-
constructor();
|
|
4
|
-
uniforms: {
|
|
5
|
-
color: {
|
|
6
|
-
value: Color;
|
|
7
|
-
};
|
|
8
|
-
size: {
|
|
9
|
-
value: number;
|
|
10
|
-
};
|
|
11
|
-
map: {
|
|
12
|
-
value: Texture;
|
|
13
|
-
};
|
|
14
|
-
time: {
|
|
15
|
-
value: number;
|
|
16
|
-
};
|
|
17
|
-
heightOfNearPlane: {
|
|
18
|
-
value: number;
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
|
-
vertexShader: string;
|
|
22
|
-
fragmentShader: string;
|
|
23
|
-
blending: Blending;
|
|
24
|
-
depthTest: boolean;
|
|
25
|
-
depthWrite: boolean;
|
|
26
|
-
transparent: boolean;
|
|
27
|
-
fog: boolean;
|
|
28
|
-
}
|
|
1
|
+
import { Blending, Color, ShaderMaterial, Texture } from "three";
|
|
2
|
+
export default class FireMaterial extends ShaderMaterial {
|
|
3
|
+
constructor();
|
|
4
|
+
uniforms: {
|
|
5
|
+
color: {
|
|
6
|
+
value: Color;
|
|
7
|
+
};
|
|
8
|
+
size: {
|
|
9
|
+
value: number;
|
|
10
|
+
};
|
|
11
|
+
map: {
|
|
12
|
+
value: Texture;
|
|
13
|
+
};
|
|
14
|
+
time: {
|
|
15
|
+
value: number;
|
|
16
|
+
};
|
|
17
|
+
heightOfNearPlane: {
|
|
18
|
+
value: number;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
vertexShader: string;
|
|
22
|
+
fragmentShader: string;
|
|
23
|
+
blending: Blending;
|
|
24
|
+
depthTest: boolean;
|
|
25
|
+
depthWrite: boolean;
|
|
26
|
+
transparent: boolean;
|
|
27
|
+
fog: boolean;
|
|
28
|
+
}
|
package/Fire/FireMaterial.js
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* @Author: xiaosihan
|
|
3
|
-
* @Date: 2024-06-17 02:37:46
|
|
4
|
-
* @Last Modified by: xiaosihan
|
|
5
|
-
* @Last Modified time: 2024-06-18 20:23:31
|
|
6
|
-
*/
|
|
7
|
-
import { AdditiveBlending, Color, ShaderChunk, ShaderMaterial } from "three";
|
|
8
|
-
import threeLoader from "../threeLoader";
|
|
9
|
-
import { ONE_SPRITE_ROW_LENGTH } from "./FireGeometry";
|
|
10
|
-
// 火焰粒子材质
|
|
11
|
-
export default class FireMaterial extends ShaderMaterial {
|
|
12
|
-
constructor() {
|
|
13
|
-
super();
|
|
14
|
-
}
|
|
15
|
-
// 材质参数
|
|
16
|
-
uniforms = {
|
|
17
|
-
color: { value: new Color() },
|
|
18
|
-
size: { value: 0.0 },
|
|
19
|
-
map: { value: threeLoader.getTexture("data:image/png;base64,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") },
|
|
20
|
-
time: { value: 0.0 },
|
|
21
|
-
heightOfNearPlane: { value: 0.0 }
|
|
22
|
-
};
|
|
23
|
-
// 顶点着色器
|
|
1
|
+
/*
|
|
2
|
+
* @Author: xiaosihan
|
|
3
|
+
* @Date: 2024-06-17 02:37:46
|
|
4
|
+
* @Last Modified by: xiaosihan
|
|
5
|
+
* @Last Modified time: 2024-06-18 20:23:31
|
|
6
|
+
*/
|
|
7
|
+
import { AdditiveBlending, Color, ShaderChunk, ShaderMaterial } from "three";
|
|
8
|
+
import threeLoader from "../threeLoader";
|
|
9
|
+
import { ONE_SPRITE_ROW_LENGTH } from "./FireGeometry";
|
|
10
|
+
// 火焰粒子材质
|
|
11
|
+
export default class FireMaterial extends ShaderMaterial {
|
|
12
|
+
constructor() {
|
|
13
|
+
super();
|
|
14
|
+
}
|
|
15
|
+
// 材质参数
|
|
16
|
+
uniforms = {
|
|
17
|
+
color: { value: new Color() },
|
|
18
|
+
size: { value: 0.0 },
|
|
19
|
+
map: { value: threeLoader.getTexture("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAABACAMAAADCg1mMAAABgFBMVEUAAAABAQEGBgYLCwsODg4QEBACAgIWFhYbGxsdHR0fHx8gICAjIyMoKCgtLS0wMDAyMjI1NTU2NjY3Nzc4ODgvLy8wLzA5OTk9PT0+Pj4/Pz47OztAQEBDQ0NHR0dLS0tOTk5QUFBSUlJXV1cxMTFcXFxgYGBgYWFiYmJmZmZra2tub25wcHBzc3NxcXEuLi5fX19wb3B3eHd9fHyDg4OGhYWGh4eBgYF+f36JiImLi4uQkZGXl5egoKCkpKSrq6ucnJyQkJCNjY2Pj4+SkpKhoaGurq6zs7O3t7dPT08/QECwsLDGxsbLy8vOzs6vr6+8vLzCwsLW1tbf39/h4eHd3d3X19fT09NfYF9/f3/a2trj4+Po5+js7Ozq6urn5+fm5ubR0dC+v77Pz8/AwMDR0dI3ODjf4N+foJ+enp7p6ene3t6jo6PZ2Nju7u6eoKDZ19fz8/Px8fHw7/DY19hucG7e395OT0/V1dXX1tbY2NqPj435+fl4eHhYWFh9f31mJTJvAAAUEElEQVR4Ae161Z9cR9ZkxMlLRc2SLWk8grHAvMz0tAxPy//Avu4fs/i0jK/7PS0zw4BlYYssS2o1d8GFzBMf1LZmrG652/6N58PTWFXdmSfiZkSecyuJX8FBEfNv89D8O4WfXvBXMv4fp0dAhOYcCL8eCOBhcgRBAILm3366FGS/YuHPg6QBnKN2Ha7/X/MEAHnHOXoGgoQguZIDAqhfHQSQ8G+6+iNJmpnRQg5CIcY4h69fLSvAAgDpG8AHQZgxe3trGCwYSSO7uj6gR/CnKYSAby2YlXlw/2buR2aWZyH0VsJo0O//wmevbwFIEqCfoqcbvrWwavH3lzm/EX6zYHnoL1T9cnmlWllYWlpavLK0sDRcCMbjYdKMRpvHyXR8+xJguVjcHqX2GywBMjBYNsyL/nJcZhyZMcLPlOV/SG9YUySMBgoAXJREgdDPfgUQ87CirBZ6Cxm/pm1yLoD+XxwV1aCfjWxhmXnxYnPr+X7zrJ9XBI+dNBS93mC4NBz2e70qIw0FCJI/cw8gAYL52qCX9bq6+9q1H83y0Fsv+6Pf6udXbKdrdzZiZ7XFYZrUnRxHSCCZFUu9fr9ay/q9QalAI0hyns7PTgI8xMEbTb+ghnXT4NQhzsUcrJcVvVHWZLPnXagboXz3M1WrTbQcAP0Y4rJ+2cuYpUVcvaNB7NxjlDWepCTBfzYEvKKa+c6ZcjWduVNVKepryB80C2GUL6UzYbD39v3ZRz8AgPozMO70b2yDx9UCZGA5WpAsAk96WNEsOq7eVp1ibJvYOiV96wTw1TdYfzBaWFjaXm67izejTv//pFnI8l4Y5ud86073/u2yARSAMlpbvkF0tDCs+kvL5w78xVAYTMAOGv+Wu2sdJ6nOtydtG+U/AxMkQZDWW/xN1eJqOFtWvZ0q8Os4AIMNin5vsKgX78ziZ11dlgoxokHVfF/EcUHLcqtmm7e2Fm26MNyQL4TFbLFZC36jKHs2WFwqc/JbNUGSAEHSGKqlQff2WRLd2uoG3AEQPI0AGDIrqsX+YFDu7z2v8tYR4QXzrrLRwstZM4sSwNe2wHDOc33wUlufN+OXW7v17rOmnrTsj2ZP8+gIQB6lU0mA37DYFvgK/7s7K9lwDRG5Jls9N3TRT1G+UiTB0Ptdm2V55lZW25Q9uKHdF0foX/zf3k6O15NtLZT1/yzatosukZZlRTHYXV24emsc1TpG537gLp1IAEmI8G928wZGyyz09gbht28H26SQlR9834fTrEknUUuIhJkN8rurn9z9rE743l20AAJjl08Xehuz3avPkkS9PpAROsh9FrvkLVoyL4Lle5WtHLBtHRJum53CBElmhBKknxSmn87AYVkeBiFbaEf5g7ewMZoMx4v9B6FEPrU6OUWdZAIMIZS9pYPn7RT2I+QdwNBKWlnt32nG/7GTcAQ/AXlC8pR86hLoKG7cGbW+r4MakvoTQKchIOSZrW1443PLNICEzE+zAGDZd+osz8z6echXgWmccj+7NN7LLavRduJJDAK0Xr60hv87nQEuRMj7Y7j1Ru3WbGevcx0FIrgUDUnu0yRBlgXdzPDRQbk7hiQA7qfwALIohmwXZ2yjCfMLYojxpK5WBMFQtWVuobDFtrcgU3fhPocKRQBGDPv2VX0B54NYKKqlUba13QEAHBJ2IJQLYWFnfxzlx98VdMUMQEqrLxQBNrFHtc8uDdbn2oT7OEonElAtfXzHHHl3EDsXLbdQZfD9OulkAbBayrPKuNCyt3AWXb3/dMlnkZ98fzyrF/aX437bEtBXUMgQFpbf7m0+ffcWbty6cVNSslq+cOaDLx5/MT27HY9vh+W+NHPAuz0lATFjysqV8+WtGQAiTeJB251IAO3c1We5jybgQjqQyKKyQPpicupECwyLJc3CoGV7ZVncWfpR3T/bFgfjq4+fxzoAo3H31b08LSz0RpcevmhvQp/iR4qtrw0eCP3V0dbUu/tRb6AP2gh9Z5hbFgKUl0tL9tlugAApxi7KT5RAaNaDYUoODmzRkXILhBls0EknNkDMy1hy1NBGK07qQadLt85Ui/mqt5MJaHl/6gQAvWkPYK94a/j4yVQAJKFNl9YhZGcu/d8P/kesO4E6toPwZGoykIv1fIKzsVpZnI7RCEK13+13rhPbYcvyfmUEWIf8F+I3Z1kwYwhF+dXFnCCAoSrC9dG1cPXCdQfQ7Wb2//aebe43k4Ozv/mtDL8kJwEC+YYqMBT9rNwaC4KQ0LgeQODK+QfV3dn1NknScfRJkjuQyi0aAXI7P2PYBABVaZImKZ5MABFKI0GSNggh3MkMgwFRZXlOnmACBhtWw6ff2/5Od04kHz2XZVl1sPtk+2lRTC+cycH5MDzWyAESVp5dm+5EAYJsXjsAC5fUndu++J+SiOPwa06YQsi84BxUP7ueX8wAwCdw/24ScPIKyHNjDhJgPTAzDAYAS35Y5DyxCzKOhm9/MiuNz1/U9bNZV4TsA+tPt56sP11p8M6lYpQtGgEQ4LGboJVldWmjBQTIvQwkyO+Nhl39fw9+4DDhTeEuwRkyknM/u5ffEwUADqwDOrEdpvX6g1lDABRmAwAzABbLh+VweuI+ALRn41Pkk07c0qyAiDt084N2nK6NffjuF3kZHIQAHYef7A8X/1cCIQCGWNZ+doO7F8u9br+ZMIiOY2M+YswBAOYGyLv+cPX/ysX+AcBT3RBhxsZoaU5hfbhA8ryvcd6eWMOdXQnTbcuAGkCVkPIEy2yGNnYvvjsqvptvhI2I44xMFEkLv+cLTKNZAkAoS1Wzxf7qJxvTg0aDCRMoHBuUgAxgsjlHiuHleCoEEeY0I0/yACLkoWfvXL/6BwNpRjMLRlbsNVYVwU66DbKV8GI8nmqmqtQMILNgdMI4G5ffv/+j7uzqUiAB8Ms+SM6t590Hb08rhMOikBmzfjX8LdvjOi3kH4/4VSZMIZEMOWkg6jSJb1ughOnAwjAznuABBCz7qP0dQ67MLlWZscpCKMpqOBi1v5hGTiOJN4fZWbRd0OwPVZqpasBrCkSo6Ar6Qfdyb7IUKh6/Dwqk2eejMzszVTAeRs5iVM4OWHl1j4WAN6dAZiSYnSFIVpqmh3mGec5mISNPkABJ+/Tci+LxeOEdPktdzHnt7lK2uDRpNqIVlSen87g3ezQH5RtXs/bKQ/zXWsAMCOt5BJyCp9KDtibW65kEEToiIIA2yKbqsuv/mwl65Q2Luy0X/SBz1A7qzUvwFUJLBiB6t9bWzXwkG6QofbUERCt75ez5ZHvn8dLV31Hk5KOVXr//tDt34b2iGFVVlRdFHoyvN5ZzPPhu6AfciaiRYopSAmC0mTJ3CED7Ym1oIABSRygwMjvHDzx+PxvZISQiJORVe33xOgF7k5sRJOdb9dw/yiSf1DsLi9J8BdgV44kmmDHX8pkvprMe1vSb76LX4/Ufbryz7tWn/SZX560kKSY/tj18sIgCeRIjDAkQOU/sPB7VlQhFFIcKoF6/fjCGZquxD9/9FzVJESDeu2VEd+GL+/EeQFBvrkMubwIUAsBAQNWkv3NhGqRQs39gjwnqBALKfMDn23XsWmmRa3b5wdKLg7hRDNBL2awMqgSpG73ovtweCgZAihC7AMGVX72LQAGQf+cBLj8GALVTgSZx7lpfUpCRlnVIxcZdvqoNedvs/Zd82Zv5aELamwkwPuoFCsJWWNtiEYp25L29lSdZR/caEk4kgIprOmiSq9tNk6rX3J3txvO3a58s5pNkAQ4Iytrh4GlM0BEX2J8s70BICrG7A7CDINcD4QHrCnNcX5bNodBJGCnQlBb2DjeJ9+7Awv+8FqaxV25VdTBSR2FwToBlAJBaDv1iw9D7revFwsKnS7OMsRWUdEIzJCJwN8yUIjx2s35Jb2famUC9c/sAMJgAAOAffHrhC/wkAyQkqbEo6RW6Fq0cXHshAA4PWT7Bq/xFfZk/gsnyMPaMZecmUbdpxmZ64cnqZmCeDd65jUThSJBm7IEATP1irTdI57n5tnOdTd8PkNXdfow6aRcwI5YeTaNHbzSuwvs35TggPty4Faruxx5i9/K2Z1301xCo3vz4mbKO6tRl6HJ41SoOJICrB2We8yBBh1au1+ADaD5burqxd/X2blYegNdvwxhKfo5irz9Z2BtqZzSWH2OAMFoQSQlVebl6fwNNO+QzdbHcVZ3vjJsu6gQCyCwb5jtMXbM8WEfT8O6sxuWHJGcaPmfoMI8BMAmDJJde00DbPbKaBNB5AyWkJsVmHY6grVEegNQK0BvqYKg9aHcWlp952bWZ+20QxlhgXC35OY0XEdS4RB2pIi0wBL53i7B8qVrMnl25Vz1DlZp2p/veD8exSy7hBALsXG5CTFzecJfIpxTvkfhvb82WwrR9NcC0D3Kwb+lLIOTe7K8s1spSiJDkcsSUXEkKYZhBzjTDMQqACEhUiCnr6l4fvX1voicMmpAzT+OFrKiv3l1Bl3egcLSIoBXkLYgo15b2/9vu5rW7wDu3Z/Vs+jS6SzqpFyCzpo+ECrN9eQKSHVZHQt2NDoR5DKaYDg7oV27zNQUoHSzHomUWlcWkJLnXlBxZPgwA1G9qnzOgn/TAwycufl6GmLpZ11cpayJ8muna/V7DSaE0Xt5Z8gmoo1UYyRBICgyD0ds3a5S3kuv/tfV+mxwSgBMJsOzDF/XCRnLAHQ64ASDcVmNaaX/nv+dsAABT09G3lAQCUrv8KOSKQiOlJI/Nd9ejLAs9yC3xoKjTnAG+ZgGA09YDY2DXNXkorbA4dSBfz0Sc/2Kleet5b9wE6Nh76Vc2+f5tACgG1f+cCTWg6qDdq1067QGJ6k6BfRoxf9IMtGAWsNnu3dVohZhiOquNxinA17KQBN/dYcZOXVSVkqfpMN5PzK8VA0ry68KlXUE/CfvQDSUoySetkqudzg6mKSNBIFUB+OH0qfZZZeXEhSMh8JHzNkmG/khdqqqyLKuDOOlcOu0RGevs8pPMgTzKkoFGco4zjXfLp+/mjxvLPEYRQY6HR7oB58R6HfMGKveTt6OD50C48vgx64wZ+Rnw31r31yVwqAEHAU2yUh6ibPrh7bIVgboPYFYwoO7+yF9PR9CTABBIg4dRNdABMJm/lBzC6QggELDe62onz74wygiw7AiAf/znnu2fry6cw3htFrZj3WiwzzOfv1aLSNodbscgJh1c/5H7C4BmjwWxLRKDo5m5XkM/Z08UgCSQFx6xMKfH73sLqZsbUw11mtV/uxV0VAIG8r07GEzQDEM65EjS6Q9JicwGiA2UFQfBxcuPzEKWG6j4c2h1L3901tper1ud5Ss7E2KTr68Apfbeb91sOvOy/TQ24cojmgtr2BTaUHaatulV/scwEAnR1sHRVmldkuuDe1JM6KVgi24+flknADraihK4lQ1qs56hxTwckE5NAChMy4wXNv/0Py+ymfB5lpkhAGAhmLx5916WTypbDuDiDOARFII2Xg7rJNT84NOgzcwThD1cnGDTpynOL58A8AgIAVSiyQNeXHkclCB+mie2RRuzwdVB83Jze8clHd0G5QJu3KlpVvZX7+onvOX0BAipz/xCv/o3uVAEIGUEwFeT4CY9Rg+JmLnhtd5MhIj0+cXB0yi43xQQ3ZGfBx5gb3FtI3YuAOIbUqMASEEyW7/yJM8A4NodQ1u4fWdp88Xm9jg6jt0GgdX6sxywYVk9mh5emxv/T/oaByWpSds8fskyC8yZ/NXwhL1vFj4gAa/ruqu7Orpnfkz6+/cxTOndlDyp6XztYvMAuPzg/ItnsyYJ+P+fxNHQ/CO53PUgNZPZTN2n17rk2fJ7K88fbrzcmrrrmDpSkDZcDtJ9xfJDAj5zSTi9CcI7dM9qWHAXARcNcAD4jMAtmxtr0zD5n/n7s6jX7+uLio9Wf+u/aj9VtDYJ2tsAHlx+gPuNSwR0+HdH0fPVCykk0QhZXemzPDt72Rce7G+M65Qc0DEGArmlDEI+il/MDsDZAJjAR3s4NQGCLLn7ODWv3hhPaEt4IEWR5F/+x4NacCHGv5u66MeYkabr2cLLzlq5CuD8AwAPPHYOQF+pTPGVF6RgYUCKtKIanRkM4/q9/XHnMUk4vqsXutzdQHkuuqZ9QP4ifY3D0kZk6Fo0ddE6otVNF629sBG7ZIkQiB8q9rMsNDHF/m7n6YgZAdTMK49T9+KdzZR2AXjXRgng6c/Yofgr96qqt7B49sx3zhbZ0/WHLycppfQGXydoRAEz9pH2akF9TDxNuqjTT0rL86zXG03c3VOTLq5DEEWCZ7eLjKQRBARP7bRLrwuMAgEif2tlb+poNJdVjC6Bry7wKc7ZIJxdHozafj4q+tP9rfHObjdvLAThDQRkWVYVeTlY2JvJvT+Be7fXdv41WDeaMQ9/7udiSu5yORyAudHMzm73FAgA+uj7kzRvL3XsWFYuK7VZAyh1rzZ+CqCoU+RDDv7qv/r4vmFaPJvuN0kC5nRDwrEE0CxnNiirYjbPW6kdt9H1NQggSGQWCEBRcAkQCBgsGGlmJWJMea0U33A1iHlflRHSXLRfMwgQYVQGeHvhfnIXcTiXoDf9Cxksy0Y5IN34TFA6aKM7vgYBAAkyAHyF/nAjJM3mAgAkd3cJx+IXIYLgCaXoCQzw1a2OQ+M8gv8oA8z75TxDxK47HX7w6NSckw19eXybvwTBJb0xGwqEKFAUvklwziOO7LInsGbMcqOg4vwv7Tyn45+vzy2+olxz4f6YGhCCcPjtq+JE8Ceg0WtnNkXoFKeMDXPa5X46/OCbHur1jPhjXAK+TQJAHAmdWjnzkKBvOBePm46HqKjT9xk/LQpODUXUt5gRDwPEtx+vhPftxm/Eb8TPAwz8rJ6S1NOrAAAAAElFTkSuQmCC") },
|
|
20
|
+
time: { value: 0.0 },
|
|
21
|
+
heightOfNearPlane: { value: 0.0 }
|
|
22
|
+
};
|
|
23
|
+
// 顶点着色器
|
|
24
24
|
vertexShader = `
|
|
25
25
|
${ShaderChunk.common}
|
|
26
26
|
${ShaderChunk.logdepthbuf_pars_vertex}
|
|
@@ -52,8 +52,8 @@ export default class FireMaterial extends ShaderMaterial {
|
|
|
52
52
|
vSprite = sprite;
|
|
53
53
|
${ShaderChunk.logdepthbuf_vertex}
|
|
54
54
|
}
|
|
55
|
-
`;
|
|
56
|
-
//片元着色器
|
|
55
|
+
`;
|
|
56
|
+
//片元着色器
|
|
57
57
|
fragmentShader = `
|
|
58
58
|
${ShaderChunk.logdepthbuf_pars_fragment}
|
|
59
59
|
uniform vec3 color;
|
|
@@ -74,10 +74,10 @@ export default class FireMaterial extends ShaderMaterial {
|
|
|
74
74
|
gl_FragColor = newTextureColor * vec4(color,1.0) * vOpacity;
|
|
75
75
|
${ShaderChunk.logdepthbuf_fragment}
|
|
76
76
|
}
|
|
77
|
-
`;
|
|
78
|
-
blending = AdditiveBlending;
|
|
79
|
-
depthTest = true;
|
|
80
|
-
depthWrite = false;
|
|
81
|
-
transparent = true;
|
|
82
|
-
fog = false;
|
|
83
|
-
}
|
|
77
|
+
`;
|
|
78
|
+
blending = AdditiveBlending;
|
|
79
|
+
depthTest = true;
|
|
80
|
+
depthWrite = false;
|
|
81
|
+
transparent = true;
|
|
82
|
+
fog = false;
|
|
83
|
+
}
|
package/Fire/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { default } from "./Fire";
|
|
2
|
-
export * from "./Fire";
|
|
1
|
+
export { default } from "./Fire";
|
|
2
|
+
export * from "./Fire";
|
package/Fire/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { default } from "./Fire";
|
|
2
|
-
export * from "./Fire";
|
|
1
|
+
export { default } from "./Fire";
|
|
2
|
+
export * from "./Fire";
|
package/GLTFDracoLoader.d.ts
CHANGED
|
@@ -1,71 +1,71 @@
|
|
|
1
|
-
import { BufferGeometry } from "three";
|
|
2
|
-
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
|
|
3
|
-
/** decodeGeometry / _decodeGeometry 的任务配置 */
|
|
4
|
-
interface DracoTaskConfig {
|
|
5
|
-
attributeIDs: Record<string, number | string>;
|
|
6
|
-
attributeTypes: Record<string, string>;
|
|
7
|
-
useUniqueIDs: boolean;
|
|
8
|
-
vertexColorSpace: string;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* three GLTFLoader 实际依赖的 Draco 解码器契约(最小面)。
|
|
12
|
-
* GLTFLoader.setDRACOLoader 的公开类型要求 three 的 DRACOLoader,
|
|
13
|
-
* 但运行时它只调用 decodeDracoFile(外加 preload / dispose),
|
|
14
|
-
* 故这里只声明这三个方法,让内联解码器以 implements 方式在编译期对齐契约,
|
|
15
|
-
* 而不是靠 `as unknown as DRACOLoader` 盲目断言。
|
|
16
|
-
*/
|
|
17
|
-
export default class GLTFDracoLoader extends GLTFLoader {
|
|
18
|
-
constructor();
|
|
19
|
-
private decoderPending;
|
|
20
|
-
defaultAttributeIDs: Record<string, string>;
|
|
21
|
-
defaultAttributeTypes: Record<string, string>;
|
|
22
|
-
/**
|
|
23
|
-
* 预热解码器。不 await,仅触发初始化,返回 this。
|
|
24
|
-
*/
|
|
25
|
-
preload(): this;
|
|
26
|
-
/**
|
|
27
|
-
* 释放资源。本实现无 Worker 可终止,仅清空初始化缓存。
|
|
28
|
-
*/
|
|
29
|
-
dispose(): this;
|
|
30
|
-
/**
|
|
31
|
-
* 解码 draco 压缩的 buffer,回调返回 THREE.BufferGeometry。
|
|
32
|
-
* 签名对齐 three 的 DRACOLoader.decodeDracoFile,供 GLTFLoader 调用。
|
|
33
|
-
*/
|
|
34
|
-
decodeDracoFile(buffer: ArrayBuffer, callback: (geometry: BufferGeometry) => void, attributeIDs?: Record<string, number>, attributeTypes?: Record<string, string>, vertexColorSpace?: string, onError?: (e: unknown) => void): Promise<void>;
|
|
35
|
-
/**
|
|
36
|
-
* 懒加载并初始化纯 JS 版 draco 解码器(幂等)。
|
|
37
|
-
* 解码器体积约 0.7MB,按需动态 import 避免初始包体过大。
|
|
38
|
-
*/
|
|
39
|
-
private _initDecoder;
|
|
40
|
-
/**
|
|
41
|
-
* 解码入口:初始化解码器 -> 解码 -> 构造 BufferGeometry。
|
|
42
|
-
*/
|
|
43
|
-
decodeGeometry(buffer: ArrayBuffer, taskConfig: DracoTaskConfig): Promise<BufferGeometry>;
|
|
44
|
-
/**
|
|
45
|
-
* 主线程版的解码逻辑(移植自 three DRACOLoader 的 DRACOWorker)。
|
|
46
|
-
* 返回 { index, attributes } 供 _createGeometry 使用。
|
|
47
|
-
*/
|
|
48
|
-
private _decodeGeometry;
|
|
49
|
-
/**
|
|
50
|
-
* 解码索引数据(三角形面)。
|
|
51
|
-
*/
|
|
52
|
-
private _decodeIndex;
|
|
53
|
-
/**
|
|
54
|
-
* 解码单个顶点属性。
|
|
55
|
-
*/
|
|
56
|
-
private _decodeAttribute;
|
|
57
|
-
/**
|
|
58
|
-
* 组件类型构造器 -> draco 数据类型枚举。
|
|
59
|
-
*/
|
|
60
|
-
private _getDracoDataType;
|
|
61
|
-
/**
|
|
62
|
-
* 根据解码结果构造 THREE.BufferGeometry(照抄 three 实现)。
|
|
63
|
-
*/
|
|
64
|
-
private _createGeometry;
|
|
65
|
-
/**
|
|
66
|
-
* 仅当输入色域为 SRGBColorSpace 时,将顶点颜色从 sRGB 转线性。
|
|
67
|
-
* .drc 文件约定为 sRGB;GLTFLoader 内部解码时已是 Linear-sRGB,不会触发转换。
|
|
68
|
-
*/
|
|
69
|
-
private _assignVertexColorSpace;
|
|
70
|
-
}
|
|
71
|
-
export {};
|
|
1
|
+
import { BufferGeometry } from "three";
|
|
2
|
+
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
|
|
3
|
+
/** decodeGeometry / _decodeGeometry 的任务配置 */
|
|
4
|
+
interface DracoTaskConfig {
|
|
5
|
+
attributeIDs: Record<string, number | string>;
|
|
6
|
+
attributeTypes: Record<string, string>;
|
|
7
|
+
useUniqueIDs: boolean;
|
|
8
|
+
vertexColorSpace: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* three GLTFLoader 实际依赖的 Draco 解码器契约(最小面)。
|
|
12
|
+
* GLTFLoader.setDRACOLoader 的公开类型要求 three 的 DRACOLoader,
|
|
13
|
+
* 但运行时它只调用 decodeDracoFile(外加 preload / dispose),
|
|
14
|
+
* 故这里只声明这三个方法,让内联解码器以 implements 方式在编译期对齐契约,
|
|
15
|
+
* 而不是靠 `as unknown as DRACOLoader` 盲目断言。
|
|
16
|
+
*/
|
|
17
|
+
export default class GLTFDracoLoader extends GLTFLoader {
|
|
18
|
+
constructor();
|
|
19
|
+
private decoderPending;
|
|
20
|
+
defaultAttributeIDs: Record<string, string>;
|
|
21
|
+
defaultAttributeTypes: Record<string, string>;
|
|
22
|
+
/**
|
|
23
|
+
* 预热解码器。不 await,仅触发初始化,返回 this。
|
|
24
|
+
*/
|
|
25
|
+
preload(): this;
|
|
26
|
+
/**
|
|
27
|
+
* 释放资源。本实现无 Worker 可终止,仅清空初始化缓存。
|
|
28
|
+
*/
|
|
29
|
+
dispose(): this;
|
|
30
|
+
/**
|
|
31
|
+
* 解码 draco 压缩的 buffer,回调返回 THREE.BufferGeometry。
|
|
32
|
+
* 签名对齐 three 的 DRACOLoader.decodeDracoFile,供 GLTFLoader 调用。
|
|
33
|
+
*/
|
|
34
|
+
decodeDracoFile(buffer: ArrayBuffer, callback: (geometry: BufferGeometry) => void, attributeIDs?: Record<string, number>, attributeTypes?: Record<string, string>, vertexColorSpace?: string, onError?: (e: unknown) => void): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* 懒加载并初始化纯 JS 版 draco 解码器(幂等)。
|
|
37
|
+
* 解码器体积约 0.7MB,按需动态 import 避免初始包体过大。
|
|
38
|
+
*/
|
|
39
|
+
private _initDecoder;
|
|
40
|
+
/**
|
|
41
|
+
* 解码入口:初始化解码器 -> 解码 -> 构造 BufferGeometry。
|
|
42
|
+
*/
|
|
43
|
+
decodeGeometry(buffer: ArrayBuffer, taskConfig: DracoTaskConfig): Promise<BufferGeometry>;
|
|
44
|
+
/**
|
|
45
|
+
* 主线程版的解码逻辑(移植自 three DRACOLoader 的 DRACOWorker)。
|
|
46
|
+
* 返回 { index, attributes } 供 _createGeometry 使用。
|
|
47
|
+
*/
|
|
48
|
+
private _decodeGeometry;
|
|
49
|
+
/**
|
|
50
|
+
* 解码索引数据(三角形面)。
|
|
51
|
+
*/
|
|
52
|
+
private _decodeIndex;
|
|
53
|
+
/**
|
|
54
|
+
* 解码单个顶点属性。
|
|
55
|
+
*/
|
|
56
|
+
private _decodeAttribute;
|
|
57
|
+
/**
|
|
58
|
+
* 组件类型构造器 -> draco 数据类型枚举。
|
|
59
|
+
*/
|
|
60
|
+
private _getDracoDataType;
|
|
61
|
+
/**
|
|
62
|
+
* 根据解码结果构造 THREE.BufferGeometry(照抄 three 实现)。
|
|
63
|
+
*/
|
|
64
|
+
private _createGeometry;
|
|
65
|
+
/**
|
|
66
|
+
* 仅当输入色域为 SRGBColorSpace 时,将顶点颜色从 sRGB 转线性。
|
|
67
|
+
* .drc 文件约定为 sRGB;GLTFLoader 内部解码时已是 Linear-sRGB,不会触发转换。
|
|
68
|
+
*/
|
|
69
|
+
private _assignVertexColorSpace;
|
|
70
|
+
}
|
|
71
|
+
export {};
|