@babylonjs/core 9.4.1 → 9.5.1

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 (185) hide show
  1. package/Cameras/Inputs/freeCameraTouchInput.js +5 -3
  2. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  3. package/Cameras/Inputs/freeCameraVirtualJoystickInput.js +11 -7
  4. package/Cameras/Inputs/freeCameraVirtualJoystickInput.js.map +1 -1
  5. package/Cameras/arcRotateCamera.js +2 -1
  6. package/Cameras/arcRotateCamera.js.map +1 -1
  7. package/Cameras/camera.js +1 -0
  8. package/Cameras/camera.js.map +1 -1
  9. package/Cameras/followCamera.js +1 -1
  10. package/Cameras/followCamera.js.map +1 -1
  11. package/Collisions/gpuPicker.d.ts +12 -0
  12. package/Collisions/gpuPicker.js +51 -0
  13. package/Collisions/gpuPicker.js.map +1 -1
  14. package/Compute/computeEffect.js +2 -2
  15. package/Compute/computeEffect.js.map +1 -1
  16. package/Culling/ray.core.js +46 -2
  17. package/Culling/ray.core.js.map +1 -1
  18. package/Debug/debugLayer.js +1 -1
  19. package/Debug/debugLayer.js.map +1 -1
  20. package/Engines/Native/nativeHelpers.js +26 -0
  21. package/Engines/Native/nativeHelpers.js.map +1 -1
  22. package/Engines/WebGPU/webgpuTextureHelper.js +26 -0
  23. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  24. package/Engines/abstractEngine.js +2 -2
  25. package/Engines/abstractEngine.js.map +1 -1
  26. package/Engines/constants.d.ts +52 -0
  27. package/Engines/constants.js +52 -0
  28. package/Engines/constants.js.map +1 -1
  29. package/Engines/engine.d.ts +13 -0
  30. package/Engines/thinEngine.js +52 -0
  31. package/Engines/thinEngine.js.map +1 -1
  32. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js +10 -3
  33. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js.map +1 -1
  34. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.d.ts +1 -0
  35. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js +36 -3
  36. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js.map +1 -1
  37. package/FlowGraph/flowGraphEventBlock.d.ts +13 -0
  38. package/FlowGraph/flowGraphEventBlock.js +21 -2
  39. package/FlowGraph/flowGraphEventBlock.js.map +1 -1
  40. package/FrameGraph/Node/nodeRenderGraph.js +11 -3
  41. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  42. package/FrameGraph/frameGraphTextureManager.js +26 -0
  43. package/FrameGraph/frameGraphTextureManager.js.map +1 -1
  44. package/Layers/layer.js +5 -1
  45. package/Layers/layer.js.map +1 -1
  46. package/LensFlares/lensFlareSystem.js +1 -0
  47. package/LensFlares/lensFlareSystem.js.map +1 -1
  48. package/Lights/Clustered/clusteredLightContainer.js +19 -1
  49. package/Lights/Clustered/clusteredLightContainer.js.map +1 -1
  50. package/Lights/light.d.ts +5 -0
  51. package/Lights/light.js +18 -2
  52. package/Lights/light.js.map +1 -1
  53. package/Loading/Plugins/babylonFileLoader.js +14 -0
  54. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  55. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.d.ts +1 -0
  56. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.js +6 -3
  57. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.js.map +1 -1
  58. package/Materials/GaussianSplatting/gaussianSplattingMaterial.d.ts +2 -0
  59. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +10 -3
  60. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  61. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.d.ts +2 -1
  62. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.js +10 -4
  63. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.js.map +1 -1
  64. package/Materials/Node/nodeMaterial.js +10 -2
  65. package/Materials/Node/nodeMaterial.js.map +1 -1
  66. package/Materials/PBR/openpbrMaterial.d.ts +42 -0
  67. package/Materials/PBR/openpbrMaterial.js +108 -13
  68. package/Materials/PBR/openpbrMaterial.js.map +1 -1
  69. package/Materials/Textures/Loaders/ktxTextureLoader.js +26 -0
  70. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  71. package/Materials/Textures/envCubeTexture.js +33 -15
  72. package/Materials/Textures/envCubeTexture.js.map +1 -1
  73. package/Materials/effect.functions.js +4 -4
  74. package/Materials/effect.functions.js.map +1 -1
  75. package/Materials/material.d.ts +16 -1
  76. package/Materials/material.js +16 -1
  77. package/Materials/material.js.map +1 -1
  78. package/Materials/standardMaterial.js +4 -2
  79. package/Materials/standardMaterial.js.map +1 -1
  80. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +1 -1
  81. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +16 -18
  82. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  83. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.d.ts +24 -0
  84. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.js +93 -18
  85. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.js.map +1 -1
  86. package/Meshes/Node/nodeGeometry.js +10 -2
  87. package/Meshes/Node/nodeGeometry.js.map +1 -1
  88. package/Meshes/abstractMesh.js +1 -0
  89. package/Meshes/abstractMesh.js.map +1 -1
  90. package/Meshes/mesh.js +3 -0
  91. package/Meshes/mesh.js.map +1 -1
  92. package/Meshes/transformNode.d.ts +6 -0
  93. package/Meshes/transformNode.js +6 -0
  94. package/Meshes/transformNode.js.map +1 -1
  95. package/Misc/brdfTextureTools.d.ts +12 -0
  96. package/Misc/brdfTextureTools.js +22 -0
  97. package/Misc/brdfTextureTools.js.map +1 -1
  98. package/Misc/depthReducer.js +1 -1
  99. package/Misc/depthReducer.js.map +1 -1
  100. package/Misc/snapshotRenderingHelper.d.ts +29 -2
  101. package/Misc/snapshotRenderingHelper.js +108 -1
  102. package/Misc/snapshotRenderingHelper.js.map +1 -1
  103. package/Misc/textureTools.js +26 -0
  104. package/Misc/textureTools.js.map +1 -1
  105. package/Misc/tools.js +1 -1
  106. package/Misc/tools.js.map +1 -1
  107. package/Particles/Node/Blocks/Update/updateFlowMapBlock.js +17 -10
  108. package/Particles/Node/Blocks/Update/updateFlowMapBlock.js.map +1 -1
  109. package/Particles/Node/Blocks/Update/updateNoiseBlock.js +14 -0
  110. package/Particles/Node/Blocks/Update/updateNoiseBlock.js.map +1 -1
  111. package/Particles/Node/Blocks/particleSourceTextureBlock.js +114 -12
  112. package/Particles/Node/Blocks/particleSourceTextureBlock.js.map +1 -1
  113. package/Particles/Node/nodeParticleBuildState.d.ts +11 -0
  114. package/Particles/Node/nodeParticleBuildState.js +15 -0
  115. package/Particles/Node/nodeParticleBuildState.js.map +1 -1
  116. package/Particles/Node/nodeParticleSystemSet.js +33 -24
  117. package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
  118. package/Particles/gpuParticleSystem.js +1 -0
  119. package/Particles/gpuParticleSystem.js.map +1 -1
  120. package/Particles/thinParticleSystem.d.ts +13 -0
  121. package/Particles/thinParticleSystem.js +42 -6
  122. package/Particles/thinParticleSystem.js.map +1 -1
  123. package/PostProcesses/postProcessManager.d.ts +2 -0
  124. package/PostProcesses/postProcessManager.js +14 -8
  125. package/PostProcesses/postProcessManager.js.map +1 -1
  126. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +12 -9
  127. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
  128. package/Rendering/depthRendererSceneComponent.js +6 -6
  129. package/Rendering/depthRendererSceneComponent.js.map +1 -1
  130. package/Rendering/iblCdfGeneratorSceneComponent.d.ts +6 -0
  131. package/Rendering/iblCdfGeneratorSceneComponent.js +16 -0
  132. package/Rendering/iblCdfGeneratorSceneComponent.js.map +1 -1
  133. package/Rendering/prePassRenderer.d.ts +4 -1
  134. package/Rendering/prePassRenderer.js +31 -9
  135. package/Rendering/prePassRenderer.js.map +1 -1
  136. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +1 -1
  137. package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  138. package/Shaders/ShadersInclude/openpbrBackgroundTransmission.js +20 -7
  139. package/Shaders/ShadersInclude/openpbrBackgroundTransmission.js.map +1 -1
  140. package/Shaders/ShadersInclude/openpbrDirectLighting.js +20 -12
  141. package/Shaders/ShadersInclude/openpbrDirectLighting.js.map +1 -1
  142. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +44 -16
  143. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  144. package/Shaders/ShadersInclude/openpbrFragmentDeclaration.js +4 -1
  145. package/Shaders/ShadersInclude/openpbrFragmentDeclaration.js.map +1 -1
  146. package/Shaders/ShadersInclude/openpbrIblFunctions.js +8 -5
  147. package/Shaders/ShadersInclude/openpbrIblFunctions.js.map +1 -1
  148. package/Shaders/ShadersInclude/openpbrNormalMapFragment.js +2 -0
  149. package/Shaders/ShadersInclude/openpbrNormalMapFragment.js.map +1 -1
  150. package/Shaders/ShadersInclude/openpbrVolumeFunctions.js +1 -1
  151. package/Shaders/ShadersInclude/openpbrVolumeFunctions.js.map +1 -1
  152. package/Shaders/ShadersInclude/pbrBRDFFunctions.js +12 -7
  153. package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  154. package/Shaders/openpbr.fragment.js +14 -15
  155. package/Shaders/openpbr.fragment.js.map +1 -1
  156. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +1 -1
  157. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  158. package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js +20 -7
  159. package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js.map +1 -1
  160. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js +21 -13
  161. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js.map +1 -1
  162. package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js +3 -3
  163. package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js.map +1 -1
  164. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +44 -16
  165. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  166. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js +5 -3
  167. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js.map +1 -1
  168. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragment.js +2 -0
  169. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragment.js.map +1 -1
  170. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragmentMainFunctions.js +1 -1
  171. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragmentMainFunctions.js.map +1 -1
  172. package/ShadersWGSL/ShadersInclude/openpbrVolumeFunctions.js +1 -1
  173. package/ShadersWGSL/ShadersInclude/openpbrVolumeFunctions.js.map +1 -1
  174. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js +10 -10
  175. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  176. package/ShadersWGSL/ShadersInclude/shadowsVertex.js +4 -0
  177. package/ShadersWGSL/ShadersInclude/shadowsVertex.js.map +1 -1
  178. package/ShadersWGSL/openpbr.fragment.js +16 -17
  179. package/ShadersWGSL/openpbr.fragment.js.map +1 -1
  180. package/Sprites/spriteManager.js +1 -0
  181. package/Sprites/spriteManager.js.map +1 -1
  182. package/package.json +1 -1
  183. package/scene.d.ts +16 -0
  184. package/scene.js +13 -0
  185. package/scene.js.map +1 -1
