@babylonjs/core 5.0.4 → 5.3.0

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 (139) hide show
  1. package/Audio/audioSceneComponent.d.ts +2 -0
  2. package/Audio/audioSceneComponent.js +9 -7
  3. package/Audio/audioSceneComponent.js.map +1 -1
  4. package/Behaviors/Meshes/pointerDragBehavior.js +1 -0
  5. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  6. package/Bones/skeleton.js +2 -0
  7. package/Bones/skeleton.js.map +1 -1
  8. package/Cameras/arcRotateCamera.d.ts +5 -0
  9. package/Cameras/arcRotateCamera.js +5 -0
  10. package/Cameras/arcRotateCamera.js.map +1 -1
  11. package/Cameras/camera.d.ts +5 -1
  12. package/Cameras/camera.js +7 -7
  13. package/Cameras/camera.js.map +1 -1
  14. package/Debug/debugLayer.d.ts +5 -0
  15. package/Debug/debugLayer.js +24 -0
  16. package/Debug/debugLayer.js.map +1 -1
  17. package/DeviceInput/Helpers/eventFactory.js +14 -3
  18. package/DeviceInput/Helpers/eventFactory.js.map +1 -1
  19. package/DeviceInput/InputDevices/deviceTypes.d.ts +1 -1
  20. package/DeviceInput/InputDevices/deviceTypes.js.map +1 -1
  21. package/DeviceInput/InputDevices/nativeDeviceInputSystem.js +2 -8
  22. package/DeviceInput/InputDevices/nativeDeviceInputSystem.js.map +1 -1
  23. package/Engines/Processors/shaderCodeCursor.js +5 -0
  24. package/Engines/Processors/shaderCodeCursor.js.map +1 -1
  25. package/Engines/constants.d.ts +25 -1
  26. package/Engines/constants.js +25 -1
  27. package/Engines/constants.js.map +1 -1
  28. package/Engines/engine.d.ts +1 -1
  29. package/Engines/engine.js +2 -1
  30. package/Engines/engine.js.map +1 -1
  31. package/Engines/nativeEngine.d.ts +1 -1
  32. package/Engines/nativeEngine.js +7 -8
  33. package/Engines/nativeEngine.js.map +1 -1
  34. package/Engines/thinEngine.js +2 -2
  35. package/Engines/thinEngine.js.map +1 -1
  36. package/Engines/webgpuEngine.d.ts +4 -0
  37. package/Engines/webgpuEngine.js +2 -0
  38. package/Engines/webgpuEngine.js.map +1 -1
  39. package/Gizmos/axisScaleGizmo.js +3 -2
  40. package/Gizmos/axisScaleGizmo.js.map +1 -1
  41. package/Gizmos/boundingBoxGizmo.js +11 -11
  42. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  43. package/Gizmos/gizmo.d.ts +5 -0
  44. package/Gizmos/gizmo.js +11 -4
  45. package/Gizmos/gizmo.js.map +1 -1
  46. package/Gizmos/planeRotationGizmo.js +3 -3
  47. package/Gizmos/planeRotationGizmo.js.map +1 -1
  48. package/Inputs/scene.inputManager.js +7 -1
  49. package/Inputs/scene.inputManager.js.map +1 -1
  50. package/Lights/Shadows/shadowGenerator.d.ts +9 -0
  51. package/Lights/Shadows/shadowGenerator.js +25 -3
  52. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  53. package/Loading/Plugins/babylonFileLoader.js +10 -8
  54. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  55. package/Materials/Node/Blocks/PBR/clearCoatBlock.d.ts +4 -0
  56. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +19 -1
  57. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  58. package/Materials/Node/Blocks/PBR/iridescenceBlock.d.ts +54 -0
  59. package/Materials/Node/Blocks/PBR/iridescenceBlock.js +135 -0
  60. package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -0
  61. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.d.ts +4 -0
  62. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +42 -24
  63. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  64. package/Materials/PBR/index.d.ts +1 -0
  65. package/Materials/PBR/index.js +1 -0
  66. package/Materials/PBR/index.js.map +1 -1
  67. package/Materials/PBR/pbrBaseMaterial.d.ts +5 -0
  68. package/Materials/PBR/pbrBaseMaterial.js +2 -0
  69. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  70. package/Materials/PBR/pbrIridescenceConfiguration.d.ts +102 -0
  71. package/Materials/PBR/pbrIridescenceConfiguration.js +257 -0
  72. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -0
  73. package/Materials/Textures/Loaders/ktxTextureLoader.js +31 -0
  74. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  75. package/Materials/Textures/videoTexture.js +12 -12
  76. package/Materials/Textures/videoTexture.js.map +1 -1
  77. package/Materials/materialFlags.d.ts +6 -0
  78. package/Materials/materialFlags.js +18 -0
  79. package/Materials/materialFlags.js.map +1 -1
  80. package/Materials/materialPluginFactoryExport.d.ts +6 -0
  81. package/Materials/materialPluginFactoryExport.js +12 -0
  82. package/Materials/materialPluginFactoryExport.js.map +1 -1
  83. package/Materials/uniformBuffer.d.ts +2 -1
  84. package/Materials/uniformBuffer.js +2 -1
  85. package/Materials/uniformBuffer.js.map +1 -1
  86. package/Meshes/abstractMesh.d.ts +1 -1
  87. package/Meshes/abstractMesh.js +5 -2
  88. package/Meshes/abstractMesh.js.map +1 -1
  89. package/Meshes/mesh.d.ts +2 -2
  90. package/Meshes/mesh.js +11 -3
  91. package/Meshes/mesh.js.map +1 -1
  92. package/Misc/khronosTextureContainer.js +1 -1
  93. package/Misc/khronosTextureContainer.js.map +1 -1
  94. package/Misc/screenshotTools.js +6 -6
  95. package/Misc/screenshotTools.js.map +1 -1
  96. package/Physics/physicsImpostor.js +1 -1
  97. package/Physics/physicsImpostor.js.map +1 -1
  98. package/PostProcesses/volumetricLightScatteringPostProcess.js +6 -1
  99. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  100. package/Rendering/boundingBoxRenderer.js +4 -4
  101. package/Rendering/boundingBoxRenderer.js.map +1 -1
  102. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +1 -1
  103. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -1
  104. package/Shaders/ShadersInclude/helperFunctions.js +1 -1
  105. package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
  106. package/Shaders/ShadersInclude/lightFragment.js +1 -1
  107. package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
  108. package/Shaders/ShadersInclude/pbrBRDFFunctions.js +1 -1
  109. package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  110. package/Shaders/ShadersInclude/pbrBlockIridescence.d.ts +5 -0
  111. package/Shaders/ShadersInclude/pbrBlockIridescence.js +9 -0
  112. package/Shaders/ShadersInclude/pbrBlockIridescence.js.map +1 -0
  113. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +1 -1
  114. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  115. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js +1 -1
  116. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
  117. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +1 -1
  118. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
  119. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +1 -1
  120. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  121. package/Shaders/ShadersInclude/pbrVertexDeclaration.js +1 -1
  122. package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
  123. package/Shaders/pbr.fragment.d.ts +1 -0
  124. package/Shaders/pbr.fragment.js +2 -1
  125. package/Shaders/pbr.fragment.js.map +1 -1
  126. package/Shaders/pbr.vertex.js +1 -1
  127. package/Shaders/pbr.vertex.js.map +1 -1
  128. package/Shaders/spriteMap.fragment.js +1 -1
  129. package/Shaders/spriteMap.fragment.js.map +1 -1
  130. package/XR/features/WebXRImageTracking.d.ts +0 -5
  131. package/XR/features/WebXRImageTracking.js +5 -8
  132. package/XR/features/WebXRImageTracking.js.map +1 -1
  133. package/XR/native/nativeXRFrame.d.ts +2 -1
  134. package/XR/native/nativeXRFrame.js +5 -1
  135. package/XR/native/nativeXRFrame.js.map +1 -1
  136. package/package.json +1 -1
  137. package/scene.d.ts +4 -0
  138. package/scene.js +4 -0
  139. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"WebXRImageTracking.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/XR/features/WebXRImageTracking.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebXRFeaturesManager, WebXRFeatureName } from \"../webXRFeaturesManager\";\r\nimport type { WebXRSessionManager } from \"../webXRSessionManager\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature\";\r\nimport { Matrix } from \"../../Maths/math.vector\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Tools } from \"../../Misc/tools\";\r\n\r\ndeclare const XRImageTrackingResult: XRImageTrackingResult;\r\n\r\n/**\r\n * Options interface for the background remover plugin\r\n */\r\nexport interface IWebXRImageTrackingOptions {\r\n /**\r\n * A required array with images to track\r\n */\r\n images: {\r\n /**\r\n * The source of the image. can be a URL or an image bitmap\r\n */\r\n src: string | ImageBitmap;\r\n /**\r\n * The estimated width in the real world (in meters)\r\n */\r\n estimatedRealWorldWidth: number; // In meters!\r\n }[];\r\n}\r\n\r\n/**\r\n * An object representing an image tracked by the system\r\n */\r\nexport interface IWebXRTrackedImage {\r\n /**\r\n * The ID of this image (which is the same as the position in the array that was used to initialize the feature)\r\n */\r\n id: number;\r\n /**\r\n * Is the transformation provided emulated. If it is, the system \"guesses\" its real position. Otherwise it can be considered as exact position.\r\n */\r\n emulated?: boolean;\r\n /**\r\n * Just in case it is needed - the image bitmap that is being tracked\r\n */\r\n originalBitmap: ImageBitmap;\r\n /**\r\n * The native XR result image tracking result, untouched\r\n */\r\n xrTrackingResult?: XRImageTrackingResult;\r\n /**\r\n * Width in real world (meters)\r\n */\r\n realWorldWidth?: number;\r\n /**\r\n * A transformation matrix of this current image in the current reference space.\r\n */\r\n transformationMatrix: Matrix;\r\n /**\r\n * The width/height ratio of this image. can be used to calculate the size of the detected object/image\r\n */\r\n ratio?: number;\r\n}\r\n\r\n/**\r\n * Enum that describes the state of the image trackability score status for this session.\r\n */\r\nenum ImageTrackingScoreStatus {\r\n // AR Session has not yet assessed image trackability scores.\r\n NotReceived,\r\n // A request to retrieve trackability scores has been sent, but no response has been received.\r\n Waiting,\r\n // Image trackability scores have been received for this session\r\n Received,\r\n}\r\n\r\n/**\r\n * Image tracking for immersive AR sessions.\r\n * Providing a list of images and their estimated widths will enable tracking those images in the real world.\r\n */\r\nexport class WebXRImageTracking extends WebXRAbstractFeature {\r\n /**\r\n * The module's name\r\n */\r\n public static readonly Name = WebXRFeatureName.IMAGE_TRACKING;\r\n /**\r\n * The (Babylon) version of this module.\r\n * This is an integer representing the implementation version.\r\n * This number does not correspond to the WebXR specs version\r\n */\r\n public static readonly Version = 1;\r\n\r\n /**\r\n * This will be triggered if the underlying system deems an image untrackable.\r\n * The index is the index of the image from the array used to initialize the feature.\r\n */\r\n public onUntrackableImageFoundObservable: Observable<number> = new Observable();\r\n /**\r\n * An image was deemed trackable, and the system will start tracking it.\r\n */\r\n public onTrackableImageFoundObservable: Observable<IWebXRTrackedImage> = new Observable();\r\n /**\r\n * The image was found and its state was updated.\r\n */\r\n public onTrackedImageUpdatedObservable: Observable<IWebXRTrackedImage> = new Observable();\r\n\r\n private _trackableScoreStatus: ImageTrackingScoreStatus = ImageTrackingScoreStatus.NotReceived;\r\n private _trackedImages: IWebXRTrackedImage[] = [];\r\n\r\n private _originalTrackingRequest: XRTrackedImageInit[];\r\n\r\n /**\r\n * constructs the image tracking feature\r\n * @param _xrSessionManager the session manager for this module\r\n * @param options read-only options to be used in this module\r\n */\r\n constructor(\r\n _xrSessionManager: WebXRSessionManager,\r\n /**\r\n * read-only options to be used in this module\r\n */\r\n public readonly options: IWebXRImageTrackingOptions\r\n ) {\r\n super(_xrSessionManager);\r\n this.xrNativeFeatureName = \"image-tracking\";\r\n }\r\n\r\n /**\r\n * attach this feature\r\n * Will usually be called by the features manager\r\n *\r\n * @returns true if successful.\r\n */\r\n public attach(): boolean {\r\n return super.attach();\r\n }\r\n\r\n /**\r\n * detach this feature.\r\n * Will usually be called by the features manager\r\n *\r\n * @returns true if successful.\r\n */\r\n public detach(): boolean {\r\n return super.detach();\r\n }\r\n\r\n /**\r\n * Check if the needed objects are defined.\r\n * This does not mean that the feature is enabled, but that the objects needed are well defined.\r\n */\r\n public isCompatible(): boolean {\r\n return typeof XRImageTrackingResult !== \"undefined\";\r\n }\r\n\r\n /**\r\n * Get a tracked image by its ID.\r\n *\r\n * @param id the id of the image to load (position in the init array)\r\n * @returns a trackable image, if exists in this location\r\n */\r\n public getTrackedImageById(id: number): Nullable<IWebXRTrackedImage> {\r\n return this._trackedImages[id] || null;\r\n }\r\n\r\n /**\r\n * Dispose this feature and all of the resources attached\r\n */\r\n public dispose(): void {\r\n super.dispose();\r\n this._trackedImages.forEach((trackedImage) => {\r\n trackedImage.originalBitmap.close();\r\n });\r\n this._trackedImages.length = 0;\r\n this.onTrackableImageFoundObservable.clear();\r\n this.onUntrackableImageFoundObservable.clear();\r\n this.onTrackedImageUpdatedObservable.clear();\r\n }\r\n\r\n /**\r\n * Extends the session init object if needed\r\n * @returns augmentation object fo the xr session init object.\r\n */\r\n public async getXRSessionInitExtension(): Promise<Partial<XRSessionInit>> {\r\n if (!this.options.images || !this.options.images.length) {\r\n return {};\r\n }\r\n const promises = this.options.images.map((image) => {\r\n if (typeof image.src === \"string\") {\r\n return this._xrSessionManager.scene.getEngine().createImageBitmapFromSource(image.src);\r\n } else {\r\n return Promise.resolve(image.src); // resolve is probably unneeded\r\n }\r\n });\r\n\r\n try {\r\n const images = await Promise.all(promises);\r\n\r\n this._originalTrackingRequest = images.map((image, idx) => {\r\n return {\r\n image,\r\n widthInMeters: this.options.images[idx].estimatedRealWorldWidth,\r\n };\r\n });\r\n\r\n return {\r\n trackedImages: this._originalTrackingRequest,\r\n };\r\n } catch (ex) {\r\n Tools.Error(\"Error loading images for tracking, WebXRImageTracking disabled for this session.\");\r\n return {};\r\n }\r\n }\r\n\r\n protected _onXRFrame(_xrFrame: XRFrame) {\r\n if (!_xrFrame.getImageTrackingResults || this._trackableScoreStatus === ImageTrackingScoreStatus.Waiting) {\r\n return;\r\n }\r\n\r\n // Image tracking scores may be generated a few frames after the XR Session initializes.\r\n // If we haven't received scores yet, then kick off the task to check scores and return immediately.\r\n if (this._trackableScoreStatus === ImageTrackingScoreStatus.NotReceived) {\r\n this._checkScoresAsync();\r\n return;\r\n }\r\n\r\n const imageTrackedResults = _xrFrame.getImageTrackingResults();\r\n for (const result of imageTrackedResults) {\r\n let changed = false;\r\n const imageIndex = result.index;\r\n\r\n const imageObject = this._trackedImages[imageIndex];\r\n if (!imageObject) {\r\n // something went wrong!\r\n continue;\r\n }\r\n\r\n imageObject.xrTrackingResult = result;\r\n if (imageObject.realWorldWidth !== result.measuredWidthInMeters) {\r\n imageObject.realWorldWidth = result.measuredWidthInMeters;\r\n changed = true;\r\n }\r\n\r\n // Get the pose of the image relative to a reference space.\r\n const pose = _xrFrame.getPose(result.imageSpace, this._xrSessionManager.referenceSpace);\r\n\r\n if (pose) {\r\n const mat = imageObject.transformationMatrix;\r\n Matrix.FromArrayToRef(pose.transform.matrix, 0, mat);\r\n if (!this._xrSessionManager.scene.useRightHandedSystem) {\r\n mat.toggleModelMatrixHandInPlace();\r\n }\r\n changed = true;\r\n }\r\n\r\n const state = result.trackingState;\r\n const emulated = state === \"emulated\";\r\n\r\n if (imageObject.emulated !== emulated) {\r\n imageObject.emulated = emulated;\r\n changed = true;\r\n }\r\n if (changed) {\r\n this.onTrackedImageUpdatedObservable.notifyObservers(imageObject);\r\n }\r\n }\r\n }\r\n\r\n private async _checkScoresAsync(): Promise<void> {\r\n if (!this._xrSessionManager.session.getTrackedImageScores || this._trackableScoreStatus !== ImageTrackingScoreStatus.NotReceived) {\r\n return;\r\n }\r\n\r\n this._trackableScoreStatus = ImageTrackingScoreStatus.Waiting;\r\n const imageScores = await this._xrSessionManager.session.getTrackedImageScores();\r\n\r\n // check the scores for all\r\n for (let idx = 0; idx < imageScores.length; ++idx) {\r\n if (imageScores[idx] == \"untrackable\") {\r\n this.onUntrackableImageFoundObservable.notifyObservers(idx);\r\n } else {\r\n const originalBitmap = this._originalTrackingRequest[idx].image;\r\n const imageObject: IWebXRTrackedImage = {\r\n id: idx,\r\n originalBitmap,\r\n transformationMatrix: new Matrix(),\r\n ratio: originalBitmap.width / originalBitmap.height,\r\n };\r\n this._trackedImages[idx] = imageObject;\r\n this.onTrackableImageFoundObservable.notifyObservers(imageObject);\r\n }\r\n }\r\n\r\n this._trackableScoreStatus = imageScores.length > 0 ? ImageTrackingScoreStatus.Received : ImageTrackingScoreStatus.NotReceived;\r\n }\r\n}\r\n\r\n//register the plugin\r\nWebXRFeaturesManager.AddWebXRFeature(\r\n WebXRImageTracking.Name,\r\n (xrSessionManager, options) => {\r\n return () => new WebXRImageTracking(xrSessionManager, options);\r\n },\r\n WebXRImageTracking.Version,\r\n false\r\n);\r\n"]}
