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/README.md CHANGED
@@ -1,108 +1,139 @@
1
- ```tsx
1
+ # three-base
2
+
3
+ 一个基于 Three.js 的扩展库,提供常用的 3D 组件、动画、材质和后处理特效。
4
+
5
+ ## 特性
6
+
7
+ - 🎨 **常用 3D 组件**:MeshBase、InstancedChild(实例化网格自动合并)、Text3D、SpriteText、PlaneText 等
8
+ - 📦 **模型加载器**:支持 GLTF、FBX、OBJ、STL、PLY、USDZ 等格式
9
+ - 🎮 **交互控制**:键盘控制、FPS 控制、轨道控制
10
+ - ✨ **粒子特效**:火焰、水面、草地等
11
+ - 🌟 **后处理特效**:Bloom、发光、描边、磨砂玻璃、SSAO 等
12
+ - 📐 **工具类**:Transition 动画、ThreeUtils 工具函数等
13
+
14
+ ## 安装
15
+
16
+ ```bash
17
+ npm install three-base
18
+ ```
2
19
 
3
- .创建一个 homeRender.ts 模块
4
- import { AmbientLight, BoxGeometry, Mesh, MeshLambertMaterial, PointLight } from "three";
20
+ ## 使用示例
21
+
22
+ ### 基础使用
23
+
24
+ ```tsx
5
25
  import ThreeBase from "three-base";
6
- import Transition from "three-base/Transition";
7
- import Fire from "three-base/Fire";
26
+ import { Vector3 } from "three";
27
+
28
+ // 创建渲染器
29
+ const app = new ThreeBase();
8
30
 