@@ -2,7 +2,7 @@ import { __decorate } from "../../tslib.es6.js";
2
2
  import { serialize } from "../../Misc/decorators.js";
3
3
  import { CameraInputTypes } from "../../Cameras/cameraInputsManager.js";
4
4
  import { PointerEventTypes } from "../../Events/pointerEvents.js";
5
- import { Matrix, Vector3 } from "../../Maths/math.vector.js";
5
+ import { Matrix, TmpVectors, Vector3 } from "../../Maths/math.vector.js";
6
6
  import { Tools } from "../../Misc/tools.js";
7
7
  /**
8
8
  * Manage the touch inputs to control the movement of a free camera.
@@ -155,9 +155,11 @@ export class FreeCameraTouchInput {
155
155
  }
156
156
  else {
157
157
  const speed = camera._computeLocalCameraSpeed();
158
- const direction = new Vector3(0, 0, this.touchMoveSensibility !== 0 ? (speed * this._offsetY) / this.touchMoveSensibility : 0);
158
+ const direction = TmpVectors.Vector3[0];
159
+ direction.copyFromFloats(0, 0, this.touchMoveSensibility !== 0 ? (speed * this._offsetY) / this.touchMoveSensibility : 0);
159
160
  Matrix.RotationYawPitchRollToRef(camera.rotation.y, camera.rotation.x, 0, camera._cameraRotationMatrix);
160
- camera.cameraDirection.addInPlace(Vector3.TransformCoordinates(direction, camera._cameraRotationMatrix));
161
+ Vector3.TransformCoordinatesToRef(direction, camera._cameraRotationMatrix, direction);
162
+ camera.cameraDirection.addInPlace(direction);
161
163
  }
162
164
  }
163
165
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"freeCameraTouchInput.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Inputs/freeCameraTouchInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { serialize } from \"../../Misc/decorators\";\r\nimport { type Observer, type EventState } from \"../../Misc/observable\";\r\nimport { type Nullable } from \"../../types\";\r\nimport { type ICameraInput, CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport { type FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport { type PointerInfo, PointerEventTypes } from \"../../Events/pointerEvents\";\r\nimport { Matrix, Vector3 } from \"../../Maths/math.vector\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { type IPointerEvent } from \"../../Events/deviceInputEvents\";\r\n/**\r\n * Manage the touch inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs\r\n */\r\nexport class FreeCameraTouchInput implements ICameraInput<FreeCamera> {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: FreeCamera;\r\n\r\n /**\r\n * Defines the touch sensibility for rotation.\r\n * The lower the faster.\r\n */\r\n @serialize()\r\n public touchAngularSensibility: number = 200000.0;\r\n\r\n /**\r\n * Defines the touch sensibility for move.\r\n * The lower the faster.\r\n */\r\n @serialize()\r\n public touchMoveSensibility: number = 250.0;\r\n\r\n /**\r\n * Swap touch actions so that one touch is used for rotation and multiple for movement\r\n */\r\n public singleFingerRotate: boolean = false;\r\n\r\n private _offsetX: Nullable<number> = null;\r\n private _offsetY: Nullable<number> = null;\r\n\r\n private _pointerPressed = new Array<number>();\r\n private _pointerInput?: (p: PointerInfo, s: EventState) => void;\r\n private _observer: Nullable<Observer<PointerInfo>>;\r\n private _onLostFocus: Nullable<(e: FocusEvent) => any>;\r\n private _isSafari: boolean;\r\n\r\n /**\r\n * Manage the touch inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs\r\n * @param allowMouse Defines if mouse events can be treated as touch events\r\n */\r\n constructor(\r\n /**\r\n * [false] Define if mouse events can be treated as touch events\r\n */\r\n public allowMouse = false\r\n ) {\r\n this._isSafari = Tools.IsSafari();\r\n }\r\n\r\n /**\r\n * Attach the input controls to a specific dom element to get the input from.\r\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\r\n */\r\n public attachControl(noPreventDefault?: boolean): void {\r\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\r\n let previousPosition: Nullable<{ x: number; y: number }> = null;\r\n\r\n if (this._pointerInput === undefined) {\r\n this._onLostFocus = () => {\r\n this._offsetX = null;\r\n this._offsetY = null;\r\n };\r\n\r\n this._pointerInput = (p) => {\r\n const evt = <IPointerEvent>p.event;\r\n\r\n const isMouseEvent = evt.pointerType === \"mouse\" || (this._isSafari && typeof evt.pointerType === \"undefined\");\r\n\r\n if (!this.allowMouse && isMouseEvent) {\r\n return;\r\n }\r\n\r\n if (p.type === PointerEventTypes.POINTERDOWN) {\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n\r\n this._pointerPressed.push(evt.pointerId);\r\n\r\n if (this._pointerPressed.length !== 1) {\r\n return;\r\n }\r\n\r\n previousPosition = {\r\n x: evt.clientX,\r\n y: evt.clientY,\r\n };\r\n } else if (p.type === PointerEventTypes.POINTERUP) {\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n\r\n const index: number = this._pointerPressed.indexOf(evt.pointerId);\r\n\r\n if (index === -1) {\r\n return;\r\n }\r\n this._pointerPressed.splice(index, 1);\r\n\r\n if (index != 0) {\r\n return;\r\n }\r\n previousPosition = null;\r\n this._offsetX = null;\r\n this._offsetY = null;\r\n } else if (p.type === PointerEventTypes.POINTERMOVE) {\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n\r\n if (!previousPosition) {\r\n return;\r\n }\r\n\r\n const index: number = this._pointerPressed.indexOf(evt.pointerId);\r\n\r\n if (index != 0) {\r\n return;\r\n }\r\n\r\n this._offsetX = evt.clientX - previousPosition.x;\r\n this._offsetY = -(evt.clientY - previousPosition.y);\r\n }\r\n };\r\n }\r\n\r\n this._observer = this.camera\r\n .getScene()\r\n ._inputManager._addCameraPointerObserver(this._pointerInput, PointerEventTypes.POINTERDOWN | PointerEventTypes.POINTERUP | PointerEventTypes.POINTERMOVE);\r\n\r\n if (this._onLostFocus) {\r\n const engine = this.camera.getEngine();\r\n const element = engine.getInputElement();\r\n if (element) {\r\n element.addEventListener(\"blur\", this._onLostFocus);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Detach the current controls from the specified dom element.\r\n */\r\n public detachControl(): void {\r\n if (this._pointerInput) {\r\n if (this._observer) {\r\n this.camera.getScene()._inputManager._removeCameraPointerObserver(this._observer);\r\n this._observer = null;\r\n }\r\n\r\n if (this._onLostFocus) {\r\n const engine = this.camera.getEngine();\r\n const element = engine.getInputElement();\r\n if (element) {\r\n element.removeEventListener(\"blur\", this._onLostFocus);\r\n }\r\n\r\n this._onLostFocus = null;\r\n }\r\n this._pointerPressed.length = 0;\r\n this._offsetX = null;\r\n this._offsetY = null;\r\n }\r\n }\r\n\r\n /**\r\n * Update the current camera state depending on the inputs that have been used this frame.\r\n * This is a dynamically created lambda to avoid the performance penalty of looping for inputs in the render loop.\r\n */\r\n public checkInputs(): void {\r\n if (this._offsetX === null || this._offsetY === null) {\r\n return;\r\n }\r\n if (this._offsetX === 0 && this._offsetY === 0) {\r\n return;\r\n }\r\n\r\n const camera = this.camera;\r\n const handednessMultiplier = camera._calculateHandednessMultiplier();\r\n camera.cameraRotation.y = (this._offsetX * handednessMultiplier) / this.touchAngularSensibility;\r\n\r\n const rotateCamera = (this.singleFingerRotate && this._pointerPressed.length === 1) || (!this.singleFingerRotate && this._pointerPressed.length > 1);\r\n\r\n if (rotateCamera) {\r\n camera.cameraRotation.x = -(this._offsetY * handednessMultiplier) / this.touchAngularSensibility;\r\n } else {\r\n const speed = camera._computeLocalCameraSpeed();\r\n const direction = new Vector3(0, 0, this.touchMoveSensibility !== 0 ? (speed * this._offsetY) / this.touchMoveSensibility : 0);\r\n\r\n Matrix.RotationYawPitchRollToRef(camera.rotation.y, camera.rotation.x, 0, camera._cameraRotationMatrix);\r\n camera.cameraDirection.addInPlace(Vector3.TransformCoordinates(direction, camera._cameraRotationMatrix));\r\n }\r\n }\r\n\r\n /**\r\n * Gets the class name of the current input.\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"FreeCameraTouchInput\";\r\n }\r\n\r\n /**\r\n * Get the friendly name associated with the input class.\r\n * @returns the input friendly name\r\n */\r\n public getSimpleName(): string {\r\n return \"touch\";\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"FreeCameraTouchInput\"] = FreeCameraTouchInput;\r\n"]}
1
+ {"version":3,"file":"freeCameraTouchInput.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Inputs/freeCameraTouchInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { serialize } from \"../../Misc/decorators\";\r\nimport { type Observer, type EventState } from \"../../Misc/observable\";\r\nimport { type Nullable } from \"../../types\";\r\nimport { type ICameraInput, CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport { type FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport { type PointerInfo, PointerEventTypes } from \"../../Events/pointerEvents\";\r\nimport { Matrix, TmpVectors, Vector3 } from \"../../Maths/math.vector\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { type IPointerEvent } from \"../../Events/deviceInputEvents\";\r\n/**\r\n * Manage the touch inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs\r\n */\r\nexport class FreeCameraTouchInput implements ICameraInput<FreeCamera> {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: FreeCamera;\r\n\r\n /**\r\n * Defines the touch sensibility for rotation.\r\n * The lower the faster.\r\n */\r\n @serialize()\r\n public touchAngularSensibility: number = 200000.0;\r\n\r\n /**\r\n * Defines the touch sensibility for move.\r\n * The lower the faster.\r\n */\r\n @serialize()\r\n public touchMoveSensibility: number = 250.0;\r\n\r\n /**\r\n * Swap touch actions so that one touch is used for rotation and multiple for movement\r\n */\r\n public singleFingerRotate: boolean = false;\r\n\r\n private _offsetX: Nullable<number> = null;\r\n private _offsetY: Nullable<number> = null;\r\n\r\n private _pointerPressed = new Array<number>();\r\n private _pointerInput?: (p: PointerInfo, s: EventState) => void;\r\n private _observer: Nullable<Observer<PointerInfo>>;\r\n private _onLostFocus: Nullable<(e: FocusEvent) => any>;\r\n private _isSafari: boolean;\r\n\r\n /**\r\n * Manage the touch inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs\r\n * @param allowMouse Defines if mouse events can be treated as touch events\r\n */\r\n constructor(\r\n /**\r\n * [false] Define if mouse events can be treated as touch events\r\n */\r\n public allowMouse = false\r\n ) {\r\n this._isSafari = Tools.IsSafari();\r\n }\r\n\r\n /**\r\n * Attach the input controls to a specific dom element to get the input from.\r\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\r\n */\r\n public attachControl(noPreventDefault?: boolean): void {\r\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\r\n let previousPosition: Nullable<{ x: number; y: number }> = null;\r\n\r\n if (this._pointerInput === undefined) {\r\n this._onLostFocus = () => {\r\n this._offsetX = null;\r\n this._offsetY = null;\r\n };\r\n\r\n this._pointerInput = (p) => {\r\n const evt = <IPointerEvent>p.event;\r\n\r\n const isMouseEvent = evt.pointerType === \"mouse\" || (this._isSafari && typeof evt.pointerType === \"undefined\");\r\n\r\n if (!this.allowMouse && isMouseEvent) {\r\n return;\r\n }\r\n\r\n if (p.type === PointerEventTypes.POINTERDOWN) {\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n\r\n this._pointerPressed.push(evt.pointerId);\r\n\r\n if (this._pointerPressed.length !== 1) {\r\n return;\r\n }\r\n\r\n previousPosition = {\r\n x: evt.clientX,\r\n y: evt.clientY,\r\n };\r\n } else if (p.type === PointerEventTypes.POINTERUP) {\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n\r\n const index: number = this._pointerPressed.indexOf(evt.pointerId);\r\n\r\n if (index === -1) {\r\n return;\r\n }\r\n this._pointerPressed.splice(index, 1);\r\n\r\n if (index != 0) {\r\n return;\r\n }\r\n previousPosition = null;\r\n this._offsetX = null;\r\n this._offsetY = null;\r\n } else if (p.type === PointerEventTypes.POINTERMOVE) {\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n\r\n if (!previousPosition) {\r\n return;\r\n }\r\n\r\n const index: number = this._pointerPressed.indexOf(evt.pointerId);\r\n\r\n if (index != 0) {\r\n return;\r\n }\r\n\r\n this._offsetX = evt.clientX - previousPosition.x;\r\n this._offsetY = -(evt.clientY - previousPosition.y);\r\n }\r\n };\r\n }\r\n\r\n this._observer = this.camera\r\n .getScene()\r\n ._inputManager._addCameraPointerObserver(this._pointerInput, PointerEventTypes.POINTERDOWN | PointerEventTypes.POINTERUP | PointerEventTypes.POINTERMOVE);\r\n\r\n if (this._onLostFocus) {\r\n const engine = this.camera.getEngine();\r\n const element = engine.getInputElement();\r\n if (element) {\r\n element.addEventListener(\"blur\", this._onLostFocus);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Detach the current controls from the specified dom element.\r\n */\r\n public detachControl(): void {\r\n if (this._pointerInput) {\r\n if (this._observer) {\r\n this.camera.getScene()._inputManager._removeCameraPointerObserver(this._observer);\r\n this._observer = null;\r\n }\r\n\r\n if (this._onLostFocus) {\r\n const engine = this.camera.getEngine();\r\n const element = engine.getInputElement();\r\n if (element) {\r\n element.removeEventListener(\"blur\", this._onLostFocus);\r\n }\r\n\r\n this._onLostFocus = null;\r\n }\r\n this._pointerPressed.length = 0;\r\n this._offsetX = null;\r\n this._offsetY = null;\r\n }\r\n }\r\n\r\n /**\r\n * Update the current camera state depending on the inputs that have been used this frame.\r\n * This is a dynamically created lambda to avoid the performance penalty of looping for inputs in the render loop.\r\n */\r\n public checkInputs(): void {\r\n if (this._offsetX === null || this._offsetY === null) {\r\n return;\r\n }\r\n if (this._offsetX === 0 && this._offsetY === 0) {\r\n return;\r\n }\r\n\r\n const camera = this.camera;\r\n const handednessMultiplier = camera._calculateHandednessMultiplier();\r\n camera.cameraRotation.y = (this._offsetX * handednessMultiplier) / this.touchAngularSensibility;\r\n\r\n const rotateCamera = (this.singleFingerRotate && this._pointerPressed.length === 1) || (!this.singleFingerRotate && this._pointerPressed.length > 1);\r\n\r\n if (rotateCamera) {\r\n camera.cameraRotation.x = -(this._offsetY * handednessMultiplier) / this.touchAngularSensibility;\r\n } else {\r\n const speed = camera._computeLocalCameraSpeed();\r\n const direction = TmpVectors.Vector3[0];\r\n direction.copyFromFloats(0, 0, this.touchMoveSensibility !== 0 ? (speed * this._offsetY) / this.touchMoveSensibility : 0);\r\n\r\n Matrix.RotationYawPitchRollToRef(camera.rotation.y, camera.rotation.x, 0, camera._cameraRotationMatrix);\r\n Vector3.TransformCoordinatesToRef(direction, camera._cameraRotationMatrix, direction);\r\n camera.cameraDirection.addInPlace(direction);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the class name of the current input.\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"FreeCameraTouchInput\";\r\n }\r\n\r\n /**\r\n * Get the friendly name associated with the input class.\r\n * @returns the input friendly name\r\n */\r\n public getSimpleName(): string {\r\n return \"touch\";\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"FreeCameraTouchInput\"] = FreeCameraTouchInput;\r\n"]}
@@ -1,6 +1,6 @@
1
1
  import { VirtualJoystick } from "../../Misc/virtualJoystick.js";
2
2
  import { CameraInputTypes } from "../../Cameras/cameraInputsManager.js";
3
- import { Matrix, Vector3 } from "../../Maths/math.vector.js";
3
+ import { Matrix, TmpVectors, Vector3 } from "../../Maths/math.vector.js";
4
4
  import { FreeCameraInputsManager } from "../../Cameras/freeCameraInputsManager.js";
5
5
  /**
6
6
  * Add virtual joystick input support to the input manager.
@@ -37,15 +37,19 @@ export class FreeCameraVirtualJoystickInput {
37
37
  if (this._leftjoystick) {
38
38
  const camera = this.camera;
39
39
  const speed = camera._computeLocalCameraSpeed() * 50;
40
- const cameraTransform = Matrix.RotationYawPitchRoll(camera.rotation.y, camera.rotation.x, 0);
41
- const deltaTransform = Vector3.TransformCoordinates(new Vector3(this._leftjoystick.deltaPosition.x * speed, this._leftjoystick.deltaPosition.y * speed, this._leftjoystick.deltaPosition.z * speed), cameraTransform);
42
- camera.cameraDirection = camera.cameraDirection.add(deltaTransform);
43
- camera.cameraRotation = camera.cameraRotation.addVector3(this._rightjoystick.deltaPosition);
40
+ const cameraTransform = TmpVectors.Matrix[0];
41
+ const deltaPosition = TmpVectors.Vector3[0];
42
+ const transformedDeltaPosition = TmpVectors.Vector3[1];
43
+ Matrix.RotationYawPitchRollToRef(camera.rotation.y, camera.rotation.x, 0, cameraTransform);
44
+ deltaPosition.copyFromFloats(this._leftjoystick.deltaPosition.x * speed, this._leftjoystick.deltaPosition.y * speed, this._leftjoystick.deltaPosition.z * speed);
45
+ Vector3.TransformCoordinatesToRef(deltaPosition, cameraTransform, transformedDeltaPosition);
46
+ camera.cameraDirection.addInPlace(transformedDeltaPosition);
47
+ camera.cameraRotation.addInPlaceFromFloats(this._rightjoystick.deltaPosition.x, this._rightjoystick.deltaPosition.y);
44
48
  if (!this._leftjoystick.pressed) {
45
- this._leftjoystick.deltaPosition = this._leftjoystick.deltaPosition.scale(0.9);
49
+ this._leftjoystick.deltaPosition.scaleInPlace(0.9);
46
50
  }
47
51
  if (!this._rightjoystick.pressed) {
48
- this._rightjoystick.deltaPosition = this._rightjoystick.deltaPosition.scale(0.9);
52
+ this._rightjoystick.deltaPosition.scaleInPlace(0.9);
49
53
  }
50
54
  }
51
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"freeCameraVirtualJoystickInput.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Inputs/freeCameraVirtualJoystickInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { VirtualJoystick, JoystickAxis } from \"../../Misc/virtualJoystick\";\r\nimport { type ICameraInput, CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport { type FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport { Matrix, Vector3 } from \"../../Maths/math.vector\";\r\nimport { FreeCameraInputsManager } from \"../../Cameras/freeCameraInputsManager\";\r\n\r\n// Module augmentation to abstract virtual joystick from camera.\r\ndeclare module \"../../Cameras/freeCameraInputsManager\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface FreeCameraInputsManager {\r\n /**\r\n * Add virtual joystick input support to the input manager.\r\n * @returns the current input manager\r\n */\r\n addVirtualJoystick(): FreeCameraInputsManager;\r\n }\r\n}\r\n\r\n/**\r\n * Add virtual joystick input support to the input manager.\r\n * @returns the current input manager\r\n */\r\nFreeCameraInputsManager.prototype.addVirtualJoystick = function (): FreeCameraInputsManager {\r\n this.add(new FreeCameraVirtualJoystickInput());\r\n return this;\r\n};\r\n\r\n/**\r\n * Manage the Virtual Joystick inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs\r\n */\r\nexport class FreeCameraVirtualJoystickInput implements ICameraInput<FreeCamera> {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: FreeCamera;\r\n\r\n private _leftjoystick: VirtualJoystick;\r\n private _rightjoystick: VirtualJoystick;\r\n\r\n /**\r\n * Gets the left stick of the virtual joystick.\r\n * @returns The virtual Joystick\r\n */\r\n public getLeftJoystick(): VirtualJoystick {\r\n return this._leftjoystick;\r\n }\r\n\r\n /**\r\n * Gets the right stick of the virtual joystick.\r\n * @returns The virtual Joystick\r\n */\r\n public getRightJoystick(): VirtualJoystick {\r\n return this._rightjoystick;\r\n }\r\n\r\n /**\r\n * Update the current camera state depending on the inputs that have been used this frame.\r\n * This is a dynamically created lambda to avoid the performance penalty of looping for inputs in the render loop.\r\n */\r\n public checkInputs() {\r\n if (this._leftjoystick) {\r\n const camera = this.camera;\r\n const speed = camera._computeLocalCameraSpeed() * 50;\r\n const cameraTransform = Matrix.RotationYawPitchRoll(camera.rotation.y, camera.rotation.x, 0);\r\n const deltaTransform = Vector3.TransformCoordinates(\r\n new Vector3(this._leftjoystick.deltaPosition.x * speed, this._leftjoystick.deltaPosition.y * speed, this._leftjoystick.deltaPosition.z * speed),\r\n cameraTransform\r\n );\r\n camera.cameraDirection = camera.cameraDirection.add(deltaTransform);\r\n camera.cameraRotation = camera.cameraRotation.addVector3(this._rightjoystick.deltaPosition);\r\n\r\n if (!this._leftjoystick.pressed) {\r\n this._leftjoystick.deltaPosition = this._leftjoystick.deltaPosition.scale(0.9);\r\n }\r\n if (!this._rightjoystick.pressed) {\r\n this._rightjoystick.deltaPosition = this._rightjoystick.deltaPosition.scale(0.9);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Attach the input controls to a specific dom element to get the input from.\r\n */\r\n public attachControl(): void {\r\n this._leftjoystick = new VirtualJoystick(true);\r\n this._leftjoystick.setAxisForUpDown(JoystickAxis.Z);\r\n this._leftjoystick.setAxisForLeftRight(JoystickAxis.X);\r\n this._leftjoystick.setJoystickSensibility(0.15);\r\n this._rightjoystick = new VirtualJoystick(false);\r\n this._rightjoystick.setAxisForUpDown(JoystickAxis.X);\r\n this._rightjoystick.setAxisForLeftRight(JoystickAxis.Y);\r\n this._rightjoystick.reverseUpDown = true;\r\n this._rightjoystick.setJoystickSensibility(0.05);\r\n this._rightjoystick.setJoystickColor(\"yellow\");\r\n }\r\n\r\n /**\r\n * Detach the current controls from the specified dom element.\r\n */\r\n public detachControl(): void {\r\n this._leftjoystick.releaseCanvas();\r\n this._rightjoystick.releaseCanvas();\r\n }\r\n\r\n /**\r\n * Gets the class name of the current input.\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"FreeCameraVirtualJoystickInput\";\r\n }\r\n\r\n /**\r\n * Get the friendly name associated with the input class.\r\n * @returns the input friendly name\r\n */\r\n public getSimpleName(): string {\r\n return \"virtualJoystick\";\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"FreeCameraVirtualJoystickInput\"] = FreeCameraVirtualJoystickInput;\r\n"]}
1
+ {"version":3,"file":"freeCameraVirtualJoystickInput.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Inputs/freeCameraVirtualJoystickInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { VirtualJoystick, JoystickAxis } from \"../../Misc/virtualJoystick\";\r\nimport { type ICameraInput, CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport { type FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport { Matrix, TmpVectors, Vector3 } from \"../../Maths/math.vector\";\r\nimport { FreeCameraInputsManager } from \"../../Cameras/freeCameraInputsManager\";\r\n\r\n// Module augmentation to abstract virtual joystick from camera.\r\ndeclare module \"../../Cameras/freeCameraInputsManager\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface FreeCameraInputsManager {\r\n /**\r\n * Add virtual joystick input support to the input manager.\r\n * @returns the current input manager\r\n */\r\n addVirtualJoystick(): FreeCameraInputsManager;\r\n }\r\n}\r\n\r\n/**\r\n * Add virtual joystick input support to the input manager.\r\n * @returns the current input manager\r\n */\r\nFreeCameraInputsManager.prototype.addVirtualJoystick = function (): FreeCameraInputsManager {\r\n this.add(new FreeCameraVirtualJoystickInput());\r\n return this;\r\n};\r\n\r\n/**\r\n * Manage the Virtual Joystick inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs\r\n */\r\nexport class FreeCameraVirtualJoystickInput implements ICameraInput<FreeCamera> {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: FreeCamera;\r\n\r\n private _leftjoystick: VirtualJoystick;\r\n private _rightjoystick: VirtualJoystick;\r\n\r\n /**\r\n * Gets the left stick of the virtual joystick.\r\n * @returns The virtual Joystick\r\n */\r\n public getLeftJoystick(): VirtualJoystick {\r\n return this._leftjoystick;\r\n }\r\n\r\n /**\r\n * Gets the right stick of the virtual joystick.\r\n * @returns The virtual Joystick\r\n */\r\n public getRightJoystick(): VirtualJoystick {\r\n return this._rightjoystick;\r\n }\r\n\r\n /**\r\n * Update the current camera state depending on the inputs that have been used this frame.\r\n * This is a dynamically created lambda to avoid the performance penalty of looping for inputs in the render loop.\r\n */\r\n public checkInputs() {\r\n if (this._leftjoystick) {\r\n const camera = this.camera;\r\n const speed = camera._computeLocalCameraSpeed() * 50;\r\n const cameraTransform = TmpVectors.Matrix[0];\r\n const deltaPosition = TmpVectors.Vector3[0];\r\n const transformedDeltaPosition = TmpVectors.Vector3[1];\r\n Matrix.RotationYawPitchRollToRef(camera.rotation.y, camera.rotation.x, 0, cameraTransform);\r\n deltaPosition.copyFromFloats(this._leftjoystick.deltaPosition.x * speed, this._leftjoystick.deltaPosition.y * speed, this._leftjoystick.deltaPosition.z * speed);\r\n Vector3.TransformCoordinatesToRef(deltaPosition, cameraTransform, transformedDeltaPosition);\r\n camera.cameraDirection.addInPlace(transformedDeltaPosition);\r\n camera.cameraRotation.addInPlaceFromFloats(this._rightjoystick.deltaPosition.x, this._rightjoystick.deltaPosition.y);\r\n\r\n if (!this._leftjoystick.pressed) {\r\n this._leftjoystick.deltaPosition.scaleInPlace(0.9);\r\n }\r\n if (!this._rightjoystick.pressed) {\r\n this._rightjoystick.deltaPosition.scaleInPlace(0.9);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Attach the input controls to a specific dom element to get the input from.\r\n */\r\n public attachControl(): void {\r\n this._leftjoystick = new VirtualJoystick(true);\r\n this._leftjoystick.setAxisForUpDown(JoystickAxis.Z);\r\n this._leftjoystick.setAxisForLeftRight(JoystickAxis.X);\r\n this._leftjoystick.setJoystickSensibility(0.15);\r\n this._rightjoystick = new VirtualJoystick(false);\r\n this._rightjoystick.setAxisForUpDown(JoystickAxis.X);\r\n this._rightjoystick.setAxisForLeftRight(JoystickAxis.Y);\r\n this._rightjoystick.reverseUpDown = true;\r\n this._rightjoystick.setJoystickSensibility(0.05);\r\n this._rightjoystick.setJoystickColor(\"yellow\");\r\n }\r\n\r\n /**\r\n * Detach the current controls from the specified dom element.\r\n */\r\n public detachControl(): void {\r\n this._leftjoystick.releaseCanvas();\r\n this._rightjoystick.releaseCanvas();\r\n }\r\n\r\n /**\r\n * Gets the class name of the current input.\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"FreeCameraVirtualJoystickInput\";\r\n }\r\n\r\n /**\r\n * Get the friendly name associated with the input class.\r\n * @returns the input friendly name\r\n */\r\n public getSimpleName(): string {\r\n return \"virtualJoystick\";\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"FreeCameraVirtualJoystickInput\"] = FreeCameraVirtualJoystickInput;\r\n"]}
@@ -828,7 +828,8 @@ export class ArcRotateCamera extends TargetCamera {
828
828
  // Panning inertia
829
829
  if (this.inertialPanningX !== 0 || this.inertialPanningY !== 0) {
830
830
  hasUserInteractions = true;
831
- const localDirection = new Vector3(this.inertialPanningX, this.inertialPanningY, this.inertialPanningY);
831
+ const localDirection = TmpVectors.Vector3[0];
832
+ localDirection.copyFromFloats(this.inertialPanningX, this.inertialPanningY, this.inertialPanningY);
832
833
  this._viewMatrix.invertToRef(this._cameraTransformMatrix);
833
834
  localDirection.multiplyInPlace(this.panningAxis);
834
835
  Vector3.TransformNormalToRef(localDirection, this._cameraTransformMatrix, this._transformedDirection);