1
+ {"version":3,"file":"WebXRImageTracking.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/XR/features/WebXRImageTracking.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebXRFeaturesManager, WebXRFeatureName } from \"../webXRFeaturesManager\";\r\nimport type { WebXRSessionManager } from \"../webXRSessionManager\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature\";\r\nimport { Matrix } from \"../../Maths/math.vector\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Tools } from \"../../Misc/tools\";\r\n\r\n/**\r\n * Options interface for the background remover plugin\r\n */\r\nexport interface IWebXRImageTrackingOptions {\r\n /**\r\n * A required array with images to track\r\n */\r\n images: {\r\n /**\r\n * The source of the image. can be a URL or an image bitmap\r\n */\r\n src: string | ImageBitmap;\r\n /**\r\n * The estimated width in the real world (in meters)\r\n */\r\n estimatedRealWorldWidth: number; // In meters!\r\n }[];\r\n}\r\n\r\n/**\r\n * An object representing an image tracked by the system\r\n */\r\nexport interface IWebXRTrackedImage {\r\n /**\r\n * The ID of this image (which is the same as the position in the array that was used to initialize the feature)\r\n */\r\n id: number;\r\n /**\r\n * Is the transformation provided emulated. If it is, the system \"guesses\" its real position. Otherwise it can be considered as exact position.\r\n */\r\n emulated?: boolean;\r\n /**\r\n * Just in case it is needed - the image bitmap that is being tracked\r\n */\r\n originalBitmap: ImageBitmap;\r\n /**\r\n * The native XR result image tracking result, untouched\r\n */\r\n xrTrackingResult?: XRImageTrackingResult;\r\n /**\r\n * Width in real world (meters)\r\n */\r\n realWorldWidth?: number;\r\n /**\r\n * A transformation matrix of this current image in the current reference space.\r\n */\r\n transformationMatrix: Matrix;\r\n /**\r\n * The width/height ratio of this image. can be used to calculate the size of the detected object/image\r\n */\r\n ratio?: number;\r\n}\r\n\r\n/**\r\n * Enum that describes the state of the image trackability score status for this session.\r\n */\r\nenum ImageTrackingScoreStatus {\r\n // AR Session has not yet assessed image trackability scores.\r\n NotReceived,\r\n // A request to retrieve trackability scores has been sent, but no response has been received.\r\n Waiting,\r\n // Image trackability scores have been received for this session\r\n Received,\r\n}\r\n\r\n/**\r\n * Image tracking for immersive AR sessions.\r\n * Providing a list of images and their estimated widths will enable tracking those images in the real world.\r\n */\r\nexport class WebXRImageTracking extends WebXRAbstractFeature {\r\n /**\r\n * The module's name\r\n */\r\n public static readonly Name = WebXRFeatureName.IMAGE_TRACKING;\r\n /**\r\n * The (Babylon) version of this module.\r\n * This is an integer representing the implementation version.\r\n * This number does not correspond to the WebXR specs version\r\n */\r\n public static readonly Version = 1;\r\n\r\n /**\r\n * This will be triggered if the underlying system deems an image untrackable.\r\n * The index is the index of the image from the array used to initialize the feature.\r\n */\r\n public onUntrackableImageFoundObservable: Observable<number> = new Observable();\r\n /**\r\n * An image was deemed trackable, and the system will start tracking it.\r\n */\r\n public onTrackableImageFoundObservable: Observable<IWebXRTrackedImage> = new Observable();\r\n /**\r\n * The image was found and its state was updated.\r\n */\r\n public onTrackedImageUpdatedObservable: Observable<IWebXRTrackedImage> = new Observable();\r\n\r\n private _trackableScoreStatus: ImageTrackingScoreStatus = ImageTrackingScoreStatus.NotReceived;\r\n private _trackedImages: IWebXRTrackedImage[] = [];\r\n\r\n private _originalTrackingRequest: XRTrackedImageInit[];\r\n\r\n /**\r\n * constructs the image tracking feature\r\n * @param _xrSessionManager the session manager for this module\r\n * @param options read-only options to be used in this module\r\n */\r\n constructor(\r\n _xrSessionManager: WebXRSessionManager,\r\n /**\r\n * read-only options to be used in this module\r\n */\r\n public readonly options: IWebXRImageTrackingOptions\r\n ) {\r\n super(_xrSessionManager);\r\n this.xrNativeFeatureName = \"image-tracking\";\r\n }\r\n\r\n /**\r\n * attach this feature\r\n * Will usually be called by the features manager\r\n *\r\n * @returns true if successful.\r\n */\r\n public attach(): boolean {\r\n return super.attach();\r\n }\r\n\r\n /**\r\n * detach this feature.\r\n * Will usually be called by the features manager\r\n *\r\n * @returns true if successful.\r\n */\r\n public detach(): boolean {\r\n return super.detach();\r\n }\r\n\r\n /**\r\n * Get a tracked image by its ID.\r\n *\r\n * @param id the id of the image to load (position in the init array)\r\n * @returns a trackable image, if exists in this location\r\n */\r\n public getTrackedImageById(id: number): Nullable<IWebXRTrackedImage> {\r\n return this._trackedImages[id] || null;\r\n }\r\n\r\n /**\r\n * Dispose this feature and all of the resources attached\r\n */\r\n public dispose(): void {\r\n super.dispose();\r\n this._trackedImages.forEach((trackedImage) => {\r\n trackedImage.originalBitmap.close();\r\n });\r\n this._trackedImages.length = 0;\r\n this.onTrackableImageFoundObservable.clear();\r\n this.onUntrackableImageFoundObservable.clear();\r\n this.onTrackedImageUpdatedObservable.clear();\r\n }\r\n\r\n /**\r\n * Extends the session init object if needed\r\n * @returns augmentation object fo the xr session init object.\r\n */\r\n public async getXRSessionInitExtension(): Promise<Partial<XRSessionInit>> {\r\n if (!this.options.images || !this.options.images.length) {\r\n return {};\r\n }\r\n const promises = this.options.images.map((image) => {\r\n if (typeof image.src === \"string\") {\r\n return this._xrSessionManager.scene.getEngine()._createImageBitmapFromSource(image.src);\r\n } else {\r\n return Promise.resolve(image.src); // resolve is probably unneeded\r\n }\r\n });\r\n\r\n try {\r\n const images = await Promise.all(promises);\r\n\r\n this._originalTrackingRequest = images.map((image, idx) => {\r\n return {\r\n image,\r\n widthInMeters: this.options.images[idx].estimatedRealWorldWidth,\r\n };\r\n });\r\n\r\n return {\r\n trackedImages: this._originalTrackingRequest,\r\n };\r\n } catch (ex) {\r\n Tools.Error(\"Error loading images for tracking, WebXRImageTracking disabled for this session.\");\r\n return {};\r\n }\r\n }\r\n\r\n protected _onXRFrame(_xrFrame: XRFrame) {\r\n if (!_xrFrame.getImageTrackingResults || this._trackableScoreStatus === ImageTrackingScoreStatus.Waiting) {\r\n return;\r\n }\r\n\r\n // Image tracking scores may be generated a few frames after the XR Session initializes.\r\n // If we haven't received scores yet, then kick off the task to check scores and return immediately.\r\n if (this._trackableScoreStatus === ImageTrackingScoreStatus.NotReceived) {\r\n this._checkScoresAsync();\r\n return;\r\n }\r\n\r\n const imageTrackedResults = _xrFrame.getImageTrackingResults();\r\n for (const result of imageTrackedResults) {\r\n let changed = false;\r\n const imageIndex = result.index;\r\n\r\n const imageObject = this._trackedImages[imageIndex];\r\n if (!imageObject) {\r\n // something went wrong!\r\n continue;\r\n }\r\n\r\n imageObject.xrTrackingResult = result;\r\n if (imageObject.realWorldWidth !== result.measuredWidthInMeters) {\r\n imageObject.realWorldWidth = result.measuredWidthInMeters;\r\n changed = true;\r\n }\r\n\r\n // Get the pose of the image relative to a reference space.\r\n const pose = _xrFrame.getPose(result.imageSpace, this._xrSessionManager.referenceSpace);\r\n\r\n if (pose) {\r\n const mat = imageObject.transformationMatrix;\r\n Matrix.FromArrayToRef(pose.transform.matrix, 0, mat);\r\n if (!this._xrSessionManager.scene.useRightHandedSystem) {\r\n mat.toggleModelMatrixHandInPlace();\r\n }\r\n changed = true;\r\n }\r\n\r\n const state = result.trackingState;\r\n const emulated = state === \"emulated\";\r\n\r\n if (imageObject.emulated !== emulated) {\r\n imageObject.emulated = emulated;\r\n changed = true;\r\n }\r\n if (changed) {\r\n this.onTrackedImageUpdatedObservable.notifyObservers(imageObject);\r\n }\r\n }\r\n }\r\n\r\n private async _checkScoresAsync(): Promise<void> {\r\n if (!this._xrSessionManager.session.getTrackedImageScores || this._trackableScoreStatus !== ImageTrackingScoreStatus.NotReceived) {\r\n return;\r\n }\r\n\r\n this._trackableScoreStatus = ImageTrackingScoreStatus.Waiting;\r\n const imageScores = await this._xrSessionManager.session.getTrackedImageScores();\r\n if (!imageScores || imageScores.length === 0) {\r\n this._trackableScoreStatus = ImageTrackingScoreStatus.NotReceived;\r\n return;\r\n }\r\n\r\n // check the scores for all\r\n for (let idx = 0; idx < imageScores.length; ++idx) {\r\n if (imageScores[idx] == \"untrackable\") {\r\n this.onUntrackableImageFoundObservable.notifyObservers(idx);\r\n } else {\r\n const originalBitmap = this._originalTrackingRequest[idx].image;\r\n const imageObject: IWebXRTrackedImage = {\r\n id: idx,\r\n originalBitmap,\r\n transformationMatrix: new Matrix(),\r\n ratio: originalBitmap.width / originalBitmap.height,\r\n };\r\n this._trackedImages[idx] = imageObject;\r\n this.onTrackableImageFoundObservable.notifyObservers(imageObject);\r\n }\r\n }\r\n\r\n this._trackableScoreStatus = imageScores.length > 0 ? ImageTrackingScoreStatus.Received : ImageTrackingScoreStatus.NotReceived;\r\n }\r\n}\r\n\r\n//register the plugin\r\nWebXRFeaturesManager.AddWebXRFeature(\r\n WebXRImageTracking.Name,\r\n (xrSessionManager, options) => {\r\n return () => new WebXRImageTracking(xrSessionManager, options);\r\n },\r\n WebXRImageTracking.Version,\r\n false\r\n);\r\n"]}
@@ -1,6 +1,7 @@
1
1
  /** @hidden */
