three-stdlib 2.35.4 → 2.35.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (514) hide show
  1. package/_polyfill/CapsuleGeometry.cjs +17 -20
  2. package/_polyfill/CapsuleGeometry.cjs.map +1 -1
  3. package/_polyfill/CapsuleGeometry.js +17 -20
  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 +715 -722
  50. package/deprecated/Geometry.cjs.map +1 -1
  51. package/deprecated/Geometry.js +716 -723
  52. package/deprecated/Geometry.js.map +1 -1
  53. package/effects/AnaglyphEffect.cjs +1 -2
  54. package/effects/AnaglyphEffect.cjs.map +1 -1
  55. package/effects/AnaglyphEffect.js +2 -3
  56. package/effects/AnaglyphEffect.js.map +1 -1
  57. package/effects/OutlineEffect.cjs +1 -2
  58. package/effects/OutlineEffect.cjs.map +1 -1
  59. package/effects/OutlineEffect.js +2 -3
  60. package/effects/OutlineEffect.js.map +1 -1
  61. package/effects/ParallaxBarrierEffect.cjs +1 -2
  62. package/effects/ParallaxBarrierEffect.cjs.map +1 -1
  63. package/effects/ParallaxBarrierEffect.js +2 -3
  64. package/effects/ParallaxBarrierEffect.js.map +1 -1
  65. package/exporters/DRACOExporter.cjs +122 -133
  66. package/exporters/DRACOExporter.cjs.map +1 -1
  67. package/exporters/DRACOExporter.d.ts +21 -23
  68. package/exporters/DRACOExporter.js +122 -133
  69. package/exporters/DRACOExporter.js.map +1 -1
  70. package/exporters/GLTFExporter.cjs +167 -170
  71. package/exporters/GLTFExporter.cjs.map +1 -1
  72. package/exporters/GLTFExporter.js +167 -170
  73. package/exporters/GLTFExporter.js.map +1 -1
  74. package/geometries/LightningStrike.cjs +515 -524
  75. package/geometries/LightningStrike.cjs.map +1 -1
  76. package/geometries/LightningStrike.js +515 -524
  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 +1 -2
  123. package/lines/LineMaterial.cjs.map +1 -1
  124. package/lines/LineMaterial.js +2 -3
  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 +435 -441
  139. package/loaders/BasisTextureLoader.cjs.map +1 -1
  140. package/loaders/BasisTextureLoader.js +435 -441
  141. package/loaders/BasisTextureLoader.js.map +1 -1
  142. package/loaders/EXRLoader.cjs +1 -2
  143. package/loaders/EXRLoader.cjs.map +1 -1
  144. package/loaders/EXRLoader.js +2 -3
  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 +374 -377
  160. package/loaders/KTX2Loader.cjs.map +1 -1
  161. package/loaders/KTX2Loader.js +374 -377
  162. package/loaders/KTX2Loader.js.map +1 -1
  163. package/loaders/LDrawLoader.cjs +4 -5
  164. package/loaders/LDrawLoader.cjs.map +1 -1
  165. package/loaders/LDrawLoader.js +5 -6
  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 +43 -46
  172. package/loaders/PRWMLoader.cjs.map +1 -1
  173. package/loaders/PRWMLoader.js +43 -46
  174. package/loaders/PRWMLoader.js.map +1 -1
  175. package/loaders/SVGLoader.cjs +1688 -1694
  176. package/loaders/SVGLoader.cjs.map +1 -1
  177. package/loaders/SVGLoader.js +1688 -1694
  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 +50 -53
  192. package/math/ConvexHull.cjs.map +1 -1
  193. package/math/ConvexHull.js +50 -53
  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 +268 -271
  212. package/misc/ConvexObjectBreaker.cjs.map +1 -1
  213. package/misc/ConvexObjectBreaker.js +269 -272
  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 +1 -2
  232. package/objects/GroundProjectedEnv.cjs.map +1 -1
  233. package/objects/GroundProjectedEnv.js +2 -3
  234. package/objects/GroundProjectedEnv.js.map +1 -1
  235. package/objects/Lensflare.cjs +206 -209
  236. package/objects/Lensflare.cjs.map +1 -1
  237. package/objects/Lensflare.js +206 -209
  238. package/objects/Lensflare.js.map +1 -1
  239. package/objects/Reflector.cjs +146 -154
  240. package/objects/Reflector.cjs.map +1 -1
  241. package/objects/Reflector.js +146 -154
  242. package/objects/Reflector.js.map +1 -1
  243. package/objects/ReflectorForSSRPass.cjs +180 -183
  244. package/objects/ReflectorForSSRPass.cjs.map +1 -1
  245. package/objects/ReflectorForSSRPass.js +180 -183
  246. package/objects/ReflectorForSSRPass.js.map +1 -1
  247. package/objects/Refractor.cjs +161 -164
  248. package/objects/Refractor.cjs.map +1 -1
  249. package/objects/Refractor.js +161 -164
  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 +32 -35
  256. package/objects/Sky.cjs.map +1 -1
  257. package/objects/Sky.d.ts +6 -100
  258. package/objects/Sky.js +32 -35
  259. package/objects/Sky.js.map +1 -1
  260. package/objects/Water.cjs +1 -2
  261. package/objects/Water.cjs.map +1 -1
  262. package/objects/Water.js +2 -3
  263. package/objects/Water.js.map +1 -1
  264. package/objects/Water2.cjs +140 -143
  265. package/objects/Water2.cjs.map +1 -1
  266. package/objects/Water2.js +140 -143
  267. package/objects/Water2.js.map +1 -1
  268. package/package.json +1 -1
  269. package/postprocessing/SAOPass.cjs +264 -267
  270. package/postprocessing/SAOPass.cjs.map +1 -1
  271. package/postprocessing/SAOPass.js +264 -267
  272. package/postprocessing/SAOPass.js.map +1 -1
  273. package/postprocessing/SSAOPass.cjs +250 -253
  274. package/postprocessing/SSAOPass.cjs.map +1 -1
  275. package/postprocessing/SSAOPass.js +250 -253
  276. package/postprocessing/SSAOPass.js.map +1 -1
  277. package/postprocessing/SSRPass.cjs +376 -379
  278. package/postprocessing/SSRPass.cjs.map +1 -1
  279. package/postprocessing/SSRPass.js +376 -379
  280. package/postprocessing/SSRPass.js.map +1 -1
  281. package/postprocessing/UnrealBloomPass.cjs +202 -205
  282. package/postprocessing/UnrealBloomPass.cjs.map +1 -1
  283. package/postprocessing/UnrealBloomPass.js +202 -205
  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 +46 -71
  294. package/shaders/ACESFilmicToneMappingShader.cjs.map +1 -1
  295. package/shaders/ACESFilmicToneMappingShader.js +46 -71
  296. package/shaders/ACESFilmicToneMappingShader.js.map +1 -1
  297. package/shaders/AfterimageShader.cjs +22 -41
  298. package/shaders/AfterimageShader.cjs.map +1 -1
  299. package/shaders/AfterimageShader.js +22 -41
  300. package/shaders/AfterimageShader.js.map +1 -1
  301. package/shaders/BasicShader.cjs +6 -20
  302. package/shaders/BasicShader.cjs.map +1 -1
  303. package/shaders/BasicShader.js +6 -20
  304. package/shaders/BasicShader.js.map +1 -1
  305. package/shaders/BleachBypassShader.cjs +26 -46
  306. package/shaders/BleachBypassShader.cjs.map +1 -1
  307. package/shaders/BleachBypassShader.js +26 -46
  308. package/shaders/BleachBypassShader.js.map +1 -1
  309. package/shaders/BlendShader.cjs +19 -33
  310. package/shaders/BlendShader.cjs.map +1 -1
  311. package/shaders/BlendShader.js +19 -33
  312. package/shaders/BlendShader.js.map +1 -1
  313. package/shaders/BokehShader.cjs +90 -117
  314. package/shaders/BokehShader.cjs.map +1 -1
  315. package/shaders/BokehShader.js +90 -117
  316. package/shaders/BokehShader.js.map +1 -1
  317. package/shaders/BokehShader2.cjs +232 -333
  318. package/shaders/BokehShader2.cjs.map +1 -1
  319. package/shaders/BokehShader2.js +232 -333
  320. package/shaders/BokehShader2.js.map +1 -1
  321. package/shaders/BrightnessContrastShader.cjs +22 -38
  322. package/shaders/BrightnessContrastShader.cjs.map +1 -1
  323. package/shaders/BrightnessContrastShader.js +22 -38
  324. package/shaders/BrightnessContrastShader.js.map +1 -1
  325. package/shaders/ColorCorrectionShader.cjs +21 -35
  326. package/shaders/ColorCorrectionShader.cjs.map +1 -1
  327. package/shaders/ColorCorrectionShader.js +21 -35
  328. package/shaders/ColorCorrectionShader.js.map +1 -1
  329. package/shaders/ColorifyShader.cjs +19 -34
  330. package/shaders/ColorifyShader.cjs.map +1 -1
  331. package/shaders/ColorifyShader.js +19 -34
  332. package/shaders/ColorifyShader.js.map +1 -1
  333. package/shaders/ConvolutionShader.cjs +24 -43
  334. package/shaders/ConvolutionShader.cjs.map +1 -1
  335. package/shaders/ConvolutionShader.js +24 -43
  336. package/shaders/ConvolutionShader.js.map +1 -1
  337. package/shaders/CopyShader.cjs +16 -30
  338. package/shaders/CopyShader.cjs.map +1 -1
  339. package/shaders/CopyShader.js +16 -30
  340. package/shaders/CopyShader.js.map +1 -1
  341. package/shaders/DOFMipMapShader.cjs +21 -38
  342. package/shaders/DOFMipMapShader.cjs.map +1 -1
  343. package/shaders/DOFMipMapShader.js +21 -38
  344. package/shaders/DOFMipMapShader.js.map +1 -1
  345. package/shaders/DepthLimitedBlurShader.cjs +69 -98
  346. package/shaders/DepthLimitedBlurShader.cjs.map +1 -1
  347. package/shaders/DepthLimitedBlurShader.js +69 -98
  348. package/shaders/DepthLimitedBlurShader.js.map +1 -1
  349. package/shaders/DigitalGlitch.cjs +59 -70
  350. package/shaders/DigitalGlitch.cjs.map +1 -1
  351. package/shaders/DigitalGlitch.js +59 -70
  352. package/shaders/DigitalGlitch.js.map +1 -1
  353. package/shaders/DotScreenShader.cjs +28 -49
  354. package/shaders/DotScreenShader.cjs.map +1 -1
  355. package/shaders/DotScreenShader.js +28 -49
  356. package/shaders/DotScreenShader.js.map +1 -1
  357. package/shaders/FXAAShader.cjs +1089 -1098
  358. package/shaders/FXAAShader.cjs.map +1 -1
  359. package/shaders/FXAAShader.js +1089 -1098
  360. package/shaders/FXAAShader.js.map +1 -1
  361. package/shaders/FilmShader.cjs +29 -57
  362. package/shaders/FilmShader.cjs.map +1 -1
  363. package/shaders/FilmShader.js +29 -57
  364. package/shaders/FilmShader.js.map +1 -1
  365. package/shaders/FocusShader.cjs +43 -70
  366. package/shaders/FocusShader.cjs.map +1 -1
  367. package/shaders/FocusShader.js +43 -70
  368. package/shaders/FocusShader.js.map +1 -1
  369. package/shaders/FreiChenShader.cjs +53 -74
  370. package/shaders/FreiChenShader.cjs.map +1 -1
  371. package/shaders/FreiChenShader.js +53 -74
  372. package/shaders/FreiChenShader.js.map +1 -1
  373. package/shaders/FresnelShader.cjs +35 -55
  374. package/shaders/FresnelShader.cjs.map +1 -1
  375. package/shaders/FresnelShader.js +35 -55
  376. package/shaders/FresnelShader.js.map +1 -1
  377. package/shaders/GammaCorrectionShader.cjs +19 -33
  378. package/shaders/GammaCorrectionShader.cjs.map +1 -1
  379. package/shaders/GammaCorrectionShader.js +19 -33
  380. package/shaders/GammaCorrectionShader.js.map +1 -1
  381. package/shaders/GodRaysShader.cjs +116 -193
  382. package/shaders/GodRaysShader.cjs.map +1 -1
  383. package/shaders/GodRaysShader.js +116 -193
  384. package/shaders/GodRaysShader.js.map +1 -1
  385. package/shaders/HalftoneShader.cjs +192 -270
  386. package/shaders/HalftoneShader.cjs.map +1 -1
  387. package/shaders/HalftoneShader.js +192 -270
  388. package/shaders/HalftoneShader.js.map +1 -1
  389. package/shaders/HorizontalTiltShiftShader.cjs +27 -43
  390. package/shaders/HorizontalTiltShiftShader.cjs.map +1 -1
  391. package/shaders/HorizontalTiltShiftShader.js +27 -43
  392. package/shaders/HorizontalTiltShiftShader.js.map +1 -1
  393. package/shaders/HueSaturationShader.cjs +31 -47
  394. package/shaders/HueSaturationShader.cjs.map +1 -1
  395. package/shaders/HueSaturationShader.js +31 -47
  396. package/shaders/HueSaturationShader.js.map +1 -1
  397. package/shaders/KaleidoShader.cjs +24 -37
  398. package/shaders/KaleidoShader.cjs.map +1 -1
  399. package/shaders/KaleidoShader.js +24 -37
  400. package/shaders/KaleidoShader.js.map +1 -1
  401. package/shaders/LuminosityHighPassShader.cjs +24 -43
  402. package/shaders/LuminosityHighPassShader.cjs.map +1 -1
  403. package/shaders/LuminosityHighPassShader.js +24 -43
  404. package/shaders/LuminosityHighPassShader.js.map +1 -1
  405. package/shaders/LuminosityShader.cjs +17 -34
  406. package/shaders/LuminosityShader.cjs.map +1 -1
  407. package/shaders/LuminosityShader.js +17 -34
  408. package/shaders/LuminosityShader.js.map +1 -1
  409. package/shaders/MirrorShader.cjs +26 -39
  410. package/shaders/MirrorShader.cjs.map +1 -1
  411. package/shaders/MirrorShader.js +26 -39
  412. package/shaders/MirrorShader.js.map +1 -1
  413. package/shaders/NormalMapShader.cjs +21 -36
  414. package/shaders/NormalMapShader.cjs.map +1 -1
  415. package/shaders/NormalMapShader.js +21 -36
  416. package/shaders/NormalMapShader.js.map +1 -1
  417. package/shaders/ParallaxShader.cjs +97 -147
  418. package/shaders/ParallaxShader.cjs.map +1 -1
  419. package/shaders/ParallaxShader.js +97 -147
  420. package/shaders/ParallaxShader.js.map +1 -1
  421. package/shaders/PixelShader.cjs +18 -31
  422. package/shaders/PixelShader.cjs.map +1 -1
  423. package/shaders/PixelShader.js +18 -31
  424. package/shaders/PixelShader.js.map +1 -1
  425. package/shaders/RGBShiftShader.cjs +20 -33
  426. package/shaders/RGBShiftShader.cjs.map +1 -1
  427. package/shaders/RGBShiftShader.js +20 -33
  428. package/shaders/RGBShiftShader.js.map +1 -1
  429. package/shaders/SAOShader.cjs +117 -154
  430. package/shaders/SAOShader.cjs.map +1 -1
  431. package/shaders/SAOShader.js +117 -154
  432. package/shaders/SAOShader.js.map +1 -1
  433. package/shaders/SMAAShader.cjs +270 -358
  434. package/shaders/SMAAShader.cjs.map +1 -1
  435. package/shaders/SMAAShader.js +270 -358
  436. package/shaders/SMAAShader.js.map +1 -1
  437. package/shaders/SSAOShader.cjs +142 -236
  438. package/shaders/SSAOShader.cjs.map +1 -1
  439. package/shaders/SSAOShader.js +142 -236
  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 +20 -36
  446. package/shaders/SepiaShader.cjs.map +1 -1
  447. package/shaders/SepiaShader.js +20 -36
  448. package/shaders/SepiaShader.js.map +1 -1
  449. package/shaders/SobelOperatorShader.cjs +37 -64
  450. package/shaders/SobelOperatorShader.cjs.map +1 -1
  451. package/shaders/SobelOperatorShader.js +37 -64
  452. package/shaders/SobelOperatorShader.js.map +1 -1
  453. package/shaders/TechnicolorShader.cjs +16 -29
  454. package/shaders/TechnicolorShader.cjs.map +1 -1
  455. package/shaders/TechnicolorShader.js +16 -29
  456. package/shaders/TechnicolorShader.js.map +1 -1
  457. package/shaders/ToneMapShader.cjs +35 -55
  458. package/shaders/ToneMapShader.cjs.map +1 -1
  459. package/shaders/ToneMapShader.js +35 -55
  460. package/shaders/ToneMapShader.js.map +1 -1
  461. package/shaders/ToonShader.cjs +165 -275
  462. package/shaders/ToonShader.cjs.map +1 -1
  463. package/shaders/ToonShader.js +165 -275
  464. package/shaders/ToonShader.js.map +1 -1
  465. package/shaders/TriangleBlurShader.cjs +27 -50
  466. package/shaders/TriangleBlurShader.cjs.map +1 -1
  467. package/shaders/TriangleBlurShader.js +27 -50
  468. package/shaders/TriangleBlurShader.js.map +1 -1
  469. package/shaders/UnpackDepthRGBAShader.cjs +17 -32
  470. package/shaders/UnpackDepthRGBAShader.cjs.map +1 -1
  471. package/shaders/UnpackDepthRGBAShader.js +17 -32
  472. package/shaders/UnpackDepthRGBAShader.js.map +1 -1
  473. package/shaders/VerticalTiltShiftShader.cjs +27 -43
  474. package/shaders/VerticalTiltShiftShader.cjs.map +1 -1
  475. package/shaders/VerticalTiltShiftShader.js +27 -43
  476. package/shaders/VerticalTiltShiftShader.js.map +1 -1
  477. package/shaders/VignetteShader.cjs +27 -43
  478. package/shaders/VignetteShader.cjs.map +1 -1
  479. package/shaders/VignetteShader.js +27 -43
  480. package/shaders/VignetteShader.js.map +1 -1
  481. package/shaders/VolumeShader.cjs +213 -264
  482. package/shaders/VolumeShader.cjs.map +1 -1
  483. package/shaders/VolumeShader.js +213 -264
  484. package/shaders/VolumeShader.js.map +1 -1
  485. package/shaders/WaterRefractionShader.cjs +35 -63
  486. package/shaders/WaterRefractionShader.cjs.map +1 -1
  487. package/shaders/WaterRefractionShader.js +35 -63
  488. package/shaders/WaterRefractionShader.js.map +1 -1
  489. package/utils/GeometryCompressionUtils.cjs +1 -2
  490. package/utils/GeometryCompressionUtils.cjs.map +1 -1
  491. package/utils/GeometryCompressionUtils.js +2 -3
  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 +106 -109
  498. package/webxr/ARButton.cjs.map +1 -1
  499. package/webxr/ARButton.d.ts +3 -4
  500. package/webxr/ARButton.js +106 -109
  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 +95 -98
  507. package/webxr/VRButton.cjs.map +1 -1
  508. package/webxr/VRButton.d.ts +5 -6
  509. package/webxr/VRButton.js +95 -98
  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,26 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const THREE = require("three");