9
- //qq389652405
10
- class HomeRender extends ThreeBase {
31
+ // 设置容器
32
+ app.setContainer(document.getElementById("canvas"));
11
33
 
12
- constructor() {
13
- super();
14
- }
34
+ // 设置相机位置
35
+ app.resetLookAt({
36
+ center: new Vector3(0, 0, 0),
37
+ position: new Vector3(10, 10, 10)
38
+ });
39
+ ```
15
40
 
16
- // 环境光
17
- ambientLight = (() => {
18
- const ambientLight = new AmbientLight("#fff", 0.4);
19
- this.scene.add(ambientLight);
20
- return ambientLight;
21
- })();
41
+ ### 创建动画对象
22
42
 
23
- //点光源
24
- pointLight = (() => {
25
- const pointLight = new PointLight("#fff", 0.4);
26
- pointLight.position.set(50, 40, 50);
27
- this.scene.add(pointLight);
28
- return pointLight;
29
- })();
43
+ ```tsx
44
+ import Transition from "three-base/Transition";
30
45
 
31
- init() {
32
- super.init();
33
- // 使用这个方法来初始化相机的位置和朝向
34
- this.resetLookAt({
35
- center: new Vector3(0, 0, 0),
36
- position: new Vector3(10.954, 19.452, 39.811)
37
- });
46
+ // 创建动画对象
47
+ const transition = new Transition(
48
+ { x: 0, y: 0 }, // 初始值
49
+ [0.8, 0, 0.2, 1], // 贝塞尔曲线
50
+ 1000 // 过渡时间
51
+ );
38
52
 
39
- }
53
+ // 监听变化
54
+ transition.onChange(({ x, y }) => {
55
+ mesh.position.set(x, y, 0);
56
+ });
40
57
 
41
- //火焰
42
- fire = (() => {
43
- const fire = new Fire();
44
- fire.fireColor = "#ff2200";// 火焰的颜色
45
- fire.fireScale = 1;// 火焰的整体缩放值
46
- fire.fireRadius = 0.5;// 火焰的燃烧半径
47
- fire.fireHeight = 3;// 火焰的高度
48
- fire.position.set(0, 5, 0);
49
- this.scene.add(fire);
50
- return fire;
51
- })();
58
+ // 修改值(自动过渡动画)
59
+ transition.set({ x: 10, y: 5 });
60
+ ```
52
61
 
53
- box = (() => {
54
- const geometry = new BoxGeometry(10, 10, 10);
55
- const matearil = new MeshLambertMaterial({ color: 0xfff });
56
- const mesh = new Mesh(geometry, matearil);
62
+ ### 加载模型
57
63
 
58
- //创建一个动画对象
59
- const transition = new Transition({ rotationY: 0 });
64
+ ```tsx
65
+ import MeshBase from "three-base";
60
66
 
61
- // 动画对象播放回调
62
- transition.onChange(({ rotationY }) => {
63
- mesh.rotation.y = rotationY;
64
- });
67
+ // 创建模型对象
68
+ const model = new MeshBase("model.glb");
65
69
 
66
- mesh.position.set(0, 0, 0);
67
- mesh.userData = { cursor: "pointer", enableEvent: true };
70
+ // 监听加载完成
71
+ model.addEventListener("loaded", () => {
72
+ console.log("模型加载完成!");
73
+ });
68
74
 
69
- // 提供了常用的鼠标事件
70
- mesh.addEventListener("click", e => { });
71
- mesh.addEventListener("dbclick", e => { });
75
+ // 添加到场景
76
+ app.scene.add(model);
77
+ ```
72
78
 
73
- mesh.addEventListener("leftclick", e => {
74
- transition.set({ rotationY: Math.random() * 5 });
75
- });
76
- mesh.addEventListener("rightclick", e => { });
77
- mesh.addEventListener("mouseenter", e => { });
78
- mesh.addEventListener("mouseleave", e => { });
79
- mesh.addEventListener("mousemove", e => { });
80
- mesh.addEventListener("mousedown", e => { });
81
- mesh.addEventListener("mouseup", e => { });
79
+ ### 火焰特效
82
80
 
83
- this.scene.add(mesh);
84
- return mesh;
85
- })();
81
+ ```tsx
82
+ import Fire from "three-base/Fire";
86
83
 
87
- }
84
+ const fire = new Fire();
85
+ fire.fireColor = "#ff2200";
86
+ fire.fireScale = 1;
87
+ fire.position.set(0, 5, 0);
88
+ app.scene.add(fire);
89
+ ```
88
90
 
91
+ ## API 文档
89
92
 
90
- const homeRenderer = new HomeRender();
93
+ ### 核心类
91
94
 
92
- // 导出这个单例对象
93
- export default homeRenderer;
95
+ - **ThreeBase**:基础渲染器类,封装了 WebGLRenderer、相机、场景等
96
+ - **MeshBase**:模型基类,提供模型加载、动画播放等功能
97
+ - **InstancedChild**:实例化网格自动合并基类(推荐),继承后框架每帧自动把同类实例合并进 InstancedMesh 批量渲染,支持内置几何 / GLB 多 submesh / GLB 骨骼动画共享姿态
98
+ - **InstancedMeshBase**:底层手动实例缓冲工具,供生产代码使用
99
+ - **Transition**:过渡动画类,提供平滑的数值过渡动画
94
100
 
101
+ ### 组件类
95
102
 
103
+ - **Text3D**:3D 文字组件
104
+ - **SpriteText / SpriteText2**:精灵文字组件
105
+ - **PlaneText**:平面文字组件
106
+ - **SpriteWithHtml / PlaneWithHtml**:支持 HTML 内容的组件
107
+ - **SpriteModal1 / PlaneModal1**:弹窗组件
96
108
 
97
- 2.添加到div里面
98
- import homeRenderer form "./homeRenderer.ts";
99
- homeRenderer.setContainer( document.getElementById("div") );
109
+ ### 特效类
100
110
 
111
+ - **Fire**:火焰粒子特效
112
+ - **Water**:水面特效
113
+ - **Grass**:草地特效
114
+ - **Mirror**:镜面反射
101
115
 
116
+ ### 后处理 Pass
102
117
 
118
+ - **bloom_pass**:泛光特效
119
+ - **glow_pass**:发光特效
120
+ - **stroke_pass**:描边特效
121
+ - **cover_pass**:颜色覆盖
122
+ - **frosted_glass_pass**:磨砂玻璃特效
123
+ - **ssao_pass**:屏幕空间环境光遮蔽
103
124
 
104
- ```
125
+ ## 浏览器支持
126
+
127
+ - Chrome (推荐)
128
+ - Firefox
129
+ - Safari
130
+ - Edge
131
+
132
+ ## 许可证
133
+
134
+ [MIT](./LICENSE)
105
135
 
