@babylonjs/core 5.0.0-beta.1 → 5.0.0-beta.12

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 (808) hide show
  1. package/Actions/actionManager.d.ts +1 -1
  2. package/Actions/actionManager.js +5 -1
  3. package/Actions/actionManager.js.map +1 -1
  4. package/Animations/animation.d.ts +6 -6
  5. package/Animations/animation.js +9 -5
  6. package/Animations/animation.js.map +1 -1
  7. package/Audio/analyser.d.ts +2 -1
  8. package/Audio/analyser.js +5 -0
  9. package/Audio/analyser.js.map +1 -1
  10. package/Audio/audioSceneComponent.d.ts +1 -1
  11. package/Audio/audioSceneComponent.js +5 -0
  12. package/Audio/audioSceneComponent.js.map +1 -1
  13. package/Audio/sound.d.ts +1 -1
  14. package/Audio/sound.js +17 -4
  15. package/Audio/sound.js.map +1 -1
  16. package/Audio/soundTrack.d.ts +2 -1
  17. package/Audio/soundTrack.js +5 -0
  18. package/Audio/soundTrack.js.map +1 -1
  19. package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +1 -1
  20. package/BakedVertexAnimation/bakedVertexAnimationManager.js +5 -0
  21. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
  22. package/Behaviors/Meshes/baseSixDofDragBehavior.js +29 -26
  23. package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
  24. package/Behaviors/Meshes/pointerDragBehavior.js +2 -0
  25. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  26. package/Bones/bone.d.ts +2 -1
  27. package/Bones/bone.js +28 -18
  28. package/Bones/bone.js.map +1 -1
  29. package/Bones/skeleton.d.ts +0 -6
  30. package/Bones/skeleton.js +5 -17
  31. package/Bones/skeleton.js.map +1 -1
  32. package/Buffers/buffer.d.ts +4 -0
  33. package/Buffers/buffer.js +13 -3
  34. package/Buffers/buffer.js.map +1 -1
  35. package/Cameras/Inputs/freeCameraMouseInput.d.ts +1 -0
  36. package/Cameras/Inputs/freeCameraMouseInput.js +6 -3
  37. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  38. package/Cameras/Inputs/freeCameraTouchInput.js +2 -4
  39. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  40. package/Cameras/Stereoscopic/anaglyphArcRotateCamera.d.ts +1 -1
  41. package/Cameras/Stereoscopic/anaglyphArcRotateCamera.js.map +1 -1
  42. package/Cameras/Stereoscopic/anaglyphFreeCamera.d.ts +1 -1
  43. package/Cameras/Stereoscopic/anaglyphFreeCamera.js.map +1 -1
  44. package/Cameras/Stereoscopic/anaglyphGamepadCamera.d.ts +1 -1
  45. package/Cameras/Stereoscopic/anaglyphGamepadCamera.js.map +1 -1
  46. package/Cameras/Stereoscopic/anaglyphUniversalCamera.d.ts +1 -1
  47. package/Cameras/Stereoscopic/anaglyphUniversalCamera.js.map +1 -1
  48. package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.d.ts +1 -1
  49. package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.js.map +1 -1
  50. package/Cameras/Stereoscopic/stereoscopicFreeCamera.d.ts +1 -1
  51. package/Cameras/Stereoscopic/stereoscopicFreeCamera.js.map +1 -1
  52. package/Cameras/Stereoscopic/stereoscopicGamepadCamera.d.ts +1 -1
  53. package/Cameras/Stereoscopic/stereoscopicGamepadCamera.js.map +1 -1
  54. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +1 -1
  55. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
  56. package/Cameras/Stereoscopic/stereoscopicUniversalCamera.d.ts +1 -1
  57. package/Cameras/Stereoscopic/stereoscopicUniversalCamera.js.map +1 -1
  58. package/Cameras/VR/vrDeviceOrientationArcRotateCamera.d.ts +1 -1
  59. package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js.map +1 -1
  60. package/Cameras/VR/vrDeviceOrientationFreeCamera.d.ts +1 -1
  61. package/Cameras/VR/vrDeviceOrientationFreeCamera.js.map +1 -1
  62. package/Cameras/VR/vrDeviceOrientationGamepadCamera.d.ts +1 -1
  63. package/Cameras/VR/vrDeviceOrientationGamepadCamera.js.map +1 -1
  64. package/Cameras/VR/vrExperienceHelper.d.ts +1 -0
  65. package/Cameras/VR/vrExperienceHelper.js +1 -0
  66. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  67. package/Cameras/VR/webVRCamera.d.ts +2 -1
  68. package/Cameras/VR/webVRCamera.js +3 -2
  69. package/Cameras/VR/webVRCamera.js.map +1 -1
  70. package/Cameras/arcRotateCamera.d.ts +1 -1
  71. package/Cameras/arcRotateCamera.js.map +1 -1
  72. package/Cameras/camera.d.ts +1 -1
  73. package/Cameras/camera.js +1 -1
  74. package/Cameras/camera.js.map +1 -1
  75. package/Cameras/deviceOrientationCamera.d.ts +1 -1
  76. package/Cameras/deviceOrientationCamera.js.map +1 -1
  77. package/Cameras/flyCamera.d.ts +1 -1
  78. package/Cameras/flyCamera.js.map +1 -1
  79. package/Cameras/followCamera.d.ts +1 -1
  80. package/Cameras/followCamera.js.map +1 -1
  81. package/Cameras/freeCamera.d.ts +1 -1
  82. package/Cameras/freeCamera.js.map +1 -1
  83. package/Cameras/gamepadCamera.d.ts +1 -1
  84. package/Cameras/gamepadCamera.js.map +1 -1
  85. package/Cameras/targetCamera.d.ts +1 -1
  86. package/Cameras/targetCamera.js.map +1 -1
  87. package/Cameras/touchCamera.d.ts +1 -1
  88. package/Cameras/touchCamera.js.map +1 -1
  89. package/Cameras/universalCamera.d.ts +1 -1
  90. package/Cameras/universalCamera.js.map +1 -1
  91. package/Cameras/virtualJoysticksCamera.d.ts +1 -1
  92. package/Cameras/virtualJoysticksCamera.js.map +1 -1
  93. package/Collisions/collider.d.ts +1 -1
  94. package/Collisions/collider.js +48 -2
  95. package/Collisions/collider.js.map +1 -1
  96. package/Compat/compatibilityOptions.d.ts +9 -0
  97. package/Compat/compatibilityOptions.js +14 -0
  98. package/Compat/compatibilityOptions.js.map +1 -0
  99. package/Compat/index.d.ts +1 -0
  100. package/Compat/index.js +2 -0
  101. package/Compat/index.js.map +1 -0
  102. package/Compute/computeEffect.js +2 -2
  103. package/Compute/computeEffect.js.map +1 -1
  104. package/Culling/Octrees/octreeSceneComponent.d.ts +1 -1
  105. package/Culling/Octrees/octreeSceneComponent.js +5 -0
  106. package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
  107. package/Culling/ray.d.ts +6 -4
  108. package/Culling/ray.js +35 -13
  109. package/Culling/ray.js.map +1 -1
  110. package/Debug/axesViewer.d.ts +2 -1
  111. package/Debug/axesViewer.js +6 -0
  112. package/Debug/axesViewer.js.map +1 -1
  113. package/Debug/debugLayer.d.ts +1 -1
  114. package/Debug/debugLayer.js +6 -2
  115. package/Debug/debugLayer.js.map +1 -1
  116. package/Debug/physicsViewer.d.ts +1 -1
  117. package/Debug/physicsViewer.js +3 -0
  118. package/Debug/physicsViewer.js.map +1 -1
  119. package/Debug/skeletonViewer.js +3 -4
  120. package/Debug/skeletonViewer.js.map +1 -1
  121. package/DeviceInput/Helpers/eventFactory.d.ts +1 -1
  122. package/DeviceInput/Helpers/eventFactory.js +10 -6
  123. package/DeviceInput/Helpers/eventFactory.js.map +1 -1
  124. package/DeviceInput/InputDevices/deviceEnums.d.ts +55 -2
  125. package/DeviceInput/InputDevices/deviceEnums.js +54 -0
  126. package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
  127. package/DeviceInput/InputDevices/deviceSource.d.ts +35 -0
  128. package/DeviceInput/InputDevices/deviceSource.js +38 -0
  129. package/DeviceInput/InputDevices/deviceSource.js.map +1 -0
  130. package/DeviceInput/InputDevices/deviceSourceManager.d.ts +23 -66
  131. package/DeviceInput/InputDevices/deviceSourceManager.js +40 -149
  132. package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
  133. package/DeviceInput/InputDevices/deviceTypes.d.ts +2 -2
  134. package/DeviceInput/InputDevices/deviceTypes.js.map +1 -1
  135. package/DeviceInput/{Interfaces → InputDevices}/inputInterfaces.d.ts +1 -5
  136. package/DeviceInput/{Interfaces → InputDevices}/inputInterfaces.js +0 -0
  137. package/DeviceInput/InputDevices/inputInterfaces.js.map +1 -0
  138. package/DeviceInput/InputDevices/internalDeviceSourceManager.d.ts +51 -0
  139. package/DeviceInput/InputDevices/internalDeviceSourceManager.js +138 -0
  140. package/DeviceInput/InputDevices/internalDeviceSourceManager.js.map +1 -0
  141. package/DeviceInput/{Implementations → InputDevices}/nativeDeviceInputSystem.d.ts +3 -7
  142. package/DeviceInput/{Implementations → InputDevices}/nativeDeviceInputSystem.js +11 -16
  143. package/DeviceInput/InputDevices/nativeDeviceInputSystem.js.map +1 -0
  144. package/DeviceInput/{Implementations → InputDevices}/webDeviceInputSystem.d.ts +17 -19
  145. package/DeviceInput/{Implementations → InputDevices}/webDeviceInputSystem.js +212 -166
  146. package/DeviceInput/InputDevices/webDeviceInputSystem.js.map +1 -0
  147. package/DeviceInput/index.d.ts +1 -5
  148. package/DeviceInput/index.js +1 -5
  149. package/DeviceInput/index.js.map +1 -1
  150. package/Engines/Extensions/engine.cubeTexture.d.ts +1 -1
  151. package/Engines/Extensions/engine.cubeTexture.js +6 -2
  152. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  153. package/Engines/Extensions/engine.multiview.d.ts +5 -0
  154. package/Engines/Extensions/engine.multiview.js +4 -2
  155. package/Engines/Extensions/engine.multiview.js.map +1 -1
  156. package/Engines/Extensions/engine.query.d.ts +7 -0
  157. package/Engines/Extensions/engine.query.js +12 -0
  158. package/Engines/Extensions/engine.query.js.map +1 -1
  159. package/Engines/Extensions/engine.renderTarget.d.ts +5 -0
  160. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  161. package/Engines/Extensions/engine.views.d.ts +7 -0
  162. package/Engines/Extensions/engine.views.js +12 -0
  163. package/Engines/Extensions/engine.views.js.map +1 -1
  164. package/Engines/Native/nativeInterfaces.d.ts +3 -2
  165. package/Engines/Native/nativeInterfaces.js.map +1 -1
  166. package/Engines/Processors/Expressions/shaderDefineExpression.js +1 -1
  167. package/Engines/Processors/Expressions/shaderDefineExpression.js.map +1 -1
  168. package/Engines/Processors/shaderCodeInliner.js +13 -13
  169. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  170. package/Engines/WebGPU/Extensions/engine.computeShader.js +1 -1
  171. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  172. package/Engines/WebGPU/Extensions/engine.cubeTexture.js +4 -1
  173. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  174. package/Engines/WebGPU/webgpuCacheBindGroups.js +9 -9
  175. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  176. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -7
  177. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  178. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +1 -1
  179. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
  180. package/Engines/WebGPU/webgpuCacheSampler.d.ts +2 -0
  181. package/Engines/WebGPU/webgpuCacheSampler.js +23 -2
  182. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  183. package/Engines/WebGPU/webgpuComputeContext.js +1 -1
  184. package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
  185. package/Engines/WebGPU/webgpuConstants.d.ts +2 -1
  186. package/Engines/WebGPU/webgpuConstants.js +1 -0
  187. package/Engines/WebGPU/webgpuConstants.js.map +1 -1
  188. package/Engines/WebGPU/webgpuDrawContext.d.ts +1 -1
  189. package/Engines/WebGPU/webgpuDrawContext.js +3 -3
  190. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  191. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +0 -1
  192. package/Engines/WebGPU/webgpuHardwareTexture.js +0 -3
  193. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  194. package/Engines/WebGPU/webgpuPipelineContext.d.ts +0 -8
  195. package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
  196. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +13 -13
  197. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  198. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +30 -30
  199. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  200. package/Engines/WebGPU/webgpuTextureHelper.d.ts +0 -1
  201. package/Engines/WebGPU/webgpuTextureHelper.js +22 -37
  202. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  203. package/Engines/engine.d.ts +48 -33
  204. package/Engines/engine.js +2 -6
  205. package/Engines/engine.js.map +1 -1
  206. package/Engines/engineCapabilities.d.ts +4 -0
  207. package/Engines/engineCapabilities.js.map +1 -1
  208. package/Engines/index.d.ts +1 -0
  209. package/Engines/index.js +1 -0
  210. package/Engines/index.js.map +1 -1
  211. package/Engines/nativeEngine.d.ts +1 -0
  212. package/Engines/nativeEngine.js +41 -13
  213. package/Engines/nativeEngine.js.map +1 -1
  214. package/Engines/nullEngine.js +3 -1
  215. package/Engines/nullEngine.js.map +1 -1
  216. package/Engines/renderTargetWrapper.d.ts +8 -0
  217. package/Engines/renderTargetWrapper.js +20 -0
  218. package/Engines/renderTargetWrapper.js.map +1 -1
  219. package/Engines/thinEngine.d.ts +18 -2
  220. package/Engines/thinEngine.js +51 -21
  221. package/Engines/thinEngine.js.map +1 -1
  222. package/Engines/webgpuEngine.d.ts +3 -7
  223. package/Engines/webgpuEngine.js +43 -42
  224. package/Engines/webgpuEngine.js.map +1 -1
  225. package/Events/keyboardEvents.d.ts +7 -1
  226. package/Events/keyboardEvents.js +11 -1
  227. package/Events/keyboardEvents.js.map +1 -1
  228. package/Gamepads/Controllers/daydreamController.js +1 -1
  229. package/Gamepads/Controllers/daydreamController.js.map +1 -1
  230. package/Gamepads/Controllers/oculusTouchController.js +2 -2
  231. package/Gamepads/Controllers/oculusTouchController.js.map +1 -1
  232. package/Gamepads/Controllers/webVRController.d.ts +1 -0
  233. package/Gamepads/Controllers/webVRController.js +1 -0
  234. package/Gamepads/Controllers/webVRController.js.map +1 -1
  235. package/Gamepads/gamepadManager.js +1 -1
  236. package/Gamepads/gamepadManager.js.map +1 -1
  237. package/Gizmos/boundingBoxGizmo.js +0 -10
  238. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  239. package/Gizmos/gizmo.js +1 -1
  240. package/Gizmos/gizmo.js.map +1 -1
  241. package/Gizmos/gizmoManager.d.ts +2 -0
  242. package/Gizmos/gizmoManager.js +28 -24
  243. package/Gizmos/gizmoManager.js.map +1 -1
  244. package/Helpers/environmentHelper.js +2 -2
  245. package/Helpers/environmentHelper.js.map +1 -1
  246. package/Helpers/sceneHelpers.d.ts +1 -0
  247. package/Helpers/sceneHelpers.js.map +1 -1
  248. package/Inputs/scene.inputManager.d.ts +2 -3
  249. package/Inputs/scene.inputManager.js +14 -16
  250. package/Inputs/scene.inputManager.js.map +1 -1
  251. package/Instrumentation/sceneInstrumentation.js +2 -2
  252. package/Instrumentation/sceneInstrumentation.js.map +1 -1
  253. package/Layers/effectLayer.d.ts +2 -1
  254. package/Layers/effectLayer.js +25 -1
  255. package/Layers/effectLayer.js.map +1 -1
  256. package/Layers/effectLayerSceneComponent.d.ts +1 -1
  257. package/Layers/effectLayerSceneComponent.js +7 -3
  258. package/Layers/effectLayerSceneComponent.js.map +1 -1
  259. package/Layers/glowLayer.d.ts +1 -1
  260. package/Layers/glowLayer.js.map +1 -1
  261. package/Layers/highlightLayer.d.ts +1 -1
  262. package/Layers/highlightLayer.js +2 -1
  263. package/Layers/highlightLayer.js.map +1 -1
  264. package/Layers/layer.d.ts +2 -2
  265. package/Layers/layer.js.map +1 -1
  266. package/Layers/layerSceneComponent.d.ts +1 -1
  267. package/Layers/layerSceneComponent.js +7 -3
  268. package/Layers/layerSceneComponent.js.map +1 -1
  269. package/Lights/Shadows/cascadedShadowGenerator.js +2 -2
  270. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  271. package/Lights/Shadows/shadowGenerator.js +7 -7
  272. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  273. package/Loading/Plugins/babylonFileLoader.js +115 -37
  274. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  275. package/Loading/loadingScreen.js +8 -8
  276. package/Loading/loadingScreen.js.map +1 -1
  277. package/Loading/sceneLoader.js +7 -6
  278. package/Loading/sceneLoader.js.map +1 -1
  279. package/Materials/Background/backgroundMaterial.d.ts +1 -1
  280. package/Materials/Background/backgroundMaterial.js.map +1 -1
  281. package/Materials/Node/Blocks/Dual/clipPlanesBlock.d.ts +37 -0
  282. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +117 -0
  283. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -0
  284. package/Materials/Node/Blocks/Dual/currentScreenBlock.js +12 -12
  285. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  286. package/Materials/Node/Blocks/Dual/fogBlock.js +5 -5
  287. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  288. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +13 -13
  289. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  290. package/Materials/Node/Blocks/Dual/index.d.ts +1 -0
  291. package/Materials/Node/Blocks/Dual/index.js +1 -0
  292. package/Materials/Node/Blocks/Dual/index.js.map +1 -1
  293. package/Materials/Node/Blocks/Dual/lightBlock.js +10 -10
  294. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  295. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +28 -28
  296. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  297. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +1 -1
  298. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  299. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +7 -7
  300. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  301. package/Materials/Node/Blocks/Dual/textureBlock.js +32 -32
  302. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  303. package/Materials/Node/Blocks/Fragment/derivativeBlock.js +2 -2
  304. package/Materials/Node/Blocks/Fragment/derivativeBlock.js.map +1 -1
  305. package/Materials/Node/Blocks/Fragment/discardBlock.js +1 -1
  306. package/Materials/Node/Blocks/Fragment/discardBlock.js.map +1 -1
  307. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js +1 -1
  308. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js.map +1 -1
  309. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +10 -10
  310. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  311. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +7 -7
  312. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  313. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +12 -12
  314. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  315. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js +1 -1
  316. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
  317. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +7 -7
  318. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
  319. package/Materials/Node/Blocks/Fragment/twirlBlock.js +4 -4
  320. package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -1
  321. package/Materials/Node/Blocks/Input/inputBlock.d.ts +2 -1
  322. package/Materials/Node/Blocks/Input/inputBlock.js +29 -24
  323. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  324. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +5 -5
  325. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  326. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +5 -5
  327. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  328. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +33 -33
  329. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  330. package/Materials/Node/Blocks/PBR/reflectionBlock.js +11 -11
  331. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  332. package/Materials/Node/Blocks/PBR/refractionBlock.js +11 -11
  333. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  334. package/Materials/Node/Blocks/PBR/sheenBlock.js +3 -3
  335. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  336. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +1 -1
  337. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  338. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js +1 -1
  339. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js.map +1 -1
  340. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js +1 -1
  341. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js.map +1 -1
  342. package/Materials/Node/Blocks/Particle/particleTextureBlock.js +7 -7
  343. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  344. package/Materials/Node/Blocks/Vertex/bonesBlock.js +3 -3
  345. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  346. package/Materials/Node/Blocks/Vertex/instancesBlock.js +3 -3
  347. package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
  348. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +5 -5
  349. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  350. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +16 -16
  351. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  352. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js +1 -1
  353. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
  354. package/Materials/Node/Blocks/addBlock.js +1 -1
  355. package/Materials/Node/Blocks/addBlock.js.map +1 -1
  356. package/Materials/Node/Blocks/arcTan2Block.js +1 -1
  357. package/Materials/Node/Blocks/arcTan2Block.js.map +1 -1
  358. package/Materials/Node/Blocks/clampBlock.js +3 -3
  359. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  360. package/Materials/Node/Blocks/cloudBlock.js +7 -7
  361. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  362. package/Materials/Node/Blocks/colorMergerBlock.js +8 -8
  363. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  364. package/Materials/Node/Blocks/colorSplitterBlock.js +5 -5
  365. package/Materials/Node/Blocks/colorSplitterBlock.js.map +1 -1
  366. package/Materials/Node/Blocks/conditionalBlock.js +10 -10
  367. package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
  368. package/Materials/Node/Blocks/crossBlock.js +1 -1
  369. package/Materials/Node/Blocks/crossBlock.js.map +1 -1
  370. package/Materials/Node/Blocks/customBlock.js +1 -1
  371. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  372. package/Materials/Node/Blocks/desaturateBlock.js +4 -4
  373. package/Materials/Node/Blocks/desaturateBlock.js.map +1 -1
  374. package/Materials/Node/Blocks/distanceBlock.js +1 -1
  375. package/Materials/Node/Blocks/distanceBlock.js.map +1 -1
  376. package/Materials/Node/Blocks/divideBlock.js +1 -1
  377. package/Materials/Node/Blocks/divideBlock.js.map +1 -1
  378. package/Materials/Node/Blocks/dotBlock.js +1 -1
  379. package/Materials/Node/Blocks/dotBlock.js.map +1 -1
  380. package/Materials/Node/Blocks/elbowBlock.d.ts +27 -0
  381. package/Materials/Node/Blocks/elbowBlock.js +60 -0
  382. package/Materials/Node/Blocks/elbowBlock.js.map +1 -0
  383. package/Materials/Node/Blocks/fresnelBlock.js +2 -2
  384. package/Materials/Node/Blocks/fresnelBlock.js.map +1 -1
  385. package/Materials/Node/Blocks/gradientBlock.js +8 -8
  386. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  387. package/Materials/Node/Blocks/index.d.ts +1 -0
  388. package/Materials/Node/Blocks/index.js +1 -0
  389. package/Materials/Node/Blocks/index.js.map +1 -1
  390. package/Materials/Node/Blocks/lengthBlock.js +1 -1
  391. package/Materials/Node/Blocks/lengthBlock.js.map +1 -1
  392. package/Materials/Node/Blocks/lerpBlock.js +1 -1
  393. package/Materials/Node/Blocks/lerpBlock.js.map +1 -1
  394. package/Materials/Node/Blocks/matrixBuilderBlock.js +1 -1
  395. package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
  396. package/Materials/Node/Blocks/maxBlock.js +1 -1
  397. package/Materials/Node/Blocks/maxBlock.js.map +1 -1
  398. package/Materials/Node/Blocks/minBlock.js +1 -1
  399. package/Materials/Node/Blocks/minBlock.js.map +1 -1
  400. package/Materials/Node/Blocks/modBlock.js +1 -1
  401. package/Materials/Node/Blocks/modBlock.js.map +1 -1
  402. package/Materials/Node/Blocks/multiplyBlock.js +1 -1
  403. package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
  404. package/Materials/Node/Blocks/nLerpBlock.js +1 -1
  405. package/Materials/Node/Blocks/nLerpBlock.js.map +1 -1
  406. package/Materials/Node/Blocks/negateBlock.js +1 -1
  407. package/Materials/Node/Blocks/negateBlock.js.map +1 -1
  408. package/Materials/Node/Blocks/normalBlendBlock.js +5 -5
  409. package/Materials/Node/Blocks/normalBlendBlock.js.map +1 -1
  410. package/Materials/Node/Blocks/normalizeBlock.js +1 -1
  411. package/Materials/Node/Blocks/normalizeBlock.js.map +1 -1
  412. package/Materials/Node/Blocks/oneMinusBlock.js +1 -1
  413. package/Materials/Node/Blocks/oneMinusBlock.js.map +1 -1
  414. package/Materials/Node/Blocks/posterizeBlock.js +1 -1
  415. package/Materials/Node/Blocks/posterizeBlock.js.map +1 -1
  416. package/Materials/Node/Blocks/powBlock.js +1 -1
  417. package/Materials/Node/Blocks/powBlock.js.map +1 -1
  418. package/Materials/Node/Blocks/randomNumberBlock.js +2 -2
  419. package/Materials/Node/Blocks/randomNumberBlock.js.map +1 -1
  420. package/Materials/Node/Blocks/reciprocalBlock.js +1 -1
  421. package/Materials/Node/Blocks/reciprocalBlock.js.map +1 -1
  422. package/Materials/Node/Blocks/reflectBlock.js +1 -1
  423. package/Materials/Node/Blocks/reflectBlock.js.map +1 -1
  424. package/Materials/Node/Blocks/refractBlock.js +1 -1
  425. package/Materials/Node/Blocks/refractBlock.js.map +1 -1
  426. package/Materials/Node/Blocks/remapBlock.js +3 -3
  427. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  428. package/Materials/Node/Blocks/replaceColorBlock.js +3 -3
  429. package/Materials/Node/Blocks/replaceColorBlock.js.map +1 -1
  430. package/Materials/Node/Blocks/rotate2dBlock.js +1 -1
  431. package/Materials/Node/Blocks/rotate2dBlock.js.map +1 -1
  432. package/Materials/Node/Blocks/scaleBlock.js +1 -1
  433. package/Materials/Node/Blocks/scaleBlock.js.map +1 -1
  434. package/Materials/Node/Blocks/simplexPerlin3DBlock.js +1 -1
  435. package/Materials/Node/Blocks/simplexPerlin3DBlock.js.map +1 -1
  436. package/Materials/Node/Blocks/smoothStepBlock.js +1 -1
  437. package/Materials/Node/Blocks/smoothStepBlock.js.map +1 -1
  438. package/Materials/Node/Blocks/stepBlock.js +1 -1
  439. package/Materials/Node/Blocks/stepBlock.js.map +1 -1
  440. package/Materials/Node/Blocks/subtractBlock.js +1 -1
  441. package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
  442. package/Materials/Node/Blocks/transformBlock.js +13 -13
  443. package/Materials/Node/Blocks/transformBlock.js.map +1 -1
  444. package/Materials/Node/Blocks/trigonometryBlock.js +2 -2
  445. package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
  446. package/Materials/Node/Blocks/vectorMergerBlock.js +22 -22
  447. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  448. package/Materials/Node/Blocks/vectorSplitterBlock.js +8 -8
  449. package/Materials/Node/Blocks/vectorSplitterBlock.js.map +1 -1
  450. package/Materials/Node/Blocks/viewDirectionBlock.js +1 -1
  451. package/Materials/Node/Blocks/viewDirectionBlock.js.map +1 -1
  452. package/Materials/Node/Blocks/voronoiNoiseBlock.js +5 -5
  453. package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -1
  454. package/Materials/Node/Blocks/waveBlock.js +3 -3
  455. package/Materials/Node/Blocks/waveBlock.js.map +1 -1
  456. package/Materials/Node/Blocks/worleyNoise3DBlock.js +5 -5
  457. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  458. package/Materials/Node/Enums/nodeMaterialSystemValues.d.ts +3 -1
  459. package/Materials/Node/Enums/nodeMaterialSystemValues.js +2 -0
  460. package/Materials/Node/Enums/nodeMaterialSystemValues.js.map +1 -1
  461. package/Materials/Node/nodeMaterial.d.ts +4 -0
  462. package/Materials/Node/nodeMaterial.js +22 -11
  463. package/Materials/Node/nodeMaterial.js.map +1 -1
  464. package/Materials/Node/nodeMaterialBlock.js +12 -12
  465. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  466. package/Materials/Node/nodeMaterialBuildState.js +24 -24
  467. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  468. package/Materials/Node/nodeMaterialBuildStateSharedData.js +1 -1
  469. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  470. package/Materials/PBR/pbrBaseMaterial.d.ts +2 -1
  471. package/Materials/PBR/pbrBaseMaterial.js +5 -3
  472. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  473. package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +1 -1
  474. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  475. package/Materials/PBR/pbrMaterial.d.ts +1 -1
  476. package/Materials/PBR/pbrMaterial.js +2 -3
  477. package/Materials/PBR/pbrMaterial.js.map +1 -1
  478. package/Materials/PBR/pbrMetallicRoughnessMaterial.d.ts +1 -1
  479. package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
  480. package/Materials/PBR/pbrSpecularGlossinessMaterial.d.ts +1 -1
  481. package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
  482. package/Materials/Textures/Loaders/ddsTextureLoader.js +8 -1
  483. package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
  484. package/Materials/Textures/Loaders/ktxTextureLoader.js +2 -2
  485. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  486. package/Materials/Textures/MultiviewRenderTarget.d.ts +2 -1
  487. package/Materials/Textures/MultiviewRenderTarget.js +10 -2
  488. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  489. package/Materials/Textures/Procedurals/proceduralTexture.js +1 -1
  490. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  491. package/Materials/Textures/baseTexture.d.ts +1 -1
  492. package/Materials/Textures/baseTexture.js.map +1 -1
  493. package/Materials/Textures/dynamicTexture.d.ts +1 -1
  494. package/Materials/Textures/dynamicTexture.js.map +1 -1
  495. package/Materials/Textures/equiRectangularCubeTexture.js +1 -1
  496. package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
  497. package/Materials/Textures/internalTexture.d.ts +2 -0
  498. package/Materials/Textures/internalTexture.js +2 -0
  499. package/Materials/Textures/internalTexture.js.map +1 -1
  500. package/Materials/Textures/mirrorTexture.d.ts +2 -2
  501. package/Materials/Textures/mirrorTexture.js +7 -3
  502. package/Materials/Textures/mirrorTexture.js.map +1 -1
  503. package/Materials/Textures/multiRenderTarget.d.ts +1 -1
  504. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  505. package/Materials/Textures/prePassRenderTarget.d.ts +1 -1
  506. package/Materials/Textures/prePassRenderTarget.js.map +1 -1
  507. package/Materials/Textures/refractionTexture.d.ts +1 -1
  508. package/Materials/Textures/refractionTexture.js +2 -2
  509. package/Materials/Textures/refractionTexture.js.map +1 -1
  510. package/Materials/Textures/renderTargetTexture.d.ts +1 -1
  511. package/Materials/Textures/renderTargetTexture.js +2 -2
  512. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  513. package/Materials/Textures/texture.d.ts +1 -1
  514. package/Materials/Textures/texture.js +5 -5
  515. package/Materials/Textures/texture.js.map +1 -1
  516. package/Materials/Textures/videoTexture.js +1 -0
  517. package/Materials/Textures/videoTexture.js.map +1 -1
  518. package/Materials/effect.js +3 -3
  519. package/Materials/effect.js.map +1 -1
  520. package/Materials/material.d.ts +3 -1
  521. package/Materials/material.js +11 -3
  522. package/Materials/material.js.map +1 -1
  523. package/Materials/materialHelper.js +9 -1
  524. package/Materials/materialHelper.js.map +1 -1
  525. package/Materials/materialPluginBase.d.ts +5 -0
  526. package/Materials/materialPluginBase.js +5 -0
  527. package/Materials/materialPluginBase.js.map +1 -1
  528. package/Materials/materialPluginEvent.d.ts +1 -0
  529. package/Materials/materialPluginEvent.js.map +1 -1
  530. package/Materials/materialPluginManager.d.ts +1 -0
  531. package/Materials/materialPluginManager.js +23 -18
  532. package/Materials/materialPluginManager.js.map +1 -1
  533. package/Materials/multiMaterial.d.ts +3 -1
  534. package/Materials/multiMaterial.js +13 -11
  535. package/Materials/multiMaterial.js.map +1 -1
  536. package/Materials/pushMaterial.d.ts +1 -1
  537. package/Materials/pushMaterial.js.map +1 -1
  538. package/Materials/shaderMaterial.js +8 -4
  539. package/Materials/shaderMaterial.js.map +1 -1
  540. package/Materials/shadowDepthWrapper.d.ts +1 -1
  541. package/Materials/shadowDepthWrapper.js +3 -3
  542. package/Materials/shadowDepthWrapper.js.map +1 -1
  543. package/Materials/standardMaterial.d.ts +2 -6
  544. package/Materials/standardMaterial.js +6 -10
  545. package/Materials/standardMaterial.js.map +1 -1
  546. package/Maths/math.path.d.ts +1 -0
  547. package/Maths/math.path.js +1 -0
  548. package/Maths/math.path.js.map +1 -1
  549. package/Maths/math.size.js +1 -1
  550. package/Maths/math.size.js.map +1 -1
  551. package/Maths/math.vector.d.ts +10 -2
  552. package/Maths/math.vector.js +77 -47
  553. package/Maths/math.vector.js.map +1 -1
  554. package/Meshes/Builders/boxBuilder.js +5 -4
  555. package/Meshes/Builders/boxBuilder.js.map +1 -1
  556. package/Meshes/Builders/capsuleBuilder.js +4 -3
  557. package/Meshes/Builders/capsuleBuilder.js.map +1 -1
  558. package/Meshes/Builders/cylinderBuilder.d.ts +1 -1
  559. package/Meshes/Builders/cylinderBuilder.js +11 -8
  560. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  561. package/Meshes/Builders/decalBuilder.js +5 -2
  562. package/Meshes/Builders/decalBuilder.js.map +1 -1
  563. package/Meshes/Builders/discBuilder.js +3 -2
  564. package/Meshes/Builders/discBuilder.js.map +1 -1
  565. package/Meshes/Builders/geodesicBuilder.d.ts +1 -0
  566. package/Meshes/Builders/geodesicBuilder.js +1 -0
  567. package/Meshes/Builders/geodesicBuilder.js.map +1 -1
  568. package/Meshes/Builders/goldbergBuilder.d.ts +1 -0
  569. package/Meshes/Builders/goldbergBuilder.js +11 -1
  570. package/Meshes/Builders/goldbergBuilder.js.map +1 -1
  571. package/Meshes/Builders/groundBuilder.js +2 -1
  572. package/Meshes/Builders/groundBuilder.js.map +1 -1
  573. package/Meshes/Builders/icoSphereBuilder.js +2 -1
  574. package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
  575. package/Meshes/Builders/linesBuilder.js.map +1 -1
  576. package/Meshes/Builders/planeBuilder.js +5 -4
  577. package/Meshes/Builders/planeBuilder.js.map +1 -1
  578. package/Meshes/Builders/polygonBuilder.js +8 -3
  579. package/Meshes/Builders/polygonBuilder.js.map +1 -1
  580. package/Meshes/Builders/polyhedronBuilder.js +3 -2
  581. package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
  582. package/Meshes/Builders/ribbonBuilder.js +4 -3
  583. package/Meshes/Builders/ribbonBuilder.js.map +1 -1
  584. package/Meshes/Builders/sphereBuilder.js +2 -1
  585. package/Meshes/Builders/sphereBuilder.js.map +1 -1
  586. package/Meshes/Builders/tiledBoxBuilder.d.ts +30 -11
  587. package/Meshes/Builders/tiledBoxBuilder.js +34 -11
  588. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  589. package/Meshes/Builders/tiledPlaneBuilder.d.ts +21 -16
  590. package/Meshes/Builders/tiledPlaneBuilder.js +21 -16
  591. package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
  592. package/Meshes/Builders/torusBuilder.js +2 -1
  593. package/Meshes/Builders/torusBuilder.js.map +1 -1
  594. package/Meshes/Builders/torusKnotBuilder.js +2 -1
  595. package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
  596. package/Meshes/Compression/dracoCompression.d.ts +3 -0
  597. package/Meshes/Compression/dracoCompression.js +23 -7
  598. package/Meshes/Compression/dracoCompression.js.map +1 -1
  599. package/Meshes/abstractMesh.d.ts +14 -2
  600. package/Meshes/abstractMesh.js +51 -33
  601. package/Meshes/abstractMesh.js.map +1 -1
  602. package/Meshes/geometry.d.ts +1 -1
  603. package/Meshes/geometry.js +38 -3
  604. package/Meshes/geometry.js.map +1 -1
  605. package/Meshes/groundMesh.d.ts +1 -1
  606. package/Meshes/groundMesh.js.map +1 -1
  607. package/Meshes/instancedMesh.js +12 -10
  608. package/Meshes/instancedMesh.js.map +1 -1
  609. package/Meshes/mesh.d.ts +1 -1
  610. package/Meshes/mesh.js +73 -57
  611. package/Meshes/mesh.js.map +1 -1
  612. package/Meshes/mesh.lts.d.ts +1 -1
  613. package/Meshes/mesh.lts.js.map +1 -1
  614. package/Meshes/mesh.vertexData.d.ts +3 -3
  615. package/Meshes/mesh.vertexData.js +102 -78
  616. package/Meshes/mesh.vertexData.js.map +1 -1
  617. package/Meshes/polygonMesh.js +2 -2
  618. package/Meshes/polygonMesh.js.map +1 -1
  619. package/Meshes/subMesh.js +1 -2
  620. package/Meshes/subMesh.js.map +1 -1
  621. package/Meshes/subMesh.project.js +1 -2
  622. package/Meshes/subMesh.project.js.map +1 -1
  623. package/Meshes/thinInstanceMesh.js +5 -0
  624. package/Meshes/thinInstanceMesh.js.map +1 -1
  625. package/Meshes/trailMesh.d.ts +1 -1
  626. package/Meshes/trailMesh.js.map +1 -1
  627. package/Meshes/transformNode.d.ts +0 -2
  628. package/Meshes/transformNode.js +46 -18
  629. package/Meshes/transformNode.js.map +1 -1
  630. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.d.ts +5 -0
  631. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +13 -2
  632. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
  633. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +6 -12
  634. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
  635. package/Misc/PerformanceViewer/performanceViewerCollector.js +36 -19
  636. package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
  637. package/Misc/assetsManager.d.ts +2 -1
  638. package/Misc/assetsManager.js +15 -1
  639. package/Misc/assetsManager.js.map +1 -1
  640. package/Misc/basis.js +1 -1
  641. package/Misc/basis.js.map +1 -1
  642. package/Misc/brdfTextureTools.js +4 -1
  643. package/Misc/brdfTextureTools.js.map +1 -1
  644. package/Misc/dds.js +7 -0
  645. package/Misc/dds.js.map +1 -1
  646. package/Misc/decorators.d.ts +1 -1
  647. package/Misc/decorators.js +8 -1
  648. package/Misc/decorators.js.map +1 -1
  649. package/Misc/deepCopier.js +3 -3
  650. package/Misc/deepCopier.js.map +1 -1
  651. package/Misc/devTools.js +1 -1
  652. package/Misc/devTools.js.map +1 -1
  653. package/Misc/environmentTextureTools.js +2 -2
  654. package/Misc/environmentTextureTools.js.map +1 -1
  655. package/Misc/error.d.ts +51 -0
  656. package/Misc/error.js +66 -0
  657. package/Misc/error.js.map +1 -0
  658. package/Misc/fileTools.d.ts +4 -4
  659. package/Misc/fileTools.js +14 -12
  660. package/Misc/fileTools.js.map +1 -1
  661. package/Misc/index.d.ts +2 -0
  662. package/Misc/index.js +2 -0
  663. package/Misc/index.js.map +1 -1
  664. package/Misc/khronosTextureContainer2.js +4 -3
  665. package/Misc/khronosTextureContainer2.js.map +1 -1
  666. package/Misc/reflector.js +6 -6
  667. package/Misc/reflector.js.map +1 -1
  668. package/Misc/tools.js +15 -13
  669. package/Misc/tools.js.map +1 -1
  670. package/Misc/uniqueIdGenerator.js +1 -1
  671. package/Misc/uniqueIdGenerator.js.map +1 -1
  672. package/Offline/database.js +1 -1
  673. package/Offline/database.js.map +1 -1
  674. package/Particles/baseParticleSystem.d.ts +4 -1
  675. package/Particles/baseParticleSystem.js +20 -5
  676. package/Particles/baseParticleSystem.js.map +1 -1
  677. package/Particles/gpuParticleSystem.js +2 -1
  678. package/Particles/gpuParticleSystem.js.map +1 -1
  679. package/Particles/particleHelper.js +2 -2
  680. package/Particles/particleHelper.js.map +1 -1
  681. package/Particles/particleSystem.d.ts +13 -1
  682. package/Particles/particleSystem.js +27 -1
  683. package/Particles/particleSystem.js.map +1 -1
  684. package/Physics/Plugins/ammoJSPlugin.d.ts +5 -1
  685. package/Physics/Plugins/ammoJSPlugin.js +16 -11
  686. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  687. package/Physics/physicsEngine.d.ts +1 -0
  688. package/Physics/physicsEngine.js +3 -1
  689. package/Physics/physicsEngine.js.map +1 -1
  690. package/Physics/physicsImpostor.d.ts +2 -2
  691. package/Physics/physicsImpostor.js.map +1 -1
  692. package/PostProcesses/blurPostProcess.js +5 -5
  693. package/PostProcesses/blurPostProcess.js.map +1 -1
  694. package/PostProcesses/imageProcessingPostProcess.js +1 -1
  695. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  696. package/PostProcesses/postProcess.js +1 -1
  697. package/PostProcesses/postProcess.js.map +1 -1
  698. package/PostProcesses/postProcessManager.js +2 -2
  699. package/PostProcesses/postProcessManager.js.map +1 -1
  700. package/Probes/reflectionProbe.js +2 -2
  701. package/Probes/reflectionProbe.js.map +1 -1
  702. package/Rendering/depthPeelingRenderer.js +3 -3
  703. package/Rendering/depthPeelingRenderer.js.map +1 -1
  704. package/Rendering/geometryBufferRenderer.js +8 -8
  705. package/Rendering/geometryBufferRenderer.js.map +1 -1
  706. package/Rendering/outlineRenderer.js +1 -1
  707. package/Rendering/outlineRenderer.js.map +1 -1
  708. package/Rendering/subSurfaceConfiguration.js +1 -1
  709. package/Rendering/subSurfaceConfiguration.js.map +1 -1
  710. package/Rendering/utilityLayerRenderer.js +4 -0
  711. package/Rendering/utilityLayerRenderer.js.map +1 -1
  712. package/Shaders/ShadersInclude/instancesDeclaration.js +1 -1
  713. package/Shaders/ShadersInclude/instancesDeclaration.js.map +1 -1
  714. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +1 -1
  715. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  716. package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js +1 -1
  717. package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js.map +1 -1
  718. package/Shaders/ShadersInclude/pointCloudVertex.js +1 -1
  719. package/Shaders/ShadersInclude/pointCloudVertex.js.map +1 -1
  720. package/Shaders/ShadersInclude/prePassVertex.js +1 -1
  721. package/Shaders/ShadersInclude/prePassVertex.js.map +1 -1
  722. package/Shaders/background.vertex.js +1 -1
  723. package/Shaders/background.vertex.js.map +1 -1
  724. package/Shaders/color.fragment.js +1 -1
  725. package/Shaders/color.fragment.js.map +1 -1
  726. package/Shaders/color.vertex.js +1 -1
  727. package/Shaders/color.vertex.js.map +1 -1
  728. package/Shaders/default.fragment.js +1 -1
  729. package/Shaders/default.fragment.js.map +1 -1
  730. package/Shaders/default.vertex.js +1 -1
  731. package/Shaders/default.vertex.js.map +1 -1
  732. package/Shaders/geometry.vertex.js +1 -1
  733. package/Shaders/geometry.vertex.js.map +1 -1
  734. package/Shaders/pbr.fragment.js +1 -1
  735. package/Shaders/pbr.fragment.js.map +1 -1
  736. package/Shaders/pbr.vertex.js +1 -1
  737. package/Shaders/pbr.vertex.js.map +1 -1
  738. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js +1 -1
  739. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js.map +1 -1
  740. package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
  741. package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
  742. package/Sprites/spriteManager.js +9 -10
  743. package/Sprites/spriteManager.js.map +1 -1
  744. package/Sprites/spriteMap.js +2 -2
  745. package/Sprites/spriteMap.js.map +1 -1
  746. package/Sprites/spriteRenderer.js +1 -1
  747. package/Sprites/spriteRenderer.js.map +1 -1
  748. package/XR/features/WebXRControllerPointerSelection.js +15 -9
  749. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  750. package/XR/features/WebXRDOMOverlay.js +1 -1
  751. package/XR/features/WebXRDOMOverlay.js.map +1 -1
  752. package/XR/features/WebXRHandTracking.js +30 -30
  753. package/XR/features/WebXRHandTracking.js.map +1 -1
  754. package/XR/features/WebXRImageTracking.js +2 -2
  755. package/XR/features/WebXRImageTracking.js.map +1 -1
  756. package/XR/features/WebXRLayers.d.ts +28 -5
  757. package/XR/features/WebXRLayers.js +54 -20
  758. package/XR/features/WebXRLayers.js.map +1 -1
  759. package/XR/features/WebXRNearInteraction.d.ts +35 -3
  760. package/XR/features/WebXRNearInteraction.js +204 -41
  761. package/XR/features/WebXRNearInteraction.js.map +1 -1
  762. package/XR/motionController/webXRAbstractMotionController.js +1 -1
  763. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  764. package/XR/motionController/webXRMotionControllerManager.js +2 -2
  765. package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
  766. package/XR/motionController/webXRProfiledMotionController.js +1 -1
  767. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  768. package/XR/webXRCamera.js +17 -4
  769. package/XR/webXRCamera.js.map +1 -1
  770. package/XR/webXRDefaultExperience.js +3 -0
  771. package/XR/webXRDefaultExperience.js.map +1 -1
  772. package/XR/webXREnterExitUI.js +2 -2
  773. package/XR/webXREnterExitUI.js.map +1 -1
  774. package/XR/webXRExperienceHelper.js +3 -2
  775. package/XR/webXRExperienceHelper.js.map +1 -1
  776. package/XR/webXRFeaturesManager.js +6 -6
  777. package/XR/webXRFeaturesManager.js.map +1 -1
  778. package/XR/webXRInputSource.js +3 -3
  779. package/XR/webXRInputSource.js.map +1 -1
  780. package/XR/webXRRenderTargetTextureProvider.d.ts +3 -2
  781. package/XR/webXRRenderTargetTextureProvider.js +37 -18
  782. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  783. package/XR/webXRSessionManager.d.ts +1 -0
  784. package/XR/webXRSessionManager.js +7 -2
  785. package/XR/webXRSessionManager.js.map +1 -1
  786. package/assetContainer.d.ts +1 -1
  787. package/assetContainer.js +5 -4
  788. package/assetContainer.js.map +1 -1
  789. package/index.d.ts +1 -0
  790. package/index.js +1 -0
  791. package/index.js.map +1 -1
  792. package/node.d.ts +1 -1
  793. package/node.js.map +1 -1
  794. package/package.json +31 -16
  795. package/scene.d.ts +6 -12
  796. package/scene.js +53 -47
  797. package/scene.js.map +1 -1
  798. package/types.d.ts +1 -1
  799. package/types.js.map +1 -1
  800. package/DeviceInput/Implementations/nativeDeviceInputSystem.js.map +0 -1
  801. package/DeviceInput/Implementations/webDeviceInputSystem.js.map +0 -1
  802. package/DeviceInput/Interfaces/inputInterfaces.js.map +0 -1
  803. package/DeviceInput/deviceInputSystem.d.ts +0 -60
  804. package/DeviceInput/deviceInputSystem.js +0 -84
  805. package/DeviceInput/deviceInputSystem.js.map +0 -1
  806. package/Misc/baseError.d.ts +0 -7
  807. package/Misc/baseError.js +0 -18
  808. package/Misc/baseError.js.map +0 -1