4
- const CapsuleGeometry = /* @__PURE__ */ (() => {
5
- class CapsuleGeometry2 extends THREE.LatheGeometry {
6
- constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {
7
- const path = new THREE.Path();
8
- path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0);
9
- path.absarc(0, length / 2, radius, 0, Math.PI * 0.5);
10
- super(path.getPoints(capSegments), radialSegments);
11
- this.type = "CapsuleGeometry";
12
- this.parameters = {
13
- radius,
14
- height: length,
15
- capSegments,
16
- radialSegments
17
- };
18
- }
19
- static fromJSON(data) {
20
- return new CapsuleGeometry2(data.radius, data.length, data.capSegments, data.radialSegments);
21
- }
4
+ class CapsuleGeometry extends THREE.LatheGeometry {
5
+ constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {
6
+ const path = new THREE.Path();
7
+ path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0);
8
+ path.absarc(0, length / 2, radius, 0, Math.PI * 0.5);
9
+ super(path.getPoints(capSegments), radialSegments);
10
+ this.type = "CapsuleGeometry";
11
+ this.parameters = {
12
+ radius,
13
+ height: length,
14
+ capSegments,
15
+ radialSegments
16
+ };
22
17
  }
23
- return CapsuleGeometry2;
24
- })();
18
+ static fromJSON(data) {
19
+ return new CapsuleGeometry(data.radius, data.length, data.capSegments, data.radialSegments);
20
+ }
21
+ }
25
22
  exports.CapsuleGeometry = CapsuleGeometry;
26
23
  //# sourceMappingURL=CapsuleGeometry.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"CapsuleGeometry.cjs","sources":["../../src/_polyfill/CapsuleGeometry.js"],"sourcesContent":["import { Path, LatheGeometry } from 'three'\n\nconst CapsuleGeometry = /* @__PURE__ */ (() => {\n class CapsuleGeometry extends LatheGeometry {\n constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {\n const path = new Path()\n path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0)\n path.absarc(0, length / 2, radius, 0, Math.PI * 0.5)\n\n super(path.getPoints(capSegments), radialSegments)\n\n this.type = 'CapsuleGeometry'\n\n this.parameters = {\n radius: radius,\n height: length,\n capSegments: capSegments,\n radialSegments: radialSegments,\n }\n }\n\n static fromJSON(data) {\n return new CapsuleGeometry(data.radius, data.length, data.capSegments, data.radialSegments)\n }\n }\n\n return CapsuleGeometry\n})()\n\nexport { CapsuleGeometry }\n"],"names":["CapsuleGeometry","LatheGeometry","Path"],"mappings":";;;AAEK,MAAC,kBAAmC,uBAAM;AAC7C,QAAMA,yBAAwBC,MAAAA,cAAc;AAAA,IAC1C,YAAY,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,iBAAiB,GAAG;AACvE,YAAM,OAAO,IAAIC,WAAM;AACvB,WAAK,OAAO,GAAG,CAAC,SAAS,GAAG,QAAQ,KAAK,KAAK,KAAK,CAAC;AACpD,WAAK,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,KAAK,GAAG;AAEnD,YAAM,KAAK,UAAU,WAAW,GAAG,cAAc;AAEjD,WAAK,OAAO;AAEZ,WAAK,aAAa;AAAA,QAChB;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IAED,OAAO,SAAS,MAAM;AACpB,aAAO,IAAIF,iBAAgB,KAAK,QAAQ,KAAK,QAAQ,KAAK,aAAa,KAAK,cAAc;AAAA,IAC3F;AAAA,EACF;AAED,SAAOA;AACT,GAAC;;"}