106
- 请尽量使用 vite 来打包
136
+ ## 相关链接
107
137
 
108
- 代码: https://gitee.com/drm/vite_react_mobx_threebase
138
+ - 示例代码:https://gitee.com/drm/vite_react_mobx_threebase
139
+ - Three.js 文档:https://threejs.org/docs/
package/Sky/Sky.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- import { Mesh, MeshBasicMaterial, SphereGeometry } from "three";
2
- /**
3
- * 天空球
4
- */
5
- export default class Sky extends Mesh {
6
- constructor();
7
- static geometry: SphereGeometry;
8
- material: MeshBasicMaterial;
9
- }
1
+ import { Mesh, MeshBasicMaterial, SphereGeometry } from "three";
2
+ /**
3
+ * 天空球
4
+ */
5
+ export default class Sky extends Mesh {
6
+ constructor();
7
+ static geometry: SphereGeometry;
8
+ material: MeshBasicMaterial;
9
+ }
package/Sky/Sky.js CHANGED
@@ -1,22 +1,22 @@
1
- /*
2
- * @Author: xiaosihan
3
- * @Date: 2022-05-20 18:03:58
4
- * @Last Modified by: xiaosihan
5
- * @Last Modified time: 2022-12-27 09:54:23
6
- */
7
- import { DoubleSide, Mesh, MeshBasicMaterial, SphereGeometry } from "three";
8
- import threeLoader from "../threeLoader";
9
- import skyMapPNG from "./skyMap.png";
10
- /**
11
- * 天空球
12
- */
13
- export default class Sky extends Mesh {
14
- constructor() {
15
- super(Sky.geometry);
16
- }
17
- static geometry = new SphereGeometry(5000, 100, 100);
18
- material = new MeshBasicMaterial({
19
- side: DoubleSide,
20
- map: threeLoader.getTexture(skyMapPNG),
21
- });
22
- }
1
+ /*
2
+ * @Author: xiaosihan
3
+ * @Date: 2022-05-20 18:03:58
4
+ * @Last Modified by: xiaosihan
5
+ * @Last Modified time: 2022-12-27 09:54:23
6
+ */
7
+ import { DoubleSide, Mesh, MeshBasicMaterial, SphereGeometry } from "three";
8
+ import threeLoader from "../threeLoader";
9
+ import skyMapPNG from "./skyMap.png";
10
+ /**
11
+ * 天空球
12
+ */
13
+ export default class Sky extends Mesh {
14
+ constructor() {
15
+ super(Sky.geometry);
16
+ }
17
+ static geometry = new SphereGeometry(5000, 100, 100);
18
+ material = new MeshBasicMaterial({
19
+ side: DoubleSide,
20
+ map: threeLoader.getTexture(skyMapPNG),
21
+ });
22
+ }
package/Sky/Sky.ts ADDED
@@ -0,0 +1,22 @@
1
+ /*
2
+ * @Author: xiaosihan
3
+ * @Date: 2022-05-20 18:03:58
4
+ * @Last Modified by: xiaosihan
5
+ * @Last Modified time: 2022-12-27 09:54:23
6
+ */
7
+ import { DoubleSide, Mesh, MeshBasicMaterial, SphereGeometry } from "three";
8
+ import threeLoader from "../threeLoader";
9
+ import skyMapPNG from "./skyMap.png";
10
+ /**
11
+ * 天空球
12
+ */
13
+ export default class Sky extends Mesh {
14
+ constructor() {
15
+ super(Sky.geometry);
16
+ }
17
+ static geometry: SphereGeometry = new SphereGeometry(5000, 100, 100);
18
+ material: MeshBasicMaterial = new MeshBasicMaterial({
19
+ side: DoubleSide,
20
+ map: threeLoader.getTexture(skyMapPNG),
21
+ });
22
+ }
package/Sky/index.d.ts CHANGED
@@ -1 +1 @@
1
- export { default } from "./Sky";
1
+ export { default } from "./Sky";
package/Sky/index.js CHANGED
@@ -1 +1 @@
1
- export { default } from "./Sky";
1
+ export { default } from "./Sky";
package/Sky/index.ts ADDED
@@ -0,0 +1 @@
1
+ export { default } from "./Sky";
package/SpotLight.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { SpotLight as THREESpotLight } from "three";
2
- /** 聚光灯(dev 模式显示光锥线框 + 灯体圆柱) */
3
- export default class SpotLight extends THREESpotLight {
4
- constructor(color?: string, intensity?: number, distance?: number, angle?: number, penumbra?: number);
5
- private _devGroup;
6
- }
1
+ import { SpotLight as THREESpotLight, Group, Object3DEventMap } from "three";
2
+ /** 聚光灯(dev 模式显示光锥线框 + 灯体圆柱) */
3
+ export default class SpotLight extends THREESpotLight {
4
+ constructor(color?: string, intensity?: number, distance?: number, angle?: number, penumbra?: number);
5
+ _devGroup: Group<Object3DEventMap> | false;
6
+ }
package/SpotLight.js CHANGED
@@ -1,72 +1,72 @@
1
- /*
2
- * @Author: xiaosihan
3
- * @Date: 2024-06-08 14:00:00
4
- * @Last Modified by: xiaosihan
5
- * @Last Modified time: 2024-06-08 14:00:00
6
- */
7
- import { SpotLight as THREESpotLight, Group, BufferGeometry, BufferAttribute, LineBasicMaterial, LineSegments, CylinderGeometry, MeshBasicMaterial, Mesh, } from "three";
8
- import threeUtils from "./threeUtils";
9
- import SpriteText from "./SpriteText";
10
- /** 聚光灯(dev 模式显示光锥线框 + 灯体圆柱) */
11
- export default class SpotLight extends THREESpotLight {
12
- constructor(color = "#fff", intensity = 1, distance = 10, angle = Math.PI / 6, penumbra = 0) {
13
- super(color, intensity, distance, angle, penumbra);
14
- }
15
- /* ============ dev 模式可视化 ============ */
16
- _devGroup = threeUtils.isDev && (() => {
17
- const group = new Group();
18
- // ——— 灯体圆柱 ———
19
- const body = new Mesh(new CylinderGeometry(0.15, 0.2, 0.6, 12), new MeshBasicMaterial({ color: this.color, depthTest: false, wireframe: true }));
20
- group.add(body);
21
- // ——— 光锥线框 ———
22
- const coneAngle = this.angle;
23
- const coneDist = Math.min(this.distance || 10, 10);
24
- const topR = 0.01;
25
- const bottomR = Math.tan(coneAngle) * coneDist;
26
- const coneVerts = [];
27
- const rings = 8;
28
- const segs = 24;
29
- for (let r = 0; r <= rings; r++) {
30
- const t = r / rings;
31
- const z = -0.3 - t * coneDist;
32
- const radius = topR + (bottomR - topR) * t;
33
- for (let i = 0; i < segs; i++) {
34
- const a0 = (i / segs) * Math.PI * 2;
35
- const a1 = ((i + 1) / segs) * Math.PI * 2;
36
- const x0 = Math.cos(a0) * radius, y0 = Math.sin(a0) * radius;
37
- const x1 = Math.cos(a1) * radius, y1 = Math.sin(a1) * radius;
38
- coneVerts.push(x0, y0, z, x1, y1, z);
39
- if (r < rings) {
40
- const z2 = -0.3 - ((r + 1) / rings) * coneDist;
41
- const r2 = topR + (bottomR - topR) * ((r + 1) / rings);
42
- const x2 = Math.cos(a0) * r2, y2 = Math.sin(a0) * r2;
43
- coneVerts.push(x0, y0, z, x2, y2, z2);
44
- }
45
- }
46
- }
47
- const coneGeo = new BufferGeometry();
48
- coneGeo.setAttribute("position", new BufferAttribute(new Float32Array(coneVerts), 3));
49
- const coneLine = new LineSegments(coneGeo, new LineBasicMaterial({
50
- color: this.color, depthTest: false,
51
- }));
52
- group.add(coneLine);
53
- // ——— 标签 ———
54
- const label = new SpriteText("聚光灯\n\n");
55
- label.renderOrder = Infinity;
56
- label.padding = 4;
57
- label.strokeColor = "#333";
58
- label.strokeWidth = 2;
59
- label.position.set(0, -1, 0);
60
- label.visible = false;
61
- label.material.color = this.color;
62
- label.material.sizeAttenuation = false;
63
- label.scale.multiplyScalar(0.003);
64
- group.add(label);
65
- // ——— 交互 ———
66
- group.userData = { cursor: "pointer" };
67
- group.addEventListener("mouseenter", () => { label.visible = true; });
68
- group.addEventListener("mouseleave", () => { label.visible = false; });
69
- this.add(group);
70
- return group;
71
- })();
72
- }
1
+ /*
2
+ * @Author: xiaosihan
3
+ * @Date: 2024-06-08 14:00:00
4
+ * @Last Modified by: xiaosihan
5
+ * @Last Modified time: 2024-06-08 14:00:00
6
+ */
7
+ import { SpotLight as THREESpotLight, Group, BufferGeometry, BufferAttribute, LineBasicMaterial, LineSegments, CylinderGeometry, MeshBasicMaterial, Mesh } from "three";
8
+ import threeUtils from "./threeUtils";
9
+ import SpriteText from "./SpriteText";
10
+ /** 聚光灯(dev 模式显示光锥线框 + 灯体圆柱) */
11
+ export default class SpotLight extends THREESpotLight {
12
+ constructor(color = "#fff", intensity = 1, distance = 10, angle = Math.PI / 6, penumbra = 0) {
13
+ super(color, intensity, distance, angle, penumbra);
14
+ }
15
+ /* ============ dev 模式可视化 ============ */
16
+ _devGroup = threeUtils.isDev && (() => {
17
+ const group = new Group();
18
+ // ——— 灯体圆柱 ———
19
+ const body = new Mesh(new CylinderGeometry(0.15, 0.2, 0.6, 12), new MeshBasicMaterial({ color: this.color, depthTest: false, wireframe: true }));
20
+ group.add(body);
21
+ // ——— 光锥线框 ———
22
+ const coneAngle = this.angle;
23
+ const coneDist = Math.min(this.distance || 10, 10);
24
+ const topR = 0.01;
25
+ const bottomR = Math.tan(coneAngle) * coneDist;
26
+ const coneVerts = [];
27
+ const rings = 8;
28
+ const segs = 24;
29
+ for (let r = 0; r <= rings; r++) {
30
+ const t = r / rings;
31
+ const z = -0.3 - t * coneDist;
32
+ const radius = topR + (bottomR - topR) * t;
33
+ for (let i = 0; i < segs; i++) {
34
+ const a0 = (i / segs) * Math.PI * 2;
35
+ const a1 = ((i + 1) / segs) * Math.PI * 2;
36
+ const x0 = Math.cos(a0) * radius, y0 = Math.sin(a0) * radius;
37
+ const x1 = Math.cos(a1) * radius, y1 = Math.sin(a1) * radius;
38
+ coneVerts.push(x0, y0, z, x1, y1, z);
39
+ if (r < rings) {
40
+ const z2 = -0.3 - ((r + 1) / rings) * coneDist;
41
+ const r2 = topR + (bottomR - topR) * ((r + 1) / rings);
42
+ const x2 = Math.cos(a0) * r2, y2 = Math.sin(a0) * r2;
43
+ coneVerts.push(x0, y0, z, x2, y2, z2);
44
+ }
45
+ }
46
+ }
47
+ const coneGeo = new BufferGeometry();
48
+ coneGeo.setAttribute("position", new BufferAttribute(new Float32Array(coneVerts), 3));
49
+ const coneLine = new LineSegments(coneGeo, new LineBasicMaterial({
50
+ color: this.color, depthTest: false,
51
+ }));
52
+ group.add(coneLine);
53
+ // ——— 标签 ———
54
+ const label = new SpriteText("聚光灯\n\n");
55
+ label.renderOrder = Infinity;
56
+ label.padding = 4;
57
+ label.strokeColor = "#333";
58
+ label.strokeWidth = 2;
59
+ label.position.set(0, -1, 0);
60
+ label.visible = false;
61
+ label.material.color = this.color;
62
+ label.material.sizeAttenuation = false;
63
+ label.scale.multiplyScalar(0.003);
64
+ group.add(label);
65
+ // ——— 交互 ———
66
+ group.userData = { cursor: "pointer" };
67
+ group.addEventListener("mouseenter", () => { label.visible = true; });
68
+ group.addEventListener("mouseleave", () => { label.visible = false; });
69
+ this.add(group);
70
+ return group;
71
+ })();
72
+ }
package/SpotLight.ts ADDED
@@ -0,0 +1,74 @@
1
+ /*
2
+ * @Author: xiaosihan
3
+ * @Date: 2024-06-08 14:00:00
4
+ * @Last Modified by: xiaosihan
5
+ * @Last Modified time: 2024-06-08 14:00:00
6
+ */
7
+ import { SpotLight as THREESpotLight, Group, BufferGeometry, BufferAttribute, LineBasicMaterial, LineSegments, CylinderGeometry, MeshBasicMaterial, Mesh, Object3DEventMap } from "three";
8
+ import threeUtils from "./threeUtils";
9
+ import SpriteText from "./SpriteText";
10
+
11
+ /** 聚光灯(dev 模式显示光锥线框 + 灯体圆柱) */
12
+ export default class SpotLight extends THREESpotLight {
13
+ constructor(color: string = "#fff", intensity: number = 1, distance: number = 10, angle: number = Math.PI / 6, penumbra: number = 0) {
14
+ super(color, intensity, distance, angle, penumbra);
15
+ }
16
+
17
+ /* ============ dev 模式可视化 ============ */
18
+ _devGroup: Group<Object3DEventMap> | false = threeUtils.isDev && (() => {
19
+ const group = new Group();
20
+ // ——— 灯体圆柱 ———
21
+ const body = new Mesh(new CylinderGeometry(0.15, 0.2, 0.6, 12), new MeshBasicMaterial({ color: this.color, depthTest: false, wireframe: true }));
22
+ group.add(body);
23
+ // ——— 光锥线框 ———
24
+ const coneAngle = this.angle;
25
+ const coneDist = Math.min(this.distance || 10, 10);
26
+ const topR = 0.01;
27
+ const bottomR = Math.tan(coneAngle) * coneDist;
28
+ const coneVerts: number[] = [];
29
+ const rings = 8;
30
+ const segs = 24;
31
+ for (let r = 0; r <= rings; r++) {
32
+ const t = r / rings;
33
+ const z = -0.3 - t * coneDist;
34
+ const radius = topR + (bottomR - topR) * t;
35
+ for (let i = 0; i < segs; i++) {
36
+ const a0 = (i / segs) * Math.PI * 2;
37
+ const a1 = ((i + 1) / segs) * Math.PI * 2;
38
+ const x0 = Math.cos(a0) * radius, y0 = Math.sin(a0) * radius;
39
+ const x1 = Math.cos(a1) * radius, y1 = Math.sin(a1) * radius;
40
+ coneVerts.push(x0, y0, z, x1, y1, z);
41
+ if (r < rings) {
42
+ const z2 = -0.3 - ((r + 1) / rings) * coneDist;
43
+ const r2 = topR + (bottomR - topR) * ((r + 1) / rings);
44
+ const x2 = Math.cos(a0) * r2, y2 = Math.sin(a0) * r2;
45
+ coneVerts.push(x0, y0, z, x2, y2, z2);
46
+ }
47
+ }
48
+ }
49
+ const coneGeo = new BufferGeometry();
50
+ coneGeo.setAttribute("position", new BufferAttribute(new Float32Array(coneVerts), 3));
51
+ const coneLine = new LineSegments(coneGeo, new LineBasicMaterial({
52
+ color: this.color, depthTest: false,
53
+ }));
54
+ group.add(coneLine);
55
+ // ——— 标签 ———
56
+ const label = new SpriteText("聚光灯\n\n");
57
+ label.renderOrder = Infinity;
58
+ label.padding = 4;
59
+ label.strokeColor = "#333";
60
+ label.strokeWidth = 2;
61
+ label.position.set(0, -1, 0);
62
+ label.visible = false;
63
+ label.material.color = this.color;
64
+ label.material.sizeAttenuation = false;
65
+ label.scale.multiplyScalar(0.003);
66
+ group.add(label);
67
+ // ——— 交互 ———
68
+ group.userData = { cursor: "pointer" };
69
+ group.addEventListener("mouseenter", () => { label.visible = true; });
70
+ group.addEventListener("mouseleave", () => { label.visible = false; });
71
+ this.add(group);
72
+ return group;
73
+ })();
74
+ }
@@ -1,30 +1,33 @@
1
- import { Sprite, Raycaster, Intersection } from "three";
2
- export type SpritModal1Config = {
3
- size?: number;
4
- title?: string;
5
- titleColor?: string;
6
- texts?: Array<{
7
- text?: string;
8
- color?: string;
9
- size?: number;
10
- }>;
11
- };
12
- export default class SpritModal1 extends Sprite {
13
- constructor(config?: SpritModal1Config);
14
- static img: HTMLImageElement;
15
- canvas: HTMLCanvasElement;
16
- context: CanvasRenderingContext2D;
17
- texture: import("three").Texture;
18
- _config: {
19
- size: number;
20
- title: string;
21
- titleColor: string;
22
- texts: Array<{
23
- text: string;
24
- color: string;
25
- size: number;
26
- }>;
27
- };
28
- updata(config: SpritModal1Config): Promise<void>;
29
- raycast(raycaster: Raycaster, intersects: Intersection[]): void;
30
- }
1
+ import { Sprite, Texture, Raycaster, Intersection } from "three";
2
+ export type SpritModal1Config = {
3
+ size?: number;
4
+ title?: string;
5
+ titleColor?: string;
6
+ texts?: Array<{
7
+ text?: string;
8
+ color?: string;
9
+ size?: number;
10
+ }>;
11
+ };
12
+ type TextItem = {
13
+ text: string;
14
+ color: string;
15
+ size: number;
16
+ };
17
+ type ConfigType = {
18
+ size: number;
19
+ title: string;
20
+ titleColor: string;
21
+ texts: TextItem[];
22
+ };
23
+ export default class SpritModal1 extends Sprite {
24
+ constructor(config?: SpritModal1Config);
25
+ static img: HTMLImageElement;
26
+ canvas: HTMLCanvasElement;
27
+ context: CanvasRenderingContext2D | null;
28
+ texture: Texture;
29
+ _config: ConfigType;
30
+ updata(config: SpritModal1Config): Promise<void>;
31
+ raycast(raycaster: Raycaster, intersects: Intersection[]): void;
32
+ }
33
+ export {};