@@ -172,6 +172,7 @@ export declare class Path2 {
172
172
  }
173
173
  /**
174
174
  * Represents a 3D path made up of multiple 3D points
175
+ * @see https://doc.babylonjs.com/divingDeeper/mesh/path3D
175
176
  */
176
177
  export declare class Path3D {
177
178
  /**
@@ -286,6 +286,7 @@ var Path2 = /** @class */ (function () {
286
286
  export { Path2 };
287
287
  /**
288
288
  * Represents a 3D path made up of multiple 3D points
289
+ * @see https://doc.babylonjs.com/divingDeeper/mesh/path3D
289
290
  */
290
291
  var Path3D = /** @class */ (function () {
291
292
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"math.path.js","sourceRoot":"","sources":["../../../sourceES6/core/Maths/math.path.ts"],"names":[],"mappings":"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","sourcesContent":["import { DeepImmutable, Nullable } from \"../types\";\r\nimport { Scalar } from \"./math.scalar\";\r\nimport { Vector2, Vector3, Quaternion, Matrix } from \"./math.vector\";\r\nimport { Epsilon } from \"./math.constants\";\r\n\r\n/**\r\n * Defines potential orientation for back face culling\r\n */\r\nexport enum Orientation {\r\n /**\r\n * Clockwise\r\n */\r\n CW = 0,\r\n /** Counter clockwise */\r\n CCW = 1,\r\n}\r\n\r\n/** Class used to represent a Bezier curve */\r\nexport class BezierCurve {\r\n /**\r\n * Returns the cubic Bezier interpolated value (float) at \"t\" (float) from the given x1, y1, x2, y2 floats\r\n * @param t defines the time\r\n * @param x1 defines the left coordinate on X axis\r\n * @param y1 defines the left coordinate on Y axis\r\n * @param x2 defines the right coordinate on X axis\r\n * @param y2 defines the right coordinate on Y axis\r\n * @returns the interpolated value\r\n */\r\n public static Interpolate(t: number, x1: number, y1: number, x2: number, y2: number): number {\r\n // Extract X (which is equal to time here)\r\n var f0 = 1 - 3 * x2 + 3 * x1;\r\n var f1 = 3 * x2 - 6 * x1;\r\n var f2 = 3 * x1;\r\n\r\n var refinedT = t;\r\n for (var i = 0; i < 5; i++) {\r\n var refinedT2 = refinedT * refinedT;\r\n var refinedT3 = refinedT2 * refinedT;\r\n\r\n var x = f0 * refinedT3 + f1 * refinedT2 + f2 * refinedT;\r\n var slope = 1.0 / (3.0 * f0 * refinedT2 + 2.0 * f1 * refinedT + f2);\r\n refinedT -= (x - t) * slope;\r\n refinedT = Math.min(1, Math.max(0, refinedT));\r\n }\r\n\r\n // Resolve cubic bezier for the given x\r\n return 3 * Math.pow(1 - refinedT, 2) * refinedT * y1 + 3 * (1 - refinedT) * Math.pow(refinedT, 2) * y2 + Math.pow(refinedT, 3);\r\n }\r\n}\r\n\r\n/**\r\n * Defines angle representation\r\n */\r\nexport class Angle {\r\n private _radians: number;\r\n\r\n /**\r\n * Creates an Angle object of \"radians\" radians (float).\r\n * @param radians the angle in radians\r\n */\r\n constructor(radians: number) {\r\n this._radians = radians;\r\n if (this._radians < 0.0) {\r\n this._radians += 2.0 * Math.PI;\r\n }\r\n }\r\n\r\n /**\r\n * Get value in degrees\r\n * @returns the Angle value in degrees (float)\r\n */\r\n public degrees() {\r\n return (this._radians * 180.0) / Math.PI;\r\n }\r\n\r\n /**\r\n * Get value in radians\r\n * @returns the Angle value in radians (float)\r\n */\r\n public radians() {\r\n return this._radians;\r\n }\r\n\r\n /**\r\n * Gets a new Angle object valued with the gradient angle, in radians, of the line joining two points\r\n * @param a defines first point as the origin\r\n * @param b defines point\r\n * @returns a new Angle\r\n */\r\n public static BetweenTwoPoints(a: DeepImmutable<Vector2>, b: DeepImmutable<Vector2>): Angle {\r\n var delta = b.subtract(a);\r\n var theta = Math.atan2(delta.y, delta.x);\r\n return new Angle(theta);\r\n }\r\n\r\n /**\r\n * Gets a new Angle object from the given float in radians\r\n * @param radians defines the angle value in radians\r\n * @returns a new Angle\r\n */\r\n public static FromRadians(radians: number): Angle {\r\n return new Angle(radians);\r\n }\r\n /**\r\n * Gets a new Angle object from the given float in degrees\r\n * @param degrees defines the angle value in degrees\r\n * @returns a new Angle\r\n */\r\n public static FromDegrees(degrees: number): Angle {\r\n return new Angle((degrees * Math.PI) / 180.0);\r\n }\r\n}\r\n\r\n/**\r\n * This represents an arc in a 2d space.\r\n */\r\nexport class Arc2 {\r\n /**\r\n * Defines the center point of the arc.\r\n */\r\n public centerPoint: Vector2;\r\n /**\r\n * Defines the radius of the arc.\r\n */\r\n public radius: number;\r\n /**\r\n * Defines the angle of the arc (from mid point to end point).\r\n */\r\n public angle: Angle;\r\n /**\r\n * Defines the start angle of the arc (from start point to middle point).\r\n */\r\n public startAngle: Angle;\r\n /**\r\n * Defines the orientation of the arc (clock wise/counter clock wise).\r\n */\r\n public orientation: Orientation;\r\n\r\n /**\r\n * Creates an Arc object from the three given points : start, middle and end.\r\n * @param startPoint Defines the start point of the arc\r\n * @param midPoint Defines the midlle point of the arc\r\n * @param endPoint Defines the end point of the arc\r\n */\r\n constructor(\r\n /** Defines the start point of the arc */\r\n public startPoint: Vector2,\r\n /** Defines the mid point of the arc */\r\n public midPoint: Vector2,\r\n /** Defines the end point of the arc */\r\n public endPoint: Vector2\r\n ) {\r\n var temp = Math.pow(midPoint.x, 2) + Math.pow(midPoint.y, 2);\r\n var startToMid = (Math.pow(startPoint.x, 2) + Math.pow(startPoint.y, 2) - temp) / 2;\r\n var midToEnd = (temp - Math.pow(endPoint.x, 2) - Math.pow(endPoint.y, 2)) / 2;\r\n var det = (startPoint.x - midPoint.x) * (midPoint.y - endPoint.y) - (midPoint.x - endPoint.x) * (startPoint.y - midPoint.y);\r\n\r\n this.centerPoint = new Vector2((startToMid * (midPoint.y - endPoint.y) - midToEnd * (startPoint.y - midPoint.y)) / det, ((startPoint.x - midPoint.x) * midToEnd - (midPoint.x - endPoint.x) * startToMid) / det);\r\n\r\n this.radius = this.centerPoint.subtract(this.startPoint).length();\r\n\r\n this.startAngle = Angle.BetweenTwoPoints(this.centerPoint, this.startPoint);\r\n\r\n var a1 = this.startAngle.degrees();\r\n var a2 = Angle.BetweenTwoPoints(this.centerPoint, this.midPoint).degrees();\r\n var a3 = Angle.BetweenTwoPoints(this.centerPoint, this.endPoint).degrees();\r\n\r\n // angles correction\r\n if (a2 - a1 > +180.0) {\r\n a2 -= 360.0;\r\n }\r\n if (a2 - a1 < -180.0) {\r\n a2 += 360.0;\r\n }\r\n if (a3 - a2 > +180.0) {\r\n a3 -= 360.0;\r\n }\r\n if (a3 - a2 < -180.0) {\r\n a3 += 360.0;\r\n }\r\n\r\n this.orientation = a2 - a1 < 0 ? Orientation.CW : Orientation.CCW;\r\n this.angle = Angle.FromDegrees(this.orientation === Orientation.CW ? a1 - a3 : a3 - a1);\r\n }\r\n}\r\n\r\n/**\r\n * Represents a 2D path made up of multiple 2D points\r\n */\r\nexport class Path2 {\r\n private _points = new Array<Vector2>();\r\n private _length = 0.0;\r\n\r\n /**\r\n * If the path start and end point are the same\r\n */\r\n public closed = false;\r\n\r\n /**\r\n * Creates a Path2 object from the starting 2D coordinates x and y.\r\n * @param x the starting points x value\r\n * @param y the starting points y value\r\n */\r\n constructor(x: number, y: number) {\r\n this._points.push(new Vector2(x, y));\r\n }\r\n\r\n /**\r\n * Adds a new segment until the given coordinates (x, y) to the current Path2.\r\n * @param x the added points x value\r\n * @param y the added points y value\r\n * @returns the updated Path2.\r\n */\r\n public addLineTo(x: number, y: number): Path2 {\r\n if (this.closed) {\r\n return this;\r\n }\r\n var newPoint = new Vector2(x, y);\r\n var previousPoint = this._points[this._points.length - 1];\r\n this._points.push(newPoint);\r\n this._length += newPoint.subtract(previousPoint).length();\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds _numberOfSegments_ segments according to the arc definition (middle point coordinates, end point coordinates, the arc start point being the current Path2 last point) to the current Path2.\r\n * @param midX middle point x value\r\n * @param midY middle point y value\r\n * @param endX end point x value\r\n * @param endY end point y value\r\n * @param numberOfSegments (default: 36)\r\n * @returns the updated Path2.\r\n */\r\n public addArcTo(midX: number, midY: number, endX: number, endY: number, numberOfSegments = 36): Path2 {\r\n if (this.closed) {\r\n return this;\r\n }\r\n var startPoint = this._points[this._points.length - 1];\r\n var midPoint = new Vector2(midX, midY);\r\n var endPoint = new Vector2(endX, endY);\r\n\r\n var arc = new Arc2(startPoint, midPoint, endPoint);\r\n\r\n var increment = arc.angle.radians() / numberOfSegments;\r\n if (arc.orientation === Orientation.CW) {\r\n increment *= -1;\r\n }\r\n var currentAngle = arc.startAngle.radians() + increment;\r\n\r\n for (var i = 0; i < numberOfSegments; i++) {\r\n var x = Math.cos(currentAngle) * arc.radius + arc.centerPoint.x;\r\n var y = Math.sin(currentAngle) * arc.radius + arc.centerPoint.y;\r\n this.addLineTo(x, y);\r\n currentAngle += increment;\r\n }\r\n return this;\r\n }\r\n /**\r\n * Closes the Path2.\r\n * @returns the Path2.\r\n */\r\n public close(): Path2 {\r\n this.closed = true;\r\n return this;\r\n }\r\n /**\r\n * Gets the sum of the distance between each sequential point in the path\r\n * @returns the Path2 total length (float).\r\n */\r\n public length(): number {\r\n var result = this._length;\r\n\r\n if (this.closed) {\r\n var lastPoint = this._points[this._points.length - 1];\r\n var firstPoint = this._points[0];\r\n result += firstPoint.subtract(lastPoint).length();\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Gets the points which construct the path\r\n * @returns the Path2 internal array of points.\r\n */\r\n public getPoints(): Vector2[] {\r\n return this._points;\r\n }\r\n\r\n /**\r\n * Retreives the point at the distance aways from the starting point\r\n * @param normalizedLengthPosition the length along the path to retreive the point from\r\n * @returns a new Vector2 located at a percentage of the Path2 total length on this path.\r\n */\r\n public getPointAtLengthPosition(normalizedLengthPosition: number): Vector2 {\r\n if (normalizedLengthPosition < 0 || normalizedLengthPosition > 1) {\r\n return Vector2.Zero();\r\n }\r\n\r\n var lengthPosition = normalizedLengthPosition * this.length();\r\n\r\n var previousOffset = 0;\r\n for (var i = 0; i < this._points.length; i++) {\r\n var j = (i + 1) % this._points.length;\r\n\r\n var a = this._points[i];\r\n var b = this._points[j];\r\n var bToA = b.subtract(a);\r\n\r\n var nextOffset = bToA.length() + previousOffset;\r\n if (lengthPosition >= previousOffset && lengthPosition <= nextOffset) {\r\n var dir = bToA.normalize();\r\n var localOffset = lengthPosition - previousOffset;\r\n\r\n return new Vector2(a.x + dir.x * localOffset, a.y + dir.y * localOffset);\r\n }\r\n previousOffset = nextOffset;\r\n }\r\n\r\n return Vector2.Zero();\r\n }\r\n\r\n /**\r\n * Creates a new path starting from an x and y position\r\n * @param x starting x value\r\n * @param y starting y value\r\n * @returns a new Path2 starting at the coordinates (x, y).\r\n */\r\n public static StartingAt(x: number, y: number): Path2 {\r\n return new Path2(x, y);\r\n }\r\n}\r\n\r\n/**\r\n * Represents a 3D path made up of multiple 3D points\r\n */\r\nexport class Path3D {\r\n private _curve = new Array<Vector3>();\r\n private _distances = new Array<number>();\r\n private _tangents = new Array<Vector3>();\r\n private _normals = new Array<Vector3>();\r\n private _binormals = new Array<Vector3>();\r\n private _raw: boolean;\r\n private _alignTangentsWithPath: boolean;\r\n\r\n // holds interpolated point data\r\n private readonly _pointAtData = {\r\n id: 0,\r\n point: Vector3.Zero(),\r\n previousPointArrayIndex: 0,\r\n\r\n position: 0,\r\n subPosition: 0,\r\n\r\n interpolateReady: false,\r\n interpolationMatrix: Matrix.Identity(),\r\n };\r\n\r\n /**\r\n * new Path3D(path, normal, raw)\r\n * Creates a Path3D. A Path3D is a logical math object, so not a mesh.\r\n * please read the description in the tutorial : https://doc.babylonjs.com/how_to/how_to_use_path3d\r\n * @param path an array of Vector3, the curve axis of the Path3D\r\n * @param firstNormal (options) Vector3, the first wanted normal to the curve. Ex (0, 1, 0) for a vertical normal.\r\n * @param raw (optional, default false) : boolean, if true the returned Path3D isn't normalized. Useful to depict path acceleration or speed.\r\n * @param alignTangentsWithPath (optional, default false) : boolean, if true the tangents will be aligned with the path.\r\n */\r\n constructor(\r\n /**\r\n * an array of Vector3, the curve axis of the Path3D\r\n */\r\n public path: Vector3[],\r\n firstNormal: Nullable<Vector3> = null,\r\n raw?: boolean,\r\n alignTangentsWithPath = false\r\n ) {\r\n for (var p = 0; p < path.length; p++) {\r\n this._curve[p] = path[p].clone(); // hard copy\r\n }\r\n this._raw = raw || false;\r\n this._alignTangentsWithPath = alignTangentsWithPath;\r\n this._compute(firstNormal, alignTangentsWithPath);\r\n }\r\n\r\n /**\r\n * Returns the Path3D array of successive Vector3 designing its curve.\r\n * @returns the Path3D array of successive Vector3 designing its curve.\r\n */\r\n public getCurve(): Vector3[] {\r\n return this._curve;\r\n }\r\n\r\n /**\r\n * Returns the Path3D array of successive Vector3 designing its curve.\r\n * @returns the Path3D array of successive Vector3 designing its curve.\r\n */\r\n public getPoints(): Vector3[] {\r\n return this._curve;\r\n }\r\n\r\n /**\r\n * @returns the computed length (float) of the path.\r\n */\r\n public length() {\r\n return this._distances[this._distances.length - 1];\r\n }\r\n\r\n /**\r\n * Returns an array populated with tangent vectors on each Path3D curve point.\r\n * @returns an array populated with tangent vectors on each Path3D curve point.\r\n */\r\n public getTangents(): Vector3[] {\r\n return this._tangents;\r\n }\r\n\r\n /**\r\n * Returns an array populated with normal vectors on each Path3D curve point.\r\n * @returns an array populated with normal vectors on each Path3D curve point.\r\n */\r\n public getNormals(): Vector3[] {\r\n return this._normals;\r\n }\r\n\r\n /**\r\n * Returns an array populated with binormal vectors on each Path3D curve point.\r\n * @returns an array populated with binormal vectors on each Path3D curve point.\r\n */\r\n public getBinormals(): Vector3[] {\r\n return this._binormals;\r\n }\r\n\r\n /**\r\n * Returns an array populated with distances (float) of the i-th point from the first curve point.\r\n * @returns an array populated with distances (float) of the i-th point from the first curve point.\r\n */\r\n public getDistances(): number[] {\r\n return this._distances;\r\n }\r\n\r\n /**\r\n * Returns an interpolated point along this path\r\n * @param position the position of the point along this path, from 0.0 to 1.0\r\n * @returns a new Vector3 as the point\r\n */\r\n public getPointAt(position: number): Vector3 {\r\n return this._updatePointAtData(position).point;\r\n }\r\n\r\n /**\r\n * Returns the tangent vector of an interpolated Path3D curve point at the specified position along this path.\r\n * @param position the position of the point along this path, from 0.0 to 1.0\r\n * @param interpolated (optional, default false) : boolean, if true returns an interpolated tangent instead of the tangent of the previous path point.\r\n * @returns a tangent vector corresponding to the interpolated Path3D curve point, if not interpolated, the tangent is taken from the precomputed tangents array.\r\n */\r\n public getTangentAt(position: number, interpolated = false): Vector3 {\r\n this._updatePointAtData(position, interpolated);\r\n return interpolated ? Vector3.TransformCoordinates(Vector3.Forward(), this._pointAtData.interpolationMatrix) : this._tangents[this._pointAtData.previousPointArrayIndex];\r\n }\r\n\r\n /**\r\n * Returns the tangent vector of an interpolated Path3D curve point at the specified position along this path.\r\n * @param position the position of the point along this path, from 0.0 to 1.0\r\n * @param interpolated (optional, default false) : boolean, if true returns an interpolated normal instead of the normal of the previous path point.\r\n * @returns a normal vector corresponding to the interpolated Path3D curve point, if not interpolated, the normal is taken from the precomputed normals array.\r\n */\r\n public getNormalAt(position: number, interpolated = false): Vector3 {\r\n this._updatePointAtData(position, interpolated);\r\n return interpolated ? Vector3.TransformCoordinates(Vector3.Right(), this._pointAtData.interpolationMatrix) : this._normals[this._pointAtData.previousPointArrayIndex];\r\n }\r\n\r\n /**\r\n * Returns the binormal vector of an interpolated Path3D curve point at the specified position along this path.\r\n * @param position the position of the point along this path, from 0.0 to 1.0\r\n * @param interpolated (optional, default false) : boolean, if true returns an interpolated binormal instead of the binormal of the previous path point.\r\n * @returns a binormal vector corresponding to the interpolated Path3D curve point, if not interpolated, the binormal is taken from the precomputed binormals array.\r\n */\r\n public getBinormalAt(position: number, interpolated = false): Vector3 {\r\n this._updatePointAtData(position, interpolated);\r\n return interpolated ? Vector3.TransformCoordinates(Vector3.UpReadOnly, this._pointAtData.interpolationMatrix) : this._binormals[this._pointAtData.previousPointArrayIndex];\r\n }\r\n\r\n /**\r\n * Returns the distance (float) of an interpolated Path3D curve point at the specified position along this path.\r\n * @param position the position of the point along this path, from 0.0 to 1.0\r\n * @returns the distance of the interpolated Path3D curve point at the specified position along this path.\r\n */\r\n public getDistanceAt(position: number): number {\r\n return this.length() * position;\r\n }\r\n\r\n /**\r\n * Returns the array index of the previous point of an interpolated point along this path\r\n * @param position the position of the point to interpolate along this path, from 0.0 to 1.0\r\n * @returns the array index\r\n */\r\n public getPreviousPointIndexAt(position: number) {\r\n this._updatePointAtData(position);\r\n return this._pointAtData.previousPointArrayIndex;\r\n }\r\n\r\n /**\r\n * Returns the position of an interpolated point relative to the two path points it lies between, from 0.0 (point A) to 1.0 (point B)\r\n * @param position the position of the point to interpolate along this path, from 0.0 to 1.0\r\n * @returns the sub position\r\n */\r\n public getSubPositionAt(position: number) {\r\n this._updatePointAtData(position);\r\n return this._pointAtData.subPosition;\r\n }\r\n\r\n /**\r\n * Returns the position of the closest virtual point on this path to an arbitrary Vector3, from 0.0 to 1.0\r\n * @param target the vector of which to get the closest position to\r\n * @returns the position of the closest virtual point on this path to the target vector\r\n */\r\n public getClosestPositionTo(target: Vector3) {\r\n let smallestDistance = Number.MAX_VALUE;\r\n let closestPosition = 0.0;\r\n for (let i = 0; i < this._curve.length - 1; i++) {\r\n let point = this._curve[i + 0];\r\n let tangent = this._curve[i + 1].subtract(point).normalize();\r\n let subLength = this._distances[i + 1] - this._distances[i + 0];\r\n let subPosition = Math.min((Math.max(Vector3.Dot(tangent, target.subtract(point).normalize()), 0.0) * Vector3.Distance(point, target)) / subLength, 1.0);\r\n let distance = Vector3.Distance(point.add(tangent.scale(subPosition * subLength)), target);\r\n\r\n if (distance < smallestDistance) {\r\n smallestDistance = distance;\r\n closestPosition = (this._distances[i + 0] + subLength * subPosition) / this.length();\r\n }\r\n }\r\n return closestPosition;\r\n }\r\n\r\n /**\r\n * Returns a sub path (slice) of this path\r\n * @param start the position of the fist path point, from 0.0 to 1.0, or a negative value, which will get wrapped around from the end of the path to 0.0 to 1.0 values\r\n * @param end the position of the last path point, from 0.0 to 1.0, or a negative value, which will get wrapped around from the end of the path to 0.0 to 1.0 values\r\n * @returns a sub path (slice) of this path\r\n */\r\n public slice(start: number = 0.0, end: number = 1.0) {\r\n if (start < 0.0) {\r\n start = 1 - ((start * -1.0) % 1.0);\r\n }\r\n if (end < 0.0) {\r\n end = 1 - ((end * -1.0) % 1.0);\r\n }\r\n if (start > end) {\r\n let _start = start;\r\n start = end;\r\n end = _start;\r\n }\r\n let curvePoints = this.getCurve();\r\n\r\n let startPoint = this.getPointAt(start);\r\n let startIndex = this.getPreviousPointIndexAt(start);\r\n\r\n let endPoint = this.getPointAt(end);\r\n let endIndex = this.getPreviousPointIndexAt(end) + 1;\r\n\r\n let slicePoints: Vector3[] = [];\r\n if (start !== 0.0) {\r\n startIndex++;\r\n slicePoints.push(startPoint);\r\n }\r\n\r\n slicePoints.push(...curvePoints.slice(startIndex, endIndex));\r\n if (end !== 1.0 || start === 1.0) {\r\n slicePoints.push(endPoint);\r\n }\r\n return new Path3D(slicePoints, this.getNormalAt(start), this._raw, this._alignTangentsWithPath);\r\n }\r\n\r\n /**\r\n * Forces the Path3D tangent, normal, binormal and distance recomputation.\r\n * @param path path which all values are copied into the curves points\r\n * @param firstNormal which should be projected onto the curve\r\n * @param alignTangentsWithPath (optional, default false) : boolean, if true the tangents will be aligned with the path\r\n * @returns the same object updated.\r\n */\r\n public update(path: Vector3[], firstNormal: Nullable<Vector3> = null, alignTangentsWithPath = false): Path3D {\r\n for (var p = 0; p < path.length; p++) {\r\n this._curve[p].x = path[p].x;\r\n this._curve[p].y = path[p].y;\r\n this._curve[p].z = path[p].z;\r\n }\r\n this._compute(firstNormal, alignTangentsWithPath);\r\n return this;\r\n }\r\n\r\n // private function compute() : computes tangents, normals and binormals\r\n private _compute(firstNormal: Nullable<Vector3>, alignTangentsWithPath = false): void {\r\n const l = this._curve.length;\r\n\r\n if (l < 2) {\r\n return;\r\n }\r\n\r\n // first and last tangents\r\n this._tangents[0] = this._getFirstNonNullVector(0);\r\n if (!this._raw) {\r\n this._tangents[0].normalize();\r\n }\r\n this._tangents[l - 1] = this._curve[l - 1].subtract(this._curve[l - 2]);\r\n if (!this._raw) {\r\n this._tangents[l - 1].normalize();\r\n }\r\n\r\n // normals and binormals at first point : arbitrary vector with _normalVector()\r\n var tg0 = this._tangents[0];\r\n var pp0 = this._normalVector(tg0, firstNormal);\r\n this._normals[0] = pp0;\r\n if (!this._raw) {\r\n this._normals[0].normalize();\r\n }\r\n this._binormals[0] = Vector3.Cross(tg0, this._normals[0]);\r\n if (!this._raw) {\r\n this._binormals[0].normalize();\r\n }\r\n this._distances[0] = 0.0;\r\n\r\n // normals and binormals : next points\r\n var prev: Vector3; // previous vector (segment)\r\n var cur: Vector3; // current vector (segment)\r\n var curTang: Vector3; // current tangent\r\n // previous normal\r\n var prevNor: Vector3; // previous normal\r\n var prevBinor: Vector3; // previous binormal\r\n\r\n for (var i = 1; i < l; i++) {\r\n // tangents\r\n prev = this._getLastNonNullVector(i);\r\n if (i < l - 1) {\r\n cur = this._getFirstNonNullVector(i);\r\n this._tangents[i] = alignTangentsWithPath ? cur : prev.add(cur);\r\n this._tangents[i].normalize();\r\n }\r\n this._distances[i] = this._distances[i - 1] + this._curve[i].subtract(this._curve[i - 1]).length();\r\n\r\n // normals and binormals\r\n // http://www.cs.cmu.edu/afs/andrew/scs/cs/15-462/web/old/asst2camera.html\r\n curTang = this._tangents[i];\r\n prevBinor = this._binormals[i - 1];\r\n this._normals[i] = Vector3.Cross(prevBinor, curTang);\r\n if (!this._raw) {\r\n if (this._normals[i].length() === 0) {\r\n prevNor = this._normals[i - 1];\r\n this._normals[i] = prevNor.clone();\r\n } else {\r\n this._normals[i].normalize();\r\n }\r\n }\r\n this._binormals[i] = Vector3.Cross(curTang, this._normals[i]);\r\n if (!this._raw) {\r\n this._binormals[i].normalize();\r\n }\r\n }\r\n this._pointAtData.id = NaN;\r\n }\r\n\r\n // private function getFirstNonNullVector(index)\r\n // returns the first non null vector from index : curve[index + N].subtract(curve[index])\r\n private _getFirstNonNullVector(index: number): Vector3 {\r\n var i = 1;\r\n var nNVector: Vector3 = this._curve[index + i].subtract(this._curve[index]);\r\n while (nNVector.length() === 0 && index + i + 1 < this._curve.length) {\r\n i++;\r\n nNVector = this._curve[index + i].subtract(this._curve[index]);\r\n }\r\n return nNVector;\r\n }\r\n\r\n // private function getLastNonNullVector(index)\r\n // returns the last non null vector from index : curve[index].subtract(curve[index - N])\r\n private _getLastNonNullVector(index: number): Vector3 {\r\n var i = 1;\r\n var nLVector: Vector3 = this._curve[index].subtract(this._curve[index - i]);\r\n while (nLVector.length() === 0 && index > i + 1) {\r\n i++;\r\n nLVector = this._curve[index].subtract(this._curve[index - i]);\r\n }\r\n return nLVector;\r\n }\r\n\r\n // private function normalVector(v0, vt, va) :\r\n // returns an arbitrary point in the plane defined by the point v0 and the vector vt orthogonal to this plane\r\n // if va is passed, it returns the va projection on the plane orthogonal to vt at the point v0\r\n private _normalVector(vt: Vector3, va: Nullable<Vector3>): Vector3 {\r\n var normal0: Vector3;\r\n var tgl = vt.length();\r\n if (tgl === 0.0) {\r\n tgl = 1.0;\r\n }\r\n\r\n if (va === undefined || va === null) {\r\n var point: Vector3;\r\n if (!Scalar.WithinEpsilon(Math.abs(vt.y) / tgl, 1.0, Epsilon)) {\r\n // search for a point in the plane\r\n point = new Vector3(0.0, -1.0, 0.0);\r\n } else if (!Scalar.WithinEpsilon(Math.abs(vt.x) / tgl, 1.0, Epsilon)) {\r\n point = new Vector3(1.0, 0.0, 0.0);\r\n } else if (!Scalar.WithinEpsilon(Math.abs(vt.z) / tgl, 1.0, Epsilon)) {\r\n point = new Vector3(0.0, 0.0, 1.0);\r\n } else {\r\n point = Vector3.Zero();\r\n }\r\n normal0 = Vector3.Cross(vt, point);\r\n } else {\r\n normal0 = Vector3.Cross(vt, va);\r\n Vector3.CrossToRef(normal0, vt, normal0);\r\n }\r\n normal0.normalize();\r\n return normal0;\r\n }\r\n\r\n /**\r\n * Updates the point at data for an interpolated point along this curve\r\n * @param position the position of the point along this curve, from 0.0 to 1.0\r\n * @interpolateTNB wether to compute the interpolated tangent, normal and binormal\r\n * @returns the (updated) point at data\r\n */\r\n private _updatePointAtData(position: number, interpolateTNB: boolean = false) {\r\n // set an id for caching the result\r\n if (this._pointAtData.id === position) {\r\n if (!this._pointAtData.interpolateReady) {\r\n this._updateInterpolationMatrix();\r\n }\r\n return this._pointAtData;\r\n } else {\r\n this._pointAtData.id = position;\r\n }\r\n let curvePoints = this.getPoints();\r\n\r\n // clamp position between 0.0 and 1.0\r\n if (position <= 0.0) {\r\n return this._setPointAtData(0.0, 0.0, curvePoints[0], 0, interpolateTNB);\r\n } else if (position >= 1.0) {\r\n return this._setPointAtData(1.0, 1.0, curvePoints[curvePoints.length - 1], curvePoints.length - 1, interpolateTNB);\r\n }\r\n\r\n let previousPoint: Vector3 = curvePoints[0];\r\n let currentPoint: Vector3;\r\n let currentLength = 0.0;\r\n let targetLength = position * this.length();\r\n\r\n for (let i = 1; i < curvePoints.length; i++) {\r\n currentPoint = curvePoints[i];\r\n let distance = Vector3.Distance(previousPoint, currentPoint);\r\n currentLength += distance;\r\n if (currentLength === targetLength) {\r\n return this._setPointAtData(position, 1.0, currentPoint, i, interpolateTNB);\r\n } else if (currentLength > targetLength) {\r\n let toLength = currentLength - targetLength;\r\n let diff = toLength / distance;\r\n let dir = previousPoint.subtract(currentPoint);\r\n let point = currentPoint.add(dir.scaleInPlace(diff));\r\n return this._setPointAtData(position, 1 - diff, point, i - 1, interpolateTNB);\r\n }\r\n previousPoint = currentPoint;\r\n }\r\n return this._pointAtData;\r\n }\r\n\r\n /**\r\n * Updates the point at data from the specified parameters\r\n * @param position where along the path the interpolated point is, from 0.0 to 1.0\r\n * @param point the interpolated point\r\n * @param parentIndex the index of an existing curve point that is on, or else positionally the first behind, the interpolated point\r\n */\r\n private _setPointAtData(position: number, subPosition: number, point: Vector3, parentIndex: number, interpolateTNB: boolean) {\r\n this._pointAtData.point = point;\r\n this._pointAtData.position = position;\r\n this._pointAtData.subPosition = subPosition;\r\n this._pointAtData.previousPointArrayIndex = parentIndex;\r\n this._pointAtData.interpolateReady = interpolateTNB;\r\n\r\n if (interpolateTNB) {\r\n this._updateInterpolationMatrix();\r\n }\r\n return this._pointAtData;\r\n }\r\n\r\n /**\r\n * Updates the point at interpolation matrix for the tangents, normals and binormals\r\n */\r\n private _updateInterpolationMatrix() {\r\n this._pointAtData.interpolationMatrix = Matrix.Identity();\r\n let parentIndex = this._pointAtData.previousPointArrayIndex;\r\n\r\n if (parentIndex !== this._tangents.length - 1) {\r\n let index = parentIndex + 1;\r\n\r\n let tangentFrom = this._tangents[parentIndex].clone();\r\n let normalFrom = this._normals[parentIndex].clone();\r\n let binormalFrom = this._binormals[parentIndex].clone();\r\n\r\n let tangentTo = this._tangents[index].clone();\r\n let normalTo = this._normals[index].clone();\r\n let binormalTo = this._binormals[index].clone();\r\n\r\n let quatFrom = Quaternion.RotationQuaternionFromAxis(normalFrom, binormalFrom, tangentFrom);\r\n let quatTo = Quaternion.RotationQuaternionFromAxis(normalTo, binormalTo, tangentTo);\r\n let quatAt = Quaternion.Slerp(quatFrom, quatTo, this._pointAtData.subPosition);\r\n\r\n quatAt.toRotationMatrix(this._pointAtData.interpolationMatrix);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * A Curve3 object is a logical object, so not a mesh, to handle curves in the 3D geometric space.\r\n * A Curve3 is designed from a series of successive Vector3.\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_curve3\r\n */\r\nexport class Curve3 {\r\n private _points: Vector3[];\r\n private _length: number = 0.0;\r\n\r\n /**\r\n * Returns a Curve3 object along a Quadratic Bezier curve : https://doc.babylonjs.com/how_to/how_to_use_curve3#quadratic-bezier-curve\r\n * @param v0 (Vector3) the origin point of the Quadratic Bezier\r\n * @param v1 (Vector3) the control point\r\n * @param v2 (Vector3) the end point of the Quadratic Bezier\r\n * @param nbPoints (integer) the wanted number of points in the curve\r\n * @returns the created Curve3\r\n */\r\n public static CreateQuadraticBezier(v0: DeepImmutable<Vector3>, v1: DeepImmutable<Vector3>, v2: DeepImmutable<Vector3>, nbPoints: number): Curve3 {\r\n nbPoints = nbPoints > 2 ? nbPoints : 3;\r\n var bez = new Array<Vector3>();\r\n var equation = (t: number, val0: number, val1: number, val2: number) => {\r\n var res = (1.0 - t) * (1.0 - t) * val0 + 2.0 * t * (1.0 - t) * val1 + t * t * val2;\r\n return res;\r\n };\r\n for (var i = 0; i <= nbPoints; i++) {\r\n bez.push(new Vector3(equation(i / nbPoints, v0.x, v1.x, v2.x), equation(i / nbPoints, v0.y, v1.y, v2.y), equation(i / nbPoints, v0.z, v1.z, v2.z)));\r\n }\r\n return new Curve3(bez);\r\n }\r\n\r\n /**\r\n * Returns a Curve3 object along a Cubic Bezier curve : https://doc.babylonjs.com/how_to/how_to_use_curve3#cubic-bezier-curve\r\n * @param v0 (Vector3) the origin point of the Cubic Bezier\r\n * @param v1 (Vector3) the first control point\r\n * @param v2 (Vector3) the second control point\r\n * @param v3 (Vector3) the end point of the Cubic Bezier\r\n * @param nbPoints (integer) the wanted number of points in the curve\r\n * @returns the created Curve3\r\n */\r\n public static CreateCubicBezier(v0: DeepImmutable<Vector3>, v1: DeepImmutable<Vector3>, v2: DeepImmutable<Vector3>, v3: DeepImmutable<Vector3>, nbPoints: number): Curve3 {\r\n nbPoints = nbPoints > 3 ? nbPoints : 4;\r\n var bez = new Array<Vector3>();\r\n var equation = (t: number, val0: number, val1: number, val2: number, val3: number) => {\r\n var res = (1.0 - t) * (1.0 - t) * (1.0 - t) * val0 + 3.0 * t * (1.0 - t) * (1.0 - t) * val1 + 3.0 * t * t * (1.0 - t) * val2 + t * t * t * val3;\r\n return res;\r\n };\r\n for (var i = 0; i <= nbPoints; i++) {\r\n bez.push(new Vector3(equation(i / nbPoints, v0.x, v1.x, v2.x, v3.x), equation(i / nbPoints, v0.y, v1.y, v2.y, v3.y), equation(i / nbPoints, v0.z, v1.z, v2.z, v3.z)));\r\n }\r\n return new Curve3(bez);\r\n }\r\n\r\n /**\r\n * Returns a Curve3 object along a Hermite Spline curve : https://doc.babylonjs.com/how_to/how_to_use_curve3#hermite-spline\r\n * @param p1 (Vector3) the origin point of the Hermite Spline\r\n * @param t1 (Vector3) the tangent vector at the origin point\r\n * @param p2 (Vector3) the end point of the Hermite Spline\r\n * @param t2 (Vector3) the tangent vector at the end point\r\n * @param nbPoints (integer) the wanted number of points in the curve\r\n * @returns the created Curve3\r\n */\r\n public static CreateHermiteSpline(p1: DeepImmutable<Vector3>, t1: DeepImmutable<Vector3>, p2: DeepImmutable<Vector3>, t2: DeepImmutable<Vector3>, nbPoints: number): Curve3 {\r\n var hermite = new Array<Vector3>();\r\n var step = 1.0 / nbPoints;\r\n for (var i = 0; i <= nbPoints; i++) {\r\n hermite.push(Vector3.Hermite(p1, t1, p2, t2, i * step));\r\n }\r\n return new Curve3(hermite);\r\n }\r\n\r\n /**\r\n * Returns a Curve3 object along a CatmullRom Spline curve :\r\n * @param points (array of Vector3) the points the spline must pass through. At least, four points required\r\n * @param nbPoints (integer) the wanted number of points between each curve control points\r\n * @param closed (boolean) optional with default false, when true forms a closed loop from the points\r\n * @returns the created Curve3\r\n */\r\n public static CreateCatmullRomSpline(points: DeepImmutable<Vector3[]>, nbPoints: number, closed?: boolean): Curve3 {\r\n var catmullRom = new Array<Vector3>();\r\n var step = 1.0 / nbPoints;\r\n var amount = 0.0;\r\n if (closed) {\r\n var pointsCount = points.length;\r\n for (var i = 0; i < pointsCount; i++) {\r\n amount = 0;\r\n for (var c = 0; c < nbPoints; c++) {\r\n catmullRom.push(Vector3.CatmullRom(points[i % pointsCount], points[(i + 1) % pointsCount], points[(i + 2) % pointsCount], points[(i + 3) % pointsCount], amount));\r\n amount += step;\r\n }\r\n }\r\n catmullRom.push(catmullRom[0]);\r\n } else {\r\n var totalPoints = new Array<Vector3>();\r\n totalPoints.push(points[0].clone());\r\n Array.prototype.push.apply(totalPoints, points);\r\n totalPoints.push(points[points.length - 1].clone());\r\n for (var i = 0; i < totalPoints.length - 3; i++) {\r\n amount = 0;\r\n for (var c = 0; c < nbPoints; c++) {\r\n catmullRom.push(Vector3.CatmullRom(totalPoints[i], totalPoints[i + 1], totalPoints[i + 2], totalPoints[i + 3], amount));\r\n amount += step;\r\n }\r\n }\r\n i--;\r\n catmullRom.push(Vector3.CatmullRom(totalPoints[i], totalPoints[i + 1], totalPoints[i + 2], totalPoints[i + 3], amount));\r\n }\r\n return new Curve3(catmullRom);\r\n }\r\n\r\n /**\r\n * A Curve3 object is a logical object, so not a mesh, to handle curves in the 3D geometric space.\r\n * A Curve3 is designed from a series of successive Vector3.\r\n * Tuto : https://doc.babylonjs.com/how_to/how_to_use_curve3#curve3-object\r\n * @param points points which make up the curve\r\n */\r\n constructor(points: Vector3[]) {\r\n this._points = points;\r\n this._length = this._computeLength(points);\r\n }\r\n\r\n /**\r\n * @returns the Curve3 stored array of successive Vector3\r\n */\r\n public getPoints() {\r\n return this._points;\r\n }\r\n\r\n /**\r\n * @returns the computed length (float) of the curve.\r\n */\r\n public length() {\r\n return this._length;\r\n }\r\n\r\n /**\r\n * Returns a new instance of Curve3 object : var curve = curveA.continue(curveB);\r\n * This new Curve3 is built by translating and sticking the curveB at the end of the curveA.\r\n * curveA and curveB keep unchanged.\r\n * @param curve the curve to continue from this curve\r\n * @returns the newly constructed curve\r\n */\r\n public continue(curve: DeepImmutable<Curve3>): Curve3 {\r\n var lastPoint = this._points[this._points.length - 1];\r\n var continuedPoints = this._points.slice();\r\n var curvePoints = curve.getPoints();\r\n for (var i = 1; i < curvePoints.length; i++) {\r\n continuedPoints.push(curvePoints[i].subtract(curvePoints[0]).add(lastPoint));\r\n }\r\n var continuedCurve = new Curve3(continuedPoints);\r\n return continuedCurve;\r\n }\r\n\r\n private _computeLength(path: DeepImmutable<Vector3[]>): number {\r\n var l = 0;\r\n for (var i = 1; i < path.length; i++) {\r\n l += path[i].subtract(path[i - 1]).length();\r\n }\r\n return l;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"math.path.js","sourceRoot":"","sources":["../../../sourceES6/core/Maths/math.path.ts"],"names":[],"mappings":"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","sourcesContent":["import { DeepImmutable, Nullable } from \"../types\";\r\nimport { Scalar } from \"./math.scalar\";\r\nimport { Vector2, Vector3, Quaternion, Matrix } from \"./math.vector\";\r\nimport { Epsilon } from \"./math.constants\";\r\n\r\n/**\r\n * Defines potential orientation for back face culling\r\n */\r\nexport enum Orientation {\r\n /**\r\n * Clockwise\r\n */\r\n CW = 0,\r\n /** Counter clockwise */\r\n CCW = 1,\r\n}\r\n\r\n/** Class used to represent a Bezier curve */\r\nexport class BezierCurve {\r\n /**\r\n * Returns the cubic Bezier interpolated value (float) at \"t\" (float) from the given x1, y1, x2, y2 floats\r\n * @param t defines the time\r\n * @param x1 defines the left coordinate on X axis\r\n * @param y1 defines the left coordinate on Y axis\r\n * @param x2 defines the right coordinate on X axis\r\n * @param y2 defines the right coordinate on Y axis\r\n * @returns the interpolated value\r\n */\r\n public static Interpolate(t: number, x1: number, y1: number, x2: number, y2: number): number {\r\n // Extract X (which is equal to time here)\r\n var f0 = 1 - 3 * x2 + 3 * x1;\r\n var f1 = 3 * x2 - 6 * x1;\r\n var f2 = 3 * x1;\r\n\r\n var refinedT = t;\r\n for (var i = 0; i < 5; i++) {\r\n var refinedT2 = refinedT * refinedT;\r\n var refinedT3 = refinedT2 * refinedT;\r\n\r\n var x = f0 * refinedT3 + f1 * refinedT2 + f2 * refinedT;\r\n var slope = 1.0 / (3.0 * f0 * refinedT2 + 2.0 * f1 * refinedT + f2);\r\n refinedT -= (x - t) * slope;\r\n refinedT = Math.min(1, Math.max(0, refinedT));\r\n }\r\n\r\n // Resolve cubic bezier for the given x\r\n return 3 * Math.pow(1 - refinedT, 2) * refinedT * y1 + 3 * (1 - refinedT) * Math.pow(refinedT, 2) * y2 + Math.pow(refinedT, 3);\r\n }\r\n}\r\n\r\n/**\r\n * Defines angle representation\r\n */\r\nexport class Angle {\r\n private _radians: number;\r\n\r\n /**\r\n * Creates an Angle object of \"radians\" radians (float).\r\n * @param radians the angle in radians\r\n */\r\n constructor(radians: number) {\r\n this._radians = radians;\r\n if (this._radians < 0.0) {\r\n this._radians += 2.0 * Math.PI;\r\n }\r\n }\r\n\r\n /**\r\n * Get value in degrees\r\n * @returns the Angle value in degrees (float)\r\n */\r\n public degrees() {\r\n return (this._radians * 180.0) / Math.PI;\r\n }\r\n\r\n /**\r\n * Get value in radians\r\n * @returns the Angle value in radians (float)\r\n */\r\n public radians() {\r\n return this._radians;\r\n }\r\n\r\n /**\r\n * Gets a new Angle object valued with the gradient angle, in radians, of the line joining two points\r\n * @param a defines first point as the origin\r\n * @param b defines point\r\n * @returns a new Angle\r\n */\r\n public static BetweenTwoPoints(a: DeepImmutable<Vector2>, b: DeepImmutable<Vector2>): Angle {\r\n var delta = b.subtract(a);\r\n var theta = Math.atan2(delta.y, delta.x);\r\n return new Angle(theta);\r\n }\r\n\r\n /**\r\n * Gets a new Angle object from the given float in radians\r\n * @param radians defines the angle value in radians\r\n * @returns a new Angle\r\n */\r\n public static FromRadians(radians: number): Angle {\r\n return new Angle(radians);\r\n }\r\n /**\r\n * Gets a new Angle object from the given float in degrees\r\n * @param degrees defines the angle value in degrees\r\n * @returns a new Angle\r\n */\r\n public static FromDegrees(degrees: number): Angle {\r\n return new Angle((degrees * Math.PI) / 180.0);\r\n }\r\n}\r\n\r\n/**\r\n * This represents an arc in a 2d space.\r\n */\r\nexport class Arc2 {\r\n /**\r\n * Defines the center point of the arc.\r\n */\r\n public centerPoint: Vector2;\r\n /**\r\n * Defines the radius of the arc.\r\n */\r\n public radius: number;\r\n /**\r\n * Defines the angle of the arc (from mid point to end point).\r\n */\r\n public angle: Angle;\r\n /**\r\n * Defines the start angle of the arc (from start point to middle point).\r\n */\r\n public startAngle: Angle;\r\n /**\r\n * Defines the orientation of the arc (clock wise/counter clock wise).\r\n */\r\n public orientation: Orientation;\r\n\r\n /**\r\n * Creates an Arc object from the three given points : start, middle and end.\r\n * @param startPoint Defines the start point of the arc\r\n * @param midPoint Defines the midlle point of the arc\r\n * @param endPoint Defines the end point of the arc\r\n */\r\n constructor(\r\n /** Defines the start point of the arc */\r\n public startPoint: Vector2,\r\n /** Defines the mid point of the arc */\r\n public midPoint: Vector2,\r\n /** Defines the end point of the arc */\r\n public endPoint: Vector2\r\n ) {\r\n var temp = Math.pow(midPoint.x, 2) + Math.pow(midPoint.y, 2);\r\n var startToMid = (Math.pow(startPoint.x, 2) + Math.pow(startPoint.y, 2) - temp) / 2;\r\n var midToEnd = (temp - Math.pow(endPoint.x, 2) - Math.pow(endPoint.y, 2)) / 2;\r\n var det = (startPoint.x - midPoint.x) * (midPoint.y - endPoint.y) - (midPoint.x - endPoint.x) * (startPoint.y - midPoint.y);\r\n\r\n this.centerPoint = new Vector2((startToMid * (midPoint.y - endPoint.y) - midToEnd * (startPoint.y - midPoint.y)) / det, ((startPoint.x - midPoint.x) * midToEnd - (midPoint.x - endPoint.x) * startToMid) / det);\r\n\r\n this.radius = this.centerPoint.subtract(this.startPoint).length();\r\n\r\n this.startAngle = Angle.BetweenTwoPoints(this.centerPoint, this.startPoint);\r\n\r\n var a1 = this.startAngle.degrees();\r\n var a2 = Angle.BetweenTwoPoints(this.centerPoint, this.midPoint).degrees();\r\n var a3 = Angle.BetweenTwoPoints(this.centerPoint, this.endPoint).degrees();\r\n\r\n // angles correction\r\n if (a2 - a1 > +180.0) {\r\n a2 -= 360.0;\r\n }\r\n if (a2 - a1 < -180.0) {\r\n a2 += 360.0;\r\n }\r\n if (a3 - a2 > +180.0) {\r\n a3 -= 360.0;\r\n }\r\n if (a3 - a2 < -180.0) {\r\n a3 += 360.0;\r\n }\r\n\r\n this.orientation = a2 - a1 < 0 ? Orientation.CW : Orientation.CCW;\r\n this.angle = Angle.FromDegrees(this.orientation === Orientation.CW ? a1 - a3 : a3 - a1);\r\n }\r\n}\r\n\r\n/**\r\n * Represents a 2D path made up of multiple 2D points\r\n */\r\nexport class Path2 {\r\n private _points = new Array<Vector2>();\r\n private _length = 0.0;\r\n\r\n /**\r\n * If the path start and end point are the same\r\n */\r\n public closed = false;\r\n\r\n /**\r\n * Creates a Path2 object from the starting 2D coordinates x and y.\r\n * @param x the starting points x value\r\n * @param y the starting points y value\r\n */\r\n constructor(x: number, y: number) {\r\n this._points.push(new Vector2(x, y));\r\n }\r\n\r\n /**\r\n * Adds a new segment until the given coordinates (x, y) to the current Path2.\r\n * @param x the added points x value\r\n * @param y the added points y value\r\n * @returns the updated Path2.\r\n */\r\n public addLineTo(x: number, y: number): Path2 {\r\n if (this.closed) {\r\n return this;\r\n }\r\n var newPoint = new Vector2(x, y);\r\n var previousPoint = this._points[this._points.length - 1];\r\n this._points.push(newPoint);\r\n this._length += newPoint.subtract(previousPoint).length();\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds _numberOfSegments_ segments according to the arc definition (middle point coordinates, end point coordinates, the arc start point being the current Path2 last point) to the current Path2.\r\n * @param midX middle point x value\r\n * @param midY middle point y value\r\n * @param endX end point x value\r\n * @param endY end point y value\r\n * @param numberOfSegments (default: 36)\r\n * @returns the updated Path2.\r\n */\r\n public addArcTo(midX: number, midY: number, endX: number, endY: number, numberOfSegments = 36): Path2 {\r\n if (this.closed) {\r\n return this;\r\n }\r\n var startPoint = this._points[this._points.length - 1];\r\n var midPoint = new Vector2(midX, midY);\r\n var endPoint = new Vector2(endX, endY);\r\n\r\n var arc = new Arc2(startPoint, midPoint, endPoint);\r\n\r\n var increment = arc.angle.radians() / numberOfSegments;\r\n if (arc.orientation === Orientation.CW) {\r\n increment *= -1;\r\n }\r\n var currentAngle = arc.startAngle.radians() + increment;\r\n\r\n for (var i = 0; i < numberOfSegments; i++) {\r\n var x = Math.cos(currentAngle) * arc.radius + arc.centerPoint.x;\r\n var y = Math.sin(currentAngle) * arc.radius + arc.centerPoint.y;\r\n this.addLineTo(x, y);\r\n currentAngle += increment;\r\n }\r\n return this;\r\n }\r\n /**\r\n * Closes the Path2.\r\n * @returns the Path2.\r\n */\r\n public close(): Path2 {\r\n this.closed = true;\r\n return this;\r\n }\r\n /**\r\n * Gets the sum of the distance between each sequential point in the path\r\n * @returns the Path2 total length (float).\r\n */\r\n public length(): number {\r\n var result = this._length;\r\n\r\n if (this.closed) {\r\n var lastPoint = this._points[this._points.length - 1];\r\n var firstPoint = this._points[0];\r\n result += firstPoint.subtract(lastPoint).length();\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Gets the points which construct the path\r\n * @returns the Path2 internal array of points.\r\n */\r\n public getPoints(): Vector2[] {\r\n return this._points;\r\n }\r\n\r\n /**\r\n * Retreives the point at the distance aways from the starting point\r\n * @param normalizedLengthPosition the length along the path to retreive the point from\r\n * @returns a new Vector2 located at a percentage of the Path2 total length on this path.\r\n */\r\n public getPointAtLengthPosition(normalizedLengthPosition: number): Vector2 {\r\n if (normalizedLengthPosition < 0 || normalizedLengthPosition > 1) {\r\n return Vector2.Zero();\r\n }\r\n\r\n var lengthPosition = normalizedLengthPosition * this.length();\r\n\r\n var previousOffset = 0;\r\n for (var i = 0; i < this._points.length; i++) {\r\n var j = (i + 1) % this._points.length;\r\n\r\n var a = this._points[i];\r\n var b = this._points[j];\r\n var bToA = b.subtract(a);\r\n\r\n var nextOffset = bToA.length() + previousOffset;\r\n if (lengthPosition >= previousOffset && lengthPosition <= nextOffset) {\r\n var dir = bToA.normalize();\r\n var localOffset = lengthPosition - previousOffset;\r\n\r\n return new Vector2(a.x + dir.x * localOffset, a.y + dir.y * localOffset);\r\n }\r\n previousOffset = nextOffset;\r\n }\r\n\r\n return Vector2.Zero();\r\n }\r\n\r\n /**\r\n * Creates a new path starting from an x and y position\r\n * @param x starting x value\r\n * @param y starting y value\r\n * @returns a new Path2 starting at the coordinates (x, y).\r\n */\r\n public static StartingAt(x: number, y: number): Path2 {\r\n return new Path2(x, y);\r\n }\r\n}\r\n\r\n/**\r\n * Represents a 3D path made up of multiple 3D points\r\n * @see https://doc.babylonjs.com/divingDeeper/mesh/path3D\r\n */\r\nexport class Path3D {\r\n private _curve = new Array<Vector3>();\r\n private _distances = new Array<number>();\r\n private _tangents = new Array<Vector3>();\r\n private _normals = new Array<Vector3>();\r\n private _binormals = new Array<Vector3>();\r\n private _raw: boolean;\r\n private _alignTangentsWithPath: boolean;\r\n\r\n // holds interpolated point data\r\n private readonly _pointAtData = {\r\n id: 0,\r\n point: Vector3.Zero(),\r\n previousPointArrayIndex: 0,\r\n\r\n position: 0,\r\n subPosition: 0,\r\n\r\n interpolateReady: false,\r\n interpolationMatrix: Matrix.Identity(),\r\n };\r\n\r\n /**\r\n * new Path3D(path, normal, raw)\r\n * Creates a Path3D. A Path3D is a logical math object, so not a mesh.\r\n * please read the description in the tutorial : https://doc.babylonjs.com/how_to/how_to_use_path3d\r\n * @param path an array of Vector3, the curve axis of the Path3D\r\n * @param firstNormal (options) Vector3, the first wanted normal to the curve. Ex (0, 1, 0) for a vertical normal.\r\n * @param raw (optional, default false) : boolean, if true the returned Path3D isn't normalized. Useful to depict path acceleration or speed.\r\n * @param alignTangentsWithPath (optional, default false) : boolean, if true the tangents will be aligned with the path.\r\n */\r\n constructor(\r\n /**\r\n * an array of Vector3, the curve axis of the Path3D\r\n */\r\n public path: Vector3[],\r\n firstNormal: Nullable<Vector3> = null,\r\n raw?: boolean,\r\n alignTangentsWithPath = false\r\n ) {\r\n for (var p = 0; p < path.length; p++) {\r\n this._curve[p] = path[p].clone(); // hard copy\r\n }\r\n this._raw = raw || false;\r\n this._alignTangentsWithPath = alignTangentsWithPath;\r\n this._compute(firstNormal, alignTangentsWithPath);\r\n }\r\n\r\n /**\r\n * Returns the Path3D array of successive Vector3 designing its curve.\r\n * @returns the Path3D array of successive Vector3 designing its curve.\r\n */\r\n public getCurve(): Vector3[] {\r\n return this._curve;\r\n }\r\n\r\n /**\r\n * Returns the Path3D array of successive Vector3 designing its curve.\r\n * @returns the Path3D array of successive Vector3 designing its curve.\r\n */\r\n public getPoints(): Vector3[] {\r\n return this._curve;\r\n }\r\n\r\n /**\r\n * @returns the computed length (float) of the path.\r\n */\r\n public length() {\r\n return this._distances[this._distances.length - 1];\r\n }\r\n\r\n /**\r\n * Returns an array populated with tangent vectors on each Path3D curve point.\r\n * @returns an array populated with tangent vectors on each Path3D curve point.\r\n */\r\n public getTangents(): Vector3[] {\r\n return this._tangents;\r\n }\r\n\r\n /**\r\n * Returns an array populated with normal vectors on each Path3D curve point.\r\n * @returns an array populated with normal vectors on each Path3D curve point.\r\n */\r\n public getNormals(): Vector3[] {\r\n return this._normals;\r\n }\r\n\r\n /**\r\n * Returns an array populated with binormal vectors on each Path3D curve point.\r\n * @returns an array populated with binormal vectors on each Path3D curve point.\r\n */\r\n public getBinormals(): Vector3[] {\r\n return this._binormals;\r\n }\r\n\r\n /**\r\n * Returns an array populated with distances (float) of the i-th point from the first curve point.\r\n * @returns an array populated with distances (float) of the i-th point from the first curve point.\r\n */\r\n public getDistances(): number[] {\r\n return this._distances;\r\n }\r\n\r\n /**\r\n * Returns an interpolated point along this path\r\n * @param position the position of the point along this path, from 0.0 to 1.0\r\n * @returns a new Vector3 as the point\r\n */\r\n public getPointAt(position: number): Vector3 {\r\n return this._updatePointAtData(position).point;\r\n }\r\n\r\n /**\r\n * Returns the tangent vector of an interpolated Path3D curve point at the specified position along this path.\r\n * @param position the position of the point along this path, from 0.0 to 1.0\r\n * @param interpolated (optional, default false) : boolean, if true returns an interpolated tangent instead of the tangent of the previous path point.\r\n * @returns a tangent vector corresponding to the interpolated Path3D curve point, if not interpolated, the tangent is taken from the precomputed tangents array.\r\n */\r\n public getTangentAt(position: number, interpolated = false): Vector3 {\r\n this._updatePointAtData(position, interpolated);\r\n return interpolated ? Vector3.TransformCoordinates(Vector3.Forward(), this._pointAtData.interpolationMatrix) : this._tangents[this._pointAtData.previousPointArrayIndex];\r\n }\r\n\r\n /**\r\n * Returns the tangent vector of an interpolated Path3D curve point at the specified position along this path.\r\n * @param position the position of the point along this path, from 0.0 to 1.0\r\n * @param interpolated (optional, default false) : boolean, if true returns an interpolated normal instead of the normal of the previous path point.\r\n * @returns a normal vector corresponding to the interpolated Path3D curve point, if not interpolated, the normal is taken from the precomputed normals array.\r\n */\r\n public getNormalAt(position: number, interpolated = false): Vector3 {\r\n this._updatePointAtData(position, interpolated);\r\n return interpolated ? Vector3.TransformCoordinates(Vector3.Right(), this._pointAtData.interpolationMatrix) : this._normals[this._pointAtData.previousPointArrayIndex];\r\n }\r\n\r\n /**\r\n * Returns the binormal vector of an interpolated Path3D curve point at the specified position along this path.\r\n * @param position the position of the point along this path, from 0.0 to 1.0\r\n * @param interpolated (optional, default false) : boolean, if true returns an interpolated binormal instead of the binormal of the previous path point.\r\n * @returns a binormal vector corresponding to the interpolated Path3D curve point, if not interpolated, the binormal is taken from the precomputed binormals array.\r\n */\r\n public getBinormalAt(position: number, interpolated = false): Vector3 {\r\n this._updatePointAtData(position, interpolated);\r\n return interpolated ? Vector3.TransformCoordinates(Vector3.UpReadOnly, this._pointAtData.interpolationMatrix) : this._binormals[this._pointAtData.previousPointArrayIndex];\r\n }\r\n\r\n /**\r\n * Returns the distance (float) of an interpolated Path3D curve point at the specified position along this path.\r\n * @param position the position of the point along this path, from 0.0 to 1.0\r\n * @returns the distance of the interpolated Path3D curve point at the specified position along this path.\r\n */\r\n public getDistanceAt(position: number): number {\r\n return this.length() * position;\r\n }\r\n\r\n /**\r\n * Returns the array index of the previous point of an interpolated point along this path\r\n * @param position the position of the point to interpolate along this path, from 0.0 to 1.0\r\n * @returns the array index\r\n */\r\n public getPreviousPointIndexAt(position: number) {\r\n this._updatePointAtData(position);\r\n return this._pointAtData.previousPointArrayIndex;\r\n }\r\n\r\n /**\r\n * Returns the position of an interpolated point relative to the two path points it lies between, from 0.0 (point A) to 1.0 (point B)\r\n * @param position the position of the point to interpolate along this path, from 0.0 to 1.0\r\n * @returns the sub position\r\n */\r\n public getSubPositionAt(position: number) {\r\n this._updatePointAtData(position);\r\n return this._pointAtData.subPosition;\r\n }\r\n\r\n /**\r\n * Returns the position of the closest virtual point on this path to an arbitrary Vector3, from 0.0 to 1.0\r\n * @param target the vector of which to get the closest position to\r\n * @returns the position of the closest virtual point on this path to the target vector\r\n */\r\n public getClosestPositionTo(target: Vector3) {\r\n let smallestDistance = Number.MAX_VALUE;\r\n let closestPosition = 0.0;\r\n for (let i = 0; i < this._curve.length - 1; i++) {\r\n let point = this._curve[i + 0];\r\n let tangent = this._curve[i + 1].subtract(point).normalize();\r\n let subLength = this._distances[i + 1] - this._distances[i + 0];\r\n let subPosition = Math.min((Math.max(Vector3.Dot(tangent, target.subtract(point).normalize()), 0.0) * Vector3.Distance(point, target)) / subLength, 1.0);\r\n let distance = Vector3.Distance(point.add(tangent.scale(subPosition * subLength)), target);\r\n\r\n if (distance < smallestDistance) {\r\n smallestDistance = distance;\r\n closestPosition = (this._distances[i + 0] + subLength * subPosition) / this.length();\r\n }\r\n }\r\n return closestPosition;\r\n }\r\n\r\n /**\r\n * Returns a sub path (slice) of this path\r\n * @param start the position of the fist path point, from 0.0 to 1.0, or a negative value, which will get wrapped around from the end of the path to 0.0 to 1.0 values\r\n * @param end the position of the last path point, from 0.0 to 1.0, or a negative value, which will get wrapped around from the end of the path to 0.0 to 1.0 values\r\n * @returns a sub path (slice) of this path\r\n */\r\n public slice(start: number = 0.0, end: number = 1.0) {\r\n if (start < 0.0) {\r\n start = 1 - ((start * -1.0) % 1.0);\r\n }\r\n if (end < 0.0) {\r\n end = 1 - ((end * -1.0) % 1.0);\r\n }\r\n if (start > end) {\r\n let _start = start;\r\n start = end;\r\n end = _start;\r\n }\r\n let curvePoints = this.getCurve();\r\n\r\n let startPoint = this.getPointAt(start);\r\n let startIndex = this.getPreviousPointIndexAt(start);\r\n\r\n let endPoint = this.getPointAt(end);\r\n let endIndex = this.getPreviousPointIndexAt(end) + 1;\r\n\r\n let slicePoints: Vector3[] = [];\r\n if (start !== 0.0) {\r\n startIndex++;\r\n slicePoints.push(startPoint);\r\n }\r\n\r\n slicePoints.push(...curvePoints.slice(startIndex, endIndex));\r\n if (end !== 1.0 || start === 1.0) {\r\n slicePoints.push(endPoint);\r\n }\r\n return new Path3D(slicePoints, this.getNormalAt(start), this._raw, this._alignTangentsWithPath);\r\n }\r\n\r\n /**\r\n * Forces the Path3D tangent, normal, binormal and distance recomputation.\r\n * @param path path which all values are copied into the curves points\r\n * @param firstNormal which should be projected onto the curve\r\n * @param alignTangentsWithPath (optional, default false) : boolean, if true the tangents will be aligned with the path\r\n * @returns the same object updated.\r\n */\r\n public update(path: Vector3[], firstNormal: Nullable<Vector3> = null, alignTangentsWithPath = false): Path3D {\r\n for (var p = 0; p < path.length; p++) {\r\n this._curve[p].x = path[p].x;\r\n this._curve[p].y = path[p].y;\r\n this._curve[p].z = path[p].z;\r\n }\r\n this._compute(firstNormal, alignTangentsWithPath);\r\n return this;\r\n }\r\n\r\n // private function compute() : computes tangents, normals and binormals\r\n private _compute(firstNormal: Nullable<Vector3>, alignTangentsWithPath = false): void {\r\n const l = this._curve.length;\r\n\r\n if (l < 2) {\r\n return;\r\n }\r\n\r\n // first and last tangents\r\n this._tangents[0] = this._getFirstNonNullVector(0);\r\n if (!this._raw) {\r\n this._tangents[0].normalize();\r\n }\r\n this._tangents[l - 1] = this._curve[l - 1].subtract(this._curve[l - 2]);\r\n if (!this._raw) {\r\n this._tangents[l - 1].normalize();\r\n }\r\n\r\n // normals and binormals at first point : arbitrary vector with _normalVector()\r\n var tg0 = this._tangents[0];\r\n var pp0 = this._normalVector(tg0, firstNormal);\r\n this._normals[0] = pp0;\r\n if (!this._raw) {\r\n this._normals[0].normalize();\r\n }\r\n this._binormals[0] = Vector3.Cross(tg0, this._normals[0]);\r\n if (!this._raw) {\r\n this._binormals[0].normalize();\r\n }\r\n this._distances[0] = 0.0;\r\n\r\n // normals and binormals : next points\r\n var prev: Vector3; // previous vector (segment)\r\n var cur: Vector3; // current vector (segment)\r\n var curTang: Vector3; // current tangent\r\n // previous normal\r\n var prevNor: Vector3; // previous normal\r\n var prevBinor: Vector3; // previous binormal\r\n\r\n for (var i = 1; i < l; i++) {\r\n // tangents\r\n prev = this._getLastNonNullVector(i);\r\n if (i < l - 1) {\r\n cur = this._getFirstNonNullVector(i);\r\n this._tangents[i] = alignTangentsWithPath ? cur : prev.add(cur);\r\n this._tangents[i].normalize();\r\n }\r\n this._distances[i] = this._distances[i - 1] + this._curve[i].subtract(this._curve[i - 1]).length();\r\n\r\n // normals and binormals\r\n // http://www.cs.cmu.edu/afs/andrew/scs/cs/15-462/web/old/asst2camera.html\r\n curTang = this._tangents[i];\r\n prevBinor = this._binormals[i - 1];\r\n this._normals[i] = Vector3.Cross(prevBinor, curTang);\r\n if (!this._raw) {\r\n if (this._normals[i].length() === 0) {\r\n prevNor = this._normals[i - 1];\r\n this._normals[i] = prevNor.clone();\r\n } else {\r\n this._normals[i].normalize();\r\n }\r\n }\r\n this._binormals[i] = Vector3.Cross(curTang, this._normals[i]);\r\n if (!this._raw) {\r\n this._binormals[i].normalize();\r\n }\r\n }\r\n this._pointAtData.id = NaN;\r\n }\r\n\r\n // private function getFirstNonNullVector(index)\r\n // returns the first non null vector from index : curve[index + N].subtract(curve[index])\r\n private _getFirstNonNullVector(index: number): Vector3 {\r\n var i = 1;\r\n var nNVector: Vector3 = this._curve[index + i].subtract(this._curve[index]);\r\n while (nNVector.length() === 0 && index + i + 1 < this._curve.length) {\r\n i++;\r\n nNVector = this._curve[index + i].subtract(this._curve[index]);\r\n }\r\n return nNVector;\r\n }\r\n\r\n // private function getLastNonNullVector(index)\r\n // returns the last non null vector from index : curve[index].subtract(curve[index - N])\r\n private _getLastNonNullVector(index: number): Vector3 {\r\n var i = 1;\r\n var nLVector: Vector3 = this._curve[index].subtract(this._curve[index - i]);\r\n while (nLVector.length() === 0 && index > i + 1) {\r\n i++;\r\n nLVector = this._curve[index].subtract(this._curve[index - i]);\r\n }\r\n return nLVector;\r\n }\r\n\r\n // private function normalVector(v0, vt, va) :\r\n // returns an arbitrary point in the plane defined by the point v0 and the vector vt orthogonal to this plane\r\n // if va is passed, it returns the va projection on the plane orthogonal to vt at the point v0\r\n private _normalVector(vt: Vector3, va: Nullable<Vector3>): Vector3 {\r\n var normal0: Vector3;\r\n var tgl = vt.length();\r\n if (tgl === 0.0) {\r\n tgl = 1.0;\r\n }\r\n\r\n if (va === undefined || va === null) {\r\n var point: Vector3;\r\n if (!Scalar.WithinEpsilon(Math.abs(vt.y) / tgl, 1.0, Epsilon)) {\r\n // search for a point in the plane\r\n point = new Vector3(0.0, -1.0, 0.0);\r\n } else if (!Scalar.WithinEpsilon(Math.abs(vt.x) / tgl, 1.0, Epsilon)) {\r\n point = new Vector3(1.0, 0.0, 0.0);\r\n } else if (!Scalar.WithinEpsilon(Math.abs(vt.z) / tgl, 1.0, Epsilon)) {\r\n point = new Vector3(0.0, 0.0, 1.0);\r\n } else {\r\n point = Vector3.Zero();\r\n }\r\n normal0 = Vector3.Cross(vt, point);\r\n } else {\r\n normal0 = Vector3.Cross(vt, va);\r\n Vector3.CrossToRef(normal0, vt, normal0);\r\n }\r\n normal0.normalize();\r\n return normal0;\r\n }\r\n\r\n /**\r\n * Updates the point at data for an interpolated point along this curve\r\n * @param position the position of the point along this curve, from 0.0 to 1.0\r\n * @interpolateTNB wether to compute the interpolated tangent, normal and binormal\r\n * @returns the (updated) point at data\r\n */\r\n private _updatePointAtData(position: number, interpolateTNB: boolean = false) {\r\n // set an id for caching the result\r\n if (this._pointAtData.id === position) {\r\n if (!this._pointAtData.interpolateReady) {\r\n this._updateInterpolationMatrix();\r\n }\r\n return this._pointAtData;\r\n } else {\r\n this._pointAtData.id = position;\r\n }\r\n let curvePoints = this.getPoints();\r\n\r\n // clamp position between 0.0 and 1.0\r\n if (position <= 0.0) {\r\n return this._setPointAtData(0.0, 0.0, curvePoints[0], 0, interpolateTNB);\r\n } else if (position >= 1.0) {\r\n return this._setPointAtData(1.0, 1.0, curvePoints[curvePoints.length - 1], curvePoints.length - 1, interpolateTNB);\r\n }\r\n\r\n let previousPoint: Vector3 = curvePoints[0];\r\n let currentPoint: Vector3;\r\n let currentLength = 0.0;\r\n let targetLength = position * this.length();\r\n\r\n for (let i = 1; i < curvePoints.length; i++) {\r\n currentPoint = curvePoints[i];\r\n let distance = Vector3.Distance(previousPoint, currentPoint);\r\n currentLength += distance;\r\n if (currentLength === targetLength) {\r\n return this._setPointAtData(position, 1.0, currentPoint, i, interpolateTNB);\r\n } else if (currentLength > targetLength) {\r\n let toLength = currentLength - targetLength;\r\n let diff = toLength / distance;\r\n let dir = previousPoint.subtract(currentPoint);\r\n let point = currentPoint.add(dir.scaleInPlace(diff));\r\n return this._setPointAtData(position, 1 - diff, point, i - 1, interpolateTNB);\r\n }\r\n previousPoint = currentPoint;\r\n }\r\n return this._pointAtData;\r\n }\r\n\r\n /**\r\n * Updates the point at data from the specified parameters\r\n * @param position where along the path the interpolated point is, from 0.0 to 1.0\r\n * @param point the interpolated point\r\n * @param parentIndex the index of an existing curve point that is on, or else positionally the first behind, the interpolated point\r\n */\r\n private _setPointAtData(position: number, subPosition: number, point: Vector3, parentIndex: number, interpolateTNB: boolean) {\r\n this._pointAtData.point = point;\r\n this._pointAtData.position = position;\r\n this._pointAtData.subPosition = subPosition;\r\n this._pointAtData.previousPointArrayIndex = parentIndex;\r\n this._pointAtData.interpolateReady = interpolateTNB;\r\n\r\n if (interpolateTNB) {\r\n this._updateInterpolationMatrix();\r\n }\r\n return this._pointAtData;\r\n }\r\n\r\n /**\r\n * Updates the point at interpolation matrix for the tangents, normals and binormals\r\n */\r\n private _updateInterpolationMatrix() {\r\n this._pointAtData.interpolationMatrix = Matrix.Identity();\r\n let parentIndex = this._pointAtData.previousPointArrayIndex;\r\n\r\n if (parentIndex !== this._tangents.length - 1) {\r\n let index = parentIndex + 1;\r\n\r\n let tangentFrom = this._tangents[parentIndex].clone();\r\n let normalFrom = this._normals[parentIndex].clone();\r\n let binormalFrom = this._binormals[parentIndex].clone();\r\n\r\n let tangentTo = this._tangents[index].clone();\r\n let normalTo = this._normals[index].clone();\r\n let binormalTo = this._binormals[index].clone();\r\n\r\n let quatFrom = Quaternion.RotationQuaternionFromAxis(normalFrom, binormalFrom, tangentFrom);\r\n let quatTo = Quaternion.RotationQuaternionFromAxis(normalTo, binormalTo, tangentTo);\r\n let quatAt = Quaternion.Slerp(quatFrom, quatTo, this._pointAtData.subPosition);\r\n\r\n quatAt.toRotationMatrix(this._pointAtData.interpolationMatrix);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * A Curve3 object is a logical object, so not a mesh, to handle curves in the 3D geometric space.\r\n * A Curve3 is designed from a series of successive Vector3.\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_curve3\r\n */\r\nexport class Curve3 {\r\n private _points: Vector3[];\r\n private _length: number = 0.0;\r\n\r\n /**\r\n * Returns a Curve3 object along a Quadratic Bezier curve : https://doc.babylonjs.com/how_to/how_to_use_curve3#quadratic-bezier-curve\r\n * @param v0 (Vector3) the origin point of the Quadratic Bezier\r\n * @param v1 (Vector3) the control point\r\n * @param v2 (Vector3) the end point of the Quadratic Bezier\r\n * @param nbPoints (integer) the wanted number of points in the curve\r\n * @returns the created Curve3\r\n */\r\n public static CreateQuadraticBezier(v0: DeepImmutable<Vector3>, v1: DeepImmutable<Vector3>, v2: DeepImmutable<Vector3>, nbPoints: number): Curve3 {\r\n nbPoints = nbPoints > 2 ? nbPoints : 3;\r\n var bez = new Array<Vector3>();\r\n var equation = (t: number, val0: number, val1: number, val2: number) => {\r\n var res = (1.0 - t) * (1.0 - t) * val0 + 2.0 * t * (1.0 - t) * val1 + t * t * val2;\r\n return res;\r\n };\r\n for (var i = 0; i <= nbPoints; i++) {\r\n bez.push(new Vector3(equation(i / nbPoints, v0.x, v1.x, v2.x), equation(i / nbPoints, v0.y, v1.y, v2.y), equation(i / nbPoints, v0.z, v1.z, v2.z)));\r\n }\r\n return new Curve3(bez);\r\n }\r\n\r\n /**\r\n * Returns a Curve3 object along a Cubic Bezier curve : https://doc.babylonjs.com/how_to/how_to_use_curve3#cubic-bezier-curve\r\n * @param v0 (Vector3) the origin point of the Cubic Bezier\r\n * @param v1 (Vector3) the first control point\r\n * @param v2 (Vector3) the second control point\r\n * @param v3 (Vector3) the end point of the Cubic Bezier\r\n * @param nbPoints (integer) the wanted number of points in the curve\r\n * @returns the created Curve3\r\n */\r\n public static CreateCubicBezier(v0: DeepImmutable<Vector3>, v1: DeepImmutable<Vector3>, v2: DeepImmutable<Vector3>, v3: DeepImmutable<Vector3>, nbPoints: number): Curve3 {\r\n nbPoints = nbPoints > 3 ? nbPoints : 4;\r\n var bez = new Array<Vector3>();\r\n var equation = (t: number, val0: number, val1: number, val2: number, val3: number) => {\r\n var res = (1.0 - t) * (1.0 - t) * (1.0 - t) * val0 + 3.0 * t * (1.0 - t) * (1.0 - t) * val1 + 3.0 * t * t * (1.0 - t) * val2 + t * t * t * val3;\r\n return res;\r\n };\r\n for (var i = 0; i <= nbPoints; i++) {\r\n bez.push(new Vector3(equation(i / nbPoints, v0.x, v1.x, v2.x, v3.x), equation(i / nbPoints, v0.y, v1.y, v2.y, v3.y), equation(i / nbPoints, v0.z, v1.z, v2.z, v3.z)));\r\n }\r\n return new Curve3(bez);\r\n }\r\n\r\n /**\r\n * Returns a Curve3 object along a Hermite Spline curve : https://doc.babylonjs.com/how_to/how_to_use_curve3#hermite-spline\r\n * @param p1 (Vector3) the origin point of the Hermite Spline\r\n * @param t1 (Vector3) the tangent vector at the origin point\r\n * @param p2 (Vector3) the end point of the Hermite Spline\r\n * @param t2 (Vector3) the tangent vector at the end point\r\n * @param nbPoints (integer) the wanted number of points in the curve\r\n * @returns the created Curve3\r\n */\r\n public static CreateHermiteSpline(p1: DeepImmutable<Vector3>, t1: DeepImmutable<Vector3>, p2: DeepImmutable<Vector3>, t2: DeepImmutable<Vector3>, nbPoints: number): Curve3 {\r\n var hermite = new Array<Vector3>();\r\n var step = 1.0 / nbPoints;\r\n for (var i = 0; i <= nbPoints; i++) {\r\n hermite.push(Vector3.Hermite(p1, t1, p2, t2, i * step));\r\n }\r\n return new Curve3(hermite);\r\n }\r\n\r\n /**\r\n * Returns a Curve3 object along a CatmullRom Spline curve :\r\n * @param points (array of Vector3) the points the spline must pass through. At least, four points required\r\n * @param nbPoints (integer) the wanted number of points between each curve control points\r\n * @param closed (boolean) optional with default false, when true forms a closed loop from the points\r\n * @returns the created Curve3\r\n */\r\n public static CreateCatmullRomSpline(points: DeepImmutable<Vector3[]>, nbPoints: number, closed?: boolean): Curve3 {\r\n var catmullRom = new Array<Vector3>();\r\n var step = 1.0 / nbPoints;\r\n var amount = 0.0;\r\n if (closed) {\r\n var pointsCount = points.length;\r\n for (var i = 0; i < pointsCount; i++) {\r\n amount = 0;\r\n for (var c = 0; c < nbPoints; c++) {\r\n catmullRom.push(Vector3.CatmullRom(points[i % pointsCount], points[(i + 1) % pointsCount], points[(i + 2) % pointsCount], points[(i + 3) % pointsCount], amount));\r\n amount += step;\r\n }\r\n }\r\n catmullRom.push(catmullRom[0]);\r\n } else {\r\n var totalPoints = new Array<Vector3>();\r\n totalPoints.push(points[0].clone());\r\n Array.prototype.push.apply(totalPoints, points);\r\n totalPoints.push(points[points.length - 1].clone());\r\n for (var i = 0; i < totalPoints.length - 3; i++) {\r\n amount = 0;\r\n for (var c = 0; c < nbPoints; c++) {\r\n catmullRom.push(Vector3.CatmullRom(totalPoints[i], totalPoints[i + 1], totalPoints[i + 2], totalPoints[i + 3], amount));\r\n amount += step;\r\n }\r\n }\r\n i--;\r\n catmullRom.push(Vector3.CatmullRom(totalPoints[i], totalPoints[i + 1], totalPoints[i + 2], totalPoints[i + 3], amount));\r\n }\r\n return new Curve3(catmullRom);\r\n }\r\n\r\n /**\r\n * A Curve3 object is a logical object, so not a mesh, to handle curves in the 3D geometric space.\r\n * A Curve3 is designed from a series of successive Vector3.\r\n * Tuto : https://doc.babylonjs.com/how_to/how_to_use_curve3#curve3-object\r\n * @param points points which make up the curve\r\n */\r\n constructor(points: Vector3[]) {\r\n this._points = points;\r\n this._length = this._computeLength(points);\r\n }\r\n\r\n /**\r\n * @returns the Curve3 stored array of successive Vector3\r\n */\r\n public getPoints() {\r\n return this._points;\r\n }\r\n\r\n /**\r\n * @returns the computed length (float) of the curve.\r\n */\r\n public length() {\r\n return this._length;\r\n }\r\n\r\n /**\r\n * Returns a new instance of Curve3 object : var curve = curveA.continue(curveB);\r\n * This new Curve3 is built by translating and sticking the curveB at the end of the curveA.\r\n * curveA and curveB keep unchanged.\r\n * @param curve the curve to continue from this curve\r\n * @returns the newly constructed curve\r\n */\r\n public continue(curve: DeepImmutable<Curve3>): Curve3 {\r\n var lastPoint = this._points[this._points.length - 1];\r\n var continuedPoints = this._points.slice();\r\n var curvePoints = curve.getPoints();\r\n for (var i = 1; i < curvePoints.length; i++) {\r\n continuedPoints.push(curvePoints[i].subtract(curvePoints[0]).add(lastPoint));\r\n }\r\n var continuedCurve = new Curve3(continuedPoints);\r\n return continuedCurve;\r\n }\r\n\r\n private _computeLength(path: DeepImmutable<Vector3[]>): number {\r\n var l = 0;\r\n for (var i = 1; i < path.length; i++) {\r\n l += path[i].subtract(path[i - 1]).length();\r\n }\r\n return l;\r\n }\r\n}\r\n"]}
@@ -16,7 +16,7 @@ var Size = /** @class */ (function () {
16
16
  * @returns a string with the Size width and height
17
17
  */
18
18
  Size.prototype.toString = function () {
19
- return "{W: " + this.width + ", H: " + this.height + "}";
19
+ return "{W: ".concat(this.width, ", H: ").concat(this.height, "}");
20
20
  };
21
21
  /**
22
22
  * "Size"
@@ -1 +1 @@
1
- {"version":3,"file":"math.size.js","sourceRoot":"","sources":["../../../sourceES6/core/Maths/math.size.ts"],"names":[],"mappings":"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","sourcesContent":["\r\n/**\r\n * Interface for the size containing width and height\r\n */\r\nexport interface ISize {\r\n /**\r\n * Width\r\n */\r\n width: number;\r\n /**\r\n * Heighht\r\n */\r\n height: number;\r\n}\r\n\r\n/**\r\n * Size containing widht and height\r\n */\r\nexport class Size implements ISize {\r\n /**\r\n * Width\r\n */\r\n public width: number;\r\n /**\r\n * Height\r\n */\r\n public height: number;\r\n\r\n /**\r\n * Creates a Size object from the given width and height (floats).\r\n * @param width width of the new size\r\n * @param height height of the new size\r\n */\r\n public constructor(width: number, height: number) {\r\n this.width = width;\r\n this.height = height;\r\n }\r\n\r\n /**\r\n * Returns a string with the Size width and height\r\n * @returns a string with the Size width and height\r\n */\r\n public toString(): string {\r\n return `{W: ${this.width}, H: ${this.height}}`;\r\n }\r\n /**\r\n * \"Size\"\r\n * @returns the string \"Size\"\r\n */\r\n public getClassName(): string {\r\n return \"Size\";\r\n }\r\n /**\r\n * Returns the Size hash code.\r\n * @returns a hash code for a unique width and height\r\n */\r\n public getHashCode(): number {\r\n let hash = this.width | 0;\r\n hash = (hash * 397) ^ (this.height | 0);\r\n return hash;\r\n }\r\n /**\r\n * Updates the current size from the given one.\r\n * @param src the given size\r\n */\r\n public copyFrom(src: Size) {\r\n this.width = src.width;\r\n this.height = src.height;\r\n }\r\n /**\r\n * Updates in place the current Size from the given floats.\r\n * @param width width of the new size\r\n * @param height height of the new size\r\n * @returns the updated Size.\r\n */\r\n public copyFromFloats(width: number, height: number): Size {\r\n this.width = width;\r\n this.height = height;\r\n return this;\r\n }\r\n /**\r\n * Updates in place the current Size from the given floats.\r\n * @param width width to set\r\n * @param height height to set\r\n * @returns the updated Size.\r\n */\r\n public set(width: number, height: number): Size {\r\n return this.copyFromFloats(width, height);\r\n }\r\n /**\r\n * Multiplies the width and height by numbers\r\n * @param w factor to multiple the width by\r\n * @param h factor to multiple the height by\r\n * @returns a new Size set with the multiplication result of the current Size and the given floats.\r\n */\r\n public multiplyByFloats(w: number, h: number): Size {\r\n return new Size(this.width * w, this.height * h);\r\n }\r\n /**\r\n * Clones the size\r\n * @returns a new Size copied from the given one.\r\n */\r\n public clone(): Size {\r\n return new Size(this.width, this.height);\r\n }\r\n /**\r\n * True if the current Size and the given one width and height are strictly equal.\r\n * @param other the other size to compare against\r\n * @returns True if the current Size and the given one width and height are strictly equal.\r\n */\r\n public equals(other: Size): boolean {\r\n if (!other) {\r\n return false;\r\n }\r\n return (this.width === other.width) && (this.height === other.height);\r\n }\r\n /**\r\n * The surface of the Size : width * height (float).\r\n */\r\n public get surface(): number {\r\n return this.width * this.height;\r\n }\r\n /**\r\n * Create a new size of zero\r\n * @returns a new Size set to (0.0, 0.0)\r\n */\r\n public static Zero(): Size {\r\n return new Size(0.0, 0.0);\r\n }\r\n /**\r\n * Sums the width and height of two sizes\r\n * @param otherSize size to add to this size\r\n * @returns a new Size set as the addition result of the current Size and the given one.\r\n */\r\n public add(otherSize: Size): Size {\r\n let r = new Size(this.width + otherSize.width, this.height + otherSize.height);\r\n return r;\r\n }\r\n /**\r\n * Subtracts the width and height of two\r\n * @param otherSize size to subtract to this size\r\n * @returns a new Size set as the subtraction result of the given one from the current Size.\r\n */\r\n public subtract(otherSize: Size): Size {\r\n let r = new Size(this.width - otherSize.width, this.height - otherSize.height);\r\n return r;\r\n }\r\n /**\r\n * Creates a new Size set at the linear interpolation \"amount\" between \"start\" and \"end\"\r\n * @param start starting size to lerp between\r\n * @param end end size to lerp between\r\n * @param amount amount to lerp between the start and end values\r\n * @returns a new Size set at the linear interpolation \"amount\" between \"start\" and \"end\"\r\n */\r\n public static Lerp(start: Size, end: Size, amount: number): Size {\r\n var w = start.width + ((end.width - start.width) * amount);\r\n var h = start.height + ((end.height - start.height) * amount);\r\n\r\n return new Size(w, h);\r\n }\r\n\r\n}"]}
1
+ {"version":3,"file":"math.size.js","sourceRoot":"","sources":["../../../sourceES6/core/Maths/math.size.ts"],"names":[],"mappings":"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","sourcesContent":["\r\n/**\r\n * Interface for the size containing width and height\r\n */\r\nexport interface ISize {\r\n /**\r\n * Width\r\n */\r\n width: number;\r\n /**\r\n * Heighht\r\n */\r\n height: number;\r\n}\r\n\r\n/**\r\n * Size containing widht and height\r\n */\r\nexport class Size implements ISize {\r\n /**\r\n * Width\r\n */\r\n public width: number;\r\n /**\r\n * Height\r\n */\r\n public height: number;\r\n\r\n /**\r\n * Creates a Size object from the given width and height (floats).\r\n * @param width width of the new size\r\n * @param height height of the new size\r\n */\r\n public constructor(width: number, height: number) {\r\n this.width = width;\r\n this.height = height;\r\n }\r\n\r\n /**\r\n * Returns a string with the Size width and height\r\n * @returns a string with the Size width and height\r\n */\r\n public toString(): string {\r\n return `{W: ${this.width}, H: ${this.height}}`;\r\n }\r\n /**\r\n * \"Size\"\r\n * @returns the string \"Size\"\r\n */\r\n public getClassName(): string {\r\n return \"Size\";\r\n }\r\n /**\r\n * Returns the Size hash code.\r\n * @returns a hash code for a unique width and height\r\n */\r\n public getHashCode(): number {\r\n let hash = this.width | 0;\r\n hash = (hash * 397) ^ (this.height | 0);\r\n return hash;\r\n }\r\n /**\r\n * Updates the current size from the given one.\r\n * @param src the given size\r\n */\r\n public copyFrom(src: Size) {\r\n this.width = src.width;\r\n this.height = src.height;\r\n }\r\n /**\r\n * Updates in place the current Size from the given floats.\r\n * @param width width of the new size\r\n * @param height height of the new size\r\n * @returns the updated Size.\r\n */\r\n public copyFromFloats(width: number, height: number): Size {\r\n this.width = width;\r\n this.height = height;\r\n return this;\r\n }\r\n /**\r\n * Updates in place the current Size from the given floats.\r\n * @param width width to set\r\n * @param height height to set\r\n * @returns the updated Size.\r\n */\r\n public set(width: number, height: number): Size {\r\n return this.copyFromFloats(width, height);\r\n }\r\n /**\r\n * Multiplies the width and height by numbers\r\n * @param w factor to multiple the width by\r\n * @param h factor to multiple the height by\r\n * @returns a new Size set with the multiplication result of the current Size and the given floats.\r\n */\r\n public multiplyByFloats(w: number, h: number): Size {\r\n return new Size(this.width * w, this.height * h);\r\n }\r\n /**\r\n * Clones the size\r\n * @returns a new Size copied from the given one.\r\n */\r\n public clone(): Size {\r\n return new Size(this.width, this.height);\r\n }\r\n /**\r\n * True if the current Size and the given one width and height are strictly equal.\r\n * @param other the other size to compare against\r\n * @returns True if the current Size and the given one width and height are strictly equal.\r\n */\r\n public equals(other: Size): boolean {\r\n if (!other) {\r\n return false;\r\n }\r\n return (this.width === other.width) && (this.height === other.height);\r\n }\r\n /**\r\n * The surface of the Size : width * height (float).\r\n */\r\n public get surface(): number {\r\n return this.width * this.height;\r\n }\r\n /**\r\n * Create a new size of zero\r\n * @returns a new Size set to (0.0, 0.0)\r\n */\r\n public static Zero(): Size {\r\n return new Size(0.0, 0.0);\r\n }\r\n /**\r\n * Sums the width and height of two sizes\r\n * @param otherSize size to add to this size\r\n * @returns a new Size set as the addition result of the current Size and the given one.\r\n */\r\n public add(otherSize: Size): Size {\r\n let r = new Size(this.width + otherSize.width, this.height + otherSize.height);\r\n return r;\r\n }\r\n /**\r\n * Subtracts the width and height of two\r\n * @param otherSize size to subtract to this size\r\n * @returns a new Size set as the subtraction result of the given one from the current Size.\r\n */\r\n public subtract(otherSize: Size): Size {\r\n let r = new Size(this.width - otherSize.width, this.height - otherSize.height);\r\n return r;\r\n }\r\n /**\r\n * Creates a new Size set at the linear interpolation \"amount\" between \"start\" and \"end\"\r\n * @param start starting size to lerp between\r\n * @param end end size to lerp between\r\n * @param amount amount to lerp between the start and end values\r\n * @returns a new Size set at the linear interpolation \"amount\" between \"start\" and \"end\"\r\n */\r\n public static Lerp(start: Size, end: Size, amount: number): Size {\r\n var w = start.width + ((end.width - start.width) * amount);\r\n var h = start.height + ((end.height - start.height) * amount);\r\n\r\n return new Size(w, h);\r\n }\r\n\r\n}"]}
@@ -445,6 +445,7 @@ export declare class Vector3 {
445
445
  private static _LeftHandedForwardReadOnly;
446
446
  private static _RightHandedForwardReadOnly;
447
447
  private static _RightReadOnly;
448
+ private static _LeftReadOnly;
448
449
  private static _ZeroReadOnly;
449
450
  /** @hidden */
450
451
  _x: number;
@@ -942,6 +943,10 @@ export declare class Vector3 {
942
943
  * Gets a right Vector3 that must not be updated
943
944
  */
944
945
  static get RightReadOnly(): DeepImmutable<Vector3>;
946
+ /**
947
+ * Gets a left Vector3 that must not be updated
948
+ */
949
+ static get LeftReadOnly(): DeepImmutable<Vector3>;
945
950
  /**
946
951
  * Gets a forward Vector3 that must not be updated
947
952
  */
@@ -1282,6 +1287,7 @@ export declare class Vector3 {
1282
1287
  * @param axis2 defines the second axis
1283
1288
  * @param axis3 defines the third axis
1284
1289
  * @returns a new Vector3
1290
+ * @see https://doc.babylonjs.com/divingDeeper/mesh/transforms/center_origin/target_align
1285
1291
  */
1286
1292
  static RotationFromAxis(axis1: DeepImmutable<Vector3>, axis2: DeepImmutable<Vector3>, axis3: DeepImmutable<Vector3>): Vector3;
1287
1293
  /**
@@ -2258,8 +2264,10 @@ export declare class Matrix {
2258
2264
  * Gets the internal data of the matrix
2259
2265
  */
2260
2266
  get m(): DeepImmutable<Float32Array | Array<number>>;
2261
- /** @hidden */
2262
- _markAsUpdated(): void;
2267
+ /**
2268
+ * Update the updateFlag to indicate that the matrix has been updated
2269
+ */
2270
+ markAsUpdated(): void;
2263
2271
  private _updateIdentityStatus;
2264
2272
  /**
2265
2273
  * Creates an empty matrix (filled with zeros)