1
+ {"version":3,"file":"CapsuleGeometry.cjs","sources":["../../src/_polyfill/CapsuleGeometry.js"],"sourcesContent":["import { Path, LatheGeometry } from 'three'\n\nclass CapsuleGeometry extends LatheGeometry {\n constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {\n const path = new Path()\n path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0)\n path.absarc(0, length / 2, radius, 0, Math.PI * 0.5)\n\n super(path.getPoints(capSegments), radialSegments)\n\n this.type = 'CapsuleGeometry'\n\n this.parameters = {\n radius: radius,\n height: length,\n capSegments: capSegments,\n radialSegments: radialSegments,\n }\n }\n\n static fromJSON(data) {\n return new CapsuleGeometry(data.radius, data.length, data.capSegments, data.radialSegments)\n }\n}\n\nexport { CapsuleGeometry }\n"],"names":["LatheGeometry","Path"],"mappings":";;;AAEA,MAAM,wBAAwBA,MAAAA,cAAc;AAAA,EAC1C,YAAY,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,iBAAiB,GAAG;AACvE,UAAM,OAAO,IAAIC,WAAM;AACvB,SAAK,OAAO,GAAG,CAAC,SAAS,GAAG,QAAQ,KAAK,KAAK,KAAK,CAAC;AACpD,SAAK,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,KAAK,GAAG;AAEnD,UAAM,KAAK,UAAU,WAAW,GAAG,cAAc;AAEjD,SAAK,OAAO;AAEZ,SAAK,aAAa;AAAA,MAChB;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,IACD;AAAA,EACF;AAAA,EAED,OAAO,SAAS,MAAM;AACpB,WAAO,IAAI,gBAAgB,KAAK,QAAQ,KAAK,QAAQ,KAAK,aAAa,KAAK,cAAc;AAAA,EAC3F;AACH;;"}
@@ -1,25 +1,22 @@
1
1
  import { LatheGeometry, Path } from "three";
2
- const CapsuleGeometry = /* @__PURE__ */ (() => {
3
- class CapsuleGeometry2 extends LatheGeometry {
4
- constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {
5
- const path = new Path();
6
- path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0);
7
- path.absarc(0, length / 2, radius, 0, Math.PI * 0.5);
8
- super(path.getPoints(capSegments), radialSegments);
9
- this.type = "CapsuleGeometry";
10
- this.parameters = {
11
- radius,
12
- height: length,
13
- capSegments,
14
- radialSegments
15
- };
16
- }
17
- static fromJSON(data) {
18
- return new CapsuleGeometry2(data.radius, data.length, data.capSegments, data.radialSegments);
19
- }
2
+ class CapsuleGeometry extends LatheGeometry {
3
+ constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {
4
+ const path = new Path();
5
+ path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0);
6
+ path.absarc(0, length / 2, radius, 0, Math.PI * 0.5);
7
+ super(path.getPoints(capSegments), radialSegments);
8
+ this.type = "CapsuleGeometry";
9
+ this.parameters = {
10
+ radius,
11
+ height: length,
12
+ capSegments,
13
+ radialSegments
14
+ };
20
15
  }
21
- return CapsuleGeometry2;
22
- })();
16
+ static fromJSON(data) {
17
+ return new CapsuleGeometry(data.radius, data.length, data.capSegments, data.radialSegments);
18
+ }
19
+ }
23
20
  export {
24
21
  CapsuleGeometry
25
22
  };
@@ -1 +1 @@
1
- {"version":3,"file":"CapsuleGeometry.js","sources":["../../src/_polyfill/CapsuleGeometry.js"],"sourcesContent":["import { Path, LatheGeometry } from 'three'\n\nconst CapsuleGeometry = /* @__PURE__ */ (() => {\n class CapsuleGeometry extends LatheGeometry {\n constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {\n const path = new Path()\n path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0)\n path.absarc(0, length / 2, radius, 0, Math.PI * 0.5)\n\n super(path.getPoints(capSegments), radialSegments)\n\n this.type = 'CapsuleGeometry'\n\n this.parameters = {\n radius: radius,\n height: length,\n capSegments: capSegments,\n radialSegments: radialSegments,\n }\n }\n\n static fromJSON(data) {\n return new CapsuleGeometry(data.radius, data.length, data.capSegments, data.radialSegments)\n }\n }\n\n return CapsuleGeometry\n})()\n\nexport { CapsuleGeometry }\n"],"names":["CapsuleGeometry"],"mappings":";AAEK,MAAC,kBAAmC,uBAAM;AAC7C,QAAMA,yBAAwB,cAAc;AAAA,IAC1C,YAAY,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,iBAAiB,GAAG;AACvE,YAAM,OAAO,IAAI,KAAM;AACvB,WAAK,OAAO,GAAG,CAAC,SAAS,GAAG,QAAQ,KAAK,KAAK,KAAK,CAAC;AACpD,WAAK,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,KAAK,GAAG;AAEnD,YAAM,KAAK,UAAU,WAAW,GAAG,cAAc;AAEjD,WAAK,OAAO;AAEZ,WAAK,aAAa;AAAA,QAChB;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IAED,OAAO,SAAS,MAAM;AACpB,aAAO,IAAIA,iBAAgB,KAAK,QAAQ,KAAK,QAAQ,KAAK,aAAa,KAAK,cAAc;AAAA,IAC3F;AAAA,EACF;AAED,SAAOA;AACT,GAAC;"}
1
+ {"version":3,"file":"CapsuleGeometry.js","sources":["../../src/_polyfill/CapsuleGeometry.js"],"sourcesContent":["import { Path, LatheGeometry } from 'three'\n\nclass CapsuleGeometry extends LatheGeometry {\n constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {\n const path = new Path()\n path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0)\n path.absarc(0, length / 2, radius, 0, Math.PI * 0.5)\n\n super(path.getPoints(capSegments), radialSegments)\n\n this.type = 'CapsuleGeometry'\n\n this.parameters = {\n radius: radius,\n height: length,\n capSegments: capSegments,\n radialSegments: radialSegments,\n }\n }\n\n static fromJSON(data) {\n return new CapsuleGeometry(data.radius, data.length, data.capSegments, data.radialSegments)\n }\n}\n\nexport { CapsuleGeometry }\n"],"names":[],"mappings":";AAEA,MAAM,wBAAwB,cAAc;AAAA,EAC1C,YAAY,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,iBAAiB,GAAG;AACvE,UAAM,OAAO,IAAI,KAAM;AACvB,SAAK,OAAO,GAAG,CAAC,SAAS,GAAG,QAAQ,KAAK,KAAK,KAAK,CAAC;AACpD,SAAK,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,KAAK,GAAG;AAEnD,UAAM,KAAK,UAAU,WAAW,GAAG,cAAc;AAEjD,SAAK,OAAO;AAEZ,SAAK,aAAa;AAAA,MAChB;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,IACD;AAAA,EACF;AAAA,EAED,OAAO,SAAS,MAAM;AACpB,WAAO,IAAI,gBAAgB,KAAK,QAAQ,KAAK,QAAQ,KAAK,aAAa,KAAK,cAAc;AAAA,EAC3F;AACH;"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const THREE = require("three");
4
- const version = /* @__PURE__ */ (() => parseInt(THREE.REVISION.replace(/\D+/g, "")))();
4
+ const version = parseInt(THREE.REVISION.replace(/\D+/g, ""));
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=constants.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.cjs","sources":["../../src/_polyfill/constants.ts"],"sourcesContent":["import { REVISION } from 'three'\n\nexport const version = /* @__PURE__ */ (() => parseInt(REVISION.replace(/\\D+/g, '')))()\n"],"names":["REVISION"],"mappings":";;;AAEa,MAAA,iCAAiC,SAASA,MAAAA,SAAS,QAAQ,QAAQ,EAAE,CAAC,GAAG;;"}
1
+ {"version":3,"file":"constants.cjs","sources":["../../src/_polyfill/constants.ts"],"sourcesContent":["import { REVISION } from 'three'\n\nexport const version = parseInt(REVISION.replace(/\\D+/g, ''))\n"],"names":["REVISION"],"mappings":";;;AAEO,MAAM,UAAU,SAASA,MAAAA,SAAS,QAAQ,QAAQ,EAAE,CAAC;;"}
@@ -1,5 +1,5 @@
1
1
  import { REVISION } from "three";
2
- const version = /* @__PURE__ */ (() => parseInt(REVISION.replace(/\D+/g, "")))();
2
+ const version = parseInt(REVISION.replace(/\D+/g, ""));
3
3
  export {
4
4
  version
5
5
  };
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../src/_polyfill/constants.ts"],"sourcesContent":["import { REVISION } from 'three'\n\nexport const version = /* @__PURE__ */ (() => parseInt(REVISION.replace(/\\D+/g, '')))()\n"],"names":[],"mappings":";AAEa,MAAA,iCAAiC,SAAS,SAAS,QAAQ,QAAQ,EAAE,CAAC,GAAG;"}
1
+ {"version":3,"file":"constants.js","sources":["../../src/_polyfill/constants.ts"],"sourcesContent":["import { REVISION } from 'three'\n\nexport const version = parseInt(REVISION.replace(/\\D+/g, ''))\n"],"names":[],"mappings":";AAEO,MAAM,UAAU,SAAS,SAAS,QAAQ,QAAQ,EAAE,CAAC;"}
@@ -1,20 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const THREE = require("three");
4
- const AnimationClipCreator = {
5
- CreateRotationAnimation(period, axis = "x") {
4
+ class AnimationClipCreator {
5
+ static CreateRotationAnimation(period, axis = "x") {
6
6
  const times = [0, period], values = [0, 360];
7
7
  const trackName = ".rotation[" + axis + "]";
8
8
  const track = new THREE.NumberKeyframeTrack(trackName, times, values);
9
9
  return new THREE.AnimationClip(null, period, [track]);
10
- },
11
- CreateScaleAxisAnimation(period, axis = "x") {
10
+ }
11
+ static CreateScaleAxisAnimation(period, axis = "x") {
12
12
  const times = [0, period], values = [0, 1];
13
13
  const trackName = ".scale[" + axis + "]";
14
14
  const track = new THREE.NumberKeyframeTrack(trackName, times, values);
15
15
  return new THREE.AnimationClip(null, period, [track]);
16
- },
17
- CreateShakeAnimation(duration, shakeScale) {
16
+ }
17
+ static CreateShakeAnimation(duration, shakeScale) {
18
18
  const times = [], values = [], tmp = new THREE.Vector3();
19
19
  for (let i = 0; i < duration * 10; i++) {
20
20
  times.push(i / 10);
@@ -23,8 +23,8 @@ const AnimationClipCreator = {
23
23
  const trackName = ".position";
24
24
  const track = new THREE.VectorKeyframeTrack(trackName, times, values);
25
25
  return new THREE.AnimationClip(null, duration, [track]);
26
- },
27
- CreatePulsationAnimation(duration, pulseScale) {
26
+ }
27
+ static CreatePulsationAnimation(duration, pulseScale) {
28
28
  const times = [], values = [], tmp = new THREE.Vector3();
29
29
  for (let i = 0; i < duration * 10; i++) {
30
30
  times.push(i / 10);
@@ -34,14 +34,14 @@ const AnimationClipCreator = {
34
34
  const trackName = ".scale";
35
35
  const track = new THREE.VectorKeyframeTrack(trackName, times, values);
36
36
  return new THREE.AnimationClip(null, duration, [track]);
37
- },
38
- CreateVisibilityAnimation(duration) {
37
+ }
38
+ static CreateVisibilityAnimation(duration) {
39
39
  const times = [0, duration / 2, duration], values = [true, false, true];
40
40
  const trackName = ".visible";
41
41
  const track = new THREE.BooleanKeyframeTrack(trackName, times, values);
42
42
  return new THREE.AnimationClip(null, duration, [track]);
43
- },
44
- CreateMaterialColorAnimation(duration, colors) {
43
+ }
44
+ static CreateMaterialColorAnimation(duration, colors) {
45
45
  const times = [], values = [], timeStep = duration / colors.length;
46
46
  for (let i = 0; i < colors.length; i++) {
47
47
  times.push(i * timeStep);
@@ -52,6 +52,6 @@ const AnimationClipCreator = {
52
52
  const track = new THREE.ColorKeyframeTrack(trackName, times, values);
53
53
  return new THREE.AnimationClip(null, duration, [track]);
54
54
  }
55
- };
55
+ }
56
56
  exports.AnimationClipCreator = AnimationClipCreator;
57
57
  //# sourceMappingURL=AnimationClipCreator.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"AnimationClipCreator.cjs","sources":["../../src/animation/AnimationClipCreator.js"],"sourcesContent":["import {\n AnimationClip,\n BooleanKeyframeTrack,\n ColorKeyframeTrack,\n NumberKeyframeTrack,\n Vector3,\n VectorKeyframeTrack,\n} from 'three'\n\nconst AnimationClipCreator = {\n CreateRotationAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 360]\n\n const trackName = '.rotation[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n },\n\n CreateScaleAxisAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 1]\n\n const trackName = '.scale[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n },\n\n CreateShakeAnimation(duration, shakeScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n tmp\n .set(Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0)\n .multiply(shakeScale)\n .toArray(values, values.length)\n }\n\n const trackName = '.position'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n\n CreatePulsationAnimation(duration, pulseScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n const scaleFactor = Math.random() * pulseScale\n tmp.set(scaleFactor, scaleFactor, scaleFactor).toArray(values, values.length)\n }\n\n const trackName = '.scale'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n\n CreateVisibilityAnimation(duration) {\n const times = [0, duration / 2, duration],\n values = [true, false, true]\n\n const trackName = '.visible'\n\n const track = new BooleanKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n\n CreateMaterialColorAnimation(duration, colors) {\n const times = [],\n values = [],\n timeStep = duration / colors.length\n\n for (let i = 0; i < colors.length; i++) {\n times.push(i * timeStep)\n\n const color = colors[i]\n values.push(color.r, color.g, color.b)\n }\n\n const trackName = '.material.color'\n\n const track = new ColorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n}\n\nexport { AnimationClipCreator }\n"],"names":["NumberKeyframeTrack","AnimationClip","Vector3","VectorKeyframeTrack","BooleanKeyframeTrack","ColorKeyframeTrack"],"mappings":";;;AASK,MAAC,uBAAuB;AAAA,EAC3B,wBAAwB,QAAQ,OAAO,KAAK;AAC1C,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,GAAG;AAElB,UAAM,YAAY,eAAe,OAAO;AAExC,UAAM,QAAQ,IAAIA,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIC,MAAAA,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,yBAAyB,QAAQ,OAAO,KAAK;AAC3C,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,CAAC;AAEhB,UAAM,YAAY,YAAY,OAAO;AAErC,UAAM,QAAQ,IAAID,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIC,MAAAA,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,qBAAqB,UAAU,YAAY;AACzC,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAIC,MAAAA,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,UACG,IAAI,KAAK,OAAM,IAAK,IAAM,GAAK,KAAK,OAAQ,IAAG,IAAM,GAAK,KAAK,OAAM,IAAK,IAAM,CAAG,EACnF,SAAS,UAAU,EACnB,QAAQ,QAAQ,OAAO,MAAM;AAAA,IACjC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAIC,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIF,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,yBAAyB,UAAU,YAAY;AAC7C,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAIC,MAAAA,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,YAAM,cAAc,KAAK,OAAM,IAAK;AACpC,UAAI,IAAI,aAAa,aAAa,WAAW,EAAE,QAAQ,QAAQ,OAAO,MAAM;AAAA,IAC7E;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAIC,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIF,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,0BAA0B,UAAU;AAClC,UAAM,QAAQ,CAAC,GAAG,WAAW,GAAG,QAAQ,GACtC,SAAS,CAAC,MAAM,OAAO,IAAI;AAE7B,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAIG,MAAAA,qBAAqB,WAAW,OAAO,MAAM;AAE/D,WAAO,IAAIH,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,6BAA6B,UAAU,QAAQ;AAC7C,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,WAAW,WAAW,OAAO;AAE/B,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAM,KAAK,IAAI,QAAQ;AAEvB,YAAM,QAAQ,OAAO,CAAC;AACtB,aAAO,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAAA,IACtC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAII,MAAAA,mBAAmB,WAAW,OAAO,MAAM;AAE7D,WAAO,IAAIJ,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AACH;;"}
1
+ {"version":3,"file":"AnimationClipCreator.cjs","sources":["../../src/animation/AnimationClipCreator.js"],"sourcesContent":["import {\n AnimationClip,\n BooleanKeyframeTrack,\n ColorKeyframeTrack,\n NumberKeyframeTrack,\n Vector3,\n VectorKeyframeTrack,\n} from 'three'\n\nclass AnimationClipCreator {\n static CreateRotationAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 360]\n\n const trackName = '.rotation[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n }\n\n static CreateScaleAxisAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 1]\n\n const trackName = '.scale[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n }\n\n static CreateShakeAnimation(duration, shakeScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n tmp\n .set(Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0)\n .multiply(shakeScale)\n .toArray(values, values.length)\n }\n\n const trackName = '.position'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n }\n\n static CreatePulsationAnimation(duration, pulseScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n const scaleFactor = Math.random() * pulseScale\n tmp.set(scaleFactor, scaleFactor, scaleFactor).toArray(values, values.length)\n }\n\n const trackName = '.scale'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n }\n\n static CreateVisibilityAnimation(duration) {\n const times = [0, duration / 2, duration],\n values = [true, false, true]\n\n const trackName = '.visible'\n\n const track = new BooleanKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n }\n\n static CreateMaterialColorAnimation(duration, colors) {\n const times = [],\n values = [],\n timeStep = duration / colors.length\n\n for (let i = 0; i < colors.length; i++) {\n times.push(i * timeStep)\n\n const color = colors[i]\n values.push(color.r, color.g, color.b)\n }\n\n const trackName = '.material.color'\n\n const track = new ColorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n }\n}\n\nexport { AnimationClipCreator }\n"],"names":["NumberKeyframeTrack","AnimationClip","Vector3","VectorKeyframeTrack","BooleanKeyframeTrack","ColorKeyframeTrack"],"mappings":";;;AASA,MAAM,qBAAqB;AAAA,EACzB,OAAO,wBAAwB,QAAQ,OAAO,KAAK;AACjD,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,GAAG;AAElB,UAAM,YAAY,eAAe,OAAO;AAExC,UAAM,QAAQ,IAAIA,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIC,MAAAA,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,OAAO,yBAAyB,QAAQ,OAAO,KAAK;AAClD,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,CAAC;AAEhB,UAAM,YAAY,YAAY,OAAO;AAErC,UAAM,QAAQ,IAAID,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIC,MAAAA,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,OAAO,qBAAqB,UAAU,YAAY;AAChD,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAIC,MAAAA,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,UACG,IAAI,KAAK,OAAM,IAAK,IAAM,GAAK,KAAK,OAAQ,IAAG,IAAM,GAAK,KAAK,OAAM,IAAK,IAAM,CAAG,EACnF,SAAS,UAAU,EACnB,QAAQ,QAAQ,OAAO,MAAM;AAAA,IACjC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAIC,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIF,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,OAAO,yBAAyB,UAAU,YAAY;AACpD,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAIC,MAAAA,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,YAAM,cAAc,KAAK,OAAM,IAAK;AACpC,UAAI,IAAI,aAAa,aAAa,WAAW,EAAE,QAAQ,QAAQ,OAAO,MAAM;AAAA,IAC7E;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAIC,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIF,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,OAAO,0BAA0B,UAAU;AACzC,UAAM,QAAQ,CAAC,GAAG,WAAW,GAAG,QAAQ,GACtC,SAAS,CAAC,MAAM,OAAO,IAAI;AAE7B,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAIG,MAAAA,qBAAqB,WAAW,OAAO,MAAM;AAE/D,WAAO,IAAIH,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,OAAO,6BAA6B,UAAU,QAAQ;AACpD,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,WAAW,WAAW,OAAO;AAE/B,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAM,KAAK,IAAI,QAAQ;AAEvB,YAAM,QAAQ,OAAO,CAAC;AACtB,aAAO,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAAA,IACtC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAII,MAAAA,mBAAmB,WAAW,OAAO,MAAM;AAE7D,WAAO,IAAIJ,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AACH;;"}
@@ -1,18 +1,18 @@
1
1
  import { NumberKeyframeTrack, AnimationClip, Vector3, VectorKeyframeTrack, BooleanKeyframeTrack, ColorKeyframeTrack } from "three";
2
- const AnimationClipCreator = {
3
- CreateRotationAnimation(period, axis = "x") {
2
+ class AnimationClipCreator {
3
+ static CreateRotationAnimation(period, axis = "x") {
4
4
  const times = [0, period], values = [0, 360];
5
5
  const trackName = ".rotation[" + axis + "]";
6
6
  const track = new NumberKeyframeTrack(trackName, times, values);
7
7
  return new AnimationClip(null, period, [track]);
8
- },
9
- CreateScaleAxisAnimation(period, axis = "x") {
8
+ }
9
+ static CreateScaleAxisAnimation(period, axis = "x") {
10
10
  const times = [0, period], values = [0, 1];
11
11
  const trackName = ".scale[" + axis + "]";
12
12
  const track = new NumberKeyframeTrack(trackName, times, values);
13
13
  return new AnimationClip(null, period, [track]);
14
- },
15
- CreateShakeAnimation(duration, shakeScale) {
14
+ }
15
+ static CreateShakeAnimation(duration, shakeScale) {
16
16
  const times = [], values = [], tmp = new Vector3();
17
17
  for (let i = 0; i < duration * 10; i++) {
18
18
  times.push(i / 10);
@@ -21,8 +21,8 @@ const AnimationClipCreator = {
21
21
  const trackName = ".position";
22
22
  const track = new VectorKeyframeTrack(trackName, times, values);
23
23
  return new AnimationClip(null, duration, [track]);
24
- },
25
- CreatePulsationAnimation(duration, pulseScale) {
24
+ }
25
+ static CreatePulsationAnimation(duration, pulseScale) {
26
26
  const times = [], values = [], tmp = new Vector3();
27
27
  for (let i = 0; i < duration * 10; i++) {
28
28
  times.push(i / 10);
@@ -32,14 +32,14 @@ const AnimationClipCreator = {
32
32
  const trackName = ".scale";
33
33
  const track = new VectorKeyframeTrack(trackName, times, values);
34
34
  return new AnimationClip(null, duration, [track]);
35
- },
36
- CreateVisibilityAnimation(duration) {
35
+ }
36
+ static CreateVisibilityAnimation(duration) {
37
37
  const times = [0, duration / 2, duration], values = [true, false, true];
38
38
  const trackName = ".visible";
39
39
  const track = new BooleanKeyframeTrack(trackName, times, values);
40
40
  return new AnimationClip(null, duration, [track]);
41
- },
42
- CreateMaterialColorAnimation(duration, colors) {
41
+ }
42
+ static CreateMaterialColorAnimation(duration, colors) {
43
43
  const times = [], values = [], timeStep = duration / colors.length;
44
44
  for (let i = 0; i < colors.length; i++) {
45
45
  times.push(i * timeStep);
@@ -50,7 +50,7 @@ const AnimationClipCreator = {
50
50
  const track = new ColorKeyframeTrack(trackName, times, values);
51
51
  return new AnimationClip(null, duration, [track]);
52
52
  }
53
- };
53
+ }
54
54
  export {
55
55
  AnimationClipCreator
56
56
  };
@@ -1 +1 @@
1
- {"version":3,"file":"AnimationClipCreator.js","sources":["../../src/animation/AnimationClipCreator.js"],"sourcesContent":["import {\n AnimationClip,\n BooleanKeyframeTrack,\n ColorKeyframeTrack,\n NumberKeyframeTrack,\n Vector3,\n VectorKeyframeTrack,\n} from 'three'\n\nconst AnimationClipCreator = {\n CreateRotationAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 360]\n\n const trackName = '.rotation[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n },\n\n CreateScaleAxisAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 1]\n\n const trackName = '.scale[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n },\n\n CreateShakeAnimation(duration, shakeScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n tmp\n .set(Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0)\n .multiply(shakeScale)\n .toArray(values, values.length)\n }\n\n const trackName = '.position'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n\n CreatePulsationAnimation(duration, pulseScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n const scaleFactor = Math.random() * pulseScale\n tmp.set(scaleFactor, scaleFactor, scaleFactor).toArray(values, values.length)\n }\n\n const trackName = '.scale'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n\n CreateVisibilityAnimation(duration) {\n const times = [0, duration / 2, duration],\n values = [true, false, true]\n\n const trackName = '.visible'\n\n const track = new BooleanKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n\n CreateMaterialColorAnimation(duration, colors) {\n const times = [],\n values = [],\n timeStep = duration / colors.length\n\n for (let i = 0; i < colors.length; i++) {\n times.push(i * timeStep)\n\n const color = colors[i]\n values.push(color.r, color.g, color.b)\n }\n\n const trackName = '.material.color'\n\n const track = new ColorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n}\n\nexport { AnimationClipCreator }\n"],"names":[],"mappings":";AASK,MAAC,uBAAuB;AAAA,EAC3B,wBAAwB,QAAQ,OAAO,KAAK;AAC1C,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,GAAG;AAElB,UAAM,YAAY,eAAe,OAAO;AAExC,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,yBAAyB,QAAQ,OAAO,KAAK;AAC3C,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,CAAC;AAEhB,UAAM,YAAY,YAAY,OAAO;AAErC,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,qBAAqB,UAAU,YAAY;AACzC,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAI,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,UACG,IAAI,KAAK,OAAM,IAAK,IAAM,GAAK,KAAK,OAAQ,IAAG,IAAM,GAAK,KAAK,OAAM,IAAK,IAAM,CAAG,EACnF,SAAS,UAAU,EACnB,QAAQ,QAAQ,OAAO,MAAM;AAAA,IACjC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,yBAAyB,UAAU,YAAY;AAC7C,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAI,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,YAAM,cAAc,KAAK,OAAM,IAAK;AACpC,UAAI,IAAI,aAAa,aAAa,WAAW,EAAE,QAAQ,QAAQ,OAAO,MAAM;AAAA,IAC7E;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,0BAA0B,UAAU;AAClC,UAAM,QAAQ,CAAC,GAAG,WAAW,GAAG,QAAQ,GACtC,SAAS,CAAC,MAAM,OAAO,IAAI;AAE7B,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,qBAAqB,WAAW,OAAO,MAAM;AAE/D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,6BAA6B,UAAU,QAAQ;AAC7C,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,WAAW,WAAW,OAAO;AAE/B,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAM,KAAK,IAAI,QAAQ;AAEvB,YAAM,QAAQ,OAAO,CAAC;AACtB,aAAO,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAAA,IACtC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,mBAAmB,WAAW,OAAO,MAAM;AAE7D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AACH;"}
1
+ {"version":3,"file":"AnimationClipCreator.js","sources":["../../src/animation/AnimationClipCreator.js"],"sourcesContent":["import {\n AnimationClip,\n BooleanKeyframeTrack,\n ColorKeyframeTrack,\n NumberKeyframeTrack,\n Vector3,\n VectorKeyframeTrack,\n} from 'three'\n\nclass AnimationClipCreator {\n static CreateRotationAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 360]\n\n const trackName = '.rotation[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n }\n\n static CreateScaleAxisAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 1]\n\n const trackName = '.scale[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n }\n\n static CreateShakeAnimation(duration, shakeScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n tmp\n .set(Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0)\n .multiply(shakeScale)\n .toArray(values, values.length)\n }\n\n const trackName = '.position'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n }\n\n static CreatePulsationAnimation(duration, pulseScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n const scaleFactor = Math.random() * pulseScale\n tmp.set(scaleFactor, scaleFactor, scaleFactor).toArray(values, values.length)\n }\n\n const trackName = '.scale'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n }\n\n static CreateVisibilityAnimation(duration) {\n const times = [0, duration / 2, duration],\n values = [true, false, true]\n\n const trackName = '.visible'\n\n const track = new BooleanKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n }\n\n static CreateMaterialColorAnimation(duration, colors) {\n const times = [],\n values = [],\n timeStep = duration / colors.length\n\n for (let i = 0; i < colors.length; i++) {\n times.push(i * timeStep)\n\n const color = colors[i]\n values.push(color.r, color.g, color.b)\n }\n\n const trackName = '.material.color'\n\n const track = new ColorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n }\n}\n\nexport { AnimationClipCreator }\n"],"names":[],"mappings":";AASA,MAAM,qBAAqB;AAAA,EACzB,OAAO,wBAAwB,QAAQ,OAAO,KAAK;AACjD,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,GAAG;AAElB,UAAM,YAAY,eAAe,OAAO;AAExC,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,OAAO,yBAAyB,QAAQ,OAAO,KAAK;AAClD,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,CAAC;AAEhB,UAAM,YAAY,YAAY,OAAO;AAErC,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,OAAO,qBAAqB,UAAU,YAAY;AAChD,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAI,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,UACG,IAAI,KAAK,OAAM,IAAK,IAAM,GAAK,KAAK,OAAQ,IAAG,IAAM,GAAK,KAAK,OAAM,IAAK,IAAM,CAAG,EACnF,SAAS,UAAU,EACnB,QAAQ,QAAQ,OAAO,MAAM;AAAA,IACjC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,OAAO,yBAAyB,UAAU,YAAY;AACpD,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAI,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,YAAM,cAAc,KAAK,OAAM,IAAK;AACpC,UAAI,IAAI,aAAa,aAAa,WAAW,EAAE,QAAQ,QAAQ,OAAO,MAAM;AAAA,IAC7E;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,OAAO,0BAA0B,UAAU;AACzC,UAAM,QAAQ,CAAC,GAAG,WAAW,GAAG,QAAQ,GACtC,SAAS,CAAC,MAAM,OAAO,IAAI;AAE7B,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,qBAAqB,WAAW,OAAO,MAAM;AAE/D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,OAAO,6BAA6B,UAAU,QAAQ;AACpD,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,WAAW,WAAW,OAAO;AAE/B,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAM,KAAK,IAAI,QAAQ;AAEvB,YAAM,QAAQ,OAAO,CAAC;AACtB,aAAO,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAAA,IACtC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,mBAAmB,WAAW,OAAO,MAAM;AAE7D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AACH;"}
@@ -1,17 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const THREE = require("three");
4
- const _q = /* @__PURE__ */ new THREE.Quaternion();
5
- const _targetPos = /* @__PURE__ */ new THREE.Vector3();
6
- const _targetVec = /* @__PURE__ */ new THREE.Vector3();
7
- const _effectorPos = /* @__PURE__ */ new THREE.Vector3();
8
- const _effectorVec = /* @__PURE__ */ new THREE.Vector3();
9
- const _linkPos = /* @__PURE__ */ new THREE.Vector3();
10
- const _invLinkQ = /* @__PURE__ */ new THREE.Quaternion();
11
- const _linkScale = /* @__PURE__ */ new THREE.Vector3();
12
- const _axis = /* @__PURE__ */ new THREE.Vector3();
13
- const _vector = /* @__PURE__ */ new THREE.Vector3();
14
- const _matrix = /* @__PURE__ */ new THREE.Matrix4();
4
+ const _q = new THREE.Quaternion();
5
+ const _targetPos = new THREE.Vector3();
6
+ const _targetVec = new THREE.Vector3();
7
+ const _effectorPos = new THREE.Vector3();
8
+ const _effectorVec = new THREE.Vector3();
9
+ const _linkPos = new THREE.Vector3();
10
+ const _invLinkQ = new THREE.Quaternion();
11
+ const _linkScale = new THREE.Vector3();
12
+ const _axis = new THREE.Vector3();
13
+ const _vector = new THREE.Vector3();
14
+ const _matrix = new THREE.Matrix4();
15
15
  class CCDIKSolver {
16
16
  /**
17
17
  * @param {THREE.SkinnedMesh} mesh
@@ -1 +1 @@
1
- {"version":3,"file":"CCDIKSolver.cjs","sources":["../../src/animation/CCDIKSolver.js"],"sourcesContent":["import {\n BufferAttribute,\n BufferGeometry,\n Color,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Quaternion,\n SphereGeometry,\n Vector3,\n} from 'three'\n\nconst _q = /* @__PURE__ */ new Quaternion()\nconst _targetPos = /* @__PURE__ */ new Vector3()\nconst _targetVec = /* @__PURE__ */ new Vector3()\nconst _effectorPos = /* @__PURE__ */ new Vector3()\nconst _effectorVec = /* @__PURE__ */ new Vector3()\nconst _linkPos = /* @__PURE__ */ new Vector3()\nconst _invLinkQ = /* @__PURE__ */ new Quaternion()\nconst _linkScale = /* @__PURE__ */ new Vector3()\nconst _axis = /* @__PURE__ */ new Vector3()\nconst _vector = /* @__PURE__ */ new Vector3()\nconst _matrix = /* @__PURE__ */ new Matrix4()\n\n/**\n * CCD Algorithm\n * - https://sites.google.com/site/auraliusproject/ccd-algorithm\n *\n * // ik parameter example\n * //\n * // target, effector, index in links are bone index in skeleton.bones.\n * // the bones relation should be\n * // <-- parent child -->\n * // links[ n ], links[ n - 1 ], ..., links[ 0 ], effector\n * iks = [ {\n *\ttarget: 1,\n *\teffector: 2,\n *\tlinks: [ { index: 5, limitation: new Vector3( 1, 0, 0 ) }, { index: 4, enabled: false }, { index : 3 } ],\n *\titeration: 10,\n *\tminAngle: 0.0,\n *\tmaxAngle: 1.0,\n * } ];\n */\n\nclass CCDIKSolver {\n /**\n * @param {THREE.SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\n constructor(mesh, iks = []) {\n this.mesh = mesh\n this.iks = iks\n\n this._valid()\n }\n\n /**\n * Update all IK bones.\n *\n * @return {CCDIKSolver}\n */\n update() {\n const iks = this.iks\n\n for (let i = 0, il = iks.length; i < il; i++) {\n this.updateOne(iks[i])\n }\n\n return this\n }\n\n /**\n * Update one IK bone\n *\n * @param {Object} ik parameter\n * @return {CCDIKSolver}\n */\n updateOne(ik) {\n const bones = this.mesh.skeleton.bones\n\n // for reference overhead reduction in loop\n const math = Math\n\n const effector = bones[ik.effector]\n const target = bones[ik.target]\n\n // don't use getWorldPosition() here for the performance\n // because it calls updateMatrixWorld( true ) inside.\n _targetPos.setFromMatrixPosition(target.matrixWorld)\n\n const links = ik.links\n const iteration = ik.iteration !== undefined ? ik.iteration : 1\n\n for (let i = 0; i < iteration; i++) {\n let rotated = false\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n const link = bones[links[j].index]\n\n // skip this link and following links.\n // this skip is used for MMD performance optimization.\n if (links[j].enabled === false) break\n\n const limitation = links[j].limitation\n const rotationMin = links[j].rotationMin\n const rotationMax = links[j].rotationMax\n\n // don't use getWorldPosition/Quaternion() here for the performance\n // because they call updateMatrixWorld( true ) inside.\n link.matrixWorld.decompose(_linkPos, _invLinkQ, _linkScale)\n _invLinkQ.invert()\n _effectorPos.setFromMatrixPosition(effector.matrixWorld)\n\n // work in link world\n _effectorVec.subVectors(_effectorPos, _linkPos)\n _effectorVec.applyQuaternion(_invLinkQ)\n _effectorVec.normalize()\n\n _targetVec.subVectors(_targetPos, _linkPos)\n _targetVec.applyQuaternion(_invLinkQ)\n _targetVec.normalize()\n\n let angle = _targetVec.dot(_effectorVec)\n\n if (angle > 1.0) {\n angle = 1.0\n } else if (angle < -1.0) {\n angle = -1.0\n }\n\n angle = math.acos(angle)\n\n // skip if changing angle is too small to prevent vibration of bone\n if (angle < 1e-5) continue\n\n if (ik.minAngle !== undefined && angle < ik.minAngle) {\n angle = ik.minAngle\n }\n\n if (ik.maxAngle !== undefined && angle > ik.maxAngle) {\n angle = ik.maxAngle\n }\n\n _axis.crossVectors(_effectorVec, _targetVec)\n _axis.normalize()\n\n _q.setFromAxisAngle(_axis, angle)\n link.quaternion.multiply(_q)\n\n // TODO: re-consider the limitation specification\n if (limitation !== undefined) {\n let c = link.quaternion.w\n\n if (c > 1.0) c = 1.0\n\n const c2 = math.sqrt(1 - c * c)\n link.quaternion.set(limitation.x * c2, limitation.y * c2, limitation.z * c2, c)\n }\n\n if (rotationMin !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).max(rotationMin))\n }\n\n if (rotationMax !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).min(rotationMax))\n }\n\n link.updateMatrixWorld(true)\n\n rotated = true\n }\n\n if (!rotated) break\n }\n\n return this\n }\n\n /**\n * Creates Helper\n *\n * @return {CCDIKHelper}\n */\n createHelper() {\n return new CCDIKHelper(this.mesh, this.iks)\n }\n\n // private methods\n\n _valid() {\n const iks = this.iks\n const bones = this.mesh.skeleton.bones\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n const effector = bones[ik.effector]\n const links = ik.links\n let link0, link1\n\n link0 = effector\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n link1 = bones[links[j].index]\n\n if (link0.parent !== link1) {\n console.warn('THREE.CCDIKSolver: bone ' + link0.name + ' is not the child of bone ' + link1.name)\n }\n\n link0 = link1\n }\n }\n }\n}\n\nfunction getPosition(bone, matrixWorldInv) {\n return _vector.setFromMatrixPosition(bone.matrixWorld).applyMatrix4(matrixWorldInv)\n}\n\nfunction setPositionOfBoneToAttributeArray(array, index, bone, matrixWorldInv) {\n const v = getPosition(bone, matrixWorldInv)\n\n array[index * 3 + 0] = v.x\n array[index * 3 + 1] = v.y\n array[index * 3 + 2] = v.z\n}\n\n/**\n * Visualize IK bones\n *\n * @param {SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\nclass CCDIKHelper extends Object3D {\n constructor(mesh, iks = [], sphereSize = 0.25) {\n super()\n\n this.root = mesh\n this.iks = iks\n\n this.matrix.copy(mesh.matrixWorld)\n this.matrixAutoUpdate = false\n\n this.sphereGeometry = new SphereGeometry(sphereSize, 16, 8)\n\n this.targetSphereMaterial = new MeshBasicMaterial({\n color: new Color(0xff8888),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.effectorSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x88ff88),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.linkSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x8888ff),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.lineMaterial = new LineBasicMaterial({\n color: new Color(0xff0000),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this._init()\n }\n\n /**\n * Updates IK bones visualization.\n */\n updateMatrixWorld(force) {\n const mesh = this.root\n\n if (this.visible) {\n let offset = 0\n\n const iks = this.iks\n const bones = mesh.skeleton.bones\n\n _matrix.copy(mesh.matrixWorld).invert()\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n const targetBone = bones[ik.target]\n const effectorBone = bones[ik.effector]\n\n const targetMesh = this.children[offset++]\n const effectorMesh = this.children[offset++]\n\n targetMesh.position.copy(getPosition(targetBone, _matrix))\n effectorMesh.position.copy(getPosition(effectorBone, _matrix))\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n\n const linkMesh = this.children[offset++]\n\n linkMesh.position.copy(getPosition(linkBone, _matrix))\n }\n\n const line = this.children[offset++]\n const array = line.geometry.attributes.position.array\n\n setPositionOfBoneToAttributeArray(array, 0, targetBone, _matrix)\n setPositionOfBoneToAttributeArray(array, 1, effectorBone, _matrix)\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n setPositionOfBoneToAttributeArray(array, j + 2, linkBone, _matrix)\n }\n\n line.geometry.attributes.position.needsUpdate = true\n }\n }\n\n this.matrix.copy(mesh.matrixWorld)\n\n super.updateMatrixWorld(force)\n }\n\n /**\n * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.\n */\n dispose() {\n this.sphereGeometry.dispose()\n\n this.targetSphereMaterial.dispose()\n this.effectorSphereMaterial.dispose()\n this.linkSphereMaterial.dispose()\n this.lineMaterial.dispose()\n\n const children = this.children\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i]\n\n if (child.isLine) child.geometry.dispose()\n }\n }\n\n // private method\n\n _init() {\n const scope = this\n const iks = this.iks\n\n function createLineGeometry(ik) {\n const geometry = new BufferGeometry()\n const vertices = new Float32Array((2 + ik.links.length) * 3)\n geometry.setAttribute('position', new BufferAttribute(vertices, 3))\n\n return geometry\n }\n\n function createTargetMesh() {\n return new Mesh(scope.sphereGeometry, scope.targetSphereMaterial)\n }\n\n function createEffectorMesh() {\n return new Mesh(scope.sphereGeometry, scope.effectorSphereMaterial)\n }\n\n function createLinkMesh() {\n return new Mesh(scope.sphereGeometry, scope.linkSphereMaterial)\n }\n\n function createLine(ik) {\n return new Line(createLineGeometry(ik), scope.lineMaterial)\n }\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n this.add(createTargetMesh())\n this.add(createEffectorMesh())\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n this.add(createLinkMesh())\n }\n\n this.add(createLine(ik))\n }\n }\n}\n\nexport { CCDIKSolver, CCDIKHelper }\n"],"names":["Quaternion","Vector3","Matrix4","Object3D","SphereGeometry","MeshBasicMaterial","Color","LineBasicMaterial","BufferGeometry","BufferAttribute","Mesh","Line"],"mappings":"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"}
1
+ {"version":3,"file":"CCDIKSolver.cjs","sources":["../../src/animation/CCDIKSolver.js"],"sourcesContent":["import {\n BufferAttribute,\n BufferGeometry,\n Color,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Quaternion,\n SphereGeometry,\n Vector3,\n} from 'three'\n\nconst _q = new Quaternion()\nconst _targetPos = new Vector3()\nconst _targetVec = new Vector3()\nconst _effectorPos = new Vector3()\nconst _effectorVec = new Vector3()\nconst _linkPos = new Vector3()\nconst _invLinkQ = new Quaternion()\nconst _linkScale = new Vector3()\nconst _axis = new Vector3()\nconst _vector = new Vector3()\nconst _matrix = new Matrix4()\n\n/**\n * CCD Algorithm\n * - https://sites.google.com/site/auraliusproject/ccd-algorithm\n *\n * // ik parameter example\n * //\n * // target, effector, index in links are bone index in skeleton.bones.\n * // the bones relation should be\n * // <-- parent child -->\n * // links[ n ], links[ n - 1 ], ..., links[ 0 ], effector\n * iks = [ {\n *\ttarget: 1,\n *\teffector: 2,\n *\tlinks: [ { index: 5, limitation: new Vector3( 1, 0, 0 ) }, { index: 4, enabled: false }, { index : 3 } ],\n *\titeration: 10,\n *\tminAngle: 0.0,\n *\tmaxAngle: 1.0,\n * } ];\n */\n\nclass CCDIKSolver {\n /**\n * @param {THREE.SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\n constructor(mesh, iks = []) {\n this.mesh = mesh\n this.iks = iks\n\n this._valid()\n }\n\n /**\n * Update all IK bones.\n *\n * @return {CCDIKSolver}\n */\n update() {\n const iks = this.iks\n\n for (let i = 0, il = iks.length; i < il; i++) {\n this.updateOne(iks[i])\n }\n\n return this\n }\n\n /**\n * Update one IK bone\n *\n * @param {Object} ik parameter\n * @return {CCDIKSolver}\n */\n updateOne(ik) {\n const bones = this.mesh.skeleton.bones\n\n // for reference overhead reduction in loop\n const math = Math\n\n const effector = bones[ik.effector]\n const target = bones[ik.target]\n\n // don't use getWorldPosition() here for the performance\n // because it calls updateMatrixWorld( true ) inside.\n _targetPos.setFromMatrixPosition(target.matrixWorld)\n\n const links = ik.links\n const iteration = ik.iteration !== undefined ? ik.iteration : 1\n\n for (let i = 0; i < iteration; i++) {\n let rotated = false\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n const link = bones[links[j].index]\n\n // skip this link and following links.\n // this skip is used for MMD performance optimization.\n if (links[j].enabled === false) break\n\n const limitation = links[j].limitation\n const rotationMin = links[j].rotationMin\n const rotationMax = links[j].rotationMax\n\n // don't use getWorldPosition/Quaternion() here for the performance\n // because they call updateMatrixWorld( true ) inside.\n link.matrixWorld.decompose(_linkPos, _invLinkQ, _linkScale)\n _invLinkQ.invert()\n _effectorPos.setFromMatrixPosition(effector.matrixWorld)\n\n // work in link world\n _effectorVec.subVectors(_effectorPos, _linkPos)\n _effectorVec.applyQuaternion(_invLinkQ)\n _effectorVec.normalize()\n\n _targetVec.subVectors(_targetPos, _linkPos)\n _targetVec.applyQuaternion(_invLinkQ)\n _targetVec.normalize()\n\n let angle = _targetVec.dot(_effectorVec)\n\n if (angle > 1.0) {\n angle = 1.0\n } else if (angle < -1.0) {\n angle = -1.0\n }\n\n angle = math.acos(angle)\n\n // skip if changing angle is too small to prevent vibration of bone\n if (angle < 1e-5) continue\n\n if (ik.minAngle !== undefined && angle < ik.minAngle) {\n angle = ik.minAngle\n }\n\n if (ik.maxAngle !== undefined && angle > ik.maxAngle) {\n angle = ik.maxAngle\n }\n\n _axis.crossVectors(_effectorVec, _targetVec)\n _axis.normalize()\n\n _q.setFromAxisAngle(_axis, angle)\n link.quaternion.multiply(_q)\n\n // TODO: re-consider the limitation specification\n if (limitation !== undefined) {\n let c = link.quaternion.w\n\n if (c > 1.0) c = 1.0\n\n const c2 = math.sqrt(1 - c * c)\n link.quaternion.set(limitation.x * c2, limitation.y * c2, limitation.z * c2, c)\n }\n\n if (rotationMin !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).max(rotationMin))\n }\n\n if (rotationMax !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).min(rotationMax))\n }\n\n link.updateMatrixWorld(true)\n\n rotated = true\n }\n\n if (!rotated) break\n }\n\n return this\n }\n\n /**\n * Creates Helper\n *\n * @return {CCDIKHelper}\n */\n createHelper() {\n return new CCDIKHelper(this.mesh, this.iks)\n }\n\n // private methods\n\n _valid() {\n const iks = this.iks\n const bones = this.mesh.skeleton.bones\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n const effector = bones[ik.effector]\n const links = ik.links\n let link0, link1\n\n link0 = effector\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n link1 = bones[links[j].index]\n\n if (link0.parent !== link1) {\n console.warn('THREE.CCDIKSolver: bone ' + link0.name + ' is not the child of bone ' + link1.name)\n }\n\n link0 = link1\n }\n }\n }\n}\n\nfunction getPosition(bone, matrixWorldInv) {\n return _vector.setFromMatrixPosition(bone.matrixWorld).applyMatrix4(matrixWorldInv)\n}\n\nfunction setPositionOfBoneToAttributeArray(array, index, bone, matrixWorldInv) {\n const v = getPosition(bone, matrixWorldInv)\n\n array[index * 3 + 0] = v.x\n array[index * 3 + 1] = v.y\n array[index * 3 + 2] = v.z\n}\n\n/**\n * Visualize IK bones\n *\n * @param {SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\nclass CCDIKHelper extends Object3D {\n constructor(mesh, iks = [], sphereSize = 0.25) {\n super()\n\n this.root = mesh\n this.iks = iks\n\n this.matrix.copy(mesh.matrixWorld)\n this.matrixAutoUpdate = false\n\n this.sphereGeometry = new SphereGeometry(sphereSize, 16, 8)\n\n this.targetSphereMaterial = new MeshBasicMaterial({\n color: new Color(0xff8888),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.effectorSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x88ff88),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.linkSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x8888ff),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.lineMaterial = new LineBasicMaterial({\n color: new Color(0xff0000),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this._init()\n }\n\n /**\n * Updates IK bones visualization.\n */\n updateMatrixWorld(force) {\n const mesh = this.root\n\n if (this.visible) {\n let offset = 0\n\n const iks = this.iks\n const bones = mesh.skeleton.bones\n\n _matrix.copy(mesh.matrixWorld).invert()\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n const targetBone = bones[ik.target]\n const effectorBone = bones[ik.effector]\n\n const targetMesh = this.children[offset++]\n const effectorMesh = this.children[offset++]\n\n targetMesh.position.copy(getPosition(targetBone, _matrix))\n effectorMesh.position.copy(getPosition(effectorBone, _matrix))\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n\n const linkMesh = this.children[offset++]\n\n linkMesh.position.copy(getPosition(linkBone, _matrix))\n }\n\n const line = this.children[offset++]\n const array = line.geometry.attributes.position.array\n\n setPositionOfBoneToAttributeArray(array, 0, targetBone, _matrix)\n setPositionOfBoneToAttributeArray(array, 1, effectorBone, _matrix)\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n setPositionOfBoneToAttributeArray(array, j + 2, linkBone, _matrix)\n }\n\n line.geometry.attributes.position.needsUpdate = true\n }\n }\n\n this.matrix.copy(mesh.matrixWorld)\n\n super.updateMatrixWorld(force)\n }\n\n /**\n * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.\n */\n dispose() {\n this.sphereGeometry.dispose()\n\n this.targetSphereMaterial.dispose()\n this.effectorSphereMaterial.dispose()\n this.linkSphereMaterial.dispose()\n this.lineMaterial.dispose()\n\n const children = this.children\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i]\n\n if (child.isLine) child.geometry.dispose()\n }\n }\n\n // private method\n\n _init() {\n const scope = this\n const iks = this.iks\n\n function createLineGeometry(ik) {\n const geometry = new BufferGeometry()\n const vertices = new Float32Array((2 + ik.links.length) * 3)\n geometry.setAttribute('position', new BufferAttribute(vertices, 3))\n\n return geometry\n }\n\n function createTargetMesh() {\n return new Mesh(scope.sphereGeometry, scope.targetSphereMaterial)\n }\n\n function createEffectorMesh() {\n return new Mesh(scope.sphereGeometry, scope.effectorSphereMaterial)\n }\n\n function createLinkMesh() {\n return new Mesh(scope.sphereGeometry, scope.linkSphereMaterial)\n }\n\n function createLine(ik) {\n return new Line(createLineGeometry(ik), scope.lineMaterial)\n }\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n this.add(createTargetMesh())\n this.add(createEffectorMesh())\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n this.add(createLinkMesh())\n }\n\n this.add(createLine(ik))\n }\n }\n}\n\nexport { CCDIKSolver, CCDIKHelper }\n"],"names":["Quaternion","Vector3","Matrix4","Object3D","SphereGeometry","MeshBasicMaterial","Color","LineBasicMaterial","BufferGeometry","BufferAttribute","Mesh","Line"],"mappings":"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"}
@@ -1,15 +1,15 @@
1
- import { Object3D, SphereGeometry, MeshBasicMaterial, Color, LineBasicMaterial, Quaternion, Vector3, Matrix4, Mesh, Line, BufferGeometry, BufferAttribute } from "three";
2
- const _q = /* @__PURE__ */ new Quaternion();
3
- const _targetPos = /* @__PURE__ */ new Vector3();
4
- const _targetVec = /* @__PURE__ */ new Vector3();
5
- const _effectorPos = /* @__PURE__ */ new Vector3();
6
- const _effectorVec = /* @__PURE__ */ new Vector3();
7
- const _linkPos = /* @__PURE__ */ new Vector3();
8
- const _invLinkQ = /* @__PURE__ */ new Quaternion();
9
- const _linkScale = /* @__PURE__ */ new Vector3();
10
- const _axis = /* @__PURE__ */ new Vector3();
11
- const _vector = /* @__PURE__ */ new Vector3();
12
- const _matrix = /* @__PURE__ */ new Matrix4();
1
+ import { Quaternion, Vector3, Matrix4, Object3D, SphereGeometry, MeshBasicMaterial, Color, LineBasicMaterial, Mesh, Line, BufferGeometry, BufferAttribute } from "three";
2
+ const _q = new Quaternion();
3
+ const _targetPos = new Vector3();
4
+ const _targetVec = new Vector3();
5
+ const _effectorPos = new Vector3();
6
+ const _effectorVec = new Vector3();
7
+ const _linkPos = new Vector3();
8
+ const _invLinkQ = new Quaternion();
9
+ const _linkScale = new Vector3();
10
+ const _axis = new Vector3();
11
+ const _vector = new Vector3();
12
+ const _matrix = new Matrix4();
13
13
  class CCDIKSolver {
14
14
  /**
15
15
  * @param {THREE.SkinnedMesh} mesh
@@ -1 +1 @@
1
- {"version":3,"file":"CCDIKSolver.js","sources":["../../src/animation/CCDIKSolver.js"],"sourcesContent":["import {\n BufferAttribute,\n BufferGeometry,\n Color,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Quaternion,\n SphereGeometry,\n Vector3,\n} from 'three'\n\nconst _q = /* @__PURE__ */ new Quaternion()\nconst _targetPos = /* @__PURE__ */ new Vector3()\nconst _targetVec = /* @__PURE__ */ new Vector3()\nconst _effectorPos = /* @__PURE__ */ new Vector3()\nconst _effectorVec = /* @__PURE__ */ new Vector3()\nconst _linkPos = /* @__PURE__ */ new Vector3()\nconst _invLinkQ = /* @__PURE__ */ new Quaternion()\nconst _linkScale = /* @__PURE__ */ new Vector3()\nconst _axis = /* @__PURE__ */ new Vector3()\nconst _vector = /* @__PURE__ */ new Vector3()\nconst _matrix = /* @__PURE__ */ new Matrix4()\n\n/**\n * CCD Algorithm\n * - https://sites.google.com/site/auraliusproject/ccd-algorithm\n *\n * // ik parameter example\n * //\n * // target, effector, index in links are bone index in skeleton.bones.\n * // the bones relation should be\n * // <-- parent child -->\n * // links[ n ], links[ n - 1 ], ..., links[ 0 ], effector\n * iks = [ {\n *\ttarget: 1,\n *\teffector: 2,\n *\tlinks: [ { index: 5, limitation: new Vector3( 1, 0, 0 ) }, { index: 4, enabled: false }, { index : 3 } ],\n *\titeration: 10,\n *\tminAngle: 0.0,\n *\tmaxAngle: 1.0,\n * } ];\n */\n\nclass CCDIKSolver {\n /**\n * @param {THREE.SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\n constructor(mesh, iks = []) {\n this.mesh = mesh\n this.iks = iks\n\n this._valid()\n }\n\n /**\n * Update all IK bones.\n *\n * @return {CCDIKSolver}\n */\n update() {\n const iks = this.iks\n\n for (let i = 0, il = iks.length; i < il; i++) {\n this.updateOne(iks[i])\n }\n\n return this\n }\n\n /**\n * Update one IK bone\n *\n * @param {Object} ik parameter\n * @return {CCDIKSolver}\n */\n updateOne(ik) {\n const bones = this.mesh.skeleton.bones\n\n // for reference overhead reduction in loop\n const math = Math\n\n const effector = bones[ik.effector]\n const target = bones[ik.target]\n\n // don't use getWorldPosition() here for the performance\n // because it calls updateMatrixWorld( true ) inside.\n _targetPos.setFromMatrixPosition(target.matrixWorld)\n\n const links = ik.links\n const iteration = ik.iteration !== undefined ? ik.iteration : 1\n\n for (let i = 0; i < iteration; i++) {\n let rotated = false\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n const link = bones[links[j].index]\n\n // skip this link and following links.\n // this skip is used for MMD performance optimization.\n if (links[j].enabled === false) break\n\n const limitation = links[j].limitation\n const rotationMin = links[j].rotationMin\n const rotationMax = links[j].rotationMax\n\n // don't use getWorldPosition/Quaternion() here for the performance\n // because they call updateMatrixWorld( true ) inside.\n link.matrixWorld.decompose(_linkPos, _invLinkQ, _linkScale)\n _invLinkQ.invert()\n _effectorPos.setFromMatrixPosition(effector.matrixWorld)\n\n // work in link world\n _effectorVec.subVectors(_effectorPos, _linkPos)\n _effectorVec.applyQuaternion(_invLinkQ)\n _effectorVec.normalize()\n\n _targetVec.subVectors(_targetPos, _linkPos)\n _targetVec.applyQuaternion(_invLinkQ)\n _targetVec.normalize()\n\n let angle = _targetVec.dot(_effectorVec)\n\n if (angle > 1.0) {\n angle = 1.0\n } else if (angle < -1.0) {\n angle = -1.0\n }\n\n angle = math.acos(angle)\n\n // skip if changing angle is too small to prevent vibration of bone\n if (angle < 1e-5) continue\n\n if (ik.minAngle !== undefined && angle < ik.minAngle) {\n angle = ik.minAngle\n }\n\n if (ik.maxAngle !== undefined && angle > ik.maxAngle) {\n angle = ik.maxAngle\n }\n\n _axis.crossVectors(_effectorVec, _targetVec)\n _axis.normalize()\n\n _q.setFromAxisAngle(_axis, angle)\n link.quaternion.multiply(_q)\n\n // TODO: re-consider the limitation specification\n if (limitation !== undefined) {\n let c = link.quaternion.w\n\n if (c > 1.0) c = 1.0\n\n const c2 = math.sqrt(1 - c * c)\n link.quaternion.set(limitation.x * c2, limitation.y * c2, limitation.z * c2, c)\n }\n\n if (rotationMin !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).max(rotationMin))\n }\n\n if (rotationMax !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).min(rotationMax))\n }\n\n link.updateMatrixWorld(true)\n\n rotated = true\n }\n\n if (!rotated) break\n }\n\n return this\n }\n\n /**\n * Creates Helper\n *\n * @return {CCDIKHelper}\n */\n createHelper() {\n return new CCDIKHelper(this.mesh, this.iks)\n }\n\n // private methods\n\n _valid() {\n const iks = this.iks\n const bones = this.mesh.skeleton.bones\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n const effector = bones[ik.effector]\n const links = ik.links\n let link0, link1\n\n link0 = effector\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n link1 = bones[links[j].index]\n\n if (link0.parent !== link1) {\n console.warn('THREE.CCDIKSolver: bone ' + link0.name + ' is not the child of bone ' + link1.name)\n }\n\n link0 = link1\n }\n }\n }\n}\n\nfunction getPosition(bone, matrixWorldInv) {\n return _vector.setFromMatrixPosition(bone.matrixWorld).applyMatrix4(matrixWorldInv)\n}\n\nfunction setPositionOfBoneToAttributeArray(array, index, bone, matrixWorldInv) {\n const v = getPosition(bone, matrixWorldInv)\n\n array[index * 3 + 0] = v.x\n array[index * 3 + 1] = v.y\n array[index * 3 + 2] = v.z\n}\n\n/**\n * Visualize IK bones\n *\n * @param {SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\nclass CCDIKHelper extends Object3D {\n constructor(mesh, iks = [], sphereSize = 0.25) {\n super()\n\n this.root = mesh\n this.iks = iks\n\n this.matrix.copy(mesh.matrixWorld)\n this.matrixAutoUpdate = false\n\n this.sphereGeometry = new SphereGeometry(sphereSize, 16, 8)\n\n this.targetSphereMaterial = new MeshBasicMaterial({\n color: new Color(0xff8888),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.effectorSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x88ff88),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.linkSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x8888ff),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.lineMaterial = new LineBasicMaterial({\n color: new Color(0xff0000),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this._init()\n }\n\n /**\n * Updates IK bones visualization.\n */\n updateMatrixWorld(force) {\n const mesh = this.root\n\n if (this.visible) {\n let offset = 0\n\n const iks = this.iks\n const bones = mesh.skeleton.bones\n\n _matrix.copy(mesh.matrixWorld).invert()\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n const targetBone = bones[ik.target]\n const effectorBone = bones[ik.effector]\n\n const targetMesh = this.children[offset++]\n const effectorMesh = this.children[offset++]\n\n targetMesh.position.copy(getPosition(targetBone, _matrix))\n effectorMesh.position.copy(getPosition(effectorBone, _matrix))\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n\n const linkMesh = this.children[offset++]\n\n linkMesh.position.copy(getPosition(linkBone, _matrix))\n }\n\n const line = this.children[offset++]\n const array = line.geometry.attributes.position.array\n\n setPositionOfBoneToAttributeArray(array, 0, targetBone, _matrix)\n setPositionOfBoneToAttributeArray(array, 1, effectorBone, _matrix)\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n setPositionOfBoneToAttributeArray(array, j + 2, linkBone, _matrix)\n }\n\n line.geometry.attributes.position.needsUpdate = true\n }\n }\n\n this.matrix.copy(mesh.matrixWorld)\n\n super.updateMatrixWorld(force)\n }\n\n /**\n * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.\n */\n dispose() {\n this.sphereGeometry.dispose()\n\n this.targetSphereMaterial.dispose()\n this.effectorSphereMaterial.dispose()\n this.linkSphereMaterial.dispose()\n this.lineMaterial.dispose()\n\n const children = this.children\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i]\n\n if (child.isLine) child.geometry.dispose()\n }\n }\n\n // private method\n\n _init() {\n const scope = this\n const iks = this.iks\n\n function createLineGeometry(ik) {\n const geometry = new BufferGeometry()\n const vertices = new Float32Array((2 + ik.links.length) * 3)\n geometry.setAttribute('position', new BufferAttribute(vertices, 3))\n\n return geometry\n }\n\n function createTargetMesh() {\n return new Mesh(scope.sphereGeometry, scope.targetSphereMaterial)\n }\n\n function createEffectorMesh() {\n return new Mesh(scope.sphereGeometry, scope.effectorSphereMaterial)\n }\n\n function createLinkMesh() {\n return new Mesh(scope.sphereGeometry, scope.linkSphereMaterial)\n }\n\n function createLine(ik) {\n return new Line(createLineGeometry(ik), scope.lineMaterial)\n }\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n this.add(createTargetMesh())\n this.add(createEffectorMesh())\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n this.add(createLinkMesh())\n }\n\n this.add(createLine(ik))\n }\n }\n}\n\nexport { CCDIKSolver, CCDIKHelper }\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CCDIKSolver.js","sources":["../../src/animation/CCDIKSolver.js"],"sourcesContent":["import {\n BufferAttribute,\n BufferGeometry,\n Color,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Quaternion,\n SphereGeometry,\n Vector3,\n} from 'three'\n\nconst _q = new Quaternion()\nconst _targetPos = new Vector3()\nconst _targetVec = new Vector3()\nconst _effectorPos = new Vector3()\nconst _effectorVec = new Vector3()\nconst _linkPos = new Vector3()\nconst _invLinkQ = new Quaternion()\nconst _linkScale = new Vector3()\nconst _axis = new Vector3()\nconst _vector = new Vector3()\nconst _matrix = new Matrix4()\n\n/**\n * CCD Algorithm\n * - https://sites.google.com/site/auraliusproject/ccd-algorithm\n *\n * // ik parameter example\n * //\n * // target, effector, index in links are bone index in skeleton.bones.\n * // the bones relation should be\n * // <-- parent child -->\n * // links[ n ], links[ n - 1 ], ..., links[ 0 ], effector\n * iks = [ {\n *\ttarget: 1,\n *\teffector: 2,\n *\tlinks: [ { index: 5, limitation: new Vector3( 1, 0, 0 ) }, { index: 4, enabled: false }, { index : 3 } ],\n *\titeration: 10,\n *\tminAngle: 0.0,\n *\tmaxAngle: 1.0,\n * } ];\n */\n\nclass CCDIKSolver {\n /**\n * @param {THREE.SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\n constructor(mesh, iks = []) {\n this.mesh = mesh\n this.iks = iks\n\n this._valid()\n }\n\n /**\n * Update all IK bones.\n *\n * @return {CCDIKSolver}\n */\n update() {\n const iks = this.iks\n\n for (let i = 0, il = iks.length; i < il; i++) {\n this.updateOne(iks[i])\n }\n\n return this\n }\n\n /**\n * Update one IK bone\n *\n * @param {Object} ik parameter\n * @return {CCDIKSolver}\n */\n updateOne(ik) {\n const bones = this.mesh.skeleton.bones\n\n // for reference overhead reduction in loop\n const math = Math\n\n const effector = bones[ik.effector]\n const target = bones[ik.target]\n\n // don't use getWorldPosition() here for the performance\n // because it calls updateMatrixWorld( true ) inside.\n _targetPos.setFromMatrixPosition(target.matrixWorld)\n\n const links = ik.links\n const iteration = ik.iteration !== undefined ? ik.iteration : 1\n\n for (let i = 0; i < iteration; i++) {\n let rotated = false\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n const link = bones[links[j].index]\n\n // skip this link and following links.\n // this skip is used for MMD performance optimization.\n if (links[j].enabled === false) break\n\n const limitation = links[j].limitation\n const rotationMin = links[j].rotationMin\n const rotationMax = links[j].rotationMax\n\n // don't use getWorldPosition/Quaternion() here for the performance\n // because they call updateMatrixWorld( true ) inside.\n link.matrixWorld.decompose(_linkPos, _invLinkQ, _linkScale)\n _invLinkQ.invert()\n _effectorPos.setFromMatrixPosition(effector.matrixWorld)\n\n // work in link world\n _effectorVec.subVectors(_effectorPos, _linkPos)\n _effectorVec.applyQuaternion(_invLinkQ)\n _effectorVec.normalize()\n\n _targetVec.subVectors(_targetPos, _linkPos)\n _targetVec.applyQuaternion(_invLinkQ)\n _targetVec.normalize()\n\n let angle = _targetVec.dot(_effectorVec)\n\n if (angle > 1.0) {\n angle = 1.0\n } else if (angle < -1.0) {\n angle = -1.0\n }\n\n angle = math.acos(angle)\n\n // skip if changing angle is too small to prevent vibration of bone\n if (angle < 1e-5) continue\n\n if (ik.minAngle !== undefined && angle < ik.minAngle) {\n angle = ik.minAngle\n }\n\n if (ik.maxAngle !== undefined && angle > ik.maxAngle) {\n angle = ik.maxAngle\n }\n\n _axis.crossVectors(_effectorVec, _targetVec)\n _axis.normalize()\n\n _q.setFromAxisAngle(_axis, angle)\n link.quaternion.multiply(_q)\n\n // TODO: re-consider the limitation specification\n if (limitation !== undefined) {\n let c = link.quaternion.w\n\n if (c > 1.0) c = 1.0\n\n const c2 = math.sqrt(1 - c * c)\n link.quaternion.set(limitation.x * c2, limitation.y * c2, limitation.z * c2, c)\n }\n\n if (rotationMin !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).max(rotationMin))\n }\n\n if (rotationMax !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).min(rotationMax))\n }\n\n link.updateMatrixWorld(true)\n\n rotated = true\n }\n\n if (!rotated) break\n }\n\n return this\n }\n\n /**\n * Creates Helper\n *\n * @return {CCDIKHelper}\n */\n createHelper() {\n return new CCDIKHelper(this.mesh, this.iks)\n }\n\n // private methods\n\n _valid() {\n const iks = this.iks\n const bones = this.mesh.skeleton.bones\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n const effector = bones[ik.effector]\n const links = ik.links\n let link0, link1\n\n link0 = effector\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n link1 = bones[links[j].index]\n\n if (link0.parent !== link1) {\n console.warn('THREE.CCDIKSolver: bone ' + link0.name + ' is not the child of bone ' + link1.name)\n }\n\n link0 = link1\n }\n }\n }\n}\n\nfunction getPosition(bone, matrixWorldInv) {\n return _vector.setFromMatrixPosition(bone.matrixWorld).applyMatrix4(matrixWorldInv)\n}\n\nfunction setPositionOfBoneToAttributeArray(array, index, bone, matrixWorldInv) {\n const v = getPosition(bone, matrixWorldInv)\n\n array[index * 3 + 0] = v.x\n array[index * 3 + 1] = v.y\n array[index * 3 + 2] = v.z\n}\n\n/**\n * Visualize IK bones\n *\n * @param {SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\nclass CCDIKHelper extends Object3D {\n constructor(mesh, iks = [], sphereSize = 0.25) {\n super()\n\n this.root = mesh\n this.iks = iks\n\n this.matrix.copy(mesh.matrixWorld)\n this.matrixAutoUpdate = false\n\n this.sphereGeometry = new SphereGeometry(sphereSize, 16, 8)\n\n this.targetSphereMaterial = new MeshBasicMaterial({\n color: new Color(0xff8888),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.effectorSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x88ff88),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.linkSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x8888ff),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.lineMaterial = new LineBasicMaterial({\n color: new Color(0xff0000),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this._init()\n }\n\n /**\n * Updates IK bones visualization.\n */\n updateMatrixWorld(force) {\n const mesh = this.root\n\n if (this.visible) {\n let offset = 0\n\n const iks = this.iks\n const bones = mesh.skeleton.bones\n\n _matrix.copy(mesh.matrixWorld).invert()\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n const targetBone = bones[ik.target]\n const effectorBone = bones[ik.effector]\n\n const targetMesh = this.children[offset++]\n const effectorMesh = this.children[offset++]\n\n targetMesh.position.copy(getPosition(targetBone, _matrix))\n effectorMesh.position.copy(getPosition(effectorBone, _matrix))\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n\n const linkMesh = this.children[offset++]\n\n linkMesh.position.copy(getPosition(linkBone, _matrix))\n }\n\n const line = this.children[offset++]\n const array = line.geometry.attributes.position.array\n\n setPositionOfBoneToAttributeArray(array, 0, targetBone, _matrix)\n setPositionOfBoneToAttributeArray(array, 1, effectorBone, _matrix)\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n setPositionOfBoneToAttributeArray(array, j + 2, linkBone, _matrix)\n }\n\n line.geometry.attributes.position.needsUpdate = true\n }\n }\n\n this.matrix.copy(mesh.matrixWorld)\n\n super.updateMatrixWorld(force)\n }\n\n /**\n * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.\n */\n dispose() {\n this.sphereGeometry.dispose()\n\n this.targetSphereMaterial.dispose()\n this.effectorSphereMaterial.dispose()\n this.linkSphereMaterial.dispose()\n this.lineMaterial.dispose()\n\n const children = this.children\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i]\n\n if (child.isLine) child.geometry.dispose()\n }\n }\n\n // private method\n\n _init() {\n const scope = this\n const iks = this.iks\n\n function createLineGeometry(ik) {\n const geometry = new BufferGeometry()\n const vertices = new Float32Array((2 + ik.links.length) * 3)\n geometry.setAttribute('position', new BufferAttribute(vertices, 3))\n\n return geometry\n }\n\n function createTargetMesh() {\n return new Mesh(scope.sphereGeometry, scope.targetSphereMaterial)\n }\n\n function createEffectorMesh() {\n return new Mesh(scope.sphereGeometry, scope.effectorSphereMaterial)\n }\n\n function createLinkMesh() {\n return new Mesh(scope.sphereGeometry, scope.linkSphereMaterial)\n }\n\n function createLine(ik) {\n return new Line(createLineGeometry(ik), scope.lineMaterial)\n }\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n this.add(createTargetMesh())\n this.add(createEffectorMesh())\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n this.add(createLinkMesh())\n }\n\n this.add(createLine(ik))\n }\n }\n}\n\nexport { CCDIKSolver, CCDIKHelper }\n"],"names":[],"mappings":"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"}
@@ -638,7 +638,7 @@ class AudioManager {
638
638
  return this.audio.isPlaying && this.currentTime >= this.duration;
639
639
  }
640
640
  }
641
- const _q = /* @__PURE__ */ new THREE.Quaternion();
641
+ const _q = new THREE.Quaternion();
642
642
  class GrantSolver {
643
643
  constructor(mesh, grants = []) {
644
644
  this.mesh = mesh;