three-stdlib 2.35.3 → 2.35.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (514) hide show
  1. package/_polyfill/CapsuleGeometry.cjs +20 -17
  2. package/_polyfill/CapsuleGeometry.cjs.map +1 -1
  3. package/_polyfill/CapsuleGeometry.js +20 -17
  4. package/_polyfill/CapsuleGeometry.js.map +1 -1
  5. package/_polyfill/constants.cjs +1 -1
  6. package/_polyfill/constants.cjs.map +1 -1
  7. package/_polyfill/constants.js +1 -1
  8. package/_polyfill/constants.js.map +1 -1
  9. package/animation/AnimationClipCreator.cjs +13 -13
  10. package/animation/AnimationClipCreator.cjs.map +1 -1
  11. package/animation/AnimationClipCreator.js +13 -13
  12. package/animation/AnimationClipCreator.js.map +1 -1
  13. package/animation/CCDIKSolver.cjs +11 -11
  14. package/animation/CCDIKSolver.cjs.map +1 -1
  15. package/animation/CCDIKSolver.js +12 -12
  16. package/animation/CCDIKSolver.js.map +1 -1
  17. package/animation/MMDAnimationHelper.cjs +1 -1
  18. package/animation/MMDAnimationHelper.cjs.map +1 -1
  19. package/animation/MMDAnimationHelper.js +1 -1
  20. package/animation/MMDAnimationHelper.js.map +1 -1
  21. package/animation/MMDPhysics.cjs +4 -4
  22. package/animation/MMDPhysics.cjs.map +1 -1
  23. package/animation/MMDPhysics.js +4 -4
  24. package/animation/MMDPhysics.js.map +1 -1
  25. package/controls/ArcballControls.cjs +2 -2
  26. package/controls/ArcballControls.cjs.map +1 -1
  27. package/controls/ArcballControls.js +3 -3
  28. package/controls/ArcballControls.js.map +1 -1
  29. package/controls/FirstPersonControls.cjs +1 -1
  30. package/controls/FirstPersonControls.cjs.map +1 -1
  31. package/controls/FirstPersonControls.js +1 -1
  32. package/controls/FirstPersonControls.js.map +1 -1
  33. package/controls/OrbitControls.cjs +2 -2
  34. package/controls/OrbitControls.cjs.map +1 -1
  35. package/controls/OrbitControls.js +3 -3
  36. package/controls/OrbitControls.js.map +1 -1
  37. package/controls/PointerLockControls.cjs +2 -2
  38. package/controls/PointerLockControls.cjs.map +1 -1
  39. package/controls/PointerLockControls.js +3 -3
  40. package/controls/PointerLockControls.js.map +1 -1
  41. package/csm/CSM.cjs +4 -4
  42. package/csm/CSM.cjs.map +1 -1
  43. package/csm/CSM.js +5 -5
  44. package/csm/CSM.js.map +1 -1
  45. package/csm/CSMFrustum.cjs +1 -1
  46. package/csm/CSMFrustum.cjs.map +1 -1
  47. package/csm/CSMFrustum.js +2 -2
  48. package/csm/CSMFrustum.js.map +1 -1
  49. package/deprecated/Geometry.cjs +722 -715
  50. package/deprecated/Geometry.cjs.map +1 -1
  51. package/deprecated/Geometry.js +723 -716
  52. package/deprecated/Geometry.js.map +1 -1
  53. package/effects/AnaglyphEffect.cjs +2 -1
  54. package/effects/AnaglyphEffect.cjs.map +1 -1
  55. package/effects/AnaglyphEffect.js +3 -2
  56. package/effects/AnaglyphEffect.js.map +1 -1
  57. package/effects/OutlineEffect.cjs +2 -1
  58. package/effects/OutlineEffect.cjs.map +1 -1
  59. package/effects/OutlineEffect.js +3 -2
  60. package/effects/OutlineEffect.js.map +1 -1
  61. package/effects/ParallaxBarrierEffect.cjs +2 -1
  62. package/effects/ParallaxBarrierEffect.cjs.map +1 -1
  63. package/effects/ParallaxBarrierEffect.js +3 -2
  64. package/effects/ParallaxBarrierEffect.js.map +1 -1
  65. package/exporters/DRACOExporter.cjs +133 -122
  66. package/exporters/DRACOExporter.cjs.map +1 -1
  67. package/exporters/DRACOExporter.d.ts +23 -21
  68. package/exporters/DRACOExporter.js +133 -122
  69. package/exporters/DRACOExporter.js.map +1 -1
  70. package/exporters/GLTFExporter.cjs +170 -167
  71. package/exporters/GLTFExporter.cjs.map +1 -1
  72. package/exporters/GLTFExporter.js +170 -167
  73. package/exporters/GLTFExporter.js.map +1 -1
  74. package/geometries/LightningStrike.cjs +524 -515
  75. package/geometries/LightningStrike.cjs.map +1 -1
  76. package/geometries/LightningStrike.js +524 -515
  77. package/geometries/LightningStrike.js.map +1 -1
  78. package/geometries/RoundedBoxGeometry.cjs +1 -1
  79. package/geometries/RoundedBoxGeometry.cjs.map +1 -1
  80. package/geometries/RoundedBoxGeometry.js +2 -2
  81. package/geometries/RoundedBoxGeometry.js.map +1 -1
  82. package/helpers/RaycasterHelper.cjs +2 -2
  83. package/helpers/RaycasterHelper.cjs.map +1 -1
  84. package/helpers/RaycasterHelper.js +3 -3
  85. package/helpers/RaycasterHelper.js.map +1 -1
  86. package/helpers/VertexNormalsHelper.cjs +3 -3
  87. package/helpers/VertexNormalsHelper.cjs.map +1 -1
  88. package/helpers/VertexNormalsHelper.js +4 -4
  89. package/helpers/VertexNormalsHelper.js.map +1 -1
  90. package/helpers/VertexTangentsHelper.cjs +2 -2
  91. package/helpers/VertexTangentsHelper.cjs.map +1 -1
  92. package/helpers/VertexTangentsHelper.js +3 -3
  93. package/helpers/VertexTangentsHelper.js.map +1 -1
  94. package/interactive/InteractiveGroup.cjs +1 -1
  95. package/interactive/InteractiveGroup.cjs.map +1 -1
  96. package/interactive/InteractiveGroup.js +2 -2
  97. package/interactive/InteractiveGroup.js.map +1 -1
  98. package/interactive/SelectionBox.cjs +15 -15
  99. package/interactive/SelectionBox.cjs.map +1 -1
  100. package/interactive/SelectionBox.js +16 -16
  101. package/interactive/SelectionBox.js.map +1 -1
  102. package/libs/chevrotain.cjs +1 -1
  103. package/libs/chevrotain.cjs.map +1 -1
  104. package/libs/chevrotain.js +1 -1
  105. package/libs/chevrotain.js.map +1 -1
  106. package/libs/lottie.cjs +1 -1
  107. package/libs/lottie.cjs.map +1 -1
  108. package/libs/lottie.js +1 -1
  109. package/libs/lottie.js.map +1 -1
  110. package/libs/opentype.cjs +1 -1
  111. package/libs/opentype.cjs.map +1 -1
  112. package/libs/opentype.js +1 -1
  113. package/libs/opentype.js.map +1 -1
  114. package/lights/LightProbeGenerator.cjs +5 -5
  115. package/lights/LightProbeGenerator.cjs.map +1 -1
  116. package/lights/LightProbeGenerator.js +5 -5
  117. package/lights/LightProbeGenerator.js.map +1 -1
  118. package/lights/RectAreaLightUniformsLib.cjs +3 -3
  119. package/lights/RectAreaLightUniformsLib.cjs.map +1 -1
  120. package/lights/RectAreaLightUniformsLib.js +3 -3
  121. package/lights/RectAreaLightUniformsLib.js.map +1 -1
  122. package/lines/LineMaterial.cjs +2 -1
  123. package/lines/LineMaterial.cjs.map +1 -1
  124. package/lines/LineMaterial.js +3 -2
  125. package/lines/LineMaterial.js.map +1 -1
  126. package/lines/LineSegments2.cjs +13 -13
  127. package/lines/LineSegments2.cjs.map +1 -1
  128. package/lines/LineSegments2.js +14 -14
  129. package/lines/LineSegments2.js.map +1 -1
  130. package/lines/LineSegmentsGeometry.cjs +2 -2
  131. package/lines/LineSegmentsGeometry.cjs.map +1 -1
  132. package/lines/LineSegmentsGeometry.js +3 -3
  133. package/lines/LineSegmentsGeometry.js.map +1 -1
  134. package/lines/Wireframe.cjs +3 -3
  135. package/lines/Wireframe.cjs.map +1 -1
  136. package/lines/Wireframe.js +4 -4
  137. package/lines/Wireframe.js.map +1 -1
  138. package/loaders/BasisTextureLoader.cjs +441 -435
  139. package/loaders/BasisTextureLoader.cjs.map +1 -1
  140. package/loaders/BasisTextureLoader.js +441 -435
  141. package/loaders/BasisTextureLoader.js.map +1 -1
  142. package/loaders/EXRLoader.cjs +2 -1
  143. package/loaders/EXRLoader.cjs.map +1 -1
  144. package/loaders/EXRLoader.js +3 -2
  145. package/loaders/EXRLoader.js.map +1 -1
  146. package/loaders/FBXLoader.cjs +2 -2
  147. package/loaders/FBXLoader.cjs.map +1 -1
  148. package/loaders/FBXLoader.js +2 -2
  149. package/loaders/FBXLoader.js.map +1 -1
  150. package/loaders/FontLoader.cjs +2 -2
  151. package/loaders/FontLoader.cjs.map +1 -1
  152. package/loaders/FontLoader.d.ts +2 -2
  153. package/loaders/FontLoader.js +2 -2
  154. package/loaders/FontLoader.js.map +1 -1
  155. package/loaders/GLTFLoader.cjs +2 -2
  156. package/loaders/GLTFLoader.cjs.map +1 -1
  157. package/loaders/GLTFLoader.js +2 -2
  158. package/loaders/GLTFLoader.js.map +1 -1
  159. package/loaders/KTX2Loader.cjs +377 -374
  160. package/loaders/KTX2Loader.cjs.map +1 -1
  161. package/loaders/KTX2Loader.js +377 -374
  162. package/loaders/KTX2Loader.js.map +1 -1
  163. package/loaders/LDrawLoader.cjs +5 -4
  164. package/loaders/LDrawLoader.cjs.map +1 -1
  165. package/loaders/LDrawLoader.js +6 -5
  166. package/loaders/LDrawLoader.js.map +1 -1
  167. package/loaders/OBJLoader.cjs +5 -5
  168. package/loaders/OBJLoader.cjs.map +1 -1
  169. package/loaders/OBJLoader.js +6 -6
  170. package/loaders/OBJLoader.js.map +1 -1
  171. package/loaders/PRWMLoader.cjs +46 -43
  172. package/loaders/PRWMLoader.cjs.map +1 -1
  173. package/loaders/PRWMLoader.js +46 -43
  174. package/loaders/PRWMLoader.js.map +1 -1
  175. package/loaders/SVGLoader.cjs +1694 -1688
  176. package/loaders/SVGLoader.cjs.map +1 -1
  177. package/loaders/SVGLoader.js +1694 -1688
  178. package/loaders/SVGLoader.js.map +1 -1
  179. package/loaders/XLoader.cjs +1 -1
  180. package/loaders/XLoader.cjs.map +1 -1
  181. package/loaders/XLoader.js +1 -1
  182. package/loaders/XLoader.js.map +1 -1
  183. package/math/Capsule.cjs +3 -3
  184. package/math/Capsule.cjs.map +1 -1
  185. package/math/Capsule.js +3 -3
  186. package/math/Capsule.js.map +1 -1
  187. package/math/ColorConverter.cjs +9 -9
  188. package/math/ColorConverter.cjs.map +1 -1
  189. package/math/ColorConverter.js +9 -9
  190. package/math/ColorConverter.js.map +1 -1
  191. package/math/ConvexHull.cjs +53 -50
  192. package/math/ConvexHull.cjs.map +1 -1
  193. package/math/ConvexHull.js +53 -50
  194. package/math/ConvexHull.js.map +1 -1
  195. package/math/ImprovedNoise.cjs +1 -1
  196. package/math/ImprovedNoise.cjs.map +1 -1
  197. package/math/ImprovedNoise.js +1 -1
  198. package/math/ImprovedNoise.js.map +1 -1
  199. package/math/MeshSurfaceSampler.cjs +2 -2
  200. package/math/MeshSurfaceSampler.cjs.map +1 -1
  201. package/math/MeshSurfaceSampler.js +2 -2
  202. package/math/MeshSurfaceSampler.js.map +1 -1
  203. package/math/OBB.cjs +14 -14
  204. package/math/OBB.cjs.map +1 -1
  205. package/math/OBB.js +15 -15
  206. package/math/OBB.js.map +1 -1
  207. package/math/Octree.cjs +7 -7
  208. package/math/Octree.cjs.map +1 -1
  209. package/math/Octree.js +8 -8
  210. package/math/Octree.js.map +1 -1
  211. package/misc/ConvexObjectBreaker.cjs +271 -268
  212. package/misc/ConvexObjectBreaker.cjs.map +1 -1
  213. package/misc/ConvexObjectBreaker.js +272 -269
  214. package/misc/ConvexObjectBreaker.js.map +1 -1
  215. package/misc/Gyroscope.cjs +6 -6
  216. package/misc/Gyroscope.cjs.map +1 -1
  217. package/misc/Gyroscope.js +7 -7
  218. package/misc/Gyroscope.js.map +1 -1
  219. package/modifiers/CurveModifier.cjs +1 -1
  220. package/modifiers/CurveModifier.cjs.map +1 -1
  221. package/modifiers/CurveModifier.js +2 -2
  222. package/modifiers/CurveModifier.js.map +1 -1
  223. package/modifiers/SimplifyModifier.cjs +2 -2
  224. package/modifiers/SimplifyModifier.cjs.map +1 -1
  225. package/modifiers/SimplifyModifier.js +2 -2
  226. package/modifiers/SimplifyModifier.js.map +1 -1
  227. package/objects/BatchedMesh.cjs +2 -2
  228. package/objects/BatchedMesh.cjs.map +1 -1
  229. package/objects/BatchedMesh.js +3 -3
  230. package/objects/BatchedMesh.js.map +1 -1
  231. package/objects/GroundProjectedEnv.cjs +2 -1
  232. package/objects/GroundProjectedEnv.cjs.map +1 -1
  233. package/objects/GroundProjectedEnv.js +3 -2
  234. package/objects/GroundProjectedEnv.js.map +1 -1
  235. package/objects/Lensflare.cjs +209 -206
  236. package/objects/Lensflare.cjs.map +1 -1
  237. package/objects/Lensflare.js +209 -206
  238. package/objects/Lensflare.js.map +1 -1
  239. package/objects/Reflector.cjs +154 -146
  240. package/objects/Reflector.cjs.map +1 -1
  241. package/objects/Reflector.js +154 -146
  242. package/objects/Reflector.js.map +1 -1
  243. package/objects/ReflectorForSSRPass.cjs +183 -180
  244. package/objects/ReflectorForSSRPass.cjs.map +1 -1
  245. package/objects/ReflectorForSSRPass.js +183 -180
  246. package/objects/ReflectorForSSRPass.js.map +1 -1
  247. package/objects/Refractor.cjs +164 -161
  248. package/objects/Refractor.cjs.map +1 -1
  249. package/objects/Refractor.js +164 -161
  250. package/objects/Refractor.js.map +1 -1
  251. package/objects/ShadowMesh.cjs +1 -1
  252. package/objects/ShadowMesh.cjs.map +1 -1
  253. package/objects/ShadowMesh.js +2 -2
  254. package/objects/ShadowMesh.js.map +1 -1
  255. package/objects/Sky.cjs +35 -32
  256. package/objects/Sky.cjs.map +1 -1
  257. package/objects/Sky.d.ts +100 -6
  258. package/objects/Sky.js +35 -32
  259. package/objects/Sky.js.map +1 -1
  260. package/objects/Water.cjs +2 -1
  261. package/objects/Water.cjs.map +1 -1
  262. package/objects/Water.js +3 -2
  263. package/objects/Water.js.map +1 -1
  264. package/objects/Water2.cjs +143 -140
  265. package/objects/Water2.cjs.map +1 -1
  266. package/objects/Water2.js +143 -140
  267. package/objects/Water2.js.map +1 -1
  268. package/package.json +1 -1
  269. package/postprocessing/SAOPass.cjs +267 -264
  270. package/postprocessing/SAOPass.cjs.map +1 -1
  271. package/postprocessing/SAOPass.js +267 -264
  272. package/postprocessing/SAOPass.js.map +1 -1
  273. package/postprocessing/SSAOPass.cjs +253 -250
  274. package/postprocessing/SSAOPass.cjs.map +1 -1
  275. package/postprocessing/SSAOPass.js +253 -250
  276. package/postprocessing/SSAOPass.js.map +1 -1
  277. package/postprocessing/SSRPass.cjs +379 -376
  278. package/postprocessing/SSRPass.cjs.map +1 -1
  279. package/postprocessing/SSRPass.js +379 -376
  280. package/postprocessing/SSRPass.js.map +1 -1
  281. package/postprocessing/UnrealBloomPass.cjs +205 -202
  282. package/postprocessing/UnrealBloomPass.cjs.map +1 -1
  283. package/postprocessing/UnrealBloomPass.js +205 -202
  284. package/postprocessing/UnrealBloomPass.js.map +1 -1
  285. package/renderers/CSS2DRenderer.cjs +5 -5
  286. package/renderers/CSS2DRenderer.cjs.map +1 -1
  287. package/renderers/CSS2DRenderer.js +5 -5
  288. package/renderers/CSS2DRenderer.js.map +1 -1
  289. package/renderers/CSS3DRenderer.cjs +5 -5
  290. package/renderers/CSS3DRenderer.cjs.map +1 -1
  291. package/renderers/CSS3DRenderer.js +6 -6
  292. package/renderers/CSS3DRenderer.js.map +1 -1
  293. package/shaders/ACESFilmicToneMappingShader.cjs +71 -46
  294. package/shaders/ACESFilmicToneMappingShader.cjs.map +1 -1
  295. package/shaders/ACESFilmicToneMappingShader.js +71 -46
  296. package/shaders/ACESFilmicToneMappingShader.js.map +1 -1
  297. package/shaders/AfterimageShader.cjs +41 -22
  298. package/shaders/AfterimageShader.cjs.map +1 -1
  299. package/shaders/AfterimageShader.js +41 -22
  300. package/shaders/AfterimageShader.js.map +1 -1
  301. package/shaders/BasicShader.cjs +20 -6
  302. package/shaders/BasicShader.cjs.map +1 -1
  303. package/shaders/BasicShader.js +20 -6
  304. package/shaders/BasicShader.js.map +1 -1
  305. package/shaders/BleachBypassShader.cjs +46 -26
  306. package/shaders/BleachBypassShader.cjs.map +1 -1
  307. package/shaders/BleachBypassShader.js +46 -26
  308. package/shaders/BleachBypassShader.js.map +1 -1
  309. package/shaders/BlendShader.cjs +33 -19
  310. package/shaders/BlendShader.cjs.map +1 -1
  311. package/shaders/BlendShader.js +33 -19
  312. package/shaders/BlendShader.js.map +1 -1
  313. package/shaders/BokehShader.cjs +117 -90
  314. package/shaders/BokehShader.cjs.map +1 -1
  315. package/shaders/BokehShader.js +117 -90
  316. package/shaders/BokehShader.js.map +1 -1
  317. package/shaders/BokehShader2.cjs +333 -232
  318. package/shaders/BokehShader2.cjs.map +1 -1
  319. package/shaders/BokehShader2.js +333 -232
  320. package/shaders/BokehShader2.js.map +1 -1
  321. package/shaders/BrightnessContrastShader.cjs +38 -22
  322. package/shaders/BrightnessContrastShader.cjs.map +1 -1
  323. package/shaders/BrightnessContrastShader.js +38 -22
  324. package/shaders/BrightnessContrastShader.js.map +1 -1
  325. package/shaders/ColorCorrectionShader.cjs +35 -21
  326. package/shaders/ColorCorrectionShader.cjs.map +1 -1
  327. package/shaders/ColorCorrectionShader.js +35 -21
  328. package/shaders/ColorCorrectionShader.js.map +1 -1
  329. package/shaders/ColorifyShader.cjs +34 -19
  330. package/shaders/ColorifyShader.cjs.map +1 -1
  331. package/shaders/ColorifyShader.js +34 -19
  332. package/shaders/ColorifyShader.js.map +1 -1
  333. package/shaders/ConvolutionShader.cjs +43 -24
  334. package/shaders/ConvolutionShader.cjs.map +1 -1
  335. package/shaders/ConvolutionShader.js +43 -24
  336. package/shaders/ConvolutionShader.js.map +1 -1
  337. package/shaders/CopyShader.cjs +30 -16
  338. package/shaders/CopyShader.cjs.map +1 -1
  339. package/shaders/CopyShader.js +30 -16
  340. package/shaders/CopyShader.js.map +1 -1
  341. package/shaders/DOFMipMapShader.cjs +38 -21
  342. package/shaders/DOFMipMapShader.cjs.map +1 -1
  343. package/shaders/DOFMipMapShader.js +38 -21
  344. package/shaders/DOFMipMapShader.js.map +1 -1
  345. package/shaders/DepthLimitedBlurShader.cjs +98 -69
  346. package/shaders/DepthLimitedBlurShader.cjs.map +1 -1
  347. package/shaders/DepthLimitedBlurShader.js +98 -69
  348. package/shaders/DepthLimitedBlurShader.js.map +1 -1
  349. package/shaders/DigitalGlitch.cjs +70 -59
  350. package/shaders/DigitalGlitch.cjs.map +1 -1
  351. package/shaders/DigitalGlitch.js +70 -59
  352. package/shaders/DigitalGlitch.js.map +1 -1
  353. package/shaders/DotScreenShader.cjs +49 -28
  354. package/shaders/DotScreenShader.cjs.map +1 -1
  355. package/shaders/DotScreenShader.js +49 -28
  356. package/shaders/DotScreenShader.js.map +1 -1
  357. package/shaders/FXAAShader.cjs +1098 -1089
  358. package/shaders/FXAAShader.cjs.map +1 -1
  359. package/shaders/FXAAShader.js +1098 -1089
  360. package/shaders/FXAAShader.js.map +1 -1
  361. package/shaders/FilmShader.cjs +57 -29
  362. package/shaders/FilmShader.cjs.map +1 -1
  363. package/shaders/FilmShader.js +57 -29
  364. package/shaders/FilmShader.js.map +1 -1
  365. package/shaders/FocusShader.cjs +70 -43
  366. package/shaders/FocusShader.cjs.map +1 -1
  367. package/shaders/FocusShader.js +70 -43
  368. package/shaders/FocusShader.js.map +1 -1
  369. package/shaders/FreiChenShader.cjs +74 -53
  370. package/shaders/FreiChenShader.cjs.map +1 -1
  371. package/shaders/FreiChenShader.js +74 -53
  372. package/shaders/FreiChenShader.js.map +1 -1
  373. package/shaders/FresnelShader.cjs +55 -35
  374. package/shaders/FresnelShader.cjs.map +1 -1
  375. package/shaders/FresnelShader.js +55 -35
  376. package/shaders/FresnelShader.js.map +1 -1
  377. package/shaders/GammaCorrectionShader.cjs +33 -19
  378. package/shaders/GammaCorrectionShader.cjs.map +1 -1
  379. package/shaders/GammaCorrectionShader.js +33 -19
  380. package/shaders/GammaCorrectionShader.js.map +1 -1
  381. package/shaders/GodRaysShader.cjs +193 -116
  382. package/shaders/GodRaysShader.cjs.map +1 -1
  383. package/shaders/GodRaysShader.js +193 -116
  384. package/shaders/GodRaysShader.js.map +1 -1
  385. package/shaders/HalftoneShader.cjs +270 -192
  386. package/shaders/HalftoneShader.cjs.map +1 -1
  387. package/shaders/HalftoneShader.js +270 -192
  388. package/shaders/HalftoneShader.js.map +1 -1
  389. package/shaders/HorizontalTiltShiftShader.cjs +43 -27
  390. package/shaders/HorizontalTiltShiftShader.cjs.map +1 -1
  391. package/shaders/HorizontalTiltShiftShader.js +43 -27
  392. package/shaders/HorizontalTiltShiftShader.js.map +1 -1
  393. package/shaders/HueSaturationShader.cjs +47 -31
  394. package/shaders/HueSaturationShader.cjs.map +1 -1
  395. package/shaders/HueSaturationShader.js +47 -31
  396. package/shaders/HueSaturationShader.js.map +1 -1
  397. package/shaders/KaleidoShader.cjs +37 -24
  398. package/shaders/KaleidoShader.cjs.map +1 -1
  399. package/shaders/KaleidoShader.js +37 -24
  400. package/shaders/KaleidoShader.js.map +1 -1
  401. package/shaders/LuminosityHighPassShader.cjs +43 -24
  402. package/shaders/LuminosityHighPassShader.cjs.map +1 -1
  403. package/shaders/LuminosityHighPassShader.js +43 -24
  404. package/shaders/LuminosityHighPassShader.js.map +1 -1
  405. package/shaders/LuminosityShader.cjs +34 -17
  406. package/shaders/LuminosityShader.cjs.map +1 -1
  407. package/shaders/LuminosityShader.js +34 -17
  408. package/shaders/LuminosityShader.js.map +1 -1
  409. package/shaders/MirrorShader.cjs +39 -26
  410. package/shaders/MirrorShader.cjs.map +1 -1
  411. package/shaders/MirrorShader.js +39 -26
  412. package/shaders/MirrorShader.js.map +1 -1
  413. package/shaders/NormalMapShader.cjs +36 -21
  414. package/shaders/NormalMapShader.cjs.map +1 -1
  415. package/shaders/NormalMapShader.js +36 -21
  416. package/shaders/NormalMapShader.js.map +1 -1
  417. package/shaders/ParallaxShader.cjs +147 -97
  418. package/shaders/ParallaxShader.cjs.map +1 -1
  419. package/shaders/ParallaxShader.js +147 -97
  420. package/shaders/ParallaxShader.js.map +1 -1
  421. package/shaders/PixelShader.cjs +31 -18
  422. package/shaders/PixelShader.cjs.map +1 -1
  423. package/shaders/PixelShader.js +31 -18
  424. package/shaders/PixelShader.js.map +1 -1
  425. package/shaders/RGBShiftShader.cjs +33 -20
  426. package/shaders/RGBShiftShader.cjs.map +1 -1
  427. package/shaders/RGBShiftShader.js +33 -20
  428. package/shaders/RGBShiftShader.js.map +1 -1
  429. package/shaders/SAOShader.cjs +154 -117
  430. package/shaders/SAOShader.cjs.map +1 -1
  431. package/shaders/SAOShader.js +154 -117
  432. package/shaders/SAOShader.js.map +1 -1
  433. package/shaders/SMAAShader.cjs +358 -270
  434. package/shaders/SMAAShader.cjs.map +1 -1
  435. package/shaders/SMAAShader.js +358 -270
  436. package/shaders/SMAAShader.js.map +1 -1
  437. package/shaders/SSAOShader.cjs +236 -142
  438. package/shaders/SSAOShader.cjs.map +1 -1
  439. package/shaders/SSAOShader.js +236 -142
  440. package/shaders/SSAOShader.js.map +1 -1
  441. package/shaders/SSRShader.cjs +4 -4
  442. package/shaders/SSRShader.cjs.map +1 -1
  443. package/shaders/SSRShader.js +4 -4
  444. package/shaders/SSRShader.js.map +1 -1
  445. package/shaders/SepiaShader.cjs +36 -20
  446. package/shaders/SepiaShader.cjs.map +1 -1
  447. package/shaders/SepiaShader.js +36 -20
  448. package/shaders/SepiaShader.js.map +1 -1
  449. package/shaders/SobelOperatorShader.cjs +64 -37
  450. package/shaders/SobelOperatorShader.cjs.map +1 -1
  451. package/shaders/SobelOperatorShader.js +64 -37
  452. package/shaders/SobelOperatorShader.js.map +1 -1
  453. package/shaders/TechnicolorShader.cjs +29 -16
  454. package/shaders/TechnicolorShader.cjs.map +1 -1
  455. package/shaders/TechnicolorShader.js +29 -16
  456. package/shaders/TechnicolorShader.js.map +1 -1
  457. package/shaders/ToneMapShader.cjs +55 -35
  458. package/shaders/ToneMapShader.cjs.map +1 -1
  459. package/shaders/ToneMapShader.js +55 -35
  460. package/shaders/ToneMapShader.js.map +1 -1
  461. package/shaders/ToonShader.cjs +275 -165
  462. package/shaders/ToonShader.cjs.map +1 -1
  463. package/shaders/ToonShader.js +275 -165
  464. package/shaders/ToonShader.js.map +1 -1
  465. package/shaders/TriangleBlurShader.cjs +50 -27
  466. package/shaders/TriangleBlurShader.cjs.map +1 -1
  467. package/shaders/TriangleBlurShader.js +50 -27
  468. package/shaders/TriangleBlurShader.js.map +1 -1
  469. package/shaders/UnpackDepthRGBAShader.cjs +32 -17
  470. package/shaders/UnpackDepthRGBAShader.cjs.map +1 -1
  471. package/shaders/UnpackDepthRGBAShader.js +32 -17
  472. package/shaders/UnpackDepthRGBAShader.js.map +1 -1
  473. package/shaders/VerticalTiltShiftShader.cjs +43 -27
  474. package/shaders/VerticalTiltShiftShader.cjs.map +1 -1
  475. package/shaders/VerticalTiltShiftShader.js +43 -27
  476. package/shaders/VerticalTiltShiftShader.js.map +1 -1
  477. package/shaders/VignetteShader.cjs +43 -27
  478. package/shaders/VignetteShader.cjs.map +1 -1
  479. package/shaders/VignetteShader.js +43 -27
  480. package/shaders/VignetteShader.js.map +1 -1
  481. package/shaders/VolumeShader.cjs +264 -213
  482. package/shaders/VolumeShader.cjs.map +1 -1
  483. package/shaders/VolumeShader.js +264 -213
  484. package/shaders/VolumeShader.js.map +1 -1
  485. package/shaders/WaterRefractionShader.cjs +63 -35
  486. package/shaders/WaterRefractionShader.cjs.map +1 -1
  487. package/shaders/WaterRefractionShader.js +63 -35
  488. package/shaders/WaterRefractionShader.js.map +1 -1
  489. package/utils/GeometryCompressionUtils.cjs +2 -1
  490. package/utils/GeometryCompressionUtils.cjs.map +1 -1
  491. package/utils/GeometryCompressionUtils.js +3 -2
  492. package/utils/GeometryCompressionUtils.js.map +1 -1
  493. package/utils/RoughnessMipmapper.cjs +3 -3
  494. package/utils/RoughnessMipmapper.cjs.map +1 -1
  495. package/utils/RoughnessMipmapper.js +4 -4
  496. package/utils/RoughnessMipmapper.js.map +1 -1
  497. package/webxr/ARButton.cjs +109 -106
  498. package/webxr/ARButton.cjs.map +1 -1
  499. package/webxr/ARButton.d.ts +4 -3
  500. package/webxr/ARButton.js +109 -106
  501. package/webxr/ARButton.js.map +1 -1
  502. package/webxr/OculusHandPointerModel.cjs +2 -2
  503. package/webxr/OculusHandPointerModel.cjs.map +1 -1
  504. package/webxr/OculusHandPointerModel.js +2 -2
  505. package/webxr/OculusHandPointerModel.js.map +1 -1
  506. package/webxr/VRButton.cjs +98 -95
  507. package/webxr/VRButton.cjs.map +1 -1
  508. package/webxr/VRButton.d.ts +6 -5
  509. package/webxr/VRButton.js +98 -95
  510. package/webxr/VRButton.js.map +1 -1
  511. package/webxr/XRHandPrimitiveModel.cjs +2 -2
  512. package/webxr/XRHandPrimitiveModel.cjs.map +1 -1
  513. package/webxr/XRHandPrimitiveModel.js +3 -3
  514. package/webxr/XRHandPrimitiveModel.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"LightningStrike.js","sources":["../../src/geometries/LightningStrike.js"],"sourcesContent":["import {\n BufferGeometry,\n DynamicDrawUsage,\n Float32BufferAttribute,\n MathUtils,\n Uint32BufferAttribute,\n Vector3,\n} from 'three'\nimport { SimplexNoise } from '../math/SimplexNoise'\n\n/**\n * @fileoverview LightningStrike object for creating lightning strikes and voltaic arcs.\n *\n *\n * Usage\n *\n * var myRay = new LightningStrike( paramsObject );\n * var myRayMesh = new THREE.Mesh( myRay, myMaterial );\n * scene.add( myRayMesh );\n * ...\n * myRay.update( currentTime );\n *\n * The \"currentTime\" can vary its rate, go forwards, backwards or even jump, but it cannot be negative.\n *\n * You should normally leave the ray position to (0, 0, 0). You should control it by changing the sourceOffset and destOffset parameters.\n *\n *\n * LightningStrike parameters\n *\n * The paramsObject can contain any of the following parameters.\n *\n * Legend:\n * 'LightningStrike' (also called 'ray'): An independent voltaic arc with its ramifications and defined with a set of parameters.\n * 'Subray': A ramification of the ray. It is not a LightningStrike object.\n * 'Segment': A linear segment piece of a subray.\n * 'Leaf segment': A ray segment which cannot be smaller.\n *\n *\n * The following parameters can be changed any time and if they vary smoothly, the ray form will also change smoothly:\n *\n * @param {Vector3} sourceOffset The point where the ray starts.\n *\n * @param {Vector3} destOffset The point where the ray ends.\n *\n * @param {double} timeScale The rate at wich the ray form changes in time. Default: 1\n *\n * @param {double} roughness From 0 to 1. The higher the value, the more wrinkled is the ray. Default: 0.9\n *\n * @param {double} straightness From 0 to 1. The higher the value, the more straight will be a subray path. Default: 0.7\n *\n * @param {Vector3} up0 Ray 'up' direction at the ray starting point. Must be normalized. It should be perpendicular to the ray forward direction but it doesn't matter much.\n *\n * @param {Vector3} up1 Like the up0 parameter but at the end of the ray. Must be normalized.\n *\n * @param {double} radius0 Radius of the main ray trunk at the start point. Default: 1\n *\n * @param {double} radius1 Radius of the main ray trunk at the end point. Default: 1\n *\n * @param {double} radius0Factor The radius0 of a subray is this factor times the radius0 of its parent subray. Default: 0.5\n *\n * @param {double} radius1Factor The radius1 of a subray is this factor times the radius1 of its parent subray. Default: 0.2\n *\n * @param {minRadius} Minimum value a subray radius0 or radius1 can get. Default: 0.1\n *\n *\n * The following parameters should not be changed after lightning creation. They can be changed but the ray will change its form abruptly:\n *\n * @param {boolean} isEternal If true the ray never extinguishes. Otherwise its life is controlled by the 'birthTime' and 'deathTime' parameters. Default: true if any of those two parameters is undefined.\n *\n * @param {double} birthTime The time at which the ray starts its life and begins propagating. Only if isEternal is false. Default: None.\n *\n * @param {double} deathTime The time at which the ray ends vanishing and its life. Only if isEternal is false. Default: None.\n *\n * @param {double} propagationTimeFactor From 0 to 1. Lifetime factor at which the ray ends propagating and enters the steady phase. For example, 0.1 means it is propagating 1/10 of its lifetime. Default: 0.1\n *\n * @param {double} vanishingTimeFactor From 0 to 1. Lifetime factor at which the ray ends the steady phase and begins vanishing. For example, 0.9 means it is vanishing 1/10 of its lifetime. Default: 0.9\n *\n * @param {double} subrayPeriod Subrays cycle periodically. This is their time period. Default: 4\n *\n * @param {double} subrayDutyCycle From 0 to 1. This is the fraction of time a subray is active. Default: 0.6\n *\n *\n * These parameters cannot change after lightning creation:\n *\n * @param {integer} maxIterations: Greater than 0. The number of ray's leaf segments is 2**maxIterations. Default: 9\n *\n * @param {boolean} isStatic Set to true only for rays which won't change over time and are not attached to moving objects (Rare case). It is used to set the vertex buffers non-dynamic. You can omit calling update() for these rays.\n *\n * @param {integer} ramification Greater than 0. Maximum number of child subrays a subray can have. Default: 5\n *\n * @param {integer} maxSubrayRecursion Greater than 0. Maximum level of recursion (subray descendant generations). Default: 3\n *\n * @param {double} recursionProbability From 0 to 1. The lower the value, the less chance each new generation of subrays has to generate new subrays. Default: 0.6\n *\n * @param {boolean} generateUVs If true, the ray geometry will have uv coordinates generated. u runs along the ray, and v across its perimeter. Default: false.\n *\n * @param {Object} randomGenerator Set here your random number generator which will seed the SimplexNoise and other decisions during ray tree creation.\n * It can be used to generate repeatable rays. For that, set also the noiseSeed parameter, and each ray created with that generator and seed pair will be identical in time.\n * The randomGenerator parameter should be an object with a random() function similar to Math.random, but seedable.\n * It must have also a getSeed() method, which returns the current seed, and a setSeed( seed ) method, which accepts as seed a fractional number from 0 to 1, as well as any other number.\n * The default value is an internal generator for some uses and Math.random for others (It is non-repeatable even if noiseSeed is supplied)\n *\n * @param {double} noiseSeed Seed used to make repeatable rays (see the randomGenerator)\n *\n * @param {function} onDecideSubrayCreation Set this to change the callback which decides subray creation. You can look at the default callback in the code (createDefaultSubrayCreationCallbacks)for more info.\n *\n * @param {function} onSubrayCreation This is another callback, more simple than the previous one. It can be used to adapt the form of subrays or other parameters once a subray has been created and initialized. It is used in the examples to adapt subrays to a sphere or to a plane.\n *\n *\n */\n\nclass LightningStrike extends BufferGeometry {\n // Ray states\n static RAY_INITIALIZED = 0\n static RAY_UNBORN = 1\n static RAY_PROPAGATING = 2\n static RAY_STEADY = 3\n static RAY_VANISHING = 4\n static RAY_EXTINGUISHED = 5\n\n static COS30DEG = Math.cos((30 * Math.PI) / 180)\n static SIN30DEG = Math.sin((30 * Math.PI) / 180)\n\n constructor(rayParameters = {}) {\n super()\n\n this.isLightningStrike = true\n\n this.type = 'LightningStrike'\n\n // Set parameters, and set undefined parameters to default values\n this.init(LightningStrike.copyParameters(rayParameters, rayParameters))\n\n // Creates and populates the mesh\n this.createMesh()\n }\n\n static createRandomGenerator() {\n const numSeeds = 2053\n const seeds = []\n\n for (let i = 0; i < numSeeds; i++) {\n seeds.push(Math.random())\n }\n\n const generator = {\n currentSeed: 0,\n\n random: function () {\n const value = seeds[generator.currentSeed]\n\n generator.currentSeed = (generator.currentSeed + 1) % numSeeds\n\n return value\n },\n\n getSeed: function () {\n return generator.currentSeed / numSeeds\n },\n\n setSeed: function (seed) {\n generator.currentSeed = Math.floor(seed * numSeeds) % numSeeds\n },\n }\n\n return generator\n }\n\n static copyParameters(dest = {}, source = {}) {\n const vecCopy = function (v) {\n if (source === dest) {\n return v\n } else {\n return v.clone()\n }\n }\n\n ;(dest.sourceOffset = source.sourceOffset !== undefined ? vecCopy(source.sourceOffset) : new Vector3(0, 100, 0)),\n (dest.destOffset = source.destOffset !== undefined ? vecCopy(source.destOffset) : new Vector3(0, 0, 0)),\n (dest.timeScale = source.timeScale !== undefined ? source.timeScale : 1),\n (dest.roughness = source.roughness !== undefined ? source.roughness : 0.9),\n (dest.straightness = source.straightness !== undefined ? source.straightness : 0.7),\n (dest.up0 = source.up0 !== undefined ? vecCopy(source.up0) : new Vector3(0, 0, 1))\n ;(dest.up1 = source.up1 !== undefined ? vecCopy(source.up1) : new Vector3(0, 0, 1)),\n (dest.radius0 = source.radius0 !== undefined ? source.radius0 : 1),\n (dest.radius1 = source.radius1 !== undefined ? source.radius1 : 1),\n (dest.radius0Factor = source.radius0Factor !== undefined ? source.radius0Factor : 0.5),\n (dest.radius1Factor = source.radius1Factor !== undefined ? source.radius1Factor : 0.2),\n (dest.minRadius = source.minRadius !== undefined ? source.minRadius : 0.2),\n // These parameters should not be changed after lightning creation. They can be changed but the ray will change its form abruptly:\n\n (dest.isEternal =\n source.isEternal !== undefined\n ? source.isEternal\n : source.birthTime === undefined || source.deathTime === undefined),\n (dest.birthTime = source.birthTime),\n (dest.deathTime = source.deathTime),\n (dest.propagationTimeFactor = source.propagationTimeFactor !== undefined ? source.propagationTimeFactor : 0.1),\n (dest.vanishingTimeFactor = source.vanishingTimeFactor !== undefined ? source.vanishingTimeFactor : 0.9),\n (dest.subrayPeriod = source.subrayPeriod !== undefined ? source.subrayPeriod : 4),\n (dest.subrayDutyCycle = source.subrayDutyCycle !== undefined ? source.subrayDutyCycle : 0.6)\n\n // These parameters cannot change after lightning creation:\n\n dest.maxIterations = source.maxIterations !== undefined ? source.maxIterations : 9\n dest.isStatic = source.isStatic !== undefined ? source.isStatic : false\n dest.ramification = source.ramification !== undefined ? source.ramification : 5\n dest.maxSubrayRecursion = source.maxSubrayRecursion !== undefined ? source.maxSubrayRecursion : 3\n dest.recursionProbability = source.recursionProbability !== undefined ? source.recursionProbability : 0.6\n dest.generateUVs = source.generateUVs !== undefined ? source.generateUVs : false\n ;(dest.randomGenerator = source.randomGenerator),\n (dest.noiseSeed = source.noiseSeed),\n (dest.onDecideSubrayCreation = source.onDecideSubrayCreation),\n (dest.onSubrayCreation = source.onSubrayCreation)\n\n return dest\n }\n\n update(time) {\n if (this.isStatic) return\n\n if (\n this.rayParameters.isEternal ||\n (this.rayParameters.birthTime <= time && time <= this.rayParameters.deathTime)\n ) {\n this.updateMesh(time)\n\n if (time < this.subrays[0].endPropagationTime) {\n this.state = LightningStrike.RAY_PROPAGATING\n } else if (time > this.subrays[0].beginVanishingTime) {\n this.state = LightningStrike.RAY_VANISHING\n } else {\n this.state = LightningStrike.RAY_STEADY\n }\n\n this.visible = true\n } else {\n this.visible = false\n\n if (time < this.rayParameters.birthTime) {\n this.state = LightningStrike.RAY_UNBORN\n } else {\n this.state = LightningStrike.RAY_EXTINGUISHED\n }\n }\n }\n\n init(rayParameters) {\n // Init all the state from the parameters\n\n this.rayParameters = rayParameters\n\n // These parameters cannot change after lightning creation:\n\n this.maxIterations = rayParameters.maxIterations !== undefined ? Math.floor(rayParameters.maxIterations) : 9\n rayParameters.maxIterations = this.maxIterations\n this.isStatic = rayParameters.isStatic !== undefined ? rayParameters.isStatic : false\n rayParameters.isStatic = this.isStatic\n this.ramification = rayParameters.ramification !== undefined ? Math.floor(rayParameters.ramification) : 5\n rayParameters.ramification = this.ramification\n this.maxSubrayRecursion =\n rayParameters.maxSubrayRecursion !== undefined ? Math.floor(rayParameters.maxSubrayRecursion) : 3\n rayParameters.maxSubrayRecursion = this.maxSubrayRecursion\n this.recursionProbability =\n rayParameters.recursionProbability !== undefined ? rayParameters.recursionProbability : 0.6\n rayParameters.recursionProbability = this.recursionProbability\n this.generateUVs = rayParameters.generateUVs !== undefined ? rayParameters.generateUVs : false\n rayParameters.generateUVs = this.generateUVs\n\n // Random generator\n if (rayParameters.randomGenerator !== undefined) {\n this.randomGenerator = rayParameters.randomGenerator\n this.seedGenerator = rayParameters.randomGenerator\n\n if (rayParameters.noiseSeed !== undefined) {\n this.seedGenerator.setSeed(rayParameters.noiseSeed)\n }\n } else {\n this.randomGenerator = LightningStrike.createRandomGenerator()\n this.seedGenerator = Math\n }\n\n // Ray creation callbacks\n if (rayParameters.onDecideSubrayCreation !== undefined) {\n this.onDecideSubrayCreation = rayParameters.onDecideSubrayCreation\n } else {\n this.createDefaultSubrayCreationCallbacks()\n\n if (rayParameters.onSubrayCreation !== undefined) {\n this.onSubrayCreation = rayParameters.onSubrayCreation\n }\n }\n\n // Internal state\n\n this.state = LightningStrike.RAY_INITIALIZED\n\n this.maxSubrays = Math.ceil(1 + Math.pow(this.ramification, Math.max(0, this.maxSubrayRecursion - 1)))\n rayParameters.maxSubrays = this.maxSubrays\n\n this.maxRaySegments = 2 * (1 << this.maxIterations)\n\n this.subrays = []\n\n for (let i = 0; i < this.maxSubrays; i++) {\n this.subrays.push(this.createSubray())\n }\n\n this.raySegments = []\n\n for (let i = 0; i < this.maxRaySegments; i++) {\n this.raySegments.push(this.createSegment())\n }\n\n this.time = 0\n this.timeFraction = 0\n this.currentSegmentCallback = null\n this.currentCreateTriangleVertices = this.generateUVs\n ? this.createTriangleVerticesWithUVs\n : this.createTriangleVerticesWithoutUVs\n this.numSubrays = 0\n this.currentSubray = null\n this.currentSegmentIndex = 0\n this.isInitialSegment = false\n this.subrayProbability = 0\n\n this.currentVertex = 0\n this.currentIndex = 0\n this.currentCoordinate = 0\n this.currentUVCoordinate = 0\n this.vertices = null\n this.uvs = null\n this.indices = null\n this.positionAttribute = null\n this.uvsAttribute = null\n\n this.simplexX = new SimplexNoise(this.seedGenerator)\n this.simplexY = new SimplexNoise(this.seedGenerator)\n this.simplexZ = new SimplexNoise(this.seedGenerator)\n\n // Temp vectors\n this.forwards = new Vector3()\n this.forwardsFill = new Vector3()\n this.side = new Vector3()\n this.down = new Vector3()\n this.middlePos = new Vector3()\n this.middleLinPos = new Vector3()\n this.newPos = new Vector3()\n this.vPos = new Vector3()\n this.cross1 = new Vector3()\n }\n\n createMesh() {\n const maxDrawableSegmentsPerSubRay = 1 << this.maxIterations\n\n const maxVerts = 3 * (maxDrawableSegmentsPerSubRay + 1) * this.maxSubrays\n const maxIndices = 18 * maxDrawableSegmentsPerSubRay * this.maxSubrays\n\n this.vertices = new Float32Array(maxVerts * 3)\n this.indices = new Uint32Array(maxIndices)\n\n if (this.generateUVs) {\n this.uvs = new Float32Array(maxVerts * 2)\n }\n\n // Populate the mesh\n this.fillMesh(0)\n\n this.setIndex(new Uint32BufferAttribute(this.indices, 1))\n\n this.positionAttribute = new Float32BufferAttribute(this.vertices, 3)\n this.setAttribute('position', this.positionAttribute)\n\n if (this.generateUVs) {\n this.uvsAttribute = new Float32BufferAttribute(new Float32Array(this.uvs), 2)\n this.setAttribute('uv', this.uvsAttribute)\n }\n\n if (!this.isStatic) {\n this.index.usage = DynamicDrawUsage\n this.positionAttribute.usage = DynamicDrawUsage\n\n if (this.generateUVs) {\n this.uvsAttribute.usage = DynamicDrawUsage\n }\n }\n\n // Store buffers for later modification\n this.vertices = this.positionAttribute.array\n this.indices = this.index.array\n\n if (this.generateUVs) {\n this.uvs = this.uvsAttribute.array\n }\n }\n\n updateMesh(time) {\n this.fillMesh(time)\n\n this.drawRange.count = this.currentIndex\n\n this.index.needsUpdate = true\n\n this.positionAttribute.needsUpdate = true\n\n if (this.generateUVs) {\n this.uvsAttribute.needsUpdate = true\n }\n }\n\n fillMesh(time) {\n const scope = this\n\n this.currentVertex = 0\n this.currentIndex = 0\n this.currentCoordinate = 0\n this.currentUVCoordinate = 0\n\n this.fractalRay(time, function fillVertices(segment) {\n const subray = scope.currentSubray\n\n if (time < subray.birthTime) {\n //&& ( ! this.rayParameters.isEternal || scope.currentSubray.recursion > 0 ) ) {\n\n return\n } else if (this.rayParameters.isEternal && scope.currentSubray.recursion == 0) {\n // Eternal rays don't propagate nor vanish, but its subrays do\n\n scope.createPrism(segment)\n\n scope.onDecideSubrayCreation(segment, scope)\n } else if (time < subray.endPropagationTime) {\n if (scope.timeFraction >= segment.fraction0 * subray.propagationTimeFactor) {\n // Ray propagation has arrived to this segment\n\n scope.createPrism(segment)\n\n scope.onDecideSubrayCreation(segment, scope)\n }\n } else if (time < subray.beginVanishingTime) {\n // Ray is steady (nor propagating nor vanishing)\n\n scope.createPrism(segment)\n\n scope.onDecideSubrayCreation(segment, scope)\n } else {\n if (scope.timeFraction <= subray.vanishingTimeFactor + segment.fraction1 * (1 - subray.vanishingTimeFactor)) {\n // Segment has not yet vanished\n\n scope.createPrism(segment)\n }\n\n scope.onDecideSubrayCreation(segment, scope)\n }\n })\n }\n\n addNewSubray(/*rayParameters*/) {\n return this.subrays[this.numSubrays++]\n }\n\n initSubray(subray, rayParameters) {\n subray.pos0.copy(rayParameters.sourceOffset)\n subray.pos1.copy(rayParameters.destOffset)\n subray.up0.copy(rayParameters.up0)\n subray.up1.copy(rayParameters.up1)\n subray.radius0 = rayParameters.radius0\n subray.radius1 = rayParameters.radius1\n subray.birthTime = rayParameters.birthTime\n subray.deathTime = rayParameters.deathTime\n subray.timeScale = rayParameters.timeScale\n subray.roughness = rayParameters.roughness\n subray.straightness = rayParameters.straightness\n subray.propagationTimeFactor = rayParameters.propagationTimeFactor\n subray.vanishingTimeFactor = rayParameters.vanishingTimeFactor\n\n subray.maxIterations = this.maxIterations\n subray.seed = rayParameters.noiseSeed !== undefined ? rayParameters.noiseSeed : 0\n subray.recursion = 0\n }\n\n fractalRay(time, segmentCallback) {\n this.time = time\n this.currentSegmentCallback = segmentCallback\n this.numSubrays = 0\n\n // Add the top level subray\n this.initSubray(this.addNewSubray(), this.rayParameters)\n\n // Process all subrays that are being generated until consuming all of them\n for (let subrayIndex = 0; subrayIndex < this.numSubrays; subrayIndex++) {\n const subray = this.subrays[subrayIndex]\n this.currentSubray = subray\n\n this.randomGenerator.setSeed(subray.seed)\n\n subray.endPropagationTime = MathUtils.lerp(subray.birthTime, subray.deathTime, subray.propagationTimeFactor)\n subray.beginVanishingTime = MathUtils.lerp(subray.deathTime, subray.birthTime, 1 - subray.vanishingTimeFactor)\n\n const random1 = this.randomGenerator.random\n subray.linPos0.set(random1(), random1(), random1()).multiplyScalar(1000)\n subray.linPos1.set(random1(), random1(), random1()).multiplyScalar(1000)\n\n this.timeFraction = (time - subray.birthTime) / (subray.deathTime - subray.birthTime)\n\n this.currentSegmentIndex = 0\n this.isInitialSegment = true\n\n const segment = this.getNewSegment()\n segment.iteration = 0\n segment.pos0.copy(subray.pos0)\n segment.pos1.copy(subray.pos1)\n segment.linPos0.copy(subray.linPos0)\n segment.linPos1.copy(subray.linPos1)\n segment.up0.copy(subray.up0)\n segment.up1.copy(subray.up1)\n segment.radius0 = subray.radius0\n segment.radius1 = subray.radius1\n segment.fraction0 = 0\n segment.fraction1 = 1\n segment.positionVariationFactor = 1 - subray.straightness\n\n this.subrayProbability =\n (this.ramification * Math.pow(this.recursionProbability, subray.recursion)) / (1 << subray.maxIterations)\n\n this.fractalRayRecursive(segment)\n }\n\n this.currentSegmentCallback = null\n this.currentSubray = null\n }\n\n fractalRayRecursive(segment) {\n // Leave recursion condition\n if (segment.iteration >= this.currentSubray.maxIterations) {\n this.currentSegmentCallback(segment)\n\n return\n }\n\n // Interpolation\n this.forwards.subVectors(segment.pos1, segment.pos0)\n let lForwards = this.forwards.length()\n\n if (lForwards < 0.000001) {\n this.forwards.set(0, 0, 0.01)\n lForwards = this.forwards.length()\n }\n\n const middleRadius = (segment.radius0 + segment.radius1) * 0.5\n const middleFraction = (segment.fraction0 + segment.fraction1) * 0.5\n\n const timeDimension = this.time * this.currentSubray.timeScale * Math.pow(2, segment.iteration)\n\n this.middlePos.lerpVectors(segment.pos0, segment.pos1, 0.5)\n this.middleLinPos.lerpVectors(segment.linPos0, segment.linPos1, 0.5)\n const p = this.middleLinPos\n\n // Noise\n this.newPos.set(\n this.simplexX.noise4d(p.x, p.y, p.z, timeDimension),\n this.simplexY.noise4d(p.x, p.y, p.z, timeDimension),\n this.simplexZ.noise4d(p.x, p.y, p.z, timeDimension),\n )\n\n this.newPos.multiplyScalar(segment.positionVariationFactor * lForwards)\n this.newPos.add(this.middlePos)\n\n // Recursion\n\n const newSegment1 = this.getNewSegment()\n newSegment1.pos0.copy(segment.pos0)\n newSegment1.pos1.copy(this.newPos)\n newSegment1.linPos0.copy(segment.linPos0)\n newSegment1.linPos1.copy(this.middleLinPos)\n newSegment1.up0.copy(segment.up0)\n newSegment1.up1.copy(segment.up1)\n newSegment1.radius0 = segment.radius0\n newSegment1.radius1 = middleRadius\n newSegment1.fraction0 = segment.fraction0\n newSegment1.fraction1 = middleFraction\n newSegment1.positionVariationFactor = segment.positionVariationFactor * this.currentSubray.roughness\n newSegment1.iteration = segment.iteration + 1\n\n const newSegment2 = this.getNewSegment()\n newSegment2.pos0.copy(this.newPos)\n newSegment2.pos1.copy(segment.pos1)\n newSegment2.linPos0.copy(this.middleLinPos)\n newSegment2.linPos1.copy(segment.linPos1)\n this.cross1.crossVectors(segment.up0, this.forwards.normalize())\n newSegment2.up0.crossVectors(this.forwards, this.cross1).normalize()\n newSegment2.up1.copy(segment.up1)\n newSegment2.radius0 = middleRadius\n newSegment2.radius1 = segment.radius1\n newSegment2.fraction0 = middleFraction\n newSegment2.fraction1 = segment.fraction1\n newSegment2.positionVariationFactor = segment.positionVariationFactor * this.currentSubray.roughness\n newSegment2.iteration = segment.iteration + 1\n\n this.fractalRayRecursive(newSegment1)\n\n this.fractalRayRecursive(newSegment2)\n }\n\n createPrism(segment) {\n // Creates one triangular prism and its vertices at the segment\n\n this.forwardsFill.subVectors(segment.pos1, segment.pos0).normalize()\n\n if (this.isInitialSegment) {\n this.currentCreateTriangleVertices(segment.pos0, segment.up0, this.forwardsFill, segment.radius0, 0)\n\n this.isInitialSegment = false\n }\n\n this.currentCreateTriangleVertices(segment.pos1, segment.up0, this.forwardsFill, segment.radius1, segment.fraction1)\n\n this.createPrismFaces()\n }\n\n createTriangleVerticesWithoutUVs(pos, up, forwards, radius) {\n // Create an equilateral triangle (only vertices)\n\n this.side.crossVectors(up, forwards).multiplyScalar(radius * LightningStrike.COS30DEG)\n this.down.copy(up).multiplyScalar(-radius * LightningStrike.SIN30DEG)\n\n const p = this.vPos\n const v = this.vertices\n\n p.copy(pos).sub(this.side).add(this.down)\n\n v[this.currentCoordinate++] = p.x\n v[this.currentCoordinate++] = p.y\n v[this.currentCoordinate++] = p.z\n\n p.copy(pos).add(this.side).add(this.down)\n\n v[this.currentCoordinate++] = p.x\n v[this.currentCoordinate++] = p.y\n v[this.currentCoordinate++] = p.z\n\n p.copy(up).multiplyScalar(radius).add(pos)\n\n v[this.currentCoordinate++] = p.x\n v[this.currentCoordinate++] = p.y\n v[this.currentCoordinate++] = p.z\n\n this.currentVertex += 3\n }\n\n createTriangleVerticesWithUVs(pos, up, forwards, radius, u) {\n // Create an equilateral triangle (only vertices)\n\n this.side.crossVectors(up, forwards).multiplyScalar(radius * LightningStrike.COS30DEG)\n this.down.copy(up).multiplyScalar(-radius * LightningStrike.SIN30DEG)\n\n const p = this.vPos\n const v = this.vertices\n const uv = this.uvs\n\n p.copy(pos).sub(this.side).add(this.down)\n\n v[this.currentCoordinate++] = p.x\n v[this.currentCoordinate++] = p.y\n v[this.currentCoordinate++] = p.z\n\n uv[this.currentUVCoordinate++] = u\n uv[this.currentUVCoordinate++] = 0\n\n p.copy(pos).add(this.side).add(this.down)\n\n v[this.currentCoordinate++] = p.x\n v[this.currentCoordinate++] = p.y\n v[this.currentCoordinate++] = p.z\n\n uv[this.currentUVCoordinate++] = u\n uv[this.currentUVCoordinate++] = 0.5\n\n p.copy(up).multiplyScalar(radius).add(pos)\n\n v[this.currentCoordinate++] = p.x\n v[this.currentCoordinate++] = p.y\n v[this.currentCoordinate++] = p.z\n\n uv[this.currentUVCoordinate++] = u\n uv[this.currentUVCoordinate++] = 1\n\n this.currentVertex += 3\n }\n\n createPrismFaces(vertex /*, index*/) {\n const indices = this.indices\n vertex = this.currentVertex - 6\n\n indices[this.currentIndex++] = vertex + 1\n indices[this.currentIndex++] = vertex + 2\n indices[this.currentIndex++] = vertex + 5\n indices[this.currentIndex++] = vertex + 1\n indices[this.currentIndex++] = vertex + 5\n indices[this.currentIndex++] = vertex + 4\n indices[this.currentIndex++] = vertex + 0\n indices[this.currentIndex++] = vertex + 1\n indices[this.currentIndex++] = vertex + 4\n indices[this.currentIndex++] = vertex + 0\n indices[this.currentIndex++] = vertex + 4\n indices[this.currentIndex++] = vertex + 3\n indices[this.currentIndex++] = vertex + 2\n indices[this.currentIndex++] = vertex + 0\n indices[this.currentIndex++] = vertex + 3\n indices[this.currentIndex++] = vertex + 2\n indices[this.currentIndex++] = vertex + 3\n indices[this.currentIndex++] = vertex + 5\n }\n\n createDefaultSubrayCreationCallbacks() {\n const random1 = this.randomGenerator.random\n\n this.onDecideSubrayCreation = function (segment, lightningStrike) {\n // Decide subrays creation at parent (sub)ray segment\n\n const subray = lightningStrike.currentSubray\n\n const period = lightningStrike.rayParameters.subrayPeriod\n const dutyCycle = lightningStrike.rayParameters.subrayDutyCycle\n\n const phase0 =\n lightningStrike.rayParameters.isEternal && subray.recursion == 0\n ? -random1() * period\n : MathUtils.lerp(subray.birthTime, subray.endPropagationTime, segment.fraction0) - random1() * period\n\n const phase = lightningStrike.time - phase0\n const currentCycle = Math.floor(phase / period)\n\n const childSubraySeed = random1() * (currentCycle + 1)\n\n const isActive = phase % period <= dutyCycle * period\n\n let probability = 0\n\n if (isActive) {\n probability = lightningStrike.subrayProbability\n // Distribution test: probability *= segment.fraction0 > 0.5 && segment.fraction0 < 0.9 ? 1 / 0.4 : 0;\n }\n\n if (\n subray.recursion < lightningStrike.maxSubrayRecursion &&\n lightningStrike.numSubrays < lightningStrike.maxSubrays &&\n random1() < probability\n ) {\n const childSubray = lightningStrike.addNewSubray()\n\n const parentSeed = lightningStrike.randomGenerator.getSeed()\n childSubray.seed = childSubraySeed\n lightningStrike.randomGenerator.setSeed(childSubraySeed)\n\n childSubray.recursion = subray.recursion + 1\n childSubray.maxIterations = Math.max(1, subray.maxIterations - 1)\n\n childSubray.linPos0.set(random1(), random1(), random1()).multiplyScalar(1000)\n childSubray.linPos1.set(random1(), random1(), random1()).multiplyScalar(1000)\n childSubray.up0.copy(subray.up0)\n childSubray.up1.copy(subray.up1)\n childSubray.radius0 = segment.radius0 * lightningStrike.rayParameters.radius0Factor\n childSubray.radius1 = Math.min(\n lightningStrike.rayParameters.minRadius,\n segment.radius1 * lightningStrike.rayParameters.radius1Factor,\n )\n\n childSubray.birthTime = phase0 + currentCycle * period\n childSubray.deathTime = childSubray.birthTime + period * dutyCycle\n\n if (!lightningStrike.rayParameters.isEternal && subray.recursion == 0) {\n childSubray.birthTime = Math.max(childSubray.birthTime, subray.birthTime)\n childSubray.deathTime = Math.min(childSubray.deathTime, subray.deathTime)\n }\n\n childSubray.timeScale = subray.timeScale * 2\n childSubray.roughness = subray.roughness\n childSubray.straightness = subray.straightness\n childSubray.propagationTimeFactor = subray.propagationTimeFactor\n childSubray.vanishingTimeFactor = subray.vanishingTimeFactor\n\n lightningStrike.onSubrayCreation(segment, subray, childSubray, lightningStrike)\n\n lightningStrike.randomGenerator.setSeed(parentSeed)\n }\n }\n\n const vec1Pos = new Vector3()\n const vec2Forward = new Vector3()\n const vec3Side = new Vector3()\n const vec4Up = new Vector3()\n\n this.onSubrayCreation = function (segment, parentSubray, childSubray, lightningStrike) {\n // Decide childSubray origin and destination positions (pos0 and pos1) and possibly other properties of childSubray\n\n // Just use the default cone position generator\n lightningStrike.subrayCylinderPosition(segment, parentSubray, childSubray, 0.5, 0.6, 0.2)\n }\n\n this.subrayConePosition = function (\n segment,\n parentSubray,\n childSubray,\n heightFactor,\n sideWidthFactor,\n minSideWidthFactor,\n ) {\n // Sets childSubray pos0 and pos1 in a cone\n\n childSubray.pos0.copy(segment.pos0)\n\n vec1Pos.subVectors(parentSubray.pos1, parentSubray.pos0)\n vec2Forward.copy(vec1Pos).normalize()\n vec1Pos.multiplyScalar(segment.fraction0 + (1 - segment.fraction0) * (random1() * heightFactor))\n const length = vec1Pos.length()\n vec3Side.crossVectors(parentSubray.up0, vec2Forward)\n const angle = 2 * Math.PI * random1()\n vec3Side.multiplyScalar(Math.cos(angle))\n vec4Up.copy(parentSubray.up0).multiplyScalar(Math.sin(angle))\n\n childSubray.pos1\n .copy(vec3Side)\n .add(vec4Up)\n .multiplyScalar(length * sideWidthFactor * (minSideWidthFactor + random1() * (1 - minSideWidthFactor)))\n .add(vec1Pos)\n .add(parentSubray.pos0)\n }\n\n this.subrayCylinderPosition = function (\n segment,\n parentSubray,\n childSubray,\n heightFactor,\n sideWidthFactor,\n minSideWidthFactor,\n ) {\n // Sets childSubray pos0 and pos1 in a cylinder\n\n childSubray.pos0.copy(segment.pos0)\n\n vec1Pos.subVectors(parentSubray.pos1, parentSubray.pos0)\n vec2Forward.copy(vec1Pos).normalize()\n vec1Pos.multiplyScalar(segment.fraction0 + (1 - segment.fraction0) * ((2 * random1() - 1) * heightFactor))\n const length = vec1Pos.length()\n vec3Side.crossVectors(parentSubray.up0, vec2Forward)\n const angle = 2 * Math.PI * random1()\n vec3Side.multiplyScalar(Math.cos(angle))\n vec4Up.copy(parentSubray.up0).multiplyScalar(Math.sin(angle))\n\n childSubray.pos1\n .copy(vec3Side)\n .add(vec4Up)\n .multiplyScalar(length * sideWidthFactor * (minSideWidthFactor + random1() * (1 - minSideWidthFactor)))\n .add(vec1Pos)\n .add(parentSubray.pos0)\n }\n }\n\n createSubray() {\n return {\n seed: 0,\n maxIterations: 0,\n recursion: 0,\n pos0: new Vector3(),\n pos1: new Vector3(),\n linPos0: new Vector3(),\n linPos1: new Vector3(),\n up0: new Vector3(),\n up1: new Vector3(),\n radius0: 0,\n radius1: 0,\n birthTime: 0,\n deathTime: 0,\n timeScale: 0,\n roughness: 0,\n straightness: 0,\n propagationTimeFactor: 0,\n vanishingTimeFactor: 0,\n endPropagationTime: 0,\n beginVanishingTime: 0,\n }\n }\n\n createSegment() {\n return {\n iteration: 0,\n pos0: new Vector3(),\n pos1: new Vector3(),\n linPos0: new Vector3(),\n linPos1: new Vector3(),\n up0: new Vector3(),\n up1: new Vector3(),\n radius0: 0,\n radius1: 0,\n fraction0: 0,\n fraction1: 0,\n positionVariationFactor: 0,\n }\n }\n\n getNewSegment() {\n return this.raySegments[this.currentSegmentIndex++]\n }\n\n copy(source) {\n super.copy(source)\n\n this.init(LightningStrike.copyParameters({}, source.rayParameters))\n\n return this\n }\n\n clone() {\n return new this.constructor(LightningStrike.copyParameters({}, this.rayParameters))\n }\n}\n\nexport { LightningStrike }\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LightningStrike.js","sources":["../../src/geometries/LightningStrike.js"],"sourcesContent":["import {\n BufferGeometry,\n DynamicDrawUsage,\n Float32BufferAttribute,\n MathUtils,\n Uint32BufferAttribute,\n Vector3,\n} from 'three'\nimport { SimplexNoise } from '../math/SimplexNoise'\n\n/**\n * @fileoverview LightningStrike object for creating lightning strikes and voltaic arcs.\n *\n *\n * Usage\n *\n * var myRay = new LightningStrike( paramsObject );\n * var myRayMesh = new THREE.Mesh( myRay, myMaterial );\n * scene.add( myRayMesh );\n * ...\n * myRay.update( currentTime );\n *\n * The \"currentTime\" can vary its rate, go forwards, backwards or even jump, but it cannot be negative.\n *\n * You should normally leave the ray position to (0, 0, 0). You should control it by changing the sourceOffset and destOffset parameters.\n *\n *\n * LightningStrike parameters\n *\n * The paramsObject can contain any of the following parameters.\n *\n * Legend:\n * 'LightningStrike' (also called 'ray'): An independent voltaic arc with its ramifications and defined with a set of parameters.\n * 'Subray': A ramification of the ray. It is not a LightningStrike object.\n * 'Segment': A linear segment piece of a subray.\n * 'Leaf segment': A ray segment which cannot be smaller.\n *\n *\n * The following parameters can be changed any time and if they vary smoothly, the ray form will also change smoothly:\n *\n * @param {Vector3} sourceOffset The point where the ray starts.\n *\n * @param {Vector3} destOffset The point where the ray ends.\n *\n * @param {double} timeScale The rate at wich the ray form changes in time. Default: 1\n *\n * @param {double} roughness From 0 to 1. The higher the value, the more wrinkled is the ray. Default: 0.9\n *\n * @param {double} straightness From 0 to 1. The higher the value, the more straight will be a subray path. Default: 0.7\n *\n * @param {Vector3} up0 Ray 'up' direction at the ray starting point. Must be normalized. It should be perpendicular to the ray forward direction but it doesn't matter much.\n *\n * @param {Vector3} up1 Like the up0 parameter but at the end of the ray. Must be normalized.\n *\n * @param {double} radius0 Radius of the main ray trunk at the start point. Default: 1\n *\n * @param {double} radius1 Radius of the main ray trunk at the end point. Default: 1\n *\n * @param {double} radius0Factor The radius0 of a subray is this factor times the radius0 of its parent subray. Default: 0.5\n *\n * @param {double} radius1Factor The radius1 of a subray is this factor times the radius1 of its parent subray. Default: 0.2\n *\n * @param {minRadius} Minimum value a subray radius0 or radius1 can get. Default: 0.1\n *\n *\n * The following parameters should not be changed after lightning creation. They can be changed but the ray will change its form abruptly:\n *\n * @param {boolean} isEternal If true the ray never extinguishes. Otherwise its life is controlled by the 'birthTime' and 'deathTime' parameters. Default: true if any of those two parameters is undefined.\n *\n * @param {double} birthTime The time at which the ray starts its life and begins propagating. Only if isEternal is false. Default: None.\n *\n * @param {double} deathTime The time at which the ray ends vanishing and its life. Only if isEternal is false. Default: None.\n *\n * @param {double} propagationTimeFactor From 0 to 1. Lifetime factor at which the ray ends propagating and enters the steady phase. For example, 0.1 means it is propagating 1/10 of its lifetime. Default: 0.1\n *\n * @param {double} vanishingTimeFactor From 0 to 1. Lifetime factor at which the ray ends the steady phase and begins vanishing. For example, 0.9 means it is vanishing 1/10 of its lifetime. Default: 0.9\n *\n * @param {double} subrayPeriod Subrays cycle periodically. This is their time period. Default: 4\n *\n * @param {double} subrayDutyCycle From 0 to 1. This is the fraction of time a subray is active. Default: 0.6\n *\n *\n * These parameters cannot change after lightning creation:\n *\n * @param {integer} maxIterations: Greater than 0. The number of ray's leaf segments is 2**maxIterations. Default: 9\n *\n * @param {boolean} isStatic Set to true only for rays which won't change over time and are not attached to moving objects (Rare case). It is used to set the vertex buffers non-dynamic. You can omit calling update() for these rays.\n *\n * @param {integer} ramification Greater than 0. Maximum number of child subrays a subray can have. Default: 5\n *\n * @param {integer} maxSubrayRecursion Greater than 0. Maximum level of recursion (subray descendant generations). Default: 3\n *\n * @param {double} recursionProbability From 0 to 1. The lower the value, the less chance each new generation of subrays has to generate new subrays. Default: 0.6\n *\n * @param {boolean} generateUVs If true, the ray geometry will have uv coordinates generated. u runs along the ray, and v across its perimeter. Default: false.\n *\n * @param {Object} randomGenerator Set here your random number generator which will seed the SimplexNoise and other decisions during ray tree creation.\n * It can be used to generate repeatable rays. For that, set also the noiseSeed parameter, and each ray created with that generator and seed pair will be identical in time.\n * The randomGenerator parameter should be an object with a random() function similar to Math.random, but seedable.\n * It must have also a getSeed() method, which returns the current seed, and a setSeed( seed ) method, which accepts as seed a fractional number from 0 to 1, as well as any other number.\n * The default value is an internal generator for some uses and Math.random for others (It is non-repeatable even if noiseSeed is supplied)\n *\n * @param {double} noiseSeed Seed used to make repeatable rays (see the randomGenerator)\n *\n * @param {function} onDecideSubrayCreation Set this to change the callback which decides subray creation. You can look at the default callback in the code (createDefaultSubrayCreationCallbacks)for more info.\n *\n * @param {function} onSubrayCreation This is another callback, more simple than the previous one. It can be used to adapt the form of subrays or other parameters once a subray has been created and initialized. It is used in the examples to adapt subrays to a sphere or to a plane.\n *\n *\n */\n\nconst LightningStrike = /* @__PURE__ */ (() => {\n class LightningStrike extends BufferGeometry {\n // Ray states\n static RAY_INITIALIZED = 0\n static RAY_UNBORN = 1\n static RAY_PROPAGATING = 2\n static RAY_STEADY = 3\n static RAY_VANISHING = 4\n static RAY_EXTINGUISHED = 5\n\n static COS30DEG = Math.cos((30 * Math.PI) / 180)\n static SIN30DEG = Math.sin((30 * Math.PI) / 180)\n\n constructor(rayParameters = {}) {\n super()\n\n this.isLightningStrike = true\n\n this.type = 'LightningStrike'\n\n // Set parameters, and set undefined parameters to default values\n this.init(LightningStrike.copyParameters(rayParameters, rayParameters))\n\n // Creates and populates the mesh\n this.createMesh()\n }\n\n static createRandomGenerator() {\n const numSeeds = 2053\n const seeds = []\n\n for (let i = 0; i < numSeeds; i++) {\n seeds.push(Math.random())\n }\n\n const generator = {\n currentSeed: 0,\n\n random: function () {\n const value = seeds[generator.currentSeed]\n\n generator.currentSeed = (generator.currentSeed + 1) % numSeeds\n\n return value\n },\n\n getSeed: function () {\n return generator.currentSeed / numSeeds\n },\n\n setSeed: function (seed) {\n generator.currentSeed = Math.floor(seed * numSeeds) % numSeeds\n },\n }\n\n return generator\n }\n\n static copyParameters(dest = {}, source = {}) {\n const vecCopy = function (v) {\n if (source === dest) {\n return v\n } else {\n return v.clone()\n }\n }\n\n ;(dest.sourceOffset = source.sourceOffset !== undefined ? vecCopy(source.sourceOffset) : new Vector3(0, 100, 0)),\n (dest.destOffset = source.destOffset !== undefined ? vecCopy(source.destOffset) : new Vector3(0, 0, 0)),\n (dest.timeScale = source.timeScale !== undefined ? source.timeScale : 1),\n (dest.roughness = source.roughness !== undefined ? source.roughness : 0.9),\n (dest.straightness = source.straightness !== undefined ? source.straightness : 0.7),\n (dest.up0 = source.up0 !== undefined ? vecCopy(source.up0) : new Vector3(0, 0, 1))\n ;(dest.up1 = source.up1 !== undefined ? vecCopy(source.up1) : new Vector3(0, 0, 1)),\n (dest.radius0 = source.radius0 !== undefined ? source.radius0 : 1),\n (dest.radius1 = source.radius1 !== undefined ? source.radius1 : 1),\n (dest.radius0Factor = source.radius0Factor !== undefined ? source.radius0Factor : 0.5),\n (dest.radius1Factor = source.radius1Factor !== undefined ? source.radius1Factor : 0.2),\n (dest.minRadius = source.minRadius !== undefined ? source.minRadius : 0.2),\n // These parameters should not be changed after lightning creation. They can be changed but the ray will change its form abruptly:\n\n (dest.isEternal =\n source.isEternal !== undefined\n ? source.isEternal\n : source.birthTime === undefined || source.deathTime === undefined),\n (dest.birthTime = source.birthTime),\n (dest.deathTime = source.deathTime),\n (dest.propagationTimeFactor = source.propagationTimeFactor !== undefined ? source.propagationTimeFactor : 0.1),\n (dest.vanishingTimeFactor = source.vanishingTimeFactor !== undefined ? source.vanishingTimeFactor : 0.9),\n (dest.subrayPeriod = source.subrayPeriod !== undefined ? source.subrayPeriod : 4),\n (dest.subrayDutyCycle = source.subrayDutyCycle !== undefined ? source.subrayDutyCycle : 0.6)\n\n // These parameters cannot change after lightning creation:\n\n dest.maxIterations = source.maxIterations !== undefined ? source.maxIterations : 9\n dest.isStatic = source.isStatic !== undefined ? source.isStatic : false\n dest.ramification = source.ramification !== undefined ? source.ramification : 5\n dest.maxSubrayRecursion = source.maxSubrayRecursion !== undefined ? source.maxSubrayRecursion : 3\n dest.recursionProbability = source.recursionProbability !== undefined ? source.recursionProbability : 0.6\n dest.generateUVs = source.generateUVs !== undefined ? source.generateUVs : false\n ;(dest.randomGenerator = source.randomGenerator),\n (dest.noiseSeed = source.noiseSeed),\n (dest.onDecideSubrayCreation = source.onDecideSubrayCreation),\n (dest.onSubrayCreation = source.onSubrayCreation)\n\n return dest\n }\n\n update(time) {\n if (this.isStatic) return\n\n if (\n this.rayParameters.isEternal ||\n (this.rayParameters.birthTime <= time && time <= this.rayParameters.deathTime)\n ) {\n this.updateMesh(time)\n\n if (time < this.subrays[0].endPropagationTime) {\n this.state = LightningStrike.RAY_PROPAGATING\n } else if (time > this.subrays[0].beginVanishingTime) {\n this.state = LightningStrike.RAY_VANISHING\n } else {\n this.state = LightningStrike.RAY_STEADY\n }\n\n this.visible = true\n } else {\n this.visible = false\n\n if (time < this.rayParameters.birthTime) {\n this.state = LightningStrike.RAY_UNBORN\n } else {\n this.state = LightningStrike.RAY_EXTINGUISHED\n }\n }\n }\n\n init(rayParameters) {\n // Init all the state from the parameters\n\n this.rayParameters = rayParameters\n\n // These parameters cannot change after lightning creation:\n\n this.maxIterations = rayParameters.maxIterations !== undefined ? Math.floor(rayParameters.maxIterations) : 9\n rayParameters.maxIterations = this.maxIterations\n this.isStatic = rayParameters.isStatic !== undefined ? rayParameters.isStatic : false\n rayParameters.isStatic = this.isStatic\n this.ramification = rayParameters.ramification !== undefined ? Math.floor(rayParameters.ramification) : 5\n rayParameters.ramification = this.ramification\n this.maxSubrayRecursion =\n rayParameters.maxSubrayRecursion !== undefined ? Math.floor(rayParameters.maxSubrayRecursion) : 3\n rayParameters.maxSubrayRecursion = this.maxSubrayRecursion\n this.recursionProbability =\n rayParameters.recursionProbability !== undefined ? rayParameters.recursionProbability : 0.6\n rayParameters.recursionProbability = this.recursionProbability\n this.generateUVs = rayParameters.generateUVs !== undefined ? rayParameters.generateUVs : false\n rayParameters.generateUVs = this.generateUVs\n\n // Random generator\n if (rayParameters.randomGenerator !== undefined) {\n this.randomGenerator = rayParameters.randomGenerator\n this.seedGenerator = rayParameters.randomGenerator\n\n if (rayParameters.noiseSeed !== undefined) {\n this.seedGenerator.setSeed(rayParameters.noiseSeed)\n }\n } else {\n this.randomGenerator = LightningStrike.createRandomGenerator()\n this.seedGenerator = Math\n }\n\n // Ray creation callbacks\n if (rayParameters.onDecideSubrayCreation !== undefined) {\n this.onDecideSubrayCreation = rayParameters.onDecideSubrayCreation\n } else {\n this.createDefaultSubrayCreationCallbacks()\n\n if (rayParameters.onSubrayCreation !== undefined) {\n this.onSubrayCreation = rayParameters.onSubrayCreation\n }\n }\n\n // Internal state\n\n this.state = LightningStrike.RAY_INITIALIZED\n\n this.maxSubrays = Math.ceil(1 + Math.pow(this.ramification, Math.max(0, this.maxSubrayRecursion - 1)))\n rayParameters.maxSubrays = this.maxSubrays\n\n this.maxRaySegments = 2 * (1 << this.maxIterations)\n\n this.subrays = []\n\n for (let i = 0; i < this.maxSubrays; i++) {\n this.subrays.push(this.createSubray())\n }\n\n this.raySegments = []\n\n for (let i = 0; i < this.maxRaySegments; i++) {\n this.raySegments.push(this.createSegment())\n }\n\n this.time = 0\n this.timeFraction = 0\n this.currentSegmentCallback = null\n this.currentCreateTriangleVertices = this.generateUVs\n ? this.createTriangleVerticesWithUVs\n : this.createTriangleVerticesWithoutUVs\n this.numSubrays = 0\n this.currentSubray = null\n this.currentSegmentIndex = 0\n this.isInitialSegment = false\n this.subrayProbability = 0\n\n this.currentVertex = 0\n this.currentIndex = 0\n this.currentCoordinate = 0\n this.currentUVCoordinate = 0\n this.vertices = null\n this.uvs = null\n this.indices = null\n this.positionAttribute = null\n this.uvsAttribute = null\n\n this.simplexX = new SimplexNoise(this.seedGenerator)\n this.simplexY = new SimplexNoise(this.seedGenerator)\n this.simplexZ = new SimplexNoise(this.seedGenerator)\n\n // Temp vectors\n this.forwards = new Vector3()\n this.forwardsFill = new Vector3()\n this.side = new Vector3()\n this.down = new Vector3()\n this.middlePos = new Vector3()\n this.middleLinPos = new Vector3()\n this.newPos = new Vector3()\n this.vPos = new Vector3()\n this.cross1 = new Vector3()\n }\n\n createMesh() {\n const maxDrawableSegmentsPerSubRay = 1 << this.maxIterations\n\n const maxVerts = 3 * (maxDrawableSegmentsPerSubRay + 1) * this.maxSubrays\n const maxIndices = 18 * maxDrawableSegmentsPerSubRay * this.maxSubrays\n\n this.vertices = new Float32Array(maxVerts * 3)\n this.indices = new Uint32Array(maxIndices)\n\n if (this.generateUVs) {\n this.uvs = new Float32Array(maxVerts * 2)\n }\n\n // Populate the mesh\n this.fillMesh(0)\n\n this.setIndex(new Uint32BufferAttribute(this.indices, 1))\n\n this.positionAttribute = new Float32BufferAttribute(this.vertices, 3)\n this.setAttribute('position', this.positionAttribute)\n\n if (this.generateUVs) {\n this.uvsAttribute = new Float32BufferAttribute(new Float32Array(this.uvs), 2)\n this.setAttribute('uv', this.uvsAttribute)\n }\n\n if (!this.isStatic) {\n this.index.usage = DynamicDrawUsage\n this.positionAttribute.usage = DynamicDrawUsage\n\n if (this.generateUVs) {\n this.uvsAttribute.usage = DynamicDrawUsage\n }\n }\n\n // Store buffers for later modification\n this.vertices = this.positionAttribute.array\n this.indices = this.index.array\n\n if (this.generateUVs) {\n this.uvs = this.uvsAttribute.array\n }\n }\n\n updateMesh(time) {\n this.fillMesh(time)\n\n this.drawRange.count = this.currentIndex\n\n this.index.needsUpdate = true\n\n this.positionAttribute.needsUpdate = true\n\n if (this.generateUVs) {\n this.uvsAttribute.needsUpdate = true\n }\n }\n\n fillMesh(time) {\n const scope = this\n\n this.currentVertex = 0\n this.currentIndex = 0\n this.currentCoordinate = 0\n this.currentUVCoordinate = 0\n\n this.fractalRay(time, function fillVertices(segment) {\n const subray = scope.currentSubray\n\n if (time < subray.birthTime) {\n //&& ( ! this.rayParameters.isEternal || scope.currentSubray.recursion > 0 ) ) {\n\n return\n } else if (this.rayParameters.isEternal && scope.currentSubray.recursion == 0) {\n // Eternal rays don't propagate nor vanish, but its subrays do\n\n scope.createPrism(segment)\n\n scope.onDecideSubrayCreation(segment, scope)\n } else if (time < subray.endPropagationTime) {\n if (scope.timeFraction >= segment.fraction0 * subray.propagationTimeFactor) {\n // Ray propagation has arrived to this segment\n\n scope.createPrism(segment)\n\n scope.onDecideSubrayCreation(segment, scope)\n }\n } else if (time < subray.beginVanishingTime) {\n // Ray is steady (nor propagating nor vanishing)\n\n scope.createPrism(segment)\n\n scope.onDecideSubrayCreation(segment, scope)\n } else {\n if (scope.timeFraction <= subray.vanishingTimeFactor + segment.fraction1 * (1 - subray.vanishingTimeFactor)) {\n // Segment has not yet vanished\n\n scope.createPrism(segment)\n }\n\n scope.onDecideSubrayCreation(segment, scope)\n }\n })\n }\n\n addNewSubray(/*rayParameters*/) {\n return this.subrays[this.numSubrays++]\n }\n\n initSubray(subray, rayParameters) {\n subray.pos0.copy(rayParameters.sourceOffset)\n subray.pos1.copy(rayParameters.destOffset)\n subray.up0.copy(rayParameters.up0)\n subray.up1.copy(rayParameters.up1)\n subray.radius0 = rayParameters.radius0\n subray.radius1 = rayParameters.radius1\n subray.birthTime = rayParameters.birthTime\n subray.deathTime = rayParameters.deathTime\n subray.timeScale = rayParameters.timeScale\n subray.roughness = rayParameters.roughness\n subray.straightness = rayParameters.straightness\n subray.propagationTimeFactor = rayParameters.propagationTimeFactor\n subray.vanishingTimeFactor = rayParameters.vanishingTimeFactor\n\n subray.maxIterations = this.maxIterations\n subray.seed = rayParameters.noiseSeed !== undefined ? rayParameters.noiseSeed : 0\n subray.recursion = 0\n }\n\n fractalRay(time, segmentCallback) {\n this.time = time\n this.currentSegmentCallback = segmentCallback\n this.numSubrays = 0\n\n // Add the top level subray\n this.initSubray(this.addNewSubray(), this.rayParameters)\n\n // Process all subrays that are being generated until consuming all of them\n for (let subrayIndex = 0; subrayIndex < this.numSubrays; subrayIndex++) {\n const subray = this.subrays[subrayIndex]\n this.currentSubray = subray\n\n this.randomGenerator.setSeed(subray.seed)\n\n subray.endPropagationTime = MathUtils.lerp(subray.birthTime, subray.deathTime, subray.propagationTimeFactor)\n subray.beginVanishingTime = MathUtils.lerp(subray.deathTime, subray.birthTime, 1 - subray.vanishingTimeFactor)\n\n const random1 = this.randomGenerator.random\n subray.linPos0.set(random1(), random1(), random1()).multiplyScalar(1000)\n subray.linPos1.set(random1(), random1(), random1()).multiplyScalar(1000)\n\n this.timeFraction = (time - subray.birthTime) / (subray.deathTime - subray.birthTime)\n\n this.currentSegmentIndex = 0\n this.isInitialSegment = true\n\n const segment = this.getNewSegment()\n segment.iteration = 0\n segment.pos0.copy(subray.pos0)\n segment.pos1.copy(subray.pos1)\n segment.linPos0.copy(subray.linPos0)\n segment.linPos1.copy(subray.linPos1)\n segment.up0.copy(subray.up0)\n segment.up1.copy(subray.up1)\n segment.radius0 = subray.radius0\n segment.radius1 = subray.radius1\n segment.fraction0 = 0\n segment.fraction1 = 1\n segment.positionVariationFactor = 1 - subray.straightness\n\n this.subrayProbability =\n (this.ramification * Math.pow(this.recursionProbability, subray.recursion)) / (1 << subray.maxIterations)\n\n this.fractalRayRecursive(segment)\n }\n\n this.currentSegmentCallback = null\n this.currentSubray = null\n }\n\n fractalRayRecursive(segment) {\n // Leave recursion condition\n if (segment.iteration >= this.currentSubray.maxIterations) {\n this.currentSegmentCallback(segment)\n\n return\n }\n\n // Interpolation\n this.forwards.subVectors(segment.pos1, segment.pos0)\n let lForwards = this.forwards.length()\n\n if (lForwards < 0.000001) {\n this.forwards.set(0, 0, 0.01)\n lForwards = this.forwards.length()\n }\n\n const middleRadius = (segment.radius0 + segment.radius1) * 0.5\n const middleFraction = (segment.fraction0 + segment.fraction1) * 0.5\n\n const timeDimension = this.time * this.currentSubray.timeScale * Math.pow(2, segment.iteration)\n\n this.middlePos.lerpVectors(segment.pos0, segment.pos1, 0.5)\n this.middleLinPos.lerpVectors(segment.linPos0, segment.linPos1, 0.5)\n const p = this.middleLinPos\n\n // Noise\n this.newPos.set(\n this.simplexX.noise4d(p.x, p.y, p.z, timeDimension),\n this.simplexY.noise4d(p.x, p.y, p.z, timeDimension),\n this.simplexZ.noise4d(p.x, p.y, p.z, timeDimension),\n )\n\n this.newPos.multiplyScalar(segment.positionVariationFactor * lForwards)\n this.newPos.add(this.middlePos)\n\n // Recursion\n\n const newSegment1 = this.getNewSegment()\n newSegment1.pos0.copy(segment.pos0)\n newSegment1.pos1.copy(this.newPos)\n newSegment1.linPos0.copy(segment.linPos0)\n newSegment1.linPos1.copy(this.middleLinPos)\n newSegment1.up0.copy(segment.up0)\n newSegment1.up1.copy(segment.up1)\n newSegment1.radius0 = segment.radius0\n newSegment1.radius1 = middleRadius\n newSegment1.fraction0 = segment.fraction0\n newSegment1.fraction1 = middleFraction\n newSegment1.positionVariationFactor = segment.positionVariationFactor * this.currentSubray.roughness\n newSegment1.iteration = segment.iteration + 1\n\n const newSegment2 = this.getNewSegment()\n newSegment2.pos0.copy(this.newPos)\n newSegment2.pos1.copy(segment.pos1)\n newSegment2.linPos0.copy(this.middleLinPos)\n newSegment2.linPos1.copy(segment.linPos1)\n this.cross1.crossVectors(segment.up0, this.forwards.normalize())\n newSegment2.up0.crossVectors(this.forwards, this.cross1).normalize()\n newSegment2.up1.copy(segment.up1)\n newSegment2.radius0 = middleRadius\n newSegment2.radius1 = segment.radius1\n newSegment2.fraction0 = middleFraction\n newSegment2.fraction1 = segment.fraction1\n newSegment2.positionVariationFactor = segment.positionVariationFactor * this.currentSubray.roughness\n newSegment2.iteration = segment.iteration + 1\n\n this.fractalRayRecursive(newSegment1)\n\n this.fractalRayRecursive(newSegment2)\n }\n\n createPrism(segment) {\n // Creates one triangular prism and its vertices at the segment\n\n this.forwardsFill.subVectors(segment.pos1, segment.pos0).normalize()\n\n if (this.isInitialSegment) {\n this.currentCreateTriangleVertices(segment.pos0, segment.up0, this.forwardsFill, segment.radius0, 0)\n\n this.isInitialSegment = false\n }\n\n this.currentCreateTriangleVertices(\n segment.pos1,\n segment.up0,\n this.forwardsFill,\n segment.radius1,\n segment.fraction1,\n )\n\n this.createPrismFaces()\n }\n\n createTriangleVerticesWithoutUVs(pos, up, forwards, radius) {\n // Create an equilateral triangle (only vertices)\n\n this.side.crossVectors(up, forwards).multiplyScalar(radius * LightningStrike.COS30DEG)\n this.down.copy(up).multiplyScalar(-radius * LightningStrike.SIN30DEG)\n\n const p = this.vPos\n const v = this.vertices\n\n p.copy(pos).sub(this.side).add(this.down)\n\n v[this.currentCoordinate++] = p.x\n v[this.currentCoordinate++] = p.y\n v[this.currentCoordinate++] = p.z\n\n p.copy(pos).add(this.side).add(this.down)\n\n v[this.currentCoordinate++] = p.x\n v[this.currentCoordinate++] = p.y\n v[this.currentCoordinate++] = p.z\n\n p.copy(up).multiplyScalar(radius).add(pos)\n\n v[this.currentCoordinate++] = p.x\n v[this.currentCoordinate++] = p.y\n v[this.currentCoordinate++] = p.z\n\n this.currentVertex += 3\n }\n\n createTriangleVerticesWithUVs(pos, up, forwards, radius, u) {\n // Create an equilateral triangle (only vertices)\n\n this.side.crossVectors(up, forwards).multiplyScalar(radius * LightningStrike.COS30DEG)\n this.down.copy(up).multiplyScalar(-radius * LightningStrike.SIN30DEG)\n\n const p = this.vPos\n const v = this.vertices\n const uv = this.uvs\n\n p.copy(pos).sub(this.side).add(this.down)\n\n v[this.currentCoordinate++] = p.x\n v[this.currentCoordinate++] = p.y\n v[this.currentCoordinate++] = p.z\n\n uv[this.currentUVCoordinate++] = u\n uv[this.currentUVCoordinate++] = 0\n\n p.copy(pos).add(this.side).add(this.down)\n\n v[this.currentCoordinate++] = p.x\n v[this.currentCoordinate++] = p.y\n v[this.currentCoordinate++] = p.z\n\n uv[this.currentUVCoordinate++] = u\n uv[this.currentUVCoordinate++] = 0.5\n\n p.copy(up).multiplyScalar(radius).add(pos)\n\n v[this.currentCoordinate++] = p.x\n v[this.currentCoordinate++] = p.y\n v[this.currentCoordinate++] = p.z\n\n uv[this.currentUVCoordinate++] = u\n uv[this.currentUVCoordinate++] = 1\n\n this.currentVertex += 3\n }\n\n createPrismFaces(vertex /*, index*/) {\n const indices = this.indices\n vertex = this.currentVertex - 6\n\n indices[this.currentIndex++] = vertex + 1\n indices[this.currentIndex++] = vertex + 2\n indices[this.currentIndex++] = vertex + 5\n indices[this.currentIndex++] = vertex + 1\n indices[this.currentIndex++] = vertex + 5\n indices[this.currentIndex++] = vertex + 4\n indices[this.currentIndex++] = vertex + 0\n indices[this.currentIndex++] = vertex + 1\n indices[this.currentIndex++] = vertex + 4\n indices[this.currentIndex++] = vertex + 0\n indices[this.currentIndex++] = vertex + 4\n indices[this.currentIndex++] = vertex + 3\n indices[this.currentIndex++] = vertex + 2\n indices[this.currentIndex++] = vertex + 0\n indices[this.currentIndex++] = vertex + 3\n indices[this.currentIndex++] = vertex + 2\n indices[this.currentIndex++] = vertex + 3\n indices[this.currentIndex++] = vertex + 5\n }\n\n createDefaultSubrayCreationCallbacks() {\n const random1 = this.randomGenerator.random\n\n this.onDecideSubrayCreation = function (segment, lightningStrike) {\n // Decide subrays creation at parent (sub)ray segment\n\n const subray = lightningStrike.currentSubray\n\n const period = lightningStrike.rayParameters.subrayPeriod\n const dutyCycle = lightningStrike.rayParameters.subrayDutyCycle\n\n const phase0 =\n lightningStrike.rayParameters.isEternal && subray.recursion == 0\n ? -random1() * period\n : MathUtils.lerp(subray.birthTime, subray.endPropagationTime, segment.fraction0) - random1() * period\n\n const phase = lightningStrike.time - phase0\n const currentCycle = Math.floor(phase / period)\n\n const childSubraySeed = random1() * (currentCycle + 1)\n\n const isActive = phase % period <= dutyCycle * period\n\n let probability = 0\n\n if (isActive) {\n probability = lightningStrike.subrayProbability\n // Distribution test: probability *= segment.fraction0 > 0.5 && segment.fraction0 < 0.9 ? 1 / 0.4 : 0;\n }\n\n if (\n subray.recursion < lightningStrike.maxSubrayRecursion &&\n lightningStrike.numSubrays < lightningStrike.maxSubrays &&\n random1() < probability\n ) {\n const childSubray = lightningStrike.addNewSubray()\n\n const parentSeed = lightningStrike.randomGenerator.getSeed()\n childSubray.seed = childSubraySeed\n lightningStrike.randomGenerator.setSeed(childSubraySeed)\n\n childSubray.recursion = subray.recursion + 1\n childSubray.maxIterations = Math.max(1, subray.maxIterations - 1)\n\n childSubray.linPos0.set(random1(), random1(), random1()).multiplyScalar(1000)\n childSubray.linPos1.set(random1(), random1(), random1()).multiplyScalar(1000)\n childSubray.up0.copy(subray.up0)\n childSubray.up1.copy(subray.up1)\n childSubray.radius0 = segment.radius0 * lightningStrike.rayParameters.radius0Factor\n childSubray.radius1 = Math.min(\n lightningStrike.rayParameters.minRadius,\n segment.radius1 * lightningStrike.rayParameters.radius1Factor,\n )\n\n childSubray.birthTime = phase0 + currentCycle * period\n childSubray.deathTime = childSubray.birthTime + period * dutyCycle\n\n if (!lightningStrike.rayParameters.isEternal && subray.recursion == 0) {\n childSubray.birthTime = Math.max(childSubray.birthTime, subray.birthTime)\n childSubray.deathTime = Math.min(childSubray.deathTime, subray.deathTime)\n }\n\n childSubray.timeScale = subray.timeScale * 2\n childSubray.roughness = subray.roughness\n childSubray.straightness = subray.straightness\n childSubray.propagationTimeFactor = subray.propagationTimeFactor\n childSubray.vanishingTimeFactor = subray.vanishingTimeFactor\n\n lightningStrike.onSubrayCreation(segment, subray, childSubray, lightningStrike)\n\n lightningStrike.randomGenerator.setSeed(parentSeed)\n }\n }\n\n const vec1Pos = new Vector3()\n const vec2Forward = new Vector3()\n const vec3Side = new Vector3()\n const vec4Up = new Vector3()\n\n this.onSubrayCreation = function (segment, parentSubray, childSubray, lightningStrike) {\n // Decide childSubray origin and destination positions (pos0 and pos1) and possibly other properties of childSubray\n\n // Just use the default cone position generator\n lightningStrike.subrayCylinderPosition(segment, parentSubray, childSubray, 0.5, 0.6, 0.2)\n }\n\n this.subrayConePosition = function (\n segment,\n parentSubray,\n childSubray,\n heightFactor,\n sideWidthFactor,\n minSideWidthFactor,\n ) {\n // Sets childSubray pos0 and pos1 in a cone\n\n childSubray.pos0.copy(segment.pos0)\n\n vec1Pos.subVectors(parentSubray.pos1, parentSubray.pos0)\n vec2Forward.copy(vec1Pos).normalize()\n vec1Pos.multiplyScalar(segment.fraction0 + (1 - segment.fraction0) * (random1() * heightFactor))\n const length = vec1Pos.length()\n vec3Side.crossVectors(parentSubray.up0, vec2Forward)\n const angle = 2 * Math.PI * random1()\n vec3Side.multiplyScalar(Math.cos(angle))\n vec4Up.copy(parentSubray.up0).multiplyScalar(Math.sin(angle))\n\n childSubray.pos1\n .copy(vec3Side)\n .add(vec4Up)\n .multiplyScalar(length * sideWidthFactor * (minSideWidthFactor + random1() * (1 - minSideWidthFactor)))\n .add(vec1Pos)\n .add(parentSubray.pos0)\n }\n\n this.subrayCylinderPosition = function (\n segment,\n parentSubray,\n childSubray,\n heightFactor,\n sideWidthFactor,\n minSideWidthFactor,\n ) {\n // Sets childSubray pos0 and pos1 in a cylinder\n\n childSubray.pos0.copy(segment.pos0)\n\n vec1Pos.subVectors(parentSubray.pos1, parentSubray.pos0)\n vec2Forward.copy(vec1Pos).normalize()\n vec1Pos.multiplyScalar(segment.fraction0 + (1 - segment.fraction0) * ((2 * random1() - 1) * heightFactor))\n const length = vec1Pos.length()\n vec3Side.crossVectors(parentSubray.up0, vec2Forward)\n const angle = 2 * Math.PI * random1()\n vec3Side.multiplyScalar(Math.cos(angle))\n vec4Up.copy(parentSubray.up0).multiplyScalar(Math.sin(angle))\n\n childSubray.pos1\n .copy(vec3Side)\n .add(vec4Up)\n .multiplyScalar(length * sideWidthFactor * (minSideWidthFactor + random1() * (1 - minSideWidthFactor)))\n .add(vec1Pos)\n .add(parentSubray.pos0)\n }\n }\n\n createSubray() {\n return {\n seed: 0,\n maxIterations: 0,\n recursion: 0,\n pos0: new Vector3(),\n pos1: new Vector3(),\n linPos0: new Vector3(),\n linPos1: new Vector3(),\n up0: new Vector3(),\n up1: new Vector3(),\n radius0: 0,\n radius1: 0,\n birthTime: 0,\n deathTime: 0,\n timeScale: 0,\n roughness: 0,\n straightness: 0,\n propagationTimeFactor: 0,\n vanishingTimeFactor: 0,\n endPropagationTime: 0,\n beginVanishingTime: 0,\n }\n }\n\n createSegment() {\n return {\n iteration: 0,\n pos0: new Vector3(),\n pos1: new Vector3(),\n linPos0: new Vector3(),\n linPos1: new Vector3(),\n up0: new Vector3(),\n up1: new Vector3(),\n radius0: 0,\n radius1: 0,\n fraction0: 0,\n fraction1: 0,\n positionVariationFactor: 0,\n }\n }\n\n getNewSegment() {\n return this.raySegments[this.currentSegmentIndex++]\n }\n\n copy(source) {\n super.copy(source)\n\n this.init(LightningStrike.copyParameters({}, source.rayParameters))\n\n return this\n }\n\n clone() {\n return new this.constructor(LightningStrike.copyParameters({}, this.rayParameters))\n }\n }\n\n return LightningStrike\n})()\n\nexport { LightningStrike }\n"],"names":["LightningStrike"],"mappings":";;;;;;;;AA+GK,MAAC,kBAAmC,uBAAM;AAC7C,QAAM,mBAAN,cAA8B,eAAe;AAAA,IAY3C,YAAY,gBAAgB,IAAI;AAC9B,YAAO;AAEP,WAAK,oBAAoB;AAEzB,WAAK,OAAO;AAGZ,WAAK,KAAK,iBAAgB,eAAe,eAAe,aAAa,CAAC;AAGtE,WAAK,WAAY;AAAA,IAClB;AAAA,IAED,OAAO,wBAAwB;AAC7B,YAAM,WAAW;AACjB,YAAM,QAAQ,CAAE;AAEhB,eAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AACjC,cAAM,KAAK,KAAK,QAAQ;AAAA,MACzB;AAED,YAAM,YAAY;AAAA,QAChB,aAAa;AAAA,QAEb,QAAQ,WAAY;AAClB,gBAAM,QAAQ,MAAM,UAAU,WAAW;AAEzC,oBAAU,eAAe,UAAU,cAAc,KAAK;AAEtD,iBAAO;AAAA,QACR;AAAA,QAED,SAAS,WAAY;AACnB,iBAAO,UAAU,cAAc;AAAA,QAChC;AAAA,QAED,SAAS,SAAU,MAAM;AACvB,oBAAU,cAAc,KAAK,MAAM,OAAO,QAAQ,IAAI;AAAA,QACvD;AAAA,MACF;AAED,aAAO;AAAA,IACR;AAAA,IAED,OAAO,eAAe,OAAO,IAAI,SAAS,CAAA,GAAI;AAC5C,YAAM,UAAU,SAAU,GAAG;AAC3B,YAAI,WAAW,MAAM;AACnB,iBAAO;AAAA,QACjB,OAAe;AACL,iBAAO,EAAE,MAAO;AAAA,QACjB;AAAA,MACF;AAEA,MAAC,KAAK,eAAe,OAAO,iBAAiB,SAAY,QAAQ,OAAO,YAAY,IAAI,IAAI,QAAQ,GAAG,KAAK,CAAC,GAC3G,KAAK,aAAa,OAAO,eAAe,SAAY,QAAQ,OAAO,UAAU,IAAI,IAAI,QAAQ,GAAG,GAAG,CAAC,GACpG,KAAK,YAAY,OAAO,cAAc,SAAY,OAAO,YAAY,GACrE,KAAK,YAAY,OAAO,cAAc,SAAY,OAAO,YAAY,KACrE,KAAK,eAAe,OAAO,iBAAiB,SAAY,OAAO,eAAe,KAC9E,KAAK,MAAM,OAAO,QAAQ,SAAY,QAAQ,OAAO,GAAG,IAAI,IAAI,QAAQ,GAAG,GAAG,CAAC;AACjF,MAAC,KAAK,MAAM,OAAO,QAAQ,SAAY,QAAQ,OAAO,GAAG,IAAI,IAAI,QAAQ,GAAG,GAAG,CAAC,GAC9E,KAAK,UAAU,OAAO,YAAY,SAAY,OAAO,UAAU,GAC/D,KAAK,UAAU,OAAO,YAAY,SAAY,OAAO,UAAU,GAC/D,KAAK,gBAAgB,OAAO,kBAAkB,SAAY,OAAO,gBAAgB,KACjF,KAAK,gBAAgB,OAAO,kBAAkB,SAAY,OAAO,gBAAgB,KACjF,KAAK,YAAY,OAAO,cAAc,SAAY,OAAO,YAAY;AAAA,MAGrE,KAAK,YACJ,OAAO,cAAc,SACjB,OAAO,YACP,OAAO,cAAc,UAAa,OAAO,cAAc,QAC5D,KAAK,YAAY,OAAO,WACxB,KAAK,YAAY,OAAO,WACxB,KAAK,wBAAwB,OAAO,0BAA0B,SAAY,OAAO,wBAAwB,KACzG,KAAK,sBAAsB,OAAO,wBAAwB,SAAY,OAAO,sBAAsB,KACnG,KAAK,eAAe,OAAO,iBAAiB,SAAY,OAAO,eAAe,GAC9E,KAAK,kBAAkB,OAAO,oBAAoB,SAAY,OAAO,kBAAkB;AAI1F,WAAK,gBAAgB,OAAO,kBAAkB,SAAY,OAAO,gBAAgB;AACjF,WAAK,WAAW,OAAO,aAAa,SAAY,OAAO,WAAW;AAClE,WAAK,eAAe,OAAO,iBAAiB,SAAY,OAAO,eAAe;AAC9E,WAAK,qBAAqB,OAAO,uBAAuB,SAAY,OAAO,qBAAqB;AAChG,WAAK,uBAAuB,OAAO,yBAAyB,SAAY,OAAO,uBAAuB;AACtG,WAAK,cAAc,OAAO,gBAAgB,SAAY,OAAO,cAAc;AAC1E,MAAC,KAAK,kBAAkB,OAAO,iBAC7B,KAAK,YAAY,OAAO,WACxB,KAAK,yBAAyB,OAAO,wBACrC,KAAK,mBAAmB,OAAO;AAElC,aAAO;AAAA,IACR;AAAA,IAED,OAAO,MAAM;AACX,UAAI,KAAK;AAAU;AAEnB,UACE,KAAK,cAAc,aAClB,KAAK,cAAc,aAAa,QAAQ,QAAQ,KAAK,cAAc,WACpE;AACA,aAAK,WAAW,IAAI;AAEpB,YAAI,OAAO,KAAK,QAAQ,CAAC,EAAE,oBAAoB;AAC7C,eAAK,QAAQ,iBAAgB;AAAA,QACvC,WAAmB,OAAO,KAAK,QAAQ,CAAC,EAAE,oBAAoB;AACpD,eAAK,QAAQ,iBAAgB;AAAA,QACvC,OAAe;AACL,eAAK,QAAQ,iBAAgB;AAAA,QAC9B;AAED,aAAK,UAAU;AAAA,MACvB,OAAa;AACL,aAAK,UAAU;AAEf,YAAI,OAAO,KAAK,cAAc,WAAW;AACvC,eAAK,QAAQ,iBAAgB;AAAA,QACvC,OAAe;AACL,eAAK,QAAQ,iBAAgB;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAAA,IAED,KAAK,eAAe;AAGlB,WAAK,gBAAgB;AAIrB,WAAK,gBAAgB,cAAc,kBAAkB,SAAY,KAAK,MAAM,cAAc,aAAa,IAAI;AAC3G,oBAAc,gBAAgB,KAAK;AACnC,WAAK,WAAW,cAAc,aAAa,SAAY,cAAc,WAAW;AAChF,oBAAc,WAAW,KAAK;AAC9B,WAAK,eAAe,cAAc,iBAAiB,SAAY,KAAK,MAAM,cAAc,YAAY,IAAI;AACxG,oBAAc,eAAe,KAAK;AAClC,WAAK,qBACH,cAAc,uBAAuB,SAAY,KAAK,MAAM,cAAc,kBAAkB,IAAI;AAClG,oBAAc,qBAAqB,KAAK;AACxC,WAAK,uBACH,cAAc,yBAAyB,SAAY,cAAc,uBAAuB;AAC1F,oBAAc,uBAAuB,KAAK;AAC1C,WAAK,cAAc,cAAc,gBAAgB,SAAY,cAAc,cAAc;AACzF,oBAAc,cAAc,KAAK;AAGjC,UAAI,cAAc,oBAAoB,QAAW;AAC/C,aAAK,kBAAkB,cAAc;AACrC,aAAK,gBAAgB,cAAc;AAEnC,YAAI,cAAc,cAAc,QAAW;AACzC,eAAK,cAAc,QAAQ,cAAc,SAAS;AAAA,QACnD;AAAA,MACT,OAAa;AACL,aAAK,kBAAkB,iBAAgB,sBAAuB;AAC9D,aAAK,gBAAgB;AAAA,MACtB;AAGD,UAAI,cAAc,2BAA2B,QAAW;AACtD,aAAK,yBAAyB,cAAc;AAAA,MACpD,OAAa;AACL,aAAK,qCAAsC;AAE3C,YAAI,cAAc,qBAAqB,QAAW;AAChD,eAAK,mBAAmB,cAAc;AAAA,QACvC;AAAA,MACF;AAID,WAAK,QAAQ,iBAAgB;AAE7B,WAAK,aAAa,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,cAAc,KAAK,IAAI,GAAG,KAAK,qBAAqB,CAAC,CAAC,CAAC;AACrG,oBAAc,aAAa,KAAK;AAEhC,WAAK,iBAAiB,KAAK,KAAK,KAAK;AAErC,WAAK,UAAU,CAAE;AAEjB,eAAS,IAAI,GAAG,IAAI,KAAK,YAAY,KAAK;AACxC,aAAK,QAAQ,KAAK,KAAK,aAAY,CAAE;AAAA,MACtC;AAED,WAAK,cAAc,CAAE;AAErB,eAAS,IAAI,GAAG,IAAI,KAAK,gBAAgB,KAAK;AAC5C,aAAK,YAAY,KAAK,KAAK,cAAa,CAAE;AAAA,MAC3C;AAED,WAAK,OAAO;AACZ,WAAK,eAAe;AACpB,WAAK,yBAAyB;AAC9B,WAAK,gCAAgC,KAAK,cACtC,KAAK,gCACL,KAAK;AACT,WAAK,aAAa;AAClB,WAAK,gBAAgB;AACrB,WAAK,sBAAsB;AAC3B,WAAK,mBAAmB;AACxB,WAAK,oBAAoB;AAEzB,WAAK,gBAAgB;AACrB,WAAK,eAAe;AACpB,WAAK,oBAAoB;AACzB,WAAK,sBAAsB;AAC3B,WAAK,WAAW;AAChB,WAAK,MAAM;AACX,WAAK,UAAU;AACf,WAAK,oBAAoB;AACzB,WAAK,eAAe;AAEpB,WAAK,WAAW,IAAI,aAAa,KAAK,aAAa;AACnD,WAAK,WAAW,IAAI,aAAa,KAAK,aAAa;AACnD,WAAK,WAAW,IAAI,aAAa,KAAK,aAAa;AAGnD,WAAK,WAAW,IAAI,QAAS;AAC7B,WAAK,eAAe,IAAI,QAAS;AACjC,WAAK,OAAO,IAAI,QAAS;AACzB,WAAK,OAAO,IAAI,QAAS;AACzB,WAAK,YAAY,IAAI,QAAS;AAC9B,WAAK,eAAe,IAAI,QAAS;AACjC,WAAK,SAAS,IAAI,QAAS;AAC3B,WAAK,OAAO,IAAI,QAAS;AACzB,WAAK,SAAS,IAAI,QAAS;AAAA,IAC5B;AAAA,IAED,aAAa;AACX,YAAM,+BAA+B,KAAK,KAAK;AAE/C,YAAM,WAAW,KAAK,+BAA+B,KAAK,KAAK;AAC/D,YAAM,aAAa,KAAK,+BAA+B,KAAK;AAE5D,WAAK,WAAW,IAAI,aAAa,WAAW,CAAC;AAC7C,WAAK,UAAU,IAAI,YAAY,UAAU;AAEzC,UAAI,KAAK,aAAa;AACpB,aAAK,MAAM,IAAI,aAAa,WAAW,CAAC;AAAA,MACzC;AAGD,WAAK,SAAS,CAAC;AAEf,WAAK,SAAS,IAAI,sBAAsB,KAAK,SAAS,CAAC,CAAC;AAExD,WAAK,oBAAoB,IAAI,uBAAuB,KAAK,UAAU,CAAC;AACpE,WAAK,aAAa,YAAY,KAAK,iBAAiB;AAEpD,UAAI,KAAK,aAAa;AACpB,aAAK,eAAe,IAAI,uBAAuB,IAAI,aAAa,KAAK,GAAG,GAAG,CAAC;AAC5E,aAAK,aAAa,MAAM,KAAK,YAAY;AAAA,MAC1C;AAED,UAAI,CAAC,KAAK,UAAU;AAClB,aAAK,MAAM,QAAQ;AACnB,aAAK,kBAAkB,QAAQ;AAE/B,YAAI,KAAK,aAAa;AACpB,eAAK,aAAa,QAAQ;AAAA,QAC3B;AAAA,MACF;AAGD,WAAK,WAAW,KAAK,kBAAkB;AACvC,WAAK,UAAU,KAAK,MAAM;AAE1B,UAAI,KAAK,aAAa;AACpB,aAAK,MAAM,KAAK,aAAa;AAAA,MAC9B;AAAA,IACF;AAAA,IAED,WAAW,MAAM;AACf,WAAK,SAAS,IAAI;AAElB,WAAK,UAAU,QAAQ,KAAK;AAE5B,WAAK,MAAM,cAAc;AAEzB,WAAK,kBAAkB,cAAc;AAErC,UAAI,KAAK,aAAa;AACpB,aAAK,aAAa,cAAc;AAAA,MACjC;AAAA,IACF;AAAA,IAED,SAAS,MAAM;AACb,YAAM,QAAQ;AAEd,WAAK,gBAAgB;AACrB,WAAK,eAAe;AACpB,WAAK,oBAAoB;AACzB,WAAK,sBAAsB;AAE3B,WAAK,WAAW,MAAM,SAAS,aAAa,SAAS;AACnD,cAAM,SAAS,MAAM;AAErB,YAAI,OAAO,OAAO,WAAW;AAG3B;AAAA,QACV,WAAmB,KAAK,cAAc,aAAa,MAAM,cAAc,aAAa,GAAG;AAG7E,gBAAM,YAAY,OAAO;AAEzB,gBAAM,uBAAuB,SAAS,KAAK;AAAA,QACrD,WAAmB,OAAO,OAAO,oBAAoB;AAC3C,cAAI,MAAM,gBAAgB,QAAQ,YAAY,OAAO,uBAAuB;AAG1E,kBAAM,YAAY,OAAO;AAEzB,kBAAM,uBAAuB,SAAS,KAAK;AAAA,UAC5C;AAAA,QACX,WAAmB,OAAO,OAAO,oBAAoB;AAG3C,gBAAM,YAAY,OAAO;AAEzB,gBAAM,uBAAuB,SAAS,KAAK;AAAA,QACrD,OAAe;AACL,cAAI,MAAM,gBAAgB,OAAO,sBAAsB,QAAQ,aAAa,IAAI,OAAO,sBAAsB;AAG3G,kBAAM,YAAY,OAAO;AAAA,UAC1B;AAED,gBAAM,uBAAuB,SAAS,KAAK;AAAA,QAC5C;AAAA,MACT,CAAO;AAAA,IACF;AAAA,IAED,eAAgC;AAC9B,aAAO,KAAK,QAAQ,KAAK,YAAY;AAAA,IACtC;AAAA,IAED,WAAW,QAAQ,eAAe;AAChC,aAAO,KAAK,KAAK,cAAc,YAAY;AAC3C,aAAO,KAAK,KAAK,cAAc,UAAU;AACzC,aAAO,IAAI,KAAK,cAAc,GAAG;AACjC,aAAO,IAAI,KAAK,cAAc,GAAG;AACjC,aAAO,UAAU,cAAc;AAC/B,aAAO,UAAU,cAAc;AAC/B,aAAO,YAAY,cAAc;AACjC,aAAO,YAAY,cAAc;AACjC,aAAO,YAAY,cAAc;AACjC,aAAO,YAAY,cAAc;AACjC,aAAO,eAAe,cAAc;AACpC,aAAO,wBAAwB,cAAc;AAC7C,aAAO,sBAAsB,cAAc;AAE3C,aAAO,gBAAgB,KAAK;AAC5B,aAAO,OAAO,cAAc,cAAc,SAAY,cAAc,YAAY;AAChF,aAAO,YAAY;AAAA,IACpB;AAAA,IAED,WAAW,MAAM,iBAAiB;AAChC,WAAK,OAAO;AACZ,WAAK,yBAAyB;AAC9B,WAAK,aAAa;AAGlB,WAAK,WAAW,KAAK,aAAY,GAAI,KAAK,aAAa;AAGvD,eAAS,cAAc,GAAG,cAAc,KAAK,YAAY,eAAe;AACtE,cAAM,SAAS,KAAK,QAAQ,WAAW;AACvC,aAAK,gBAAgB;AAErB,aAAK,gBAAgB,QAAQ,OAAO,IAAI;AAExC,eAAO,qBAAqB,UAAU,KAAK,OAAO,WAAW,OAAO,WAAW,OAAO,qBAAqB;AAC3G,eAAO,qBAAqB,UAAU,KAAK,OAAO,WAAW,OAAO,WAAW,IAAI,OAAO,mBAAmB;AAE7G,cAAM,UAAU,KAAK,gBAAgB;AACrC,eAAO,QAAQ,IAAI,QAAS,GAAE,QAAS,GAAE,QAAS,CAAA,EAAE,eAAe,GAAI;AACvE,eAAO,QAAQ,IAAI,QAAS,GAAE,QAAS,GAAE,QAAS,CAAA,EAAE,eAAe,GAAI;AAEvE,aAAK,gBAAgB,OAAO,OAAO,cAAc,OAAO,YAAY,OAAO;AAE3E,aAAK,sBAAsB;AAC3B,aAAK,mBAAmB;AAExB,cAAM,UAAU,KAAK,cAAe;AACpC,gBAAQ,YAAY;AACpB,gBAAQ,KAAK,KAAK,OAAO,IAAI;AAC7B,gBAAQ,KAAK,KAAK,OAAO,IAAI;AAC7B,gBAAQ,QAAQ,KAAK,OAAO,OAAO;AACnC,gBAAQ,QAAQ,KAAK,OAAO,OAAO;AACnC,gBAAQ,IAAI,KAAK,OAAO,GAAG;AAC3B,gBAAQ,IAAI,KAAK,OAAO,GAAG;AAC3B,gBAAQ,UAAU,OAAO;AACzB,gBAAQ,UAAU,OAAO;AACzB,gBAAQ,YAAY;AACpB,gBAAQ,YAAY;AACpB,gBAAQ,0BAA0B,IAAI,OAAO;AAE7C,aAAK,oBACF,KAAK,eAAe,KAAK,IAAI,KAAK,sBAAsB,OAAO,SAAS,KAAM,KAAK,OAAO;AAE7F,aAAK,oBAAoB,OAAO;AAAA,MACjC;AAED,WAAK,yBAAyB;AAC9B,WAAK,gBAAgB;AAAA,IACtB;AAAA,IAED,oBAAoB,SAAS;AAE3B,UAAI,QAAQ,aAAa,KAAK,cAAc,eAAe;AACzD,aAAK,uBAAuB,OAAO;AAEnC;AAAA,MACD;AAGD,WAAK,SAAS,WAAW,QAAQ,MAAM,QAAQ,IAAI;AACnD,UAAI,YAAY,KAAK,SAAS,OAAQ;AAEtC,UAAI,YAAY,MAAU;AACxB,aAAK,SAAS,IAAI,GAAG,GAAG,IAAI;AAC5B,oBAAY,KAAK,SAAS,OAAQ;AAAA,MACnC;AAED,YAAM,gBAAgB,QAAQ,UAAU,QAAQ,WAAW;AAC3D,YAAM,kBAAkB,QAAQ,YAAY,QAAQ,aAAa;AAEjE,YAAM,gBAAgB,KAAK,OAAO,KAAK,cAAc,YAAY,KAAK,IAAI,GAAG,QAAQ,SAAS;AAE9F,WAAK,UAAU,YAAY,QAAQ,MAAM,QAAQ,MAAM,GAAG;AAC1D,WAAK,aAAa,YAAY,QAAQ,SAAS,QAAQ,SAAS,GAAG;AACnE,YAAM,IAAI,KAAK;AAGf,WAAK,OAAO;AAAA,QACV,KAAK,SAAS,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,aAAa;AAAA,QAClD,KAAK,SAAS,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,aAAa;AAAA,QAClD,KAAK,SAAS,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,aAAa;AAAA,MACnD;AAED,WAAK,OAAO,eAAe,QAAQ,0BAA0B,SAAS;AACtE,WAAK,OAAO,IAAI,KAAK,SAAS;AAI9B,YAAM,cAAc,KAAK,cAAe;AACxC,kBAAY,KAAK,KAAK,QAAQ,IAAI;AAClC,kBAAY,KAAK,KAAK,KAAK,MAAM;AACjC,kBAAY,QAAQ,KAAK,QAAQ,OAAO;AACxC,kBAAY,QAAQ,KAAK,KAAK,YAAY;AAC1C,kBAAY,IAAI,KAAK,QAAQ,GAAG;AAChC,kBAAY,IAAI,KAAK,QAAQ,GAAG;AAChC,kBAAY,UAAU,QAAQ;AAC9B,kBAAY,UAAU;AACtB,kBAAY,YAAY,QAAQ;AAChC,kBAAY,YAAY;AACxB,kBAAY,0BAA0B,QAAQ,0BAA0B,KAAK,cAAc;AAC3F,kBAAY,YAAY,QAAQ,YAAY;AAE5C,YAAM,cAAc,KAAK,cAAe;AACxC,kBAAY,KAAK,KAAK,KAAK,MAAM;AACjC,kBAAY,KAAK,KAAK,QAAQ,IAAI;AAClC,kBAAY,QAAQ,KAAK,KAAK,YAAY;AAC1C,kBAAY,QAAQ,KAAK,QAAQ,OAAO;AACxC,WAAK,OAAO,aAAa,QAAQ,KAAK,KAAK,SAAS,WAAW;AAC/D,kBAAY,IAAI,aAAa,KAAK,UAAU,KAAK,MAAM,EAAE,UAAW;AACpE,kBAAY,IAAI,KAAK,QAAQ,GAAG;AAChC,kBAAY,UAAU;AACtB,kBAAY,UAAU,QAAQ;AAC9B,kBAAY,YAAY;AACxB,kBAAY,YAAY,QAAQ;AAChC,kBAAY,0BAA0B,QAAQ,0BAA0B,KAAK,cAAc;AAC3F,kBAAY,YAAY,QAAQ,YAAY;AAE5C,WAAK,oBAAoB,WAAW;AAEpC,WAAK,oBAAoB,WAAW;AAAA,IACrC;AAAA,IAED,YAAY,SAAS;AAGnB,WAAK,aAAa,WAAW,QAAQ,MAAM,QAAQ,IAAI,EAAE,UAAW;AAEpE,UAAI,KAAK,kBAAkB;AACzB,aAAK,8BAA8B,QAAQ,MAAM,QAAQ,KAAK,KAAK,cAAc,QAAQ,SAAS,CAAC;AAEnG,aAAK,mBAAmB;AAAA,MACzB;AAED,WAAK;AAAA,QACH,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ;AAAA,MACT;AAED,WAAK,iBAAkB;AAAA,IACxB;AAAA,IAED,iCAAiC,KAAK,IAAI,UAAU,QAAQ;AAG1D,WAAK,KAAK,aAAa,IAAI,QAAQ,EAAE,eAAe,SAAS,iBAAgB,QAAQ;AACrF,WAAK,KAAK,KAAK,EAAE,EAAE,eAAe,CAAC,SAAS,iBAAgB,QAAQ;AAEpE,YAAM,IAAI,KAAK;AACf,YAAM,IAAI,KAAK;AAEf,QAAE,KAAK,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI;AAExC,QAAE,KAAK,mBAAmB,IAAI,EAAE;AAChC,QAAE,KAAK,mBAAmB,IAAI,EAAE;AAChC,QAAE,KAAK,mBAAmB,IAAI,EAAE;AAEhC,QAAE,KAAK,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI;AAExC,QAAE,KAAK,mBAAmB,IAAI,EAAE;AAChC,QAAE,KAAK,mBAAmB,IAAI,EAAE;AAChC,QAAE,KAAK,mBAAmB,IAAI,EAAE;AAEhC,QAAE,KAAK,EAAE,EAAE,eAAe,MAAM,EAAE,IAAI,GAAG;AAEzC,QAAE,KAAK,mBAAmB,IAAI,EAAE;AAChC,QAAE,KAAK,mBAAmB,IAAI,EAAE;AAChC,QAAE,KAAK,mBAAmB,IAAI,EAAE;AAEhC,WAAK,iBAAiB;AAAA,IACvB;AAAA,IAED,8BAA8B,KAAK,IAAI,UAAU,QAAQ,GAAG;AAG1D,WAAK,KAAK,aAAa,IAAI,QAAQ,EAAE,eAAe,SAAS,iBAAgB,QAAQ;AACrF,WAAK,KAAK,KAAK,EAAE,EAAE,eAAe,CAAC,SAAS,iBAAgB,QAAQ;AAEpE,YAAM,IAAI,KAAK;AACf,YAAM,IAAI,KAAK;AACf,YAAM,KAAK,KAAK;AAEhB,QAAE,KAAK,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI;AAExC,QAAE,KAAK,mBAAmB,IAAI,EAAE;AAChC,QAAE,KAAK,mBAAmB,IAAI,EAAE;AAChC,QAAE,KAAK,mBAAmB,IAAI,EAAE;AAEhC,SAAG,KAAK,qBAAqB,IAAI;AACjC,SAAG,KAAK,qBAAqB,IAAI;AAEjC,QAAE,KAAK,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI;AAExC,QAAE,KAAK,mBAAmB,IAAI,EAAE;AAChC,QAAE,KAAK,mBAAmB,IAAI,EAAE;AAChC,QAAE,KAAK,mBAAmB,IAAI,EAAE;AAEhC,SAAG,KAAK,qBAAqB,IAAI;AACjC,SAAG,KAAK,qBAAqB,IAAI;AAEjC,QAAE,KAAK,EAAE,EAAE,eAAe,MAAM,EAAE,IAAI,GAAG;AAEzC,QAAE,KAAK,mBAAmB,IAAI,EAAE;AAChC,QAAE,KAAK,mBAAmB,IAAI,EAAE;AAChC,QAAE,KAAK,mBAAmB,IAAI,EAAE;AAEhC,SAAG,KAAK,qBAAqB,IAAI;AACjC,SAAG,KAAK,qBAAqB,IAAI;AAEjC,WAAK,iBAAiB;AAAA,IACvB;AAAA,IAED,iBAAiB,QAAoB;AACnC,YAAM,UAAU,KAAK;AACrB,eAAS,KAAK,gBAAgB;AAE9B,cAAQ,KAAK,cAAc,IAAI,SAAS;AACxC,cAAQ,KAAK,cAAc,IAAI,SAAS;AACxC,cAAQ,KAAK,cAAc,IAAI,SAAS;AACxC,cAAQ,KAAK,cAAc,IAAI,SAAS;AACxC,cAAQ,KAAK,cAAc,IAAI,SAAS;AACxC,cAAQ,KAAK,cAAc,IAAI,SAAS;AACxC,cAAQ,KAAK,cAAc,IAAI,SAAS;AACxC,cAAQ,KAAK,cAAc,IAAI,SAAS;AACxC,cAAQ,KAAK,cAAc,IAAI,SAAS;AACxC,cAAQ,KAAK,cAAc,IAAI,SAAS;AACxC,cAAQ,KAAK,cAAc,IAAI,SAAS;AACxC,cAAQ,KAAK,cAAc,IAAI,SAAS;AACxC,cAAQ,KAAK,cAAc,IAAI,SAAS;AACxC,cAAQ,KAAK,cAAc,IAAI,SAAS;AACxC,cAAQ,KAAK,cAAc,IAAI,SAAS;AACxC,cAAQ,KAAK,cAAc,IAAI,SAAS;AACxC,cAAQ,KAAK,cAAc,IAAI,SAAS;AACxC,cAAQ,KAAK,cAAc,IAAI,SAAS;AAAA,IACzC;AAAA,IAED,uCAAuC;AACrC,YAAM,UAAU,KAAK,gBAAgB;AAErC,WAAK,yBAAyB,SAAU,SAAS,iBAAiB;AAGhE,cAAM,SAAS,gBAAgB;AAE/B,cAAM,SAAS,gBAAgB,cAAc;AAC7C,cAAM,YAAY,gBAAgB,cAAc;AAEhD,cAAM,SACJ,gBAAgB,cAAc,aAAa,OAAO,aAAa,IAC3D,CAAC,QAAS,IAAG,SACb,UAAU,KAAK,OAAO,WAAW,OAAO,oBAAoB,QAAQ,SAAS,IAAI,QAAO,IAAK;AAEnG,cAAM,QAAQ,gBAAgB,OAAO;AACrC,cAAM,eAAe,KAAK,MAAM,QAAQ,MAAM;AAE9C,cAAM,kBAAkB,aAAa,eAAe;AAEpD,cAAM,WAAW,QAAQ,UAAU,YAAY;AAE/C,YAAI,cAAc;AAElB,YAAI,UAAU;AACZ,wBAAc,gBAAgB;AAAA,QAE/B;AAED,YACE,OAAO,YAAY,gBAAgB,sBACnC,gBAAgB,aAAa,gBAAgB,cAC7C,QAAS,IAAG,aACZ;AACA,gBAAM,cAAc,gBAAgB,aAAc;AAElD,gBAAM,aAAa,gBAAgB,gBAAgB,QAAS;AAC5D,sBAAY,OAAO;AACnB,0BAAgB,gBAAgB,QAAQ,eAAe;AAEvD,sBAAY,YAAY,OAAO,YAAY;AAC3C,sBAAY,gBAAgB,KAAK,IAAI,GAAG,OAAO,gBAAgB,CAAC;AAEhE,sBAAY,QAAQ,IAAI,QAAS,GAAE,QAAS,GAAE,QAAS,CAAA,EAAE,eAAe,GAAI;AAC5E,sBAAY,QAAQ,IAAI,QAAS,GAAE,QAAS,GAAE,QAAS,CAAA,EAAE,eAAe,GAAI;AAC5E,sBAAY,IAAI,KAAK,OAAO,GAAG;AAC/B,sBAAY,IAAI,KAAK,OAAO,GAAG;AAC/B,sBAAY,UAAU,QAAQ,UAAU,gBAAgB,cAAc;AACtE,sBAAY,UAAU,KAAK;AAAA,YACzB,gBAAgB,cAAc;AAAA,YAC9B,QAAQ,UAAU,gBAAgB,cAAc;AAAA,UACjD;AAED,sBAAY,YAAY,SAAS,eAAe;AAChD,sBAAY,YAAY,YAAY,YAAY,SAAS;AAEzD,cAAI,CAAC,gBAAgB,cAAc,aAAa,OAAO,aAAa,GAAG;AACrE,wBAAY,YAAY,KAAK,IAAI,YAAY,WAAW,OAAO,SAAS;AACxE,wBAAY,YAAY,KAAK,IAAI,YAAY,WAAW,OAAO,SAAS;AAAA,UACzE;AAED,sBAAY,YAAY,OAAO,YAAY;AAC3C,sBAAY,YAAY,OAAO;AAC/B,sBAAY,eAAe,OAAO;AAClC,sBAAY,wBAAwB,OAAO;AAC3C,sBAAY,sBAAsB,OAAO;AAEzC,0BAAgB,iBAAiB,SAAS,QAAQ,aAAa,eAAe;AAE9E,0BAAgB,gBAAgB,QAAQ,UAAU;AAAA,QACnD;AAAA,MACF;AAED,YAAM,UAAU,IAAI,QAAS;AAC7B,YAAM,cAAc,IAAI,QAAS;AACjC,YAAM,WAAW,IAAI,QAAS;AAC9B,YAAM,SAAS,IAAI,QAAS;AAE5B,WAAK,mBAAmB,SAAU,SAAS,cAAc,aAAa,iBAAiB;AAIrF,wBAAgB,uBAAuB,SAAS,cAAc,aAAa,KAAK,KAAK,GAAG;AAAA,MACzF;AAED,WAAK,qBAAqB,SACxB,SACA,cACA,aACA,cACA,iBACA,oBACA;AAGA,oBAAY,KAAK,KAAK,QAAQ,IAAI;AAElC,gBAAQ,WAAW,aAAa,MAAM,aAAa,IAAI;AACvD,oBAAY,KAAK,OAAO,EAAE,UAAW;AACrC,gBAAQ,eAAe,QAAQ,aAAa,IAAI,QAAQ,cAAc,YAAY,aAAa;AAC/F,cAAM,SAAS,QAAQ,OAAQ;AAC/B,iBAAS,aAAa,aAAa,KAAK,WAAW;AACnD,cAAM,QAAQ,IAAI,KAAK,KAAK,QAAS;AACrC,iBAAS,eAAe,KAAK,IAAI,KAAK,CAAC;AACvC,eAAO,KAAK,aAAa,GAAG,EAAE,eAAe,KAAK,IAAI,KAAK,CAAC;AAE5D,oBAAY,KACT,KAAK,QAAQ,EACb,IAAI,MAAM,EACV,eAAe,SAAS,mBAAmB,qBAAqB,QAAO,KAAM,IAAI,oBAAoB,EACrG,IAAI,OAAO,EACX,IAAI,aAAa,IAAI;AAAA,MACzB;AAED,WAAK,yBAAyB,SAC5B,SACA,cACA,aACA,cACA,iBACA,oBACA;AAGA,oBAAY,KAAK,KAAK,QAAQ,IAAI;AAElC,gBAAQ,WAAW,aAAa,MAAM,aAAa,IAAI;AACvD,oBAAY,KAAK,OAAO,EAAE,UAAW;AACrC,gBAAQ,eAAe,QAAQ,aAAa,IAAI,QAAQ,eAAe,IAAI,QAAS,IAAG,KAAK,aAAa;AACzG,cAAM,SAAS,QAAQ,OAAQ;AAC/B,iBAAS,aAAa,aAAa,KAAK,WAAW;AACnD,cAAM,QAAQ,IAAI,KAAK,KAAK,QAAS;AACrC,iBAAS,eAAe,KAAK,IAAI,KAAK,CAAC;AACvC,eAAO,KAAK,aAAa,GAAG,EAAE,eAAe,KAAK,IAAI,KAAK,CAAC;AAE5D,oBAAY,KACT,KAAK,QAAQ,EACb,IAAI,MAAM,EACV,eAAe,SAAS,mBAAmB,qBAAqB,QAAO,KAAM,IAAI,oBAAoB,EACrG,IAAI,OAAO,EACX,IAAI,aAAa,IAAI;AAAA,MACzB;AAAA,IACF;AAAA,IAED,eAAe;AACb,aAAO;AAAA,QACL,MAAM;AAAA,QACN,eAAe;AAAA,QACf,WAAW;AAAA,QACX,MAAM,IAAI,QAAS;AAAA,QACnB,MAAM,IAAI,QAAS;AAAA,QACnB,SAAS,IAAI,QAAS;AAAA,QACtB,SAAS,IAAI,QAAS;AAAA,QACtB,KAAK,IAAI,QAAS;AAAA,QAClB,KAAK,IAAI,QAAS;AAAA,QAClB,SAAS;AAAA,QACT,SAAS;AAAA,QACT,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,cAAc;AAAA,QACd,uBAAuB;AAAA,QACvB,qBAAqB;AAAA,QACrB,oBAAoB;AAAA,QACpB,oBAAoB;AAAA,MACrB;AAAA,IACF;AAAA,IAED,gBAAgB;AACd,aAAO;AAAA,QACL,WAAW;AAAA,QACX,MAAM,IAAI,QAAS;AAAA,QACnB,MAAM,IAAI,QAAS;AAAA,QACnB,SAAS,IAAI,QAAS;AAAA,QACtB,SAAS,IAAI,QAAS;AAAA,QACtB,KAAK,IAAI,QAAS;AAAA,QAClB,KAAK,IAAI,QAAS;AAAA,QAClB,SAAS;AAAA,QACT,SAAS;AAAA,QACT,WAAW;AAAA,QACX,WAAW;AAAA,QACX,yBAAyB;AAAA,MAC1B;AAAA,IACF;AAAA,IAED,gBAAgB;AACd,aAAO,KAAK,YAAY,KAAK,qBAAqB;AAAA,IACnD;AAAA,IAED,KAAK,QAAQ;AACX,YAAM,KAAK,MAAM;AAEjB,WAAK,KAAK,iBAAgB,eAAe,CAAA,GAAI,OAAO,aAAa,CAAC;AAElE,aAAO;AAAA,IACR;AAAA,IAED,QAAQ;AACN,aAAO,IAAI,KAAK,YAAY,iBAAgB,eAAe,IAAI,KAAK,aAAa,CAAC;AAAA,IACnF;AAAA,EACF;AA3yBD,MAAMA,mBAAN;AAEE;AAAA,gBAFIA,kBAEG,mBAAkB;AACzB,gBAHIA,kBAGG,cAAa;AACpB,gBAJIA,kBAIG,mBAAkB;AACzB,gBALIA,kBAKG,cAAa;AACpB,gBANIA,kBAMG,iBAAgB;AACvB,gBAPIA,kBAOG,oBAAmB;AAE1B,gBATIA,kBASG,YAAW,KAAK,IAAK,KAAK,KAAK,KAAM,GAAG;AAC/C,gBAVIA,kBAUG,YAAW,KAAK,IAAK,KAAK,KAAK,KAAM,GAAG;AAmyBjD,SAAOA;AACT,GAAC;"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const THREE = require("three");
4
- const tempNormal = new THREE.Vector3();
4
+ const tempNormal = /* @__PURE__ */ new THREE.Vector3();
5
5
  function getUv(faceDirVector, normal, uvAxis, projectionAxis, radius, sideLength) {
6
6
  const totArcLength = 2 * Math.PI * radius / 4;
7
7
  const centerLength = Math.max(sideLength - 2 * radius, 0);
@@ -1 +1 @@
1
- {"version":3,"file":"RoundedBoxGeometry.cjs","sources":["../../src/geometries/RoundedBoxGeometry.js"],"sourcesContent":["import { BoxGeometry, Vector3 } from 'three'\n\nconst tempNormal = new Vector3()\n\nfunction getUv(faceDirVector, normal, uvAxis, projectionAxis, radius, sideLength) {\n const totArcLength = (2 * Math.PI * radius) / 4\n\n // length of the planes between the arcs on each axis\n const centerLength = Math.max(sideLength - 2 * radius, 0)\n const halfArc = Math.PI / 4\n\n // Get the vector projected onto the Y plane\n tempNormal.copy(normal)\n tempNormal[projectionAxis] = 0\n tempNormal.normalize()\n\n // total amount of UV space alloted to a single arc\n const arcUvRatio = (0.5 * totArcLength) / (totArcLength + centerLength)\n\n // the distance along one arc the point is at\n const arcAngleRatio = 1.0 - tempNormal.angleTo(faceDirVector) / halfArc\n\n if (Math.sign(tempNormal[uvAxis]) === 1) {\n return arcAngleRatio * arcUvRatio\n } else {\n // total amount of UV space alloted to the plane between the arcs\n const lenUv = centerLength / (totArcLength + centerLength)\n return lenUv + arcUvRatio + arcUvRatio * (1.0 - arcAngleRatio)\n }\n}\n\nclass RoundedBoxGeometry extends BoxGeometry {\n constructor(width = 1, height = 1, depth = 1, segments = 2, radius = 0.1) {\n // ensure segments is odd so we have a plane connecting the rounded corners\n segments = segments * 2 + 1\n\n // ensure radius isn't bigger than shortest side\n radius = Math.min(width / 2, height / 2, depth / 2, radius)\n\n super(1, 1, 1, segments, segments, segments)\n\n // if we just have one segment we're the same as a regular box\n if (segments === 1) return\n\n const geometry2 = this.toNonIndexed()\n\n this.index = null\n this.attributes.position = geometry2.attributes.position\n this.attributes.normal = geometry2.attributes.normal\n this.attributes.uv = geometry2.attributes.uv\n\n //\n\n const position = new Vector3()\n const normal = new Vector3()\n\n const box = new Vector3(width, height, depth).divideScalar(2).subScalar(radius)\n\n const positions = this.attributes.position.array\n const normals = this.attributes.normal.array\n const uvs = this.attributes.uv.array\n\n const faceTris = positions.length / 6\n const faceDirVector = new Vector3()\n const halfSegmentSize = 0.5 / segments\n\n for (let i = 0, j = 0; i < positions.length; i += 3, j += 2) {\n position.fromArray(positions, i)\n normal.copy(position)\n normal.x -= Math.sign(normal.x) * halfSegmentSize\n normal.y -= Math.sign(normal.y) * halfSegmentSize\n normal.z -= Math.sign(normal.z) * halfSegmentSize\n normal.normalize()\n\n positions[i + 0] = box.x * Math.sign(position.x) + normal.x * radius\n positions[i + 1] = box.y * Math.sign(position.y) + normal.y * radius\n positions[i + 2] = box.z * Math.sign(position.z) + normal.z * radius\n\n normals[i + 0] = normal.x\n normals[i + 1] = normal.y\n normals[i + 2] = normal.z\n\n const side = Math.floor(i / faceTris)\n\n switch (side) {\n case 0: // right\n // generate UVs along Z then Y\n faceDirVector.set(1, 0, 0)\n uvs[j + 0] = getUv(faceDirVector, normal, 'z', 'y', radius, depth)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'y', 'z', radius, height)\n break\n\n case 1: // left\n // generate UVs along Z then Y\n faceDirVector.set(-1, 0, 0)\n uvs[j + 0] = 1.0 - getUv(faceDirVector, normal, 'z', 'y', radius, depth)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'y', 'z', radius, height)\n break\n\n case 2: // top\n // generate UVs along X then Z\n faceDirVector.set(0, 1, 0)\n uvs[j + 0] = 1.0 - getUv(faceDirVector, normal, 'x', 'z', radius, width)\n uvs[j + 1] = getUv(faceDirVector, normal, 'z', 'x', radius, depth)\n break\n\n case 3: // bottom\n // generate UVs along X then Z\n faceDirVector.set(0, -1, 0)\n uvs[j + 0] = 1.0 - getUv(faceDirVector, normal, 'x', 'z', radius, width)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'z', 'x', radius, depth)\n break\n\n case 4: // front\n // generate UVs along X then Y\n faceDirVector.set(0, 0, 1)\n uvs[j + 0] = 1.0 - getUv(faceDirVector, normal, 'x', 'y', radius, width)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'y', 'x', radius, height)\n break\n\n case 5: // back\n // generate UVs along X then Y\n faceDirVector.set(0, 0, -1)\n uvs[j + 0] = getUv(faceDirVector, normal, 'x', 'y', radius, width)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'y', 'x', radius, height)\n break\n }\n }\n }\n}\n\nexport { RoundedBoxGeometry }\n"],"names":["Vector3","BoxGeometry"],"mappings":"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"}
1
+ {"version":3,"file":"RoundedBoxGeometry.cjs","sources":["../../src/geometries/RoundedBoxGeometry.js"],"sourcesContent":["import { BoxGeometry, Vector3 } from 'three'\n\nconst tempNormal = /* @__PURE__ */ new Vector3()\n\nfunction getUv(faceDirVector, normal, uvAxis, projectionAxis, radius, sideLength) {\n const totArcLength = (2 * Math.PI * radius) / 4\n\n // length of the planes between the arcs on each axis\n const centerLength = Math.max(sideLength - 2 * radius, 0)\n const halfArc = Math.PI / 4\n\n // Get the vector projected onto the Y plane\n tempNormal.copy(normal)\n tempNormal[projectionAxis] = 0\n tempNormal.normalize()\n\n // total amount of UV space alloted to a single arc\n const arcUvRatio = (0.5 * totArcLength) / (totArcLength + centerLength)\n\n // the distance along one arc the point is at\n const arcAngleRatio = 1.0 - tempNormal.angleTo(faceDirVector) / halfArc\n\n if (Math.sign(tempNormal[uvAxis]) === 1) {\n return arcAngleRatio * arcUvRatio\n } else {\n // total amount of UV space alloted to the plane between the arcs\n const lenUv = centerLength / (totArcLength + centerLength)\n return lenUv + arcUvRatio + arcUvRatio * (1.0 - arcAngleRatio)\n }\n}\n\nclass RoundedBoxGeometry extends BoxGeometry {\n constructor(width = 1, height = 1, depth = 1, segments = 2, radius = 0.1) {\n // ensure segments is odd so we have a plane connecting the rounded corners\n segments = segments * 2 + 1\n\n // ensure radius isn't bigger than shortest side\n radius = Math.min(width / 2, height / 2, depth / 2, radius)\n\n super(1, 1, 1, segments, segments, segments)\n\n // if we just have one segment we're the same as a regular box\n if (segments === 1) return\n\n const geometry2 = this.toNonIndexed()\n\n this.index = null\n this.attributes.position = geometry2.attributes.position\n this.attributes.normal = geometry2.attributes.normal\n this.attributes.uv = geometry2.attributes.uv\n\n //\n\n const position = new Vector3()\n const normal = new Vector3()\n\n const box = new Vector3(width, height, depth).divideScalar(2).subScalar(radius)\n\n const positions = this.attributes.position.array\n const normals = this.attributes.normal.array\n const uvs = this.attributes.uv.array\n\n const faceTris = positions.length / 6\n const faceDirVector = new Vector3()\n const halfSegmentSize = 0.5 / segments\n\n for (let i = 0, j = 0; i < positions.length; i += 3, j += 2) {\n position.fromArray(positions, i)\n normal.copy(position)\n normal.x -= Math.sign(normal.x) * halfSegmentSize\n normal.y -= Math.sign(normal.y) * halfSegmentSize\n normal.z -= Math.sign(normal.z) * halfSegmentSize\n normal.normalize()\n\n positions[i + 0] = box.x * Math.sign(position.x) + normal.x * radius\n positions[i + 1] = box.y * Math.sign(position.y) + normal.y * radius\n positions[i + 2] = box.z * Math.sign(position.z) + normal.z * radius\n\n normals[i + 0] = normal.x\n normals[i + 1] = normal.y\n normals[i + 2] = normal.z\n\n const side = Math.floor(i / faceTris)\n\n switch (side) {\n case 0: // right\n // generate UVs along Z then Y\n faceDirVector.set(1, 0, 0)\n uvs[j + 0] = getUv(faceDirVector, normal, 'z', 'y', radius, depth)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'y', 'z', radius, height)\n break\n\n case 1: // left\n // generate UVs along Z then Y\n faceDirVector.set(-1, 0, 0)\n uvs[j + 0] = 1.0 - getUv(faceDirVector, normal, 'z', 'y', radius, depth)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'y', 'z', radius, height)\n break\n\n case 2: // top\n // generate UVs along X then Z\n faceDirVector.set(0, 1, 0)\n uvs[j + 0] = 1.0 - getUv(faceDirVector, normal, 'x', 'z', radius, width)\n uvs[j + 1] = getUv(faceDirVector, normal, 'z', 'x', radius, depth)\n break\n\n case 3: // bottom\n // generate UVs along X then Z\n faceDirVector.set(0, -1, 0)\n uvs[j + 0] = 1.0 - getUv(faceDirVector, normal, 'x', 'z', radius, width)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'z', 'x', radius, depth)\n break\n\n case 4: // front\n // generate UVs along X then Y\n faceDirVector.set(0, 0, 1)\n uvs[j + 0] = 1.0 - getUv(faceDirVector, normal, 'x', 'y', radius, width)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'y', 'x', radius, height)\n break\n\n case 5: // back\n // generate UVs along X then Y\n faceDirVector.set(0, 0, -1)\n uvs[j + 0] = getUv(faceDirVector, normal, 'x', 'y', radius, width)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'y', 'x', radius, height)\n break\n }\n }\n }\n}\n\nexport { RoundedBoxGeometry }\n"],"names":["Vector3","BoxGeometry"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { Vector3, BoxGeometry } from "three";
2
- const tempNormal = new Vector3();
1
+ import { BoxGeometry, Vector3 } from "three";
2
+ const tempNormal = /* @__PURE__ */ new Vector3();
3
3
  function getUv(faceDirVector, normal, uvAxis, projectionAxis, radius, sideLength) {
4
4
  const totArcLength = 2 * Math.PI * radius / 4;
5
5
  const centerLength = Math.max(sideLength - 2 * radius, 0);
@@ -1 +1 @@
1
- {"version":3,"file":"RoundedBoxGeometry.js","sources":["../../src/geometries/RoundedBoxGeometry.js"],"sourcesContent":["import { BoxGeometry, Vector3 } from 'three'\n\nconst tempNormal = new Vector3()\n\nfunction getUv(faceDirVector, normal, uvAxis, projectionAxis, radius, sideLength) {\n const totArcLength = (2 * Math.PI * radius) / 4\n\n // length of the planes between the arcs on each axis\n const centerLength = Math.max(sideLength - 2 * radius, 0)\n const halfArc = Math.PI / 4\n\n // Get the vector projected onto the Y plane\n tempNormal.copy(normal)\n tempNormal[projectionAxis] = 0\n tempNormal.normalize()\n\n // total amount of UV space alloted to a single arc\n const arcUvRatio = (0.5 * totArcLength) / (totArcLength + centerLength)\n\n // the distance along one arc the point is at\n const arcAngleRatio = 1.0 - tempNormal.angleTo(faceDirVector) / halfArc\n\n if (Math.sign(tempNormal[uvAxis]) === 1) {\n return arcAngleRatio * arcUvRatio\n } else {\n // total amount of UV space alloted to the plane between the arcs\n const lenUv = centerLength / (totArcLength + centerLength)\n return lenUv + arcUvRatio + arcUvRatio * (1.0 - arcAngleRatio)\n }\n}\n\nclass RoundedBoxGeometry extends BoxGeometry {\n constructor(width = 1, height = 1, depth = 1, segments = 2, radius = 0.1) {\n // ensure segments is odd so we have a plane connecting the rounded corners\n segments = segments * 2 + 1\n\n // ensure radius isn't bigger than shortest side\n radius = Math.min(width / 2, height / 2, depth / 2, radius)\n\n super(1, 1, 1, segments, segments, segments)\n\n // if we just have one segment we're the same as a regular box\n if (segments === 1) return\n\n const geometry2 = this.toNonIndexed()\n\n this.index = null\n this.attributes.position = geometry2.attributes.position\n this.attributes.normal = geometry2.attributes.normal\n this.attributes.uv = geometry2.attributes.uv\n\n //\n\n const position = new Vector3()\n const normal = new Vector3()\n\n const box = new Vector3(width, height, depth).divideScalar(2).subScalar(radius)\n\n const positions = this.attributes.position.array\n const normals = this.attributes.normal.array\n const uvs = this.attributes.uv.array\n\n const faceTris = positions.length / 6\n const faceDirVector = new Vector3()\n const halfSegmentSize = 0.5 / segments\n\n for (let i = 0, j = 0; i < positions.length; i += 3, j += 2) {\n position.fromArray(positions, i)\n normal.copy(position)\n normal.x -= Math.sign(normal.x) * halfSegmentSize\n normal.y -= Math.sign(normal.y) * halfSegmentSize\n normal.z -= Math.sign(normal.z) * halfSegmentSize\n normal.normalize()\n\n positions[i + 0] = box.x * Math.sign(position.x) + normal.x * radius\n positions[i + 1] = box.y * Math.sign(position.y) + normal.y * radius\n positions[i + 2] = box.z * Math.sign(position.z) + normal.z * radius\n\n normals[i + 0] = normal.x\n normals[i + 1] = normal.y\n normals[i + 2] = normal.z\n\n const side = Math.floor(i / faceTris)\n\n switch (side) {\n case 0: // right\n // generate UVs along Z then Y\n faceDirVector.set(1, 0, 0)\n uvs[j + 0] = getUv(faceDirVector, normal, 'z', 'y', radius, depth)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'y', 'z', radius, height)\n break\n\n case 1: // left\n // generate UVs along Z then Y\n faceDirVector.set(-1, 0, 0)\n uvs[j + 0] = 1.0 - getUv(faceDirVector, normal, 'z', 'y', radius, depth)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'y', 'z', radius, height)\n break\n\n case 2: // top\n // generate UVs along X then Z\n faceDirVector.set(0, 1, 0)\n uvs[j + 0] = 1.0 - getUv(faceDirVector, normal, 'x', 'z', radius, width)\n uvs[j + 1] = getUv(faceDirVector, normal, 'z', 'x', radius, depth)\n break\n\n case 3: // bottom\n // generate UVs along X then Z\n faceDirVector.set(0, -1, 0)\n uvs[j + 0] = 1.0 - getUv(faceDirVector, normal, 'x', 'z', radius, width)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'z', 'x', radius, depth)\n break\n\n case 4: // front\n // generate UVs along X then Y\n faceDirVector.set(0, 0, 1)\n uvs[j + 0] = 1.0 - getUv(faceDirVector, normal, 'x', 'y', radius, width)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'y', 'x', radius, height)\n break\n\n case 5: // back\n // generate UVs along X then Y\n faceDirVector.set(0, 0, -1)\n uvs[j + 0] = getUv(faceDirVector, normal, 'x', 'y', radius, width)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'y', 'x', radius, height)\n break\n }\n }\n }\n}\n\nexport { RoundedBoxGeometry }\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RoundedBoxGeometry.js","sources":["../../src/geometries/RoundedBoxGeometry.js"],"sourcesContent":["import { BoxGeometry, Vector3 } from 'three'\n\nconst tempNormal = /* @__PURE__ */ new Vector3()\n\nfunction getUv(faceDirVector, normal, uvAxis, projectionAxis, radius, sideLength) {\n const totArcLength = (2 * Math.PI * radius) / 4\n\n // length of the planes between the arcs on each axis\n const centerLength = Math.max(sideLength - 2 * radius, 0)\n const halfArc = Math.PI / 4\n\n // Get the vector projected onto the Y plane\n tempNormal.copy(normal)\n tempNormal[projectionAxis] = 0\n tempNormal.normalize()\n\n // total amount of UV space alloted to a single arc\n const arcUvRatio = (0.5 * totArcLength) / (totArcLength + centerLength)\n\n // the distance along one arc the point is at\n const arcAngleRatio = 1.0 - tempNormal.angleTo(faceDirVector) / halfArc\n\n if (Math.sign(tempNormal[uvAxis]) === 1) {\n return arcAngleRatio * arcUvRatio\n } else {\n // total amount of UV space alloted to the plane between the arcs\n const lenUv = centerLength / (totArcLength + centerLength)\n return lenUv + arcUvRatio + arcUvRatio * (1.0 - arcAngleRatio)\n }\n}\n\nclass RoundedBoxGeometry extends BoxGeometry {\n constructor(width = 1, height = 1, depth = 1, segments = 2, radius = 0.1) {\n // ensure segments is odd so we have a plane connecting the rounded corners\n segments = segments * 2 + 1\n\n // ensure radius isn't bigger than shortest side\n radius = Math.min(width / 2, height / 2, depth / 2, radius)\n\n super(1, 1, 1, segments, segments, segments)\n\n // if we just have one segment we're the same as a regular box\n if (segments === 1) return\n\n const geometry2 = this.toNonIndexed()\n\n this.index = null\n this.attributes.position = geometry2.attributes.position\n this.attributes.normal = geometry2.attributes.normal\n this.attributes.uv = geometry2.attributes.uv\n\n //\n\n const position = new Vector3()\n const normal = new Vector3()\n\n const box = new Vector3(width, height, depth).divideScalar(2).subScalar(radius)\n\n const positions = this.attributes.position.array\n const normals = this.attributes.normal.array\n const uvs = this.attributes.uv.array\n\n const faceTris = positions.length / 6\n const faceDirVector = new Vector3()\n const halfSegmentSize = 0.5 / segments\n\n for (let i = 0, j = 0; i < positions.length; i += 3, j += 2) {\n position.fromArray(positions, i)\n normal.copy(position)\n normal.x -= Math.sign(normal.x) * halfSegmentSize\n normal.y -= Math.sign(normal.y) * halfSegmentSize\n normal.z -= Math.sign(normal.z) * halfSegmentSize\n normal.normalize()\n\n positions[i + 0] = box.x * Math.sign(position.x) + normal.x * radius\n positions[i + 1] = box.y * Math.sign(position.y) + normal.y * radius\n positions[i + 2] = box.z * Math.sign(position.z) + normal.z * radius\n\n normals[i + 0] = normal.x\n normals[i + 1] = normal.y\n normals[i + 2] = normal.z\n\n const side = Math.floor(i / faceTris)\n\n switch (side) {\n case 0: // right\n // generate UVs along Z then Y\n faceDirVector.set(1, 0, 0)\n uvs[j + 0] = getUv(faceDirVector, normal, 'z', 'y', radius, depth)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'y', 'z', radius, height)\n break\n\n case 1: // left\n // generate UVs along Z then Y\n faceDirVector.set(-1, 0, 0)\n uvs[j + 0] = 1.0 - getUv(faceDirVector, normal, 'z', 'y', radius, depth)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'y', 'z', radius, height)\n break\n\n case 2: // top\n // generate UVs along X then Z\n faceDirVector.set(0, 1, 0)\n uvs[j + 0] = 1.0 - getUv(faceDirVector, normal, 'x', 'z', radius, width)\n uvs[j + 1] = getUv(faceDirVector, normal, 'z', 'x', radius, depth)\n break\n\n case 3: // bottom\n // generate UVs along X then Z\n faceDirVector.set(0, -1, 0)\n uvs[j + 0] = 1.0 - getUv(faceDirVector, normal, 'x', 'z', radius, width)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'z', 'x', radius, depth)\n break\n\n case 4: // front\n // generate UVs along X then Y\n faceDirVector.set(0, 0, 1)\n uvs[j + 0] = 1.0 - getUv(faceDirVector, normal, 'x', 'y', radius, width)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'y', 'x', radius, height)\n break\n\n case 5: // back\n // generate UVs along X then Y\n faceDirVector.set(0, 0, -1)\n uvs[j + 0] = getUv(faceDirVector, normal, 'x', 'y', radius, width)\n uvs[j + 1] = 1.0 - getUv(faceDirVector, normal, 'y', 'x', radius, height)\n break\n }\n }\n }\n}\n\nexport { RoundedBoxGeometry }\n"],"names":[],"mappings":"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"}
@@ -7,8 +7,8 @@ var __publicField = (obj, key, value) => {
7
7
  };
8
8
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
9
9
  const THREE = require("three");
10
- const _o = new THREE.Object3D();
11
- const _v = new THREE.Vector3();
10
+ const _o = /* @__PURE__ */ new THREE.Object3D();
11
+ const _v = /* @__PURE__ */ new THREE.Vector3();
12
12
  class RaycasterHelper extends THREE.Object3D {
13
13
  constructor(raycaster, numberOfHitsToVisualize = 20) {
14
14
  super();
@@ -1 +1 @@
1
- {"version":3,"file":"RaycasterHelper.cjs","sources":["../../src/helpers/RaycasterHelper.ts"],"sourcesContent":["/**\n * from https://github.com/gsimone/things/tree/main/packages/three-raycaster-helper\n */\n\nimport {\n BufferAttribute,\n BufferGeometry,\n Float32BufferAttribute,\n InstancedMesh,\n Intersection,\n Line,\n LineBasicMaterial,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Raycaster,\n SphereGeometry,\n Vector3,\n} from 'three'\n\nconst _o = new Object3D()\nconst _v = new Vector3()\n\nclass RaycasterHelper extends Object3D {\n raycaster: Raycaster\n hits: Intersection[]\n\n origin: Mesh<SphereGeometry, MeshBasicMaterial>\n near: Line<BufferGeometry, LineBasicMaterial>\n far: Line<BufferGeometry, LineBasicMaterial>\n\n nearToFar: Line<BufferGeometry, LineBasicMaterial>\n originToNear: Line<BufferGeometry, LineBasicMaterial>\n\n hitPoints: InstancedMesh\n\n colors = {\n near: 0xffffff,\n far: 0xffffff,\n originToNear: 0x333333,\n nearToFar: 0xffffff,\n origin: [0x0eec82, 0xff005b],\n }\n\n constructor(raycaster: Raycaster, public numberOfHitsToVisualize = 20) {\n super()\n this.raycaster = raycaster\n\n this.hits = []\n\n this.origin = new Mesh(new SphereGeometry(0.04, 32), new MeshBasicMaterial())\n this.origin.name = 'RaycasterHelper_origin'\n this.origin.raycast = () => null\n\n const size = 0.1\n let geometry = new BufferGeometry()\n // prettier-ignore\n geometry.setAttribute( 'position', new Float32BufferAttribute( [\n - size, size, 0,\n size, size, 0,\n size, - size, 0,\n - size, - size, 0,\n - size, size, 0\n ], 3 ) );\n\n this.near = new Line(geometry, new LineBasicMaterial())\n this.near.name = 'RaycasterHelper_near'\n this.near.raycast = () => null\n\n this.far = new Line(geometry, new LineBasicMaterial())\n this.far.name = 'RaycasterHelper_far'\n this.far.raycast = () => null\n\n this.nearToFar = new Line(new BufferGeometry(), new LineBasicMaterial())\n this.nearToFar.name = 'RaycasterHelper_nearToFar'\n this.nearToFar.raycast = () => null\n\n this.nearToFar.geometry.setFromPoints([_v, _v])\n\n this.originToNear = new Line(this.nearToFar.geometry.clone(), new LineBasicMaterial())\n this.originToNear.name = 'RaycasterHelper_originToNear'\n this.originToNear.raycast = () => null\n\n this.hitPoints = new InstancedMesh(new SphereGeometry(0.04), new MeshBasicMaterial(), this.numberOfHitsToVisualize)\n this.hitPoints.name = 'RaycasterHelper_hits'\n this.hitPoints.raycast = () => null\n\n this.add(this.nearToFar)\n this.add(this.originToNear)\n\n this.add(this.near)\n this.add(this.far)\n\n this.add(this.origin)\n this.add(this.hitPoints)\n\n this.setColors()\n }\n\n setColors = (colors?: Partial<typeof this.colors>) => {\n const _colors = {\n ...this.colors,\n ...colors,\n }\n\n this.near.material.color.set(_colors.near)\n this.far.material.color.set(_colors.far)\n this.nearToFar.material.color.set(_colors.nearToFar)\n this.originToNear.material.color.set(_colors.originToNear)\n }\n\n update = () => {\n const origin = this.raycaster.ray.origin\n const direction = this.raycaster.ray.direction\n\n this.origin.position.copy(origin)\n\n this.near.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.near))\n\n this.far.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.far))\n\n this.far.lookAt(origin)\n this.near.lookAt(origin)\n\n let pos = this.nearToFar.geometry.getAttribute('position') as BufferAttribute\n pos.set([...this.near.position.toArray(), ...this.far.position.toArray()])\n pos.needsUpdate = true\n\n pos = this.originToNear.geometry.getAttribute('position') as BufferAttribute\n pos.set([...origin.toArray(), ...this.near.position.toArray()])\n pos.needsUpdate = true\n\n /**\n * Update hit points visualization\n */\n for (let i = 0; i < this.numberOfHitsToVisualize; i++) {\n const hit = this.hits?.[i]\n\n if (hit) {\n const { point } = hit\n _o.position.copy(point)\n _o.scale.setScalar(1)\n } else {\n _o.scale.setScalar(0)\n }\n\n _o.updateMatrix()\n\n this.hitPoints.setMatrixAt(i, _o.matrix)\n }\n\n this.hitPoints.instanceMatrix.needsUpdate = true\n\n /**\n * Update the color of the origin based on wether there are hits.\n */\n this.origin.material.color.set(this.hits.length > 0 ? this.colors.origin[0] : this.colors.origin[1])\n }\n\n dispose = () => {\n this.origin.geometry.dispose()\n this.origin.material.dispose()\n this.near.geometry.dispose()\n this.near.material.dispose()\n this.far.geometry.dispose()\n this.far.material.dispose()\n this.nearToFar.geometry.dispose()\n this.nearToFar.material.dispose()\n this.originToNear.geometry.dispose()\n this.originToNear.material.dispose()\n this.hitPoints.dispose()\n }\n}\n\nexport { RaycasterHelper }\n"],"names":["Object3D","Vector3","Mesh","SphereGeometry","MeshBasicMaterial","BufferGeometry","Float32BufferAttribute","Line","LineBasicMaterial","InstancedMesh"],"mappings":"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"}
1
+ {"version":3,"file":"RaycasterHelper.cjs","sources":["../../src/helpers/RaycasterHelper.ts"],"sourcesContent":["/**\n * from https://github.com/gsimone/things/tree/main/packages/three-raycaster-helper\n */\n\nimport {\n BufferAttribute,\n BufferGeometry,\n Float32BufferAttribute,\n InstancedMesh,\n Intersection,\n Line,\n LineBasicMaterial,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Raycaster,\n SphereGeometry,\n Vector3,\n} from 'three'\n\nconst _o = /* @__PURE__ */ new Object3D()\nconst _v = /* @__PURE__ */ new Vector3()\n\nclass RaycasterHelper extends Object3D {\n raycaster: Raycaster\n hits: Intersection[]\n\n origin: Mesh<SphereGeometry, MeshBasicMaterial>\n near: Line<BufferGeometry, LineBasicMaterial>\n far: Line<BufferGeometry, LineBasicMaterial>\n\n nearToFar: Line<BufferGeometry, LineBasicMaterial>\n originToNear: Line<BufferGeometry, LineBasicMaterial>\n\n hitPoints: InstancedMesh\n\n colors = {\n near: 0xffffff,\n far: 0xffffff,\n originToNear: 0x333333,\n nearToFar: 0xffffff,\n origin: [0x0eec82, 0xff005b],\n }\n\n constructor(raycaster: Raycaster, public numberOfHitsToVisualize = 20) {\n super()\n this.raycaster = raycaster\n\n this.hits = []\n\n this.origin = new Mesh(new SphereGeometry(0.04, 32), new MeshBasicMaterial())\n this.origin.name = 'RaycasterHelper_origin'\n this.origin.raycast = () => null\n\n const size = 0.1\n let geometry = new BufferGeometry()\n // prettier-ignore\n geometry.setAttribute( 'position', new Float32BufferAttribute( [\n - size, size, 0,\n size, size, 0,\n size, - size, 0,\n - size, - size, 0,\n - size, size, 0\n ], 3 ) );\n\n this.near = new Line(geometry, new LineBasicMaterial())\n this.near.name = 'RaycasterHelper_near'\n this.near.raycast = () => null\n\n this.far = new Line(geometry, new LineBasicMaterial())\n this.far.name = 'RaycasterHelper_far'\n this.far.raycast = () => null\n\n this.nearToFar = new Line(new BufferGeometry(), new LineBasicMaterial())\n this.nearToFar.name = 'RaycasterHelper_nearToFar'\n this.nearToFar.raycast = () => null\n\n this.nearToFar.geometry.setFromPoints([_v, _v])\n\n this.originToNear = new Line(this.nearToFar.geometry.clone(), new LineBasicMaterial())\n this.originToNear.name = 'RaycasterHelper_originToNear'\n this.originToNear.raycast = () => null\n\n this.hitPoints = new InstancedMesh(new SphereGeometry(0.04), new MeshBasicMaterial(), this.numberOfHitsToVisualize)\n this.hitPoints.name = 'RaycasterHelper_hits'\n this.hitPoints.raycast = () => null\n\n this.add(this.nearToFar)\n this.add(this.originToNear)\n\n this.add(this.near)\n this.add(this.far)\n\n this.add(this.origin)\n this.add(this.hitPoints)\n\n this.setColors()\n }\n\n setColors = (colors?: Partial<typeof this.colors>) => {\n const _colors = {\n ...this.colors,\n ...colors,\n }\n\n this.near.material.color.set(_colors.near)\n this.far.material.color.set(_colors.far)\n this.nearToFar.material.color.set(_colors.nearToFar)\n this.originToNear.material.color.set(_colors.originToNear)\n }\n\n update = () => {\n const origin = this.raycaster.ray.origin\n const direction = this.raycaster.ray.direction\n\n this.origin.position.copy(origin)\n\n this.near.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.near))\n\n this.far.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.far))\n\n this.far.lookAt(origin)\n this.near.lookAt(origin)\n\n let pos = this.nearToFar.geometry.getAttribute('position') as BufferAttribute\n pos.set([...this.near.position.toArray(), ...this.far.position.toArray()])\n pos.needsUpdate = true\n\n pos = this.originToNear.geometry.getAttribute('position') as BufferAttribute\n pos.set([...origin.toArray(), ...this.near.position.toArray()])\n pos.needsUpdate = true\n\n /**\n * Update hit points visualization\n */\n for (let i = 0; i < this.numberOfHitsToVisualize; i++) {\n const hit = this.hits?.[i]\n\n if (hit) {\n const { point } = hit\n _o.position.copy(point)\n _o.scale.setScalar(1)\n } else {\n _o.scale.setScalar(0)\n }\n\n _o.updateMatrix()\n\n this.hitPoints.setMatrixAt(i, _o.matrix)\n }\n\n this.hitPoints.instanceMatrix.needsUpdate = true\n\n /**\n * Update the color of the origin based on wether there are hits.\n */\n this.origin.material.color.set(this.hits.length > 0 ? this.colors.origin[0] : this.colors.origin[1])\n }\n\n dispose = () => {\n this.origin.geometry.dispose()\n this.origin.material.dispose()\n this.near.geometry.dispose()\n this.near.material.dispose()\n this.far.geometry.dispose()\n this.far.material.dispose()\n this.nearToFar.geometry.dispose()\n this.nearToFar.material.dispose()\n this.originToNear.geometry.dispose()\n this.originToNear.material.dispose()\n this.hitPoints.dispose()\n }\n}\n\nexport { RaycasterHelper }\n"],"names":["Object3D","Vector3","Mesh","SphereGeometry","MeshBasicMaterial","BufferGeometry","Float32BufferAttribute","Line","LineBasicMaterial","InstancedMesh"],"mappings":"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"}
@@ -4,9 +4,9 @@ var __publicField = (obj, key, value) => {
4
4
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
5
  return value;
6
6
  };
7
- import { Object3D, Vector3, Mesh, SphereGeometry, MeshBasicMaterial, BufferGeometry, Float32BufferAttribute, Line, LineBasicMaterial, InstancedMesh } from "three";
8
- const _o = new Object3D();
9
- const _v = new Vector3();
7
+ import { Object3D, Mesh, SphereGeometry, MeshBasicMaterial, BufferGeometry, Float32BufferAttribute, Line, LineBasicMaterial, InstancedMesh, Vector3 } from "three";
8
+ const _o = /* @__PURE__ */ new Object3D();
9
+ const _v = /* @__PURE__ */ new Vector3();
10
10
  class RaycasterHelper extends Object3D {
11
11
  constructor(raycaster, numberOfHitsToVisualize = 20) {
12
12
  super();
@@ -1 +1 @@
1
- {"version":3,"file":"RaycasterHelper.js","sources":["../../src/helpers/RaycasterHelper.ts"],"sourcesContent":["/**\n * from https://github.com/gsimone/things/tree/main/packages/three-raycaster-helper\n */\n\nimport {\n BufferAttribute,\n BufferGeometry,\n Float32BufferAttribute,\n InstancedMesh,\n Intersection,\n Line,\n LineBasicMaterial,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Raycaster,\n SphereGeometry,\n Vector3,\n} from 'three'\n\nconst _o = new Object3D()\nconst _v = new Vector3()\n\nclass RaycasterHelper extends Object3D {\n raycaster: Raycaster\n hits: Intersection[]\n\n origin: Mesh<SphereGeometry, MeshBasicMaterial>\n near: Line<BufferGeometry, LineBasicMaterial>\n far: Line<BufferGeometry, LineBasicMaterial>\n\n nearToFar: Line<BufferGeometry, LineBasicMaterial>\n originToNear: Line<BufferGeometry, LineBasicMaterial>\n\n hitPoints: InstancedMesh\n\n colors = {\n near: 0xffffff,\n far: 0xffffff,\n originToNear: 0x333333,\n nearToFar: 0xffffff,\n origin: [0x0eec82, 0xff005b],\n }\n\n constructor(raycaster: Raycaster, public numberOfHitsToVisualize = 20) {\n super()\n this.raycaster = raycaster\n\n this.hits = []\n\n this.origin = new Mesh(new SphereGeometry(0.04, 32), new MeshBasicMaterial())\n this.origin.name = 'RaycasterHelper_origin'\n this.origin.raycast = () => null\n\n const size = 0.1\n let geometry = new BufferGeometry()\n // prettier-ignore\n geometry.setAttribute( 'position', new Float32BufferAttribute( [\n - size, size, 0,\n size, size, 0,\n size, - size, 0,\n - size, - size, 0,\n - size, size, 0\n ], 3 ) );\n\n this.near = new Line(geometry, new LineBasicMaterial())\n this.near.name = 'RaycasterHelper_near'\n this.near.raycast = () => null\n\n this.far = new Line(geometry, new LineBasicMaterial())\n this.far.name = 'RaycasterHelper_far'\n this.far.raycast = () => null\n\n this.nearToFar = new Line(new BufferGeometry(), new LineBasicMaterial())\n this.nearToFar.name = 'RaycasterHelper_nearToFar'\n this.nearToFar.raycast = () => null\n\n this.nearToFar.geometry.setFromPoints([_v, _v])\n\n this.originToNear = new Line(this.nearToFar.geometry.clone(), new LineBasicMaterial())\n this.originToNear.name = 'RaycasterHelper_originToNear'\n this.originToNear.raycast = () => null\n\n this.hitPoints = new InstancedMesh(new SphereGeometry(0.04), new MeshBasicMaterial(), this.numberOfHitsToVisualize)\n this.hitPoints.name = 'RaycasterHelper_hits'\n this.hitPoints.raycast = () => null\n\n this.add(this.nearToFar)\n this.add(this.originToNear)\n\n this.add(this.near)\n this.add(this.far)\n\n this.add(this.origin)\n this.add(this.hitPoints)\n\n this.setColors()\n }\n\n setColors = (colors?: Partial<typeof this.colors>) => {\n const _colors = {\n ...this.colors,\n ...colors,\n }\n\n this.near.material.color.set(_colors.near)\n this.far.material.color.set(_colors.far)\n this.nearToFar.material.color.set(_colors.nearToFar)\n this.originToNear.material.color.set(_colors.originToNear)\n }\n\n update = () => {\n const origin = this.raycaster.ray.origin\n const direction = this.raycaster.ray.direction\n\n this.origin.position.copy(origin)\n\n this.near.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.near))\n\n this.far.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.far))\n\n this.far.lookAt(origin)\n this.near.lookAt(origin)\n\n let pos = this.nearToFar.geometry.getAttribute('position') as BufferAttribute\n pos.set([...this.near.position.toArray(), ...this.far.position.toArray()])\n pos.needsUpdate = true\n\n pos = this.originToNear.geometry.getAttribute('position') as BufferAttribute\n pos.set([...origin.toArray(), ...this.near.position.toArray()])\n pos.needsUpdate = true\n\n /**\n * Update hit points visualization\n */\n for (let i = 0; i < this.numberOfHitsToVisualize; i++) {\n const hit = this.hits?.[i]\n\n if (hit) {\n const { point } = hit\n _o.position.copy(point)\n _o.scale.setScalar(1)\n } else {\n _o.scale.setScalar(0)\n }\n\n _o.updateMatrix()\n\n this.hitPoints.setMatrixAt(i, _o.matrix)\n }\n\n this.hitPoints.instanceMatrix.needsUpdate = true\n\n /**\n * Update the color of the origin based on wether there are hits.\n */\n this.origin.material.color.set(this.hits.length > 0 ? this.colors.origin[0] : this.colors.origin[1])\n }\n\n dispose = () => {\n this.origin.geometry.dispose()\n this.origin.material.dispose()\n this.near.geometry.dispose()\n this.near.material.dispose()\n this.far.geometry.dispose()\n this.far.material.dispose()\n this.nearToFar.geometry.dispose()\n this.nearToFar.material.dispose()\n this.originToNear.geometry.dispose()\n this.originToNear.material.dispose()\n this.hitPoints.dispose()\n }\n}\n\nexport { RaycasterHelper }\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RaycasterHelper.js","sources":["../../src/helpers/RaycasterHelper.ts"],"sourcesContent":["/**\n * from https://github.com/gsimone/things/tree/main/packages/three-raycaster-helper\n */\n\nimport {\n BufferAttribute,\n BufferGeometry,\n Float32BufferAttribute,\n InstancedMesh,\n Intersection,\n Line,\n LineBasicMaterial,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Raycaster,\n SphereGeometry,\n Vector3,\n} from 'three'\n\nconst _o = /* @__PURE__ */ new Object3D()\nconst _v = /* @__PURE__ */ new Vector3()\n\nclass RaycasterHelper extends Object3D {\n raycaster: Raycaster\n hits: Intersection[]\n\n origin: Mesh<SphereGeometry, MeshBasicMaterial>\n near: Line<BufferGeometry, LineBasicMaterial>\n far: Line<BufferGeometry, LineBasicMaterial>\n\n nearToFar: Line<BufferGeometry, LineBasicMaterial>\n originToNear: Line<BufferGeometry, LineBasicMaterial>\n\n hitPoints: InstancedMesh\n\n colors = {\n near: 0xffffff,\n far: 0xffffff,\n originToNear: 0x333333,\n nearToFar: 0xffffff,\n origin: [0x0eec82, 0xff005b],\n }\n\n constructor(raycaster: Raycaster, public numberOfHitsToVisualize = 20) {\n super()\n this.raycaster = raycaster\n\n this.hits = []\n\n this.origin = new Mesh(new SphereGeometry(0.04, 32), new MeshBasicMaterial())\n this.origin.name = 'RaycasterHelper_origin'\n this.origin.raycast = () => null\n\n const size = 0.1\n let geometry = new BufferGeometry()\n // prettier-ignore\n geometry.setAttribute( 'position', new Float32BufferAttribute( [\n - size, size, 0,\n size, size, 0,\n size, - size, 0,\n - size, - size, 0,\n - size, size, 0\n ], 3 ) );\n\n this.near = new Line(geometry, new LineBasicMaterial())\n this.near.name = 'RaycasterHelper_near'\n this.near.raycast = () => null\n\n this.far = new Line(geometry, new LineBasicMaterial())\n this.far.name = 'RaycasterHelper_far'\n this.far.raycast = () => null\n\n this.nearToFar = new Line(new BufferGeometry(), new LineBasicMaterial())\n this.nearToFar.name = 'RaycasterHelper_nearToFar'\n this.nearToFar.raycast = () => null\n\n this.nearToFar.geometry.setFromPoints([_v, _v])\n\n this.originToNear = new Line(this.nearToFar.geometry.clone(), new LineBasicMaterial())\n this.originToNear.name = 'RaycasterHelper_originToNear'\n this.originToNear.raycast = () => null\n\n this.hitPoints = new InstancedMesh(new SphereGeometry(0.04), new MeshBasicMaterial(), this.numberOfHitsToVisualize)\n this.hitPoints.name = 'RaycasterHelper_hits'\n this.hitPoints.raycast = () => null\n\n this.add(this.nearToFar)\n this.add(this.originToNear)\n\n this.add(this.near)\n this.add(this.far)\n\n this.add(this.origin)\n this.add(this.hitPoints)\n\n this.setColors()\n }\n\n setColors = (colors?: Partial<typeof this.colors>) => {\n const _colors = {\n ...this.colors,\n ...colors,\n }\n\n this.near.material.color.set(_colors.near)\n this.far.material.color.set(_colors.far)\n this.nearToFar.material.color.set(_colors.nearToFar)\n this.originToNear.material.color.set(_colors.originToNear)\n }\n\n update = () => {\n const origin = this.raycaster.ray.origin\n const direction = this.raycaster.ray.direction\n\n this.origin.position.copy(origin)\n\n this.near.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.near))\n\n this.far.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.far))\n\n this.far.lookAt(origin)\n this.near.lookAt(origin)\n\n let pos = this.nearToFar.geometry.getAttribute('position') as BufferAttribute\n pos.set([...this.near.position.toArray(), ...this.far.position.toArray()])\n pos.needsUpdate = true\n\n pos = this.originToNear.geometry.getAttribute('position') as BufferAttribute\n pos.set([...origin.toArray(), ...this.near.position.toArray()])\n pos.needsUpdate = true\n\n /**\n * Update hit points visualization\n */\n for (let i = 0; i < this.numberOfHitsToVisualize; i++) {\n const hit = this.hits?.[i]\n\n if (hit) {\n const { point } = hit\n _o.position.copy(point)\n _o.scale.setScalar(1)\n } else {\n _o.scale.setScalar(0)\n }\n\n _o.updateMatrix()\n\n this.hitPoints.setMatrixAt(i, _o.matrix)\n }\n\n this.hitPoints.instanceMatrix.needsUpdate = true\n\n /**\n * Update the color of the origin based on wether there are hits.\n */\n this.origin.material.color.set(this.hits.length > 0 ? this.colors.origin[0] : this.colors.origin[1])\n }\n\n dispose = () => {\n this.origin.geometry.dispose()\n this.origin.material.dispose()\n this.near.geometry.dispose()\n this.near.material.dispose()\n this.far.geometry.dispose()\n this.far.material.dispose()\n this.nearToFar.geometry.dispose()\n this.nearToFar.material.dispose()\n this.originToNear.geometry.dispose()\n this.originToNear.material.dispose()\n this.hitPoints.dispose()\n }\n}\n\nexport { RaycasterHelper }\n"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const THREE = require("three");
4
- const _v1 = new THREE.Vector3();
5
- const _v2 = new THREE.Vector3();
6
- const _normalMatrix = new THREE.Matrix3();
4
+ const _v1 = /* @__PURE__ */ new THREE.Vector3();
5
+ const _v2 = /* @__PURE__ */ new THREE.Vector3();
6
+ const _normalMatrix = /* @__PURE__ */ new THREE.Matrix3();
7
7
  class VertexNormalsHelper extends THREE.LineSegments {
8
8
  constructor(object, size = 1, color = 16711680) {
9
9
  const geometry = new THREE.BufferGeometry();
@@ -1 +1 @@
1
- {"version":3,"file":"VertexNormalsHelper.cjs","sources":["../../src/helpers/VertexNormalsHelper.js"],"sourcesContent":["import { BufferGeometry, Float32BufferAttribute, LineSegments, LineBasicMaterial, Matrix3, Vector3 } from 'three'\n\nconst _v1 = new Vector3()\nconst _v2 = new Vector3()\nconst _normalMatrix = new Matrix3()\n\nclass VertexNormalsHelper extends LineSegments {\n constructor(object, size = 1, color = 0xff0000) {\n const geometry = new BufferGeometry()\n\n const nNormals = object.geometry.attributes.normal.count\n const positions = new Float32BufferAttribute(nNormals * 2 * 3, 3)\n\n geometry.setAttribute('position', positions)\n\n super(geometry, new LineBasicMaterial({ color, toneMapped: false }))\n\n this.object = object\n this.size = size\n this.type = 'VertexNormalsHelper'\n\n //\n\n this.matrixAutoUpdate = false\n\n this.update()\n }\n\n update() {\n this.object.updateMatrixWorld(true)\n\n _normalMatrix.getNormalMatrix(this.object.matrixWorld)\n\n const matrixWorld = this.object.matrixWorld\n\n const position = this.geometry.attributes.position\n\n //\n\n const objGeometry = this.object.geometry\n\n if (objGeometry) {\n const objPos = objGeometry.attributes.position\n\n const objNorm = objGeometry.attributes.normal\n\n let idx = 0\n\n // for simplicity, ignore index and drawcalls, and render every normal\n\n for (let j = 0, jl = objPos.count; j < jl; j++) {\n _v1.fromBufferAttribute(objPos, j).applyMatrix4(matrixWorld)\n\n _v2.fromBufferAttribute(objNorm, j)\n\n _v2.applyMatrix3(_normalMatrix).normalize().multiplyScalar(this.size).add(_v1)\n\n position.setXYZ(idx, _v1.x, _v1.y, _v1.z)\n\n idx = idx + 1\n\n position.setXYZ(idx, _v2.x, _v2.y, _v2.z)\n\n idx = idx + 1\n }\n }\n\n position.needsUpdate = true\n }\n\n dispose() {\n this.geometry.dispose()\n this.material.dispose()\n }\n}\n\nexport { VertexNormalsHelper }\n"],"names":["Vector3","Matrix3","LineSegments","BufferGeometry","Float32BufferAttribute","LineBasicMaterial"],"mappings":";;;AAEA,MAAM,MAAM,IAAIA,MAAAA,QAAS;AACzB,MAAM,MAAM,IAAIA,MAAAA,QAAS;AACzB,MAAM,gBAAgB,IAAIC,MAAAA,QAAS;AAEnC,MAAM,4BAA4BC,MAAAA,aAAa;AAAA,EAC7C,YAAY,QAAQ,OAAO,GAAG,QAAQ,UAAU;AAC9C,UAAM,WAAW,IAAIC,qBAAgB;AAErC,UAAM,WAAW,OAAO,SAAS,WAAW,OAAO;AACnD,UAAM,YAAY,IAAIC,MAAsB,uBAAC,WAAW,IAAI,GAAG,CAAC;AAEhE,aAAS,aAAa,YAAY,SAAS;AAE3C,UAAM,UAAU,IAAIC,MAAiB,kBAAC,EAAE,OAAO,YAAY,MAAK,CAAE,CAAC;AAEnE,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,OAAO;AAIZ,SAAK,mBAAmB;AAExB,SAAK,OAAQ;AAAA,EACd;AAAA,EAED,SAAS;AACP,SAAK,OAAO,kBAAkB,IAAI;AAElC,kBAAc,gBAAgB,KAAK,OAAO,WAAW;AAErD,UAAM,cAAc,KAAK,OAAO;AAEhC,UAAM,WAAW,KAAK,SAAS,WAAW;AAI1C,UAAM,cAAc,KAAK,OAAO;AAEhC,QAAI,aAAa;AACf,YAAM,SAAS,YAAY,WAAW;AAEtC,YAAM,UAAU,YAAY,WAAW;AAEvC,UAAI,MAAM;AAIV,eAAS,IAAI,GAAG,KAAK,OAAO,OAAO,IAAI,IAAI,KAAK;AAC9C,YAAI,oBAAoB,QAAQ,CAAC,EAAE,aAAa,WAAW;AAE3D,YAAI,oBAAoB,SAAS,CAAC;AAElC,YAAI,aAAa,aAAa,EAAE,UAAW,EAAC,eAAe,KAAK,IAAI,EAAE,IAAI,GAAG;AAE7E,iBAAS,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,cAAM,MAAM;AAEZ,iBAAS,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,cAAM,MAAM;AAAA,MACb;AAAA,IACF;AAED,aAAS,cAAc;AAAA,EACxB;AAAA,EAED,UAAU;AACR,SAAK,SAAS,QAAS;AACvB,SAAK,SAAS,QAAS;AAAA,EACxB;AACH;;"}
1
+ {"version":3,"file":"VertexNormalsHelper.cjs","sources":["../../src/helpers/VertexNormalsHelper.js"],"sourcesContent":["import { BufferGeometry, Float32BufferAttribute, LineSegments, LineBasicMaterial, Matrix3, Vector3 } from 'three'\n\nconst _v1 = /* @__PURE__ */ new Vector3()\nconst _v2 = /* @__PURE__ */ new Vector3()\nconst _normalMatrix = /* @__PURE__ */ new Matrix3()\n\nclass VertexNormalsHelper extends LineSegments {\n constructor(object, size = 1, color = 0xff0000) {\n const geometry = new BufferGeometry()\n\n const nNormals = object.geometry.attributes.normal.count\n const positions = new Float32BufferAttribute(nNormals * 2 * 3, 3)\n\n geometry.setAttribute('position', positions)\n\n super(geometry, new LineBasicMaterial({ color, toneMapped: false }))\n\n this.object = object\n this.size = size\n this.type = 'VertexNormalsHelper'\n\n //\n\n this.matrixAutoUpdate = false\n\n this.update()\n }\n\n update() {\n this.object.updateMatrixWorld(true)\n\n _normalMatrix.getNormalMatrix(this.object.matrixWorld)\n\n const matrixWorld = this.object.matrixWorld\n\n const position = this.geometry.attributes.position\n\n //\n\n const objGeometry = this.object.geometry\n\n if (objGeometry) {\n const objPos = objGeometry.attributes.position\n\n const objNorm = objGeometry.attributes.normal\n\n let idx = 0\n\n // for simplicity, ignore index and drawcalls, and render every normal\n\n for (let j = 0, jl = objPos.count; j < jl; j++) {\n _v1.fromBufferAttribute(objPos, j).applyMatrix4(matrixWorld)\n\n _v2.fromBufferAttribute(objNorm, j)\n\n _v2.applyMatrix3(_normalMatrix).normalize().multiplyScalar(this.size).add(_v1)\n\n position.setXYZ(idx, _v1.x, _v1.y, _v1.z)\n\n idx = idx + 1\n\n position.setXYZ(idx, _v2.x, _v2.y, _v2.z)\n\n idx = idx + 1\n }\n }\n\n position.needsUpdate = true\n }\n\n dispose() {\n this.geometry.dispose()\n this.material.dispose()\n }\n}\n\nexport { VertexNormalsHelper }\n"],"names":["Vector3","Matrix3","LineSegments","BufferGeometry","Float32BufferAttribute","LineBasicMaterial"],"mappings":";;;AAEA,MAAM,MAAsB,oBAAIA,MAAAA,QAAS;AACzC,MAAM,MAAsB,oBAAIA,MAAAA,QAAS;AACzC,MAAM,gBAAgC,oBAAIC,MAAAA,QAAS;AAEnD,MAAM,4BAA4BC,MAAAA,aAAa;AAAA,EAC7C,YAAY,QAAQ,OAAO,GAAG,QAAQ,UAAU;AAC9C,UAAM,WAAW,IAAIC,qBAAgB;AAErC,UAAM,WAAW,OAAO,SAAS,WAAW,OAAO;AACnD,UAAM,YAAY,IAAIC,MAAsB,uBAAC,WAAW,IAAI,GAAG,CAAC;AAEhE,aAAS,aAAa,YAAY,SAAS;AAE3C,UAAM,UAAU,IAAIC,MAAiB,kBAAC,EAAE,OAAO,YAAY,MAAK,CAAE,CAAC;AAEnE,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,OAAO;AAIZ,SAAK,mBAAmB;AAExB,SAAK,OAAQ;AAAA,EACd;AAAA,EAED,SAAS;AACP,SAAK,OAAO,kBAAkB,IAAI;AAElC,kBAAc,gBAAgB,KAAK,OAAO,WAAW;AAErD,UAAM,cAAc,KAAK,OAAO;AAEhC,UAAM,WAAW,KAAK,SAAS,WAAW;AAI1C,UAAM,cAAc,KAAK,OAAO;AAEhC,QAAI,aAAa;AACf,YAAM,SAAS,YAAY,WAAW;AAEtC,YAAM,UAAU,YAAY,WAAW;AAEvC,UAAI,MAAM;AAIV,eAAS,IAAI,GAAG,KAAK,OAAO,OAAO,IAAI,IAAI,KAAK;AAC9C,YAAI,oBAAoB,QAAQ,CAAC,EAAE,aAAa,WAAW;AAE3D,YAAI,oBAAoB,SAAS,CAAC;AAElC,YAAI,aAAa,aAAa,EAAE,UAAW,EAAC,eAAe,KAAK,IAAI,EAAE,IAAI,GAAG;AAE7E,iBAAS,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,cAAM,MAAM;AAEZ,iBAAS,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,cAAM,MAAM;AAAA,MACb;AAAA,IACF;AAED,aAAS,cAAc;AAAA,EACxB;AAAA,EAED,UAAU;AACR,SAAK,SAAS,QAAS;AACvB,SAAK,SAAS,QAAS;AAAA,EACxB;AACH;;"}
@@ -1,7 +1,7 @@
1
- import { Vector3, Matrix3, LineSegments, BufferGeometry, Float32BufferAttribute, LineBasicMaterial } from "three";
2
- const _v1 = new Vector3();
3
- const _v2 = new Vector3();
4
- const _normalMatrix = new Matrix3();
1
+ import { LineSegments, BufferGeometry, Float32BufferAttribute, LineBasicMaterial, Vector3, Matrix3 } from "three";
2
+ const _v1 = /* @__PURE__ */ new Vector3();
3
+ const _v2 = /* @__PURE__ */ new Vector3();
4
+ const _normalMatrix = /* @__PURE__ */ new Matrix3();
5
5
  class VertexNormalsHelper extends LineSegments {
6
6
  constructor(object, size = 1, color = 16711680) {
7
7
  const geometry = new BufferGeometry();
@@ -1 +1 @@
1
- {"version":3,"file":"VertexNormalsHelper.js","sources":["../../src/helpers/VertexNormalsHelper.js"],"sourcesContent":["import { BufferGeometry, Float32BufferAttribute, LineSegments, LineBasicMaterial, Matrix3, Vector3 } from 'three'\n\nconst _v1 = new Vector3()\nconst _v2 = new Vector3()\nconst _normalMatrix = new Matrix3()\n\nclass VertexNormalsHelper extends LineSegments {\n constructor(object, size = 1, color = 0xff0000) {\n const geometry = new BufferGeometry()\n\n const nNormals = object.geometry.attributes.normal.count\n const positions = new Float32BufferAttribute(nNormals * 2 * 3, 3)\n\n geometry.setAttribute('position', positions)\n\n super(geometry, new LineBasicMaterial({ color, toneMapped: false }))\n\n this.object = object\n this.size = size\n this.type = 'VertexNormalsHelper'\n\n //\n\n this.matrixAutoUpdate = false\n\n this.update()\n }\n\n update() {\n this.object.updateMatrixWorld(true)\n\n _normalMatrix.getNormalMatrix(this.object.matrixWorld)\n\n const matrixWorld = this.object.matrixWorld\n\n const position = this.geometry.attributes.position\n\n //\n\n const objGeometry = this.object.geometry\n\n if (objGeometry) {\n const objPos = objGeometry.attributes.position\n\n const objNorm = objGeometry.attributes.normal\n\n let idx = 0\n\n // for simplicity, ignore index and drawcalls, and render every normal\n\n for (let j = 0, jl = objPos.count; j < jl; j++) {\n _v1.fromBufferAttribute(objPos, j).applyMatrix4(matrixWorld)\n\n _v2.fromBufferAttribute(objNorm, j)\n\n _v2.applyMatrix3(_normalMatrix).normalize().multiplyScalar(this.size).add(_v1)\n\n position.setXYZ(idx, _v1.x, _v1.y, _v1.z)\n\n idx = idx + 1\n\n position.setXYZ(idx, _v2.x, _v2.y, _v2.z)\n\n idx = idx + 1\n }\n }\n\n position.needsUpdate = true\n }\n\n dispose() {\n this.geometry.dispose()\n this.material.dispose()\n }\n}\n\nexport { VertexNormalsHelper }\n"],"names":[],"mappings":";AAEA,MAAM,MAAM,IAAI,QAAS;AACzB,MAAM,MAAM,IAAI,QAAS;AACzB,MAAM,gBAAgB,IAAI,QAAS;AAEnC,MAAM,4BAA4B,aAAa;AAAA,EAC7C,YAAY,QAAQ,OAAO,GAAG,QAAQ,UAAU;AAC9C,UAAM,WAAW,IAAI,eAAgB;AAErC,UAAM,WAAW,OAAO,SAAS,WAAW,OAAO;AACnD,UAAM,YAAY,IAAI,uBAAuB,WAAW,IAAI,GAAG,CAAC;AAEhE,aAAS,aAAa,YAAY,SAAS;AAE3C,UAAM,UAAU,IAAI,kBAAkB,EAAE,OAAO,YAAY,MAAK,CAAE,CAAC;AAEnE,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,OAAO;AAIZ,SAAK,mBAAmB;AAExB,SAAK,OAAQ;AAAA,EACd;AAAA,EAED,SAAS;AACP,SAAK,OAAO,kBAAkB,IAAI;AAElC,kBAAc,gBAAgB,KAAK,OAAO,WAAW;AAErD,UAAM,cAAc,KAAK,OAAO;AAEhC,UAAM,WAAW,KAAK,SAAS,WAAW;AAI1C,UAAM,cAAc,KAAK,OAAO;AAEhC,QAAI,aAAa;AACf,YAAM,SAAS,YAAY,WAAW;AAEtC,YAAM,UAAU,YAAY,WAAW;AAEvC,UAAI,MAAM;AAIV,eAAS,IAAI,GAAG,KAAK,OAAO,OAAO,IAAI,IAAI,KAAK;AAC9C,YAAI,oBAAoB,QAAQ,CAAC,EAAE,aAAa,WAAW;AAE3D,YAAI,oBAAoB,SAAS,CAAC;AAElC,YAAI,aAAa,aAAa,EAAE,UAAW,EAAC,eAAe,KAAK,IAAI,EAAE,IAAI,GAAG;AAE7E,iBAAS,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,cAAM,MAAM;AAEZ,iBAAS,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,cAAM,MAAM;AAAA,MACb;AAAA,IACF;AAED,aAAS,cAAc;AAAA,EACxB;AAAA,EAED,UAAU;AACR,SAAK,SAAS,QAAS;AACvB,SAAK,SAAS,QAAS;AAAA,EACxB;AACH;"}
1
+ {"version":3,"file":"VertexNormalsHelper.js","sources":["../../src/helpers/VertexNormalsHelper.js"],"sourcesContent":["import { BufferGeometry, Float32BufferAttribute, LineSegments, LineBasicMaterial, Matrix3, Vector3 } from 'three'\n\nconst _v1 = /* @__PURE__ */ new Vector3()\nconst _v2 = /* @__PURE__ */ new Vector3()\nconst _normalMatrix = /* @__PURE__ */ new Matrix3()\n\nclass VertexNormalsHelper extends LineSegments {\n constructor(object, size = 1, color = 0xff0000) {\n const geometry = new BufferGeometry()\n\n const nNormals = object.geometry.attributes.normal.count\n const positions = new Float32BufferAttribute(nNormals * 2 * 3, 3)\n\n geometry.setAttribute('position', positions)\n\n super(geometry, new LineBasicMaterial({ color, toneMapped: false }))\n\n this.object = object\n this.size = size\n this.type = 'VertexNormalsHelper'\n\n //\n\n this.matrixAutoUpdate = false\n\n this.update()\n }\n\n update() {\n this.object.updateMatrixWorld(true)\n\n _normalMatrix.getNormalMatrix(this.object.matrixWorld)\n\n const matrixWorld = this.object.matrixWorld\n\n const position = this.geometry.attributes.position\n\n //\n\n const objGeometry = this.object.geometry\n\n if (objGeometry) {\n const objPos = objGeometry.attributes.position\n\n const objNorm = objGeometry.attributes.normal\n\n let idx = 0\n\n // for simplicity, ignore index and drawcalls, and render every normal\n\n for (let j = 0, jl = objPos.count; j < jl; j++) {\n _v1.fromBufferAttribute(objPos, j).applyMatrix4(matrixWorld)\n\n _v2.fromBufferAttribute(objNorm, j)\n\n _v2.applyMatrix3(_normalMatrix).normalize().multiplyScalar(this.size).add(_v1)\n\n position.setXYZ(idx, _v1.x, _v1.y, _v1.z)\n\n idx = idx + 1\n\n position.setXYZ(idx, _v2.x, _v2.y, _v2.z)\n\n idx = idx + 1\n }\n }\n\n position.needsUpdate = true\n }\n\n dispose() {\n this.geometry.dispose()\n this.material.dispose()\n }\n}\n\nexport { VertexNormalsHelper }\n"],"names":[],"mappings":";AAEA,MAAM,MAAsB,oBAAI,QAAS;AACzC,MAAM,MAAsB,oBAAI,QAAS;AACzC,MAAM,gBAAgC,oBAAI,QAAS;AAEnD,MAAM,4BAA4B,aAAa;AAAA,EAC7C,YAAY,QAAQ,OAAO,GAAG,QAAQ,UAAU;AAC9C,UAAM,WAAW,IAAI,eAAgB;AAErC,UAAM,WAAW,OAAO,SAAS,WAAW,OAAO;AACnD,UAAM,YAAY,IAAI,uBAAuB,WAAW,IAAI,GAAG,CAAC;AAEhE,aAAS,aAAa,YAAY,SAAS;AAE3C,UAAM,UAAU,IAAI,kBAAkB,EAAE,OAAO,YAAY,MAAK,CAAE,CAAC;AAEnE,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,OAAO;AAIZ,SAAK,mBAAmB;AAExB,SAAK,OAAQ;AAAA,EACd;AAAA,EAED,SAAS;AACP,SAAK,OAAO,kBAAkB,IAAI;AAElC,kBAAc,gBAAgB,KAAK,OAAO,WAAW;AAErD,UAAM,cAAc,KAAK,OAAO;AAEhC,UAAM,WAAW,KAAK,SAAS,WAAW;AAI1C,UAAM,cAAc,KAAK,OAAO;AAEhC,QAAI,aAAa;AACf,YAAM,SAAS,YAAY,WAAW;AAEtC,YAAM,UAAU,YAAY,WAAW;AAEvC,UAAI,MAAM;AAIV,eAAS,IAAI,GAAG,KAAK,OAAO,OAAO,IAAI,IAAI,KAAK;AAC9C,YAAI,oBAAoB,QAAQ,CAAC,EAAE,aAAa,WAAW;AAE3D,YAAI,oBAAoB,SAAS,CAAC;AAElC,YAAI,aAAa,aAAa,EAAE,UAAW,EAAC,eAAe,KAAK,IAAI,EAAE,IAAI,GAAG;AAE7E,iBAAS,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,cAAM,MAAM;AAEZ,iBAAS,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,cAAM,MAAM;AAAA,MACb;AAAA,IACF;AAED,aAAS,cAAc;AAAA,EACxB;AAAA,EAED,UAAU;AACR,SAAK,SAAS,QAAS;AACvB,SAAK,SAAS,QAAS;AAAA,EACxB;AACH;"}
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const THREE = require("three");
4
- const _v1 = new THREE.Vector3();
5
- const _v2 = new THREE.Vector3();
4
+ const _v1 = /* @__PURE__ */ new THREE.Vector3();
5
+ const _v2 = /* @__PURE__ */ new THREE.Vector3();
6
6
  class VertexTangentsHelper extends THREE.LineSegments {
7
7
  constructor(object, size = 1, color = 65535) {
8
8
  const geometry = new THREE.BufferGeometry();
@@ -1 +1 @@
1
- {"version":3,"file":"VertexTangentsHelper.cjs","sources":["../../src/helpers/VertexTangentsHelper.js"],"sourcesContent":["import { BufferGeometry, Float32BufferAttribute, LineSegments, LineBasicMaterial, Vector3 } from 'three'\n\nconst _v1 = new Vector3()\nconst _v2 = new Vector3()\n\nclass VertexTangentsHelper extends LineSegments {\n constructor(object, size = 1, color = 0x00ffff) {\n const geometry = new BufferGeometry()\n\n const nTangents = object.geometry.attributes.tangent.count\n const positions = new Float32BufferAttribute(nTangents * 2 * 3, 3)\n\n geometry.setAttribute('position', positions)\n\n super(geometry, new LineBasicMaterial({ color, toneMapped: false }))\n\n this.object = object\n this.size = size\n this.type = 'VertexTangentsHelper'\n\n //\n\n this.matrixAutoUpdate = false\n\n this.update()\n }\n\n update() {\n this.object.updateMatrixWorld(true)\n\n const matrixWorld = this.object.matrixWorld\n\n const position = this.geometry.attributes.position\n\n //\n\n const objGeometry = this.object.geometry\n\n const objPos = objGeometry.attributes.position\n\n const objTan = objGeometry.attributes.tangent\n\n let idx = 0\n\n // for simplicity, ignore index and drawcalls, and render every tangent\n\n for (let j = 0, jl = objPos.count; j < jl; j++) {\n _v1.fromBufferAttribute(objPos, j).applyMatrix4(matrixWorld)\n\n _v2.fromBufferAttribute(objTan, j)\n\n _v2.transformDirection(matrixWorld).multiplyScalar(this.size).add(_v1)\n\n position.setXYZ(idx, _v1.x, _v1.y, _v1.z)\n\n idx = idx + 1\n\n position.setXYZ(idx, _v2.x, _v2.y, _v2.z)\n\n idx = idx + 1\n }\n\n position.needsUpdate = true\n }\n\n dispose() {\n this.geometry.dispose()\n this.material.dispose()\n }\n}\n\nexport { VertexTangentsHelper }\n"],"names":["Vector3","LineSegments","BufferGeometry","Float32BufferAttribute","LineBasicMaterial"],"mappings":";;;AAEA,MAAM,MAAM,IAAIA,MAAAA,QAAS;AACzB,MAAM,MAAM,IAAIA,MAAAA,QAAS;AAEzB,MAAM,6BAA6BC,MAAAA,aAAa;AAAA,EAC9C,YAAY,QAAQ,OAAO,GAAG,QAAQ,OAAU;AAC9C,UAAM,WAAW,IAAIC,qBAAgB;AAErC,UAAM,YAAY,OAAO,SAAS,WAAW,QAAQ;AACrD,UAAM,YAAY,IAAIC,MAAsB,uBAAC,YAAY,IAAI,GAAG,CAAC;AAEjE,aAAS,aAAa,YAAY,SAAS;AAE3C,UAAM,UAAU,IAAIC,MAAiB,kBAAC,EAAE,OAAO,YAAY,MAAK,CAAE,CAAC;AAEnE,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,OAAO;AAIZ,SAAK,mBAAmB;AAExB,SAAK,OAAQ;AAAA,EACd;AAAA,EAED,SAAS;AACP,SAAK,OAAO,kBAAkB,IAAI;AAElC,UAAM,cAAc,KAAK,OAAO;AAEhC,UAAM,WAAW,KAAK,SAAS,WAAW;AAI1C,UAAM,cAAc,KAAK,OAAO;AAEhC,UAAM,SAAS,YAAY,WAAW;AAEtC,UAAM,SAAS,YAAY,WAAW;AAEtC,QAAI,MAAM;AAIV,aAAS,IAAI,GAAG,KAAK,OAAO,OAAO,IAAI,IAAI,KAAK;AAC9C,UAAI,oBAAoB,QAAQ,CAAC,EAAE,aAAa,WAAW;AAE3D,UAAI,oBAAoB,QAAQ,CAAC;AAEjC,UAAI,mBAAmB,WAAW,EAAE,eAAe,KAAK,IAAI,EAAE,IAAI,GAAG;AAErE,eAAS,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,YAAM,MAAM;AAEZ,eAAS,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,YAAM,MAAM;AAAA,IACb;AAED,aAAS,cAAc;AAAA,EACxB;AAAA,EAED,UAAU;AACR,SAAK,SAAS,QAAS;AACvB,SAAK,SAAS,QAAS;AAAA,EACxB;AACH;;"}
1
+ {"version":3,"file":"VertexTangentsHelper.cjs","sources":["../../src/helpers/VertexTangentsHelper.js"],"sourcesContent":["import { BufferGeometry, Float32BufferAttribute, LineSegments, LineBasicMaterial, Vector3 } from 'three'\n\nconst _v1 = /* @__PURE__ */ new Vector3()\nconst _v2 = /* @__PURE__ */ new Vector3()\n\nclass VertexTangentsHelper extends LineSegments {\n constructor(object, size = 1, color = 0x00ffff) {\n const geometry = new BufferGeometry()\n\n const nTangents = object.geometry.attributes.tangent.count\n const positions = new Float32BufferAttribute(nTangents * 2 * 3, 3)\n\n geometry.setAttribute('position', positions)\n\n super(geometry, new LineBasicMaterial({ color, toneMapped: false }))\n\n this.object = object\n this.size = size\n this.type = 'VertexTangentsHelper'\n\n //\n\n this.matrixAutoUpdate = false\n\n this.update()\n }\n\n update() {\n this.object.updateMatrixWorld(true)\n\n const matrixWorld = this.object.matrixWorld\n\n const position = this.geometry.attributes.position\n\n //\n\n const objGeometry = this.object.geometry\n\n const objPos = objGeometry.attributes.position\n\n const objTan = objGeometry.attributes.tangent\n\n let idx = 0\n\n // for simplicity, ignore index and drawcalls, and render every tangent\n\n for (let j = 0, jl = objPos.count; j < jl; j++) {\n _v1.fromBufferAttribute(objPos, j).applyMatrix4(matrixWorld)\n\n _v2.fromBufferAttribute(objTan, j)\n\n _v2.transformDirection(matrixWorld).multiplyScalar(this.size).add(_v1)\n\n position.setXYZ(idx, _v1.x, _v1.y, _v1.z)\n\n idx = idx + 1\n\n position.setXYZ(idx, _v2.x, _v2.y, _v2.z)\n\n idx = idx + 1\n }\n\n position.needsUpdate = true\n }\n\n dispose() {\n this.geometry.dispose()\n this.material.dispose()\n }\n}\n\nexport { VertexTangentsHelper }\n"],"names":["Vector3","LineSegments","BufferGeometry","Float32BufferAttribute","LineBasicMaterial"],"mappings":";;;AAEA,MAAM,MAAsB,oBAAIA,MAAAA,QAAS;AACzC,MAAM,MAAsB,oBAAIA,MAAAA,QAAS;AAEzC,MAAM,6BAA6BC,MAAAA,aAAa;AAAA,EAC9C,YAAY,QAAQ,OAAO,GAAG,QAAQ,OAAU;AAC9C,UAAM,WAAW,IAAIC,qBAAgB;AAErC,UAAM,YAAY,OAAO,SAAS,WAAW,QAAQ;AACrD,UAAM,YAAY,IAAIC,MAAsB,uBAAC,YAAY,IAAI,GAAG,CAAC;AAEjE,aAAS,aAAa,YAAY,SAAS;AAE3C,UAAM,UAAU,IAAIC,MAAiB,kBAAC,EAAE,OAAO,YAAY,MAAK,CAAE,CAAC;AAEnE,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,OAAO;AAIZ,SAAK,mBAAmB;AAExB,SAAK,OAAQ;AAAA,EACd;AAAA,EAED,SAAS;AACP,SAAK,OAAO,kBAAkB,IAAI;AAElC,UAAM,cAAc,KAAK,OAAO;AAEhC,UAAM,WAAW,KAAK,SAAS,WAAW;AAI1C,UAAM,cAAc,KAAK,OAAO;AAEhC,UAAM,SAAS,YAAY,WAAW;AAEtC,UAAM,SAAS,YAAY,WAAW;AAEtC,QAAI,MAAM;AAIV,aAAS,IAAI,GAAG,KAAK,OAAO,OAAO,IAAI,IAAI,KAAK;AAC9C,UAAI,oBAAoB,QAAQ,CAAC,EAAE,aAAa,WAAW;AAE3D,UAAI,oBAAoB,QAAQ,CAAC;AAEjC,UAAI,mBAAmB,WAAW,EAAE,eAAe,KAAK,IAAI,EAAE,IAAI,GAAG;AAErE,eAAS,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,YAAM,MAAM;AAEZ,eAAS,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,YAAM,MAAM;AAAA,IACb;AAED,aAAS,cAAc;AAAA,EACxB;AAAA,EAED,UAAU;AACR,SAAK,SAAS,QAAS;AACvB,SAAK,SAAS,QAAS;AAAA,EACxB;AACH;;"}
@@ -1,6 +1,6 @@
1
- import { Vector3, LineSegments, BufferGeometry, Float32BufferAttribute, LineBasicMaterial } from "three";
2
- const _v1 = new Vector3();
3
- const _v2 = new Vector3();
1
+ import { LineSegments, BufferGeometry, Float32BufferAttribute, LineBasicMaterial, Vector3 } from "three";
2
+ const _v1 = /* @__PURE__ */ new Vector3();
3
+ const _v2 = /* @__PURE__ */ new Vector3();
4
4
  class VertexTangentsHelper extends LineSegments {
5
5
  constructor(object, size = 1, color = 65535) {
6
6
  const geometry = new BufferGeometry();
@@ -1 +1 @@
1
- {"version":3,"file":"VertexTangentsHelper.js","sources":["../../src/helpers/VertexTangentsHelper.js"],"sourcesContent":["import { BufferGeometry, Float32BufferAttribute, LineSegments, LineBasicMaterial, Vector3 } from 'three'\n\nconst _v1 = new Vector3()\nconst _v2 = new Vector3()\n\nclass VertexTangentsHelper extends LineSegments {\n constructor(object, size = 1, color = 0x00ffff) {\n const geometry = new BufferGeometry()\n\n const nTangents = object.geometry.attributes.tangent.count\n const positions = new Float32BufferAttribute(nTangents * 2 * 3, 3)\n\n geometry.setAttribute('position', positions)\n\n super(geometry, new LineBasicMaterial({ color, toneMapped: false }))\n\n this.object = object\n this.size = size\n this.type = 'VertexTangentsHelper'\n\n //\n\n this.matrixAutoUpdate = false\n\n this.update()\n }\n\n update() {\n this.object.updateMatrixWorld(true)\n\n const matrixWorld = this.object.matrixWorld\n\n const position = this.geometry.attributes.position\n\n //\n\n const objGeometry = this.object.geometry\n\n const objPos = objGeometry.attributes.position\n\n const objTan = objGeometry.attributes.tangent\n\n let idx = 0\n\n // for simplicity, ignore index and drawcalls, and render every tangent\n\n for (let j = 0, jl = objPos.count; j < jl; j++) {\n _v1.fromBufferAttribute(objPos, j).applyMatrix4(matrixWorld)\n\n _v2.fromBufferAttribute(objTan, j)\n\n _v2.transformDirection(matrixWorld).multiplyScalar(this.size).add(_v1)\n\n position.setXYZ(idx, _v1.x, _v1.y, _v1.z)\n\n idx = idx + 1\n\n position.setXYZ(idx, _v2.x, _v2.y, _v2.z)\n\n idx = idx + 1\n }\n\n position.needsUpdate = true\n }\n\n dispose() {\n this.geometry.dispose()\n this.material.dispose()\n }\n}\n\nexport { VertexTangentsHelper }\n"],"names":[],"mappings":";AAEA,MAAM,MAAM,IAAI,QAAS;AACzB,MAAM,MAAM,IAAI,QAAS;AAEzB,MAAM,6BAA6B,aAAa;AAAA,EAC9C,YAAY,QAAQ,OAAO,GAAG,QAAQ,OAAU;AAC9C,UAAM,WAAW,IAAI,eAAgB;AAErC,UAAM,YAAY,OAAO,SAAS,WAAW,QAAQ;AACrD,UAAM,YAAY,IAAI,uBAAuB,YAAY,IAAI,GAAG,CAAC;AAEjE,aAAS,aAAa,YAAY,SAAS;AAE3C,UAAM,UAAU,IAAI,kBAAkB,EAAE,OAAO,YAAY,MAAK,CAAE,CAAC;AAEnE,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,OAAO;AAIZ,SAAK,mBAAmB;AAExB,SAAK,OAAQ;AAAA,EACd;AAAA,EAED,SAAS;AACP,SAAK,OAAO,kBAAkB,IAAI;AAElC,UAAM,cAAc,KAAK,OAAO;AAEhC,UAAM,WAAW,KAAK,SAAS,WAAW;AAI1C,UAAM,cAAc,KAAK,OAAO;AAEhC,UAAM,SAAS,YAAY,WAAW;AAEtC,UAAM,SAAS,YAAY,WAAW;AAEtC,QAAI,MAAM;AAIV,aAAS,IAAI,GAAG,KAAK,OAAO,OAAO,IAAI,IAAI,KAAK;AAC9C,UAAI,oBAAoB,QAAQ,CAAC,EAAE,aAAa,WAAW;AAE3D,UAAI,oBAAoB,QAAQ,CAAC;AAEjC,UAAI,mBAAmB,WAAW,EAAE,eAAe,KAAK,IAAI,EAAE,IAAI,GAAG;AAErE,eAAS,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,YAAM,MAAM;AAEZ,eAAS,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,YAAM,MAAM;AAAA,IACb;AAED,aAAS,cAAc;AAAA,EACxB;AAAA,EAED,UAAU;AACR,SAAK,SAAS,QAAS;AACvB,SAAK,SAAS,QAAS;AAAA,EACxB;AACH;"}
1
+ {"version":3,"file":"VertexTangentsHelper.js","sources":["../../src/helpers/VertexTangentsHelper.js"],"sourcesContent":["import { BufferGeometry, Float32BufferAttribute, LineSegments, LineBasicMaterial, Vector3 } from 'three'\n\nconst _v1 = /* @__PURE__ */ new Vector3()\nconst _v2 = /* @__PURE__ */ new Vector3()\n\nclass VertexTangentsHelper extends LineSegments {\n constructor(object, size = 1, color = 0x00ffff) {\n const geometry = new BufferGeometry()\n\n const nTangents = object.geometry.attributes.tangent.count\n const positions = new Float32BufferAttribute(nTangents * 2 * 3, 3)\n\n geometry.setAttribute('position', positions)\n\n super(geometry, new LineBasicMaterial({ color, toneMapped: false }))\n\n this.object = object\n this.size = size\n this.type = 'VertexTangentsHelper'\n\n //\n\n this.matrixAutoUpdate = false\n\n this.update()\n }\n\n update() {\n this.object.updateMatrixWorld(true)\n\n const matrixWorld = this.object.matrixWorld\n\n const position = this.geometry.attributes.position\n\n //\n\n const objGeometry = this.object.geometry\n\n const objPos = objGeometry.attributes.position\n\n const objTan = objGeometry.attributes.tangent\n\n let idx = 0\n\n // for simplicity, ignore index and drawcalls, and render every tangent\n\n for (let j = 0, jl = objPos.count; j < jl; j++) {\n _v1.fromBufferAttribute(objPos, j).applyMatrix4(matrixWorld)\n\n _v2.fromBufferAttribute(objTan, j)\n\n _v2.transformDirection(matrixWorld).multiplyScalar(this.size).add(_v1)\n\n position.setXYZ(idx, _v1.x, _v1.y, _v1.z)\n\n idx = idx + 1\n\n position.setXYZ(idx, _v2.x, _v2.y, _v2.z)\n\n idx = idx + 1\n }\n\n position.needsUpdate = true\n }\n\n dispose() {\n this.geometry.dispose()\n this.material.dispose()\n }\n}\n\nexport { VertexTangentsHelper }\n"],"names":[],"mappings":";AAEA,MAAM,MAAsB,oBAAI,QAAS;AACzC,MAAM,MAAsB,oBAAI,QAAS;AAEzC,MAAM,6BAA6B,aAAa;AAAA,EAC9C,YAAY,QAAQ,OAAO,GAAG,QAAQ,OAAU;AAC9C,UAAM,WAAW,IAAI,eAAgB;AAErC,UAAM,YAAY,OAAO,SAAS,WAAW,QAAQ;AACrD,UAAM,YAAY,IAAI,uBAAuB,YAAY,IAAI,GAAG,CAAC;AAEjE,aAAS,aAAa,YAAY,SAAS;AAE3C,UAAM,UAAU,IAAI,kBAAkB,EAAE,OAAO,YAAY,MAAK,CAAE,CAAC;AAEnE,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,OAAO;AAIZ,SAAK,mBAAmB;AAExB,SAAK,OAAQ;AAAA,EACd;AAAA,EAED,SAAS;AACP,SAAK,OAAO,kBAAkB,IAAI;AAElC,UAAM,cAAc,KAAK,OAAO;AAEhC,UAAM,WAAW,KAAK,SAAS,WAAW;AAI1C,UAAM,cAAc,KAAK,OAAO;AAEhC,UAAM,SAAS,YAAY,WAAW;AAEtC,UAAM,SAAS,YAAY,WAAW;AAEtC,QAAI,MAAM;AAIV,aAAS,IAAI,GAAG,KAAK,OAAO,OAAO,IAAI,IAAI,KAAK;AAC9C,UAAI,oBAAoB,QAAQ,CAAC,EAAE,aAAa,WAAW;AAE3D,UAAI,oBAAoB,QAAQ,CAAC;AAEjC,UAAI,mBAAmB,WAAW,EAAE,eAAe,KAAK,IAAI,EAAE,IAAI,GAAG;AAErE,eAAS,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,YAAM,MAAM;AAEZ,eAAS,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,YAAM,MAAM;AAAA,IACb;AAED,aAAS,cAAc;AAAA,EACxB;AAAA,EAED,UAAU;AACR,SAAK,SAAS,QAAS;AACvB,SAAK,SAAS,QAAS;AAAA,EACxB;AACH;"}