2
2
  interface INativeXRFrame extends XRFrame {
3
3
  getPoseData: (space: XRSpace, baseSpace: XRReferenceSpace, vectorBuffer: ArrayBuffer, matrixBuffer: ArrayBuffer) => XRPose;
4
+ _imageTrackingResults?: XRImageTrackingResult[];
4
5
  }
5
6
  /** @hidden */
6
7
  export declare class NativeXRFrame implements XRFrame {
@@ -23,6 +24,6 @@ export declare class NativeXRFrame implements XRFrame {
23
24
  readonly fillJointRadii: any;
24
25
  readonly getLightEstimate: () => never;
25
26
  get featurePointCloud(): number[] | undefined;
26
- readonly getImageTrackingResults: any;
27
+ readonly getImageTrackingResults: () => XRImageTrackingResult[];
27
28
  }
28
29
  export {};
@@ -2,6 +2,7 @@ import { RegisterNativeTypeAsync } from "../../Engines/nativeEngine.js";
2
2
  /** @hidden */
3
3
  var NativeXRFrame = /** @class */ (function () {
4
4
  function NativeXRFrame(_nativeImpl) {
5
+ var _this = this;
5
6
  this._nativeImpl = _nativeImpl;
6
7
  this._xrTransform = new XRRigidTransform();
7
8
  this._xrPose = {
@@ -22,7 +23,10 @@ var NativeXRFrame = /** @class */ (function () {
22
23
  this.getLightEstimate = function () {
23
24
  throw new Error("XRFrame.getLightEstimate not supported on native.");
24
25
  };
25
- this.getImageTrackingResults = this._nativeImpl.getImageTrackingResults.bind(this._nativeImpl);
26
+ this.getImageTrackingResults = function () {
27
+ var _a;
28
+ return (_a = _this._nativeImpl._imageTrackingResults) !== null && _a !== void 0 ? _a : [];
29
+ };
26
30
  }
27
31
  Object.defineProperty(NativeXRFrame.prototype, "session", {
28
32
  get: function () {
@@ -1 +1 @@
1
- {"version":3,"file":"nativeXRFrame.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/XR/native/nativeXRFrame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAQrE,cAAc;AACd;IAaI,uBAAoB,WAA2B;QAA3B,gBAAW,GAAX,WAAW,CAAgB;QAZ9B,iBAAY,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACtC,YAAO,GAAW;YAC/B,SAAS,EAAE,IAAI,CAAC,YAAY;YAC5B,gBAAgB,EAAE,KAAK;SAC1B,CAAC;QACF,yCAAyC;QACxB,sBAAiB,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QA0B7C,cAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE/D,kBAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEtE,sBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE9E,uCAAkC,GAAG;YACjD,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QAC3F,CAAC,CAAC;QAMc,iBAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAUrE,iBAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAErE,mBAAc,GAAG,IAAI,CAAC,WAAW,CAAC,cAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEzE,qBAAgB,GAAG;YAC/B,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACzE,CAAC,CAAC;QAMc,4BAAuB,GAAG,IAAI,CAAC,WAAW,CAAC,uBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAxDzD,CAAC;IAJnD,sBAAW,kCAAO;aAAlB;YACI,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QACpC,CAAC;;;OAAA;IAIM,+BAAO,GAAd,UAAe,KAAc,EAAE,SAA2B;QACtD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YACjH,OAAO,SAAS,CAAC;SACpB;QACD,IAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAoB,CAAC;QACxD,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACvC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACvC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACvC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAEvC,IAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,WAAuB,CAAC;QAC9D,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC1C,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC1C,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC1C,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAYD,sBAAW,yCAAc;aAAzB;YACI,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;QAC3C,CAAC;;;OAAA;IAID,sBAAW,2CAAgB;aAA3B;YACI,OAAO,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;QAC7C,CAAC;;;OAAA;IAED,sBAAW,yCAAc;aAAzB;YACI,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;QAC3C,CAAC;;;OAAA;IAUD,sBAAW,4CAAiB;aAA5B;YACI,OAAO,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC;QAC9C,CAAC;;;OAAA;IAGL,oBAAC;AAAD,CAAC,AAtED,IAsEC;;AAED,uBAAuB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC","sourcesContent":["import { RegisterNativeTypeAsync } from \"../../Engines/nativeEngine\";\r\n\r\n/** @hidden */\r\ninterface INativeXRFrame extends XRFrame {\r\n // Native-only helper functions\r\n getPoseData: (space: XRSpace, baseSpace: XRReferenceSpace, vectorBuffer: ArrayBuffer, matrixBuffer: ArrayBuffer) => XRPose;\r\n}\r\n\r\n/** @hidden */\r\nexport class NativeXRFrame implements XRFrame {\r\n private readonly _xrTransform = new XRRigidTransform();\r\n private readonly _xrPose: XRPose = {\r\n transform: this._xrTransform,\r\n emulatedPosition: false,\r\n };\r\n // Enough space for position, orientation\r\n private readonly _xrPoseVectorData = new Float32Array(4 + 4);\r\n\r\n public get session(): XRSession {\r\n return this._nativeImpl.session;\r\n }\r\n\r\n constructor(private _nativeImpl: INativeXRFrame) {}\r\n\r\n public getPose(space: XRSpace, baseSpace: XRReferenceSpace): XRPose | undefined {\r\n if (!this._nativeImpl.getPoseData(space, baseSpace, this._xrPoseVectorData.buffer, this._xrTransform.matrix.buffer)) {\r\n return undefined;\r\n }\r\n const position = this._xrTransform.position as DOMPoint;\r\n position.x = this._xrPoseVectorData[0];\r\n position.y = this._xrPoseVectorData[1];\r\n position.z = this._xrPoseVectorData[2];\r\n position.w = this._xrPoseVectorData[3];\r\n\r\n const orientation = this._xrTransform.orientation as DOMPoint;\r\n orientation.x = this._xrPoseVectorData[4];\r\n orientation.y = this._xrPoseVectorData[5];\r\n orientation.z = this._xrPoseVectorData[6];\r\n orientation.w = this._xrPoseVectorData[7];\r\n return this._xrPose;\r\n }\r\n\r\n public readonly fillPoses = this._nativeImpl.fillPoses!.bind(this._nativeImpl);\r\n\r\n public readonly getViewerPose = this._nativeImpl.getViewerPose.bind(this._nativeImpl);\r\n\r\n public readonly getHitTestResults = this._nativeImpl.getHitTestResults.bind(this._nativeImpl);\r\n\r\n public readonly getHitTestResultsForTransientInput = () => {\r\n throw new Error(\"XRFrame.getHitTestResultsForTransientInput not supported on native.\");\r\n };\r\n\r\n public get trackedAnchors(): XRAnchorSet | undefined {\r\n return this._nativeImpl.trackedAnchors;\r\n }\r\n\r\n public readonly createAnchor = this._nativeImpl.createAnchor!.bind(this._nativeImpl);\r\n\r\n public get worldInformation(): XRWorldInformation | undefined {\r\n return this._nativeImpl.worldInformation;\r\n }\r\n\r\n public get detectedPlanes(): XRPlaneSet | undefined {\r\n return this._nativeImpl.detectedPlanes;\r\n }\r\n\r\n public readonly getJointPose = this._nativeImpl.getJointPose!.bind(this._nativeImpl);\r\n\r\n public readonly fillJointRadii = this._nativeImpl.fillJointRadii!.bind(this._nativeImpl);\r\n\r\n public readonly getLightEstimate = () => {\r\n throw new Error(\"XRFrame.getLightEstimate not supported on native.\");\r\n };\r\n\r\n public get featurePointCloud(): number[] | undefined {\r\n return this._nativeImpl.featurePointCloud;\r\n }\r\n\r\n public readonly getImageTrackingResults = this._nativeImpl.getImageTrackingResults!.bind(this._nativeImpl);\r\n}\r\n\r\nRegisterNativeTypeAsync(\"NativeXRFrame\", NativeXRFrame);\r\n"]}
1
+ {"version":3,"file":"nativeXRFrame.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/XR/native/nativeXRFrame.ts"],"names":[],"mappings":"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","sourcesContent":["import { RegisterNativeTypeAsync } from \"../../Engines/nativeEngine\";\r\n\r\n/** @hidden */\r\ninterface INativeXRFrame extends XRFrame {\r\n // Native-only helper functions\r\n getPoseData: (space: XRSpace, baseSpace: XRReferenceSpace, vectorBuffer: ArrayBuffer, matrixBuffer: ArrayBuffer) => XRPose;\r\n _imageTrackingResults?: XRImageTrackingResult[];\r\n}\r\n\r\n/** @hidden */\r\nexport class NativeXRFrame implements XRFrame {\r\n private readonly _xrTransform = new XRRigidTransform();\r\n private readonly _xrPose: XRPose = {\r\n transform: this._xrTransform,\r\n emulatedPosition: false,\r\n };\r\n // Enough space for position, orientation\r\n private readonly _xrPoseVectorData = new Float32Array(4 + 4);\r\n\r\n public get session(): XRSession {\r\n return this._nativeImpl.session;\r\n }\r\n\r\n constructor(private _nativeImpl: INativeXRFrame) {}\r\n\r\n public getPose(space: XRSpace, baseSpace: XRReferenceSpace): XRPose | undefined {\r\n if (!this._nativeImpl.getPoseData(space, baseSpace, this._xrPoseVectorData.buffer, this._xrTransform.matrix.buffer)) {\r\n return undefined;\r\n }\r\n const position = this._xrTransform.position as DOMPoint;\r\n position.x = this._xrPoseVectorData[0];\r\n position.y = this._xrPoseVectorData[1];\r\n position.z = this._xrPoseVectorData[2];\r\n position.w = this._xrPoseVectorData[3];\r\n\r\n const orientation = this._xrTransform.orientation as DOMPoint;\r\n orientation.x = this._xrPoseVectorData[4];\r\n orientation.y = this._xrPoseVectorData[5];\r\n orientation.z = this._xrPoseVectorData[6];\r\n orientation.w = this._xrPoseVectorData[7];\r\n return this._xrPose;\r\n }\r\n\r\n public readonly fillPoses = this._nativeImpl.fillPoses!.bind(this._nativeImpl);\r\n\r\n public readonly getViewerPose = this._nativeImpl.getViewerPose.bind(this._nativeImpl);\r\n\r\n public readonly getHitTestResults = this._nativeImpl.getHitTestResults.bind(this._nativeImpl);\r\n\r\n public readonly getHitTestResultsForTransientInput = () => {\r\n throw new Error(\"XRFrame.getHitTestResultsForTransientInput not supported on native.\");\r\n };\r\n\r\n public get trackedAnchors(): XRAnchorSet | undefined {\r\n return this._nativeImpl.trackedAnchors;\r\n }\r\n\r\n public readonly createAnchor = this._nativeImpl.createAnchor!.bind(this._nativeImpl);\r\n\r\n public get worldInformation(): XRWorldInformation | undefined {\r\n return this._nativeImpl.worldInformation;\r\n }\r\n\r\n public get detectedPlanes(): XRPlaneSet | undefined {\r\n return this._nativeImpl.detectedPlanes;\r\n }\r\n\r\n public readonly getJointPose = this._nativeImpl.getJointPose!.bind(this._nativeImpl);\r\n\r\n public readonly fillJointRadii = this._nativeImpl.fillJointRadii!.bind(this._nativeImpl);\r\n\r\n public readonly getLightEstimate = () => {\r\n throw new Error(\"XRFrame.getLightEstimate not supported on native.\");\r\n };\r\n\r\n public get featurePointCloud(): number[] | undefined {\r\n return this._nativeImpl.featurePointCloud;\r\n }\r\n\r\n public readonly getImageTrackingResults = (): XRImageTrackingResult[] => {\r\n return this._nativeImpl._imageTrackingResults ?? [];\r\n };\r\n}\r\n\r\nRegisterNativeTypeAsync(\"NativeXRFrame\", NativeXRFrame);\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@babylonjs/core",
3
- "version": "5.0.4",
3
+ "version": "5.3.0",
4
4
  "main": "index.js",
5
5
  "module": "index.js",
6
6
  "types": "index.d.ts",
package/scene.d.ts CHANGED
@@ -499,6 +499,10 @@ export declare class Scene extends AbstractScene implements IAnimatable, IClipPl
499
499
  * Gets or sets a boolean indicating if the user want to entirely skip the picking phase when a pointer move event occurs.
500
500
  */
501
501
  skipPointerMovePicking: boolean;
502
+ /**
503
+ * Gets or sets a boolean indicating if the user want to entirely skip the picking phase when a pointer down event occurs.
504
+ */
505
+ skipPointerDownPicking: boolean;
502
506
  /** Callback called when a pointer move is detected */
503
507
  onPointerMove: (evt: IPointerEvent, pickInfo: PickingInfo, type: PointerEventTypes) => void;
504
508
  /** Callback called when a pointer down is detected */
package/scene.js CHANGED
@@ -317,6 +317,10 @@ var Scene = /** @class */ (function (_super) {
317
317
  * Gets or sets a boolean indicating if the user want to entirely skip the picking phase when a pointer move event occurs.
318
318
  */
319
319
  _this.skipPointerMovePicking = false;
320
+ /**
321
+ * Gets or sets a boolean indicating if the user want to entirely skip the picking phase when a pointer down event occurs.
322
+ */
323
+ _this.skipPointerDownPicking = false;
320
324
  /**
321
325
  * This observable event is triggered when any ponter event is triggered. It is registered during Scene.attachControl() and it is called BEFORE the 3D engine process anything (mesh/sprite picking for instance).
322
326
  * You have the possibility to skip the process and the call to onPointerObservable by setting PointerInfoPre.skipOnPointerObservable to true