three-base 2.0.137 → 2.0.142

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 (307) hide show
  1. package/DirectionalLight.d.ts +6 -6
  2. package/DirectionalLight.js +68 -68
  3. package/DirectionalLight.ts +70 -0
  4. package/EventMap.d.ts +103 -0
  5. package/EventMap.js +17 -0
  6. package/EventMap.ts +139 -0
  7. package/EventMesh.d.ts +18 -18
  8. package/EventMesh.js +59 -59
  9. package/EventMesh.ts +60 -0
  10. package/ExtrudeMesh.d.ts +112 -112
  11. package/ExtrudeMesh.js +342 -366
  12. package/ExtrudeMesh.ts +553 -0
  13. package/FPScontrol.d.ts +511 -78
  14. package/FPScontrol.js +1799 -617
  15. package/FPScontrol.ts +1855 -0
  16. package/Fire/Fire.d.ts +28 -28
  17. package/Fire/Fire.js +80 -79
  18. package/Fire/Fire.ts +89 -0
  19. package/Fire/{FireGromtry.d.ts → FireGeometry.d.ts} +9 -9
  20. package/Fire/{FireGromtry.js → FireGeometry.js} +40 -40
  21. package/Fire/FireGeometry.ts +40 -0
  22. package/Fire/FireMaterial.d.ts +28 -28
  23. package/Fire/FireMaterial.js +32 -32
  24. package/Fire/FireMaterial.ts +89 -0
  25. package/Fire/index.d.ts +2 -1
  26. package/Fire/index.js +2 -1
  27. package/Fire/index.ts +2 -0
  28. package/GLTFDracoLoader.d.ts +71 -0
  29. package/GLTFDracoLoader.js +266 -0
  30. package/GLTFDracoLoader.ts +430 -0
  31. package/Grass/Grass.d.ts +8 -8
  32. package/Grass/Grass.js +38 -38
  33. package/Grass/Grass.ts +38 -0
  34. package/Grass/index.d.ts +2 -1
  35. package/Grass/index.js +2 -1
  36. package/Grass/index.ts +2 -0
  37. package/Ground1/Ground1.d.ts +10 -11
  38. package/Ground1/Ground1.js +95 -91
  39. package/Ground1/Ground1.ts +114 -0
  40. package/Ground1/index.d.ts +1 -1
  41. package/Ground1/index.js +1 -1
  42. package/Ground1/index.ts +1 -0
  43. package/MeshBase.d.ts +36 -35
  44. package/MeshBase.js +247 -223
  45. package/MeshBase.ts +253 -0
  46. package/Mirror.d.ts +25 -25
  47. package/Mirror.js +143 -139
  48. package/Mirror.ts +203 -0
  49. package/MktMesh/MktMesh.d.ts +291 -0
  50. package/MktMesh/MktMesh.js +1045 -0
  51. package/MktMesh/MktMesh.ts +1075 -0
  52. package/MktMesh/assetUrl.d.ts +35 -0
  53. package/MktMesh/assetUrl.js +69 -0
  54. package/MktMesh/assetUrl.ts +69 -0
  55. package/MktMesh/mktMappingShader.d.ts +12 -0
  56. package/MktMesh/mktMappingShader.js +139 -0
  57. package/MktMesh/mktMappingShader.ts +139 -0
  58. package/MktMesh/mktShader.d.ts +263 -0
  59. package/MktMesh/mktShader.js +1248 -0
  60. package/MktMesh/mktShader.ts +1344 -0
  61. package/MktMesh/panoBitmapTexture.d.ts +25 -0
  62. package/MktMesh/panoBitmapTexture.js +52 -0
  63. package/MktMesh/panoBitmapTexture.ts +54 -0
  64. package/MktMesh/panoSlotBind.d.ts +29 -0
  65. package/MktMesh/panoSlotBind.js +106 -0
  66. package/MktMesh/panoSlotBind.ts +153 -0
  67. package/MktMesh/panoSlotRoster.d.ts +22 -0
  68. package/MktMesh/panoSlotRoster.js +169 -0
  69. package/MktMesh/panoSlotRoster.ts +168 -0
  70. package/MktMesh/panoTileStitcher.d.ts +119 -0
  71. package/MktMesh/panoTileStitcher.js +533 -0
  72. package/MktMesh/panoTileStitcher.ts +616 -0
  73. package/MktMesh/types.d.ts +75 -0
  74. package/MktMesh/types.js +1 -0
  75. package/MktMesh/types.ts +87 -0
  76. package/MktMesh/wallCapTessellate.d.ts +33 -0
  77. package/MktMesh/wallCapTessellate.js +97 -0
  78. package/MktMesh/wallCapTessellate.ts +68 -0
  79. package/PipeMesh/PathGeometry.d.ts +44 -44
  80. package/PipeMesh/PathGeometry.js +307 -300
  81. package/PipeMesh/PathGeometry.ts +343 -0
  82. package/PipeMesh/PathPoint.d.ts +17 -17
  83. package/PipeMesh/PathPoint.js +31 -31
  84. package/PipeMesh/PathPoint.ts +36 -0
  85. package/PipeMesh/PathPointList.d.ts +31 -31
  86. package/PipeMesh/PathPointList.js +209 -208
  87. package/PipeMesh/PathPointList.ts +227 -0
  88. package/PipeMesh/PathTubeGeometry.d.ts +25 -25
  89. package/PipeMesh/PathTubeGeometry.js +130 -130
  90. package/PipeMesh/PathTubeGeometry.ts +146 -0
  91. package/PipeMesh/PipeMesh.d.ts +25 -25
  92. package/PipeMesh/PipeMesh.js +63 -63
  93. package/PipeMesh/PipeMesh.ts +76 -0
  94. package/PipeMesh/index.d.ts +1 -1
  95. package/PipeMesh/index.js +1 -1
  96. package/PipeMesh/index.ts +1 -0
  97. package/PlaneModal1/PlaneModal1.d.ts +34 -31
  98. package/PlaneModal1/PlaneModal1.js +109 -105
  99. package/PlaneModal1/PlaneModal1.ts +138 -0
  100. package/PlaneModal1/index.d.ts +1 -1
  101. package/PlaneModal1/index.js +1 -1
  102. package/PlaneModal1/index.ts +1 -0
  103. package/PlaneText.d.ts +27 -39
  104. package/PlaneText.js +35 -30
  105. package/PlaneText.ts +55 -0
  106. package/PlaneWithHtml.d.ts +13 -11
  107. package/PlaneWithHtml.js +64 -63
  108. package/PlaneWithHtml.ts +70 -0
  109. package/PointLight/PointLight.d.ts +13 -14
  110. package/PointLight/PointLight.js +64 -70
  111. package/PointLight/PointLight.ts +67 -0
  112. package/PointLight/index.d.ts +1 -1
  113. package/PointLight/index.js +1 -1
  114. package/PointLight/index.ts +1 -0
  115. package/README.md +110 -79
  116. package/Sky/Sky.d.ts +9 -9
  117. package/Sky/Sky.js +22 -22
  118. package/Sky/Sky.ts +22 -0
  119. package/Sky/index.d.ts +1 -1
  120. package/Sky/index.js +1 -1
  121. package/Sky/index.ts +1 -0
  122. package/SpotLight.d.ts +6 -6
  123. package/SpotLight.js +72 -72
  124. package/SpotLight.ts +74 -0
  125. package/SpriteModal1/SpriteModal1.d.ts +33 -30
  126. package/SpriteModal1/SpriteModal1.js +116 -110
  127. package/SpriteModal1/SpriteModal1.ts +146 -0
  128. package/SpriteModal1/index.d.ts +1 -1
  129. package/SpriteModal1/index.js +1 -1
  130. package/SpriteModal1/index.ts +1 -0
  131. package/SpriteText.d.ts +46 -45
  132. package/SpriteText.js +176 -163
  133. package/SpriteText.ts +205 -0
  134. package/SpriteText2.d.ts +48 -47
  135. package/SpriteText2.js +223 -198
  136. package/SpriteText2.ts +258 -0
  137. package/SpriteText3.d.ts +86 -0
  138. package/SpriteText3.js +519 -0
  139. package/SpriteText3.ts +599 -0
  140. package/SpriteWithHtml.d.ts +9 -7
  141. package/SpriteWithHtml.js +44 -44
  142. package/SpriteWithHtml.ts +50 -0
  143. package/Text3D/Text3D.d.ts +20 -20
  144. package/Text3D/Text3D.js +58 -62
  145. package/Text3D/Text3D.ts +77 -0
  146. package/Text3D/fontController.d.ts +60 -59
  147. package/Text3D/fontController.js +166 -199
  148. package/Text3D/fontController.ts +209 -0
  149. package/Text3D/index.d.ts +1 -1
  150. package/Text3D/index.js +1 -1
  151. package/Text3D/index.ts +1 -0
  152. package/ThreeBase.d.ts +248 -111
  153. package/ThreeBase.js +1202 -656
  154. package/ThreeBase.ts +1314 -0
  155. package/ThreeMouse.d.ts +54 -40
  156. package/ThreeMouse.js +453 -407
  157. package/ThreeMouse.ts +472 -0
  158. package/Transition.d.ts +45 -40
  159. package/Transition.js +209 -210
  160. package/Transition.ts +242 -0
  161. package/Water/Water.d.ts +5 -5
  162. package/Water/Water.js +44 -26
  163. package/Water/Water.ts +45 -0
  164. package/Water/index.d.ts +2 -0
  165. package/Water/index.js +2 -0
  166. package/Water/index.ts +2 -0
  167. package/WaterFlow/FloatingDuck.d.ts +88 -0
  168. package/WaterFlow/FloatingDuck.js +307 -0
  169. package/WaterFlow/FloatingDuck.ts +445 -0
  170. package/WaterFlow/GPUFluidSimulation.d.ts +56 -0
  171. package/WaterFlow/GPUFluidSimulation.js +785 -0
  172. package/WaterFlow/GPUFluidSimulation.ts +827 -0
  173. package/WaterFlow/ReservoirSystem.d.ts +106 -0
  174. package/WaterFlow/ReservoirSystem.js +621 -0
  175. package/WaterFlow/ReservoirSystem.ts +754 -0
  176. package/WaterFlow/SPHField.d.ts +35 -0
  177. package/WaterFlow/SPHField.js +204 -0
  178. package/WaterFlow/SPHField.ts +228 -0
  179. package/WaterFlow/ScreenSpaceFluidPass.d.ts +69 -0
  180. package/WaterFlow/ScreenSpaceFluidPass.js +736 -0
  181. package/WaterFlow/ScreenSpaceFluidPass.ts +789 -0
  182. package/WaterFlow/ShallowWaterSurface.d.ts +45 -0
  183. package/WaterFlow/ShallowWaterSurface.js +441 -0
  184. package/WaterFlow/ShallowWaterSurface.ts +510 -0
  185. package/WaterFlow/WaterFlow.d.ts +87 -0
  186. package/WaterFlow/WaterFlow.js +171 -0
  187. package/WaterFlow/WaterFlow.ts +219 -0
  188. package/WaterFlow/types.d.ts +161 -0
  189. package/WaterFlow/types.js +1 -0
  190. package/WaterFlow/types.ts +189 -0
  191. package/WaterFlow/waterFlowPass.d.ts +3 -0
  192. package/WaterFlow/waterFlowPass.js +20 -0
  193. package/WaterFlow/waterFlowPass.ts +40 -0
  194. package/collisionOBB.d.ts +42 -0
  195. package/collisionOBB.js +112 -0
  196. package/collisionOBB.ts +108 -0
  197. package/declare.d.ts +23 -165
  198. package/index.d.ts +1 -1
  199. package/index.js +1 -2
  200. package/index.ts +1 -0
  201. package/instanced/InstancedBatch.d.ts +57 -0
  202. package/instanced/InstancedBatch.js +348 -0
  203. package/instanced/InstancedBatch.ts +406 -0
  204. package/instanced/InstancedChild.d.ts +174 -0
  205. package/instanced/InstancedChild.js +264 -0
  206. package/instanced/InstancedChild.ts +327 -0
  207. package/instanced/InstancedGroup.d.ts +43 -0
  208. package/instanced/InstancedGroup.js +126 -0
  209. package/instanced/InstancedGroup.ts +137 -0
  210. package/{InstancedMeshBase.d.ts → instanced/InstancedMeshBase.d.ts} +38 -39
  211. package/{InstancedMeshBase.js → instanced/InstancedMeshBase.js} +282 -293
  212. package/instanced/InstancedMeshBase.ts +292 -0
  213. package/instanced/InstancedTemplate.d.ts +46 -0
  214. package/instanced/InstancedTemplate.js +125 -0
  215. package/instanced/InstancedTemplate.ts +188 -0
  216. package/keyControls.d.ts +30 -0
  217. package/{keyContorls.js → keyControls.js} +101 -98
  218. package/keyControls.ts +107 -0
  219. package/lensflare/LensFlare.d.ts +39 -0
  220. package/lensflare/LensFlare.js +373 -0
  221. package/lensflare/LensFlare.ts +448 -0
  222. package/lensflare/lensflare0.png +0 -0
  223. package/lensflare/lensflare3.png +0 -0
  224. package/lensflare/lensflare_custom.png +0 -0
  225. package/lensflare/lensflare_hex_ghost.png +0 -0
  226. package/lensflare/lensflare_hex_main.png +0 -0
  227. package/package.json +99 -25
  228. package/pass/bloom_pass.d.ts +2 -2
  229. package/pass/bloom_pass.js +188 -101
  230. package/pass/bloom_pass.ts +243 -0
  231. package/pass/cover_pass.d.ts +2 -2
  232. package/pass/cover_pass.js +122 -99
  233. package/pass/cover_pass.ts +182 -0
  234. package/pass/debugDepthState.d.ts +20 -0
  235. package/pass/debugDepthState.js +9 -0
  236. package/pass/debugDepthState.ts +22 -0
  237. package/pass/depthTestBias.d.ts +12 -0
  238. package/pass/depthTestBias.js +12 -0
  239. package/pass/depthTestBias.ts +12 -0
  240. package/pass/effectUserData.d.ts +27 -0
  241. package/pass/effectUserData.js +1 -0
  242. package/pass/effectUserData.ts +46 -0
  243. package/pass/frosted_glass_pass.d.ts +2 -2
  244. package/pass/frosted_glass_pass.js +167 -186
  245. package/pass/frosted_glass_pass.ts +288 -0
  246. package/pass/fsQuad.d.ts +9 -9
  247. package/pass/fsQuad.js +28 -28
  248. package/pass/fsQuad.ts +34 -0
  249. package/pass/glow_pass.d.ts +2 -2
  250. package/pass/glow_pass.js +449 -233
  251. package/pass/glow_pass.ts +654 -0
  252. package/pass/screen_bloom_pass.d.ts +11 -0
  253. package/pass/screen_bloom_pass.js +235 -0
  254. package/pass/screen_bloom_pass.ts +263 -0
  255. package/pass/ssao_pass.d.ts +88 -13
  256. package/pass/ssao_pass.js +802 -366
  257. package/pass/ssao_pass.ts +918 -0
  258. package/pass/stroke_pass.d.ts +2 -2
  259. package/pass/stroke_pass.js +329 -258
  260. package/pass/stroke_pass.ts +638 -0
  261. package/shaders/FXAAShaderMaterial.d.ts +3 -3
  262. package/shaders/FXAAShaderMaterial.js +23 -66
  263. package/shaders/FXAAShaderMaterial.ts +201 -0
  264. package/shaders/baseDepthVisShader.d.ts +11 -0
  265. package/shaders/baseDepthVisShader.js +36 -0
  266. package/shaders/baseDepthVisShader.ts +36 -0
  267. package/shaders/baseTextureToRenderShader.d.ts +2 -2
  268. package/shaders/baseTextureToRenderShader.js +55 -60
  269. package/shaders/baseTextureToRenderShader.ts +232 -0
  270. package/shaders/copyShader.d.ts +3 -3
  271. package/shaders/copyShader.js +13 -14
  272. package/shaders/copyShader.ts +32 -0
  273. package/shaders/debugDepthCompareShader.d.ts +14 -0
  274. package/shaders/debugDepthCompareShader.js +49 -0
  275. package/shaders/debugDepthCompareShader.ts +50 -0
  276. package/shaders/debugDepthJudgeShader.d.ts +18 -0
  277. package/shaders/debugDepthJudgeShader.js +52 -0
  278. package/shaders/debugDepthJudgeShader.ts +54 -0
  279. package/shaders/debugExcludedShader.d.ts +13 -0
  280. package/shaders/debugExcludedShader.js +46 -0
  281. package/shaders/debugExcludedShader.ts +48 -0
  282. package/spriteTextBg.d.ts +1 -0
  283. package/spriteTextBg.js +20 -0
  284. package/spriteTextBg.ts +20 -0
  285. package/threeLoader.d.ts +35 -34
  286. package/threeLoader.js +518 -527
  287. package/threeLoader.ts +525 -0
  288. package/threeUtils.d.ts +53 -52
  289. package/threeUtils.js +329 -330
  290. package/threeUtils.ts +373 -0
  291. package/types.d.ts +2 -0
  292. package/types.js +6 -0
  293. package/types.ts +8 -0
  294. package/ApngTexture.d.ts +0 -13
  295. package/ApngTexture.js +0 -61
  296. package/ApngTextureManage.d.ts +0 -18
  297. package/ApngTextureManage.js +0 -87
  298. package/KeyFrameAnimation.d.ts +0 -25
  299. package/KeyFrameAnimation.js +0 -78
  300. package/keyContorls.d.ts +0 -25
  301. package/lib/draco/draco_decoder.js +0 -34
  302. package/lib/draco/draco_decoder.wasm +0 -0
  303. package/lib/draco/draco_wasm_wrapper.js +0 -117
  304. package/pass/emissive_ao_pass.d.ts +0 -13
  305. package/pass/emissive_ao_pass.js +0 -370
  306. package/shaders.d.ts +0 -5
  307. package/shaders.js +0 -93
package/Fire/Fire.d.ts CHANGED
@@ -1,28 +1,28 @@
1
- import { BufferGeometry, Camera, Clock, Group, Material, NormalBufferAttributes, Object3DEventMap, Points, Scene, Vector2, WebGLRenderer } from "three";
2
- import FireGromtry from "./FireGromtry";
3
- import FireMaterial from "./FireMaterial";
4
- export default class Fire extends Points {
5
- constructor();
6
- geometry: FireGromtry;
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<NormalBufferAttributes>, material: Material, group: Group<Object3DEventMap>): 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,79 +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 } from "three";
8
- import FireGromtry from "./FireGromtry";
9
- import FireMaterial from "./FireMaterial";
10
- import { degToRad } from "three/src/math/MathUtils";
11
- // 粒子火焰效果
12
- export default class Fire extends Points {
13
- constructor() {
14
- super();
15
- }
16
- geometry = new FireGromtry(0, 0, 0);
17
- material = new FireMaterial();
18
- // 火焰的颜色
19
- fireColor = "#ff2200";
20
- // 火焰的整体缩放值
21
- fireScale = 1;
22
- // 火焰的燃烧半径
23
- fireRadius = 0.5;
24
- // 火焰的高度
25
- fireHeight = 3;
26
- // 火焰的粒子数量
27
- particleCount = 500;
28
- // 是否是透视相机
29
- isPerspectiveCamera = true;
30
- //渲染器的尺寸
31
- size = new Vector2();
32
- // 缓存的参数
33
- cacheProps = {
34
- fireColor: "#ff2200",
35
- fireScale: 0,
36
- fireRadius: 0.5,
37
- fireHeight: 3,
38
- particleCount: 500,
39
- width: 0,
40
- height: 0,
41
- isPerspectiveCamera: true
42
- };
43
- // 当前渲染的帧数
44
- updataFrame = 0;
45
- // 时钟对象
46
- clock = new Clock();
47
- onBeforeRender(renderer, scene, camera, geometry, material, group) {
48
- const delta = this.clock.getDelta();
49
- renderer.getSize(this.size);
50
- if (this.cacheProps.fireColor !== this.fireColor ||
51
- this.cacheProps.fireScale !== this.fireScale ||
52
- this.cacheProps.fireRadius !== this.fireRadius ||
53
- this.cacheProps.fireHeight !== this.fireHeight ||
54
- this.cacheProps.particleCount !== this.particleCount ||
55
- this.cacheProps.isPerspectiveCamera !== this.isPerspectiveCamera ||
56
- this.cacheProps.width !== this.size.x ||
57
- this.cacheProps.height !== this.size.y) {
58
- this.cacheProps.fireColor = this.fireColor;
59
- this.cacheProps.fireScale = this.fireScale;
60
- this.cacheProps.fireRadius = this.fireRadius;
61
- this.cacheProps.fireHeight = this.fireHeight;
62
- this.cacheProps.particleCount = this.particleCount;
63
- this.cacheProps.isPerspectiveCamera = this.isPerspectiveCamera;
64
- this.cacheProps.width = this.size.x;
65
- this.cacheProps.height = this.size.y;
66
- this.geometry = new FireGromtry(this.fireRadius * this.fireScale, this.fireHeight * this.fireScale, this.particleCount);
67
- this.material.uniforms.color.value = new Color(this.fireColor);
68
- this.material.uniforms.size.value = this.fireScale * 0.4;
69
- if (camera.isPerspectiveCamera) {
70
- this.material.uniforms.heightOfNearPlane.value = Math.abs(this.size.y / (2 * Math.tan(degToRad(camera.fov * 0.5))));
71
- }
72
- else {
73
- this.material.uniforms.heightOfNearPlane.value = 0;
74
- }
75
- }
76
- this.isPerspectiveCamera = camera.isPerspectiveCamera;
77
- this.material.uniforms.time.value = (this.material.uniforms.time.value + delta) % 1;
78
- }
79
- }
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/Fire.ts ADDED
@@ -0,0 +1,89 @@
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, WebGLRenderer, Scene, Camera, PerspectiveCamera, BufferGeometry, Material, Group, Object3DEventMap } 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: FireGeometry = new FireGeometry(0, 0, 0);
18
+ material: FireMaterial = new FireMaterial() as FireMaterial;
19
+ // 火焰的颜色
20
+ fireColor: string = "#ff2200";
21
+ // 火焰的整体缩放值
22
+ fireScale: number = 1;
23
+ // 火焰的燃烧半径
24
+ fireRadius: number = 0.5;
25
+ // 火焰的高度
26
+ fireHeight: number = 3;
27
+ // 火焰的粒子数量
28
+ particleCount: number = 500;
29
+ // 是否是透视相机
30
+ isPerspectiveCamera: boolean = true;
31
+ //渲染器的尺寸
32
+ size: Vector2 = new Vector2();
33
+ // 缓存的参数
34
+ cacheProps: {
35
+ fireColor: string;
36
+ fireScale: number;
37
+ fireRadius: number;
38
+ fireHeight: number;
39
+ particleCount: number;
40
+ width: number;
41
+ height: number;
42
+ isPerspectiveCamera: boolean;
43
+ } = {
44
+ fireColor: "#ff2200",
45
+ fireScale: 0,
46
+ fireRadius: 0.5,
47
+ fireHeight: 3,
48
+ particleCount: 500,
49
+ width: 0,
50
+ height: 0,
51
+ isPerspectiveCamera: true
52
+ };
53
+ // 当前渲染的帧数
54
+ updataFrame: number = 0;
55
+ // 时钟对象
56
+ clock: Clock = new Clock();
57
+ onBeforeRender(renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, material: Material, group: Group): void {
58
+ const delta: number = this.clock.getDelta();
59
+ renderer.getSize(this.size);
60
+ if (this.cacheProps.fireColor !== this.fireColor ||
61
+ this.cacheProps.fireScale !== this.fireScale ||
62
+ this.cacheProps.fireRadius !== this.fireRadius ||
63
+ this.cacheProps.fireHeight !== this.fireHeight ||
64
+ this.cacheProps.particleCount !== this.particleCount ||
65
+ this.cacheProps.isPerspectiveCamera !== this.isPerspectiveCamera ||
66
+ this.cacheProps.width !== this.size.x ||
67
+ this.cacheProps.height !== this.size.y) {
68
+ this.cacheProps.fireColor = this.fireColor;
69
+ this.cacheProps.fireScale = this.fireScale;
70
+ this.cacheProps.fireRadius = this.fireRadius;
71
+ this.cacheProps.fireHeight = this.fireHeight;
72
+ this.cacheProps.particleCount = this.particleCount;
73
+ this.cacheProps.isPerspectiveCamera = this.isPerspectiveCamera;
74
+ this.cacheProps.width = this.size.x;
75
+ this.cacheProps.height = this.size.y;
76
+ this.geometry = new FireGeometry(this.fireRadius * this.fireScale, this.fireHeight * this.fireScale, this.particleCount);
77
+ this.material.uniforms.color.value = new Color(this.fireColor);
78
+ this.material.uniforms.size.value = this.fireScale * 0.4;
79
+ if (camera instanceof PerspectiveCamera) {
80
+ this.material.uniforms.heightOfNearPlane.value = Math.abs(this.size.y / (2 * Math.tan(degToRad(camera.fov * 0.5))));
81
+ }
82
+ else {
83
+ this.material.uniforms.heightOfNearPlane.value = 0;
84
+ }
85
+ }
86
+ this.isPerspectiveCamera = camera instanceof PerspectiveCamera;
87
+ this.material.uniforms.time.value = (this.material.uniforms.time.value + delta) % 1;
88
+ }
89
+ }
@@ -1,9 +1,9 @@
1
- export declare const SPRITE_ROW_LENGTH = 4;
2
- export declare const ONE_SPRITE_ROW_LENGTH: number;
3
- import { BufferGeometry } from "three";
4
- export default class FireGromtry 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
+ }
@@ -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 FireGromtry 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
+ }
@@ -0,0 +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: number = 4; // 粒子图片中图片数量
8
+ export const ONE_SPRITE_ROW_LENGTH: number = 1 / SPRITE_ROW_LENGTH; // 每一行的宽度
9
+ import { BufferAttribute, BufferGeometry } from "three";
10
+ // 粒子火焰顶点对象
11
+ export default class FireGeometry extends BufferGeometry {
12
+ radius: number = 0.5;
13
+ height: number = 3;
14
+ particleCount: number = 200;
15
+ constructor(radius: number = 0.5, height: number = 3, particleCount: number = 200) {
16
+ super();
17
+ const halfHeight: number = height * 0.5;
18
+ const position: Float32Array = new Float32Array(particleCount * 3);
19
+ const random: Float32Array = new Float32Array(particleCount);
20
+ const sprite: Float32Array = new Float32Array(particleCount);
21
+ for (let i: number = 0; i < particleCount; i++) {
22
+ const r: number = Math.sqrt(Math.random()) * radius;
23
+ const angle: number = 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,28 +1,28 @@
1
- import { Color, ShaderMaterial } 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: import("three").Texture;
13
- };
14
- time: {
15
- value: number;
16
- };
17
- heightOfNearPlane: {
18
- value: number;
19
- };
20
- };
21
- vertexShader: string;
22
- fragmentShader: string;
23
- blending: 2;
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
+ }
@@ -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 "./FireGromtry";
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,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") },
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
+ }