790dd92f28cb0122cffc9841dd5c49b3bdf0f17b09b7549863a01e6fa6609238.json 22 KB

1
  1. {"ast":null,"code":"import { WebXRFeaturesManager, WebXRFeatureName } from \"../webXRFeaturesManager.js\";\nimport { Observable } from \"../../Misc/observable.js\";\nimport { Vector3, Matrix, Quaternion } from \"../../Maths/math.vector.js\";\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature.js\";\nimport { Tools } from \"../../Misc/tools.js\";\n/**\n * The currently-working hit-test module.\n * Hit test (or Ray-casting) is used to interact with the real world.\n * For further information read here - https://github.com/immersive-web/hit-test\n *\n * Tested on chrome (mobile) 80.\n */\nexport class WebXRHitTest extends WebXRAbstractFeature {\n /**\n * Creates a new instance of the hit test feature\n * @param _xrSessionManager an instance of WebXRSessionManager\n * @param options options to use when constructing this feature\n */\n constructor(_xrSessionManager,\n /**\n * [Empty Object] options to use when constructing this feature\n */\n options = {}) {\n super(_xrSessionManager);\n this.options = options;\n this._tmpMat = new Matrix();\n this._tmpPos = new Vector3();\n this._tmpQuat = new Quaternion();\n this._initHitTestSource = referenceSpace => {\n if (!referenceSpace) {\n return;\n }\n const offsetRay = new XRRay(this.options.offsetRay || {});\n const hitTestOptions = {\n space: this.options.useReferenceSpace ? referenceSpace : this._xrSessionManager.viewerReferenceSpace,\n offsetRay: offsetRay\n };\n if (this.options.entityTypes) {\n hitTestOptions.entityTypes = this.options.entityTypes;\n }\n if (!hitTestOptions.space) {\n Tools.Warn(\"waiting for viewer reference space to initialize\");\n return;\n }\n this._xrSessionManager.session.requestHitTestSource(hitTestOptions).then(hitTestSource => {\n if (this._xrHitTestSource) {\n this._xrHitTestSource.cancel();\n }\n this._xrHitTestSource = hitTestSource;\n });\n };\n /**\n * When set to true, each hit test will have its own position/rotation objects\n * When set to false, position and rotation objects will be reused for each hit test. It is expected that\n * the developers will clone them or copy them as they see fit.\n */\n this.autoCloneTransformation = false;\n /**\n * Triggered when new babylon (transformed) hit test results are available\n * Note - this will be called when results come back from the device. It can be an empty array!!\n */\n this.onHitTestResultObservable = new Observable();\n /**\n * Use this to temporarily pause hit test checks.\n */\n this.paused = false;\n this.xrNativeFeatureName = \"hit-test\";\n Tools.Warn(\"Hit test is an experimental and unstable feature.\");\n }\n /**\n * attach this feature\n * Will usually be called by the features manager\n *\n * @returns true if successful.\n */\n attach() {\n if (!super.attach()) {\n return false;\n }\n // Feature enabled, but not available\n if (!this._xrSessionManager.session.requestHitTestSource) {\n return false;\n }\n if (!this.options.disablePermanentHitTest) {\n if (this._xrSessionManager.referenceSpace) {\n this._initHitTestSource(this._xrSessionManager.referenceSpace);\n }\n this._xrSessionManager.onXRReferenceSpaceChanged.add(this._initHitTestSource);\n }\n if (this.options.enableTransientHitTest) {\n const offsetRay = new XRRay(this.options.transientOffsetRay || {});\n this._xrSessionManager.session.requestHitTestSourceForTransientInput({\n profile: this.options.transientHitTestProfile || \"generic-touchscreen\",\n offsetRay,\n entityTypes: this.options.entityTypes\n }).then(hitSource => {\n this._transientXrHitTestSource = hitSource;\n });\n }\n return true;\n }\n /**\n * detach this feature.\n * Will usually be called by the features manager\n *\n * @returns true if successful.\n */\n detach() {\n if (!super.detach()) {\n return false;\n }\n if (this._xrHitTestSource) {\n this._xrHitTestSource.cancel();\n this._xrHitTestSource = null;\n }\n this._xrSessionManager.onXRReferenceSpaceChanged.removeCallback(this._initHitTestSource);\n if (this._transientXrHitTestSource) {\n this._transientXrHitTestSource.cancel();\n this._transientXrHitTestSource = null;\n }\n return true;\n }\n /**\n * Dispose this feature and all of the resources attached\n */\n dispose() {\n super.dispose();\n this.onHitTestResultObservable.clear();\n }\n _onXRFrame(frame) {\n // make sure we do nothing if (async) not attached\n if (!this.attached || this.paused) {\n return;\n }\n if (this._xrHitTestSource) {\n const results = frame.getHitTestResults(this._xrHitTestSource);\n this._processWebXRHitTestResult(results);\n }\n if (this._transientXrHitTestSource) {\n const hitTestResultsPerInputSource = frame.getHitTestResultsForTransientInput(this._transientXrHitTestSource);\n hitTestResultsPerInputSource.forEach(resultsPerInputSource => {\n this._processWebXRHitTestResult(resultsPerInputSource.results, resultsPerInputSource.inputSource);\n });\n }\n }\n _processWebXRHitTestResult(hitTestResults, inputSource) {\n const results = [];\n hitTestResults.forEach(hitTestResult => {\n const pose = hitTestResult.getPose(this._xrSessionManager.referenceSpace);\n if (!pose) {\n return;\n }\n const pos = pose.transform.position;\n const quat = pose.transform.orientation;\n this._tmpPos.set(pos.x, pos.y, pos.z).scaleInPlace(this._xrSessionManager.worldScalingFactor);\n this._tmpQuat.set(quat.x, quat.y, quat.z, quat.w);\n Matrix.FromFloat32ArrayToRefScaled(pose.transform.matrix, 0, 1, this._tmpMat);\n if (!this._xrSessionManager.scene.useRightHandedSystem) {\n this._tmpPos.z *= -1;\n this._tmpQuat.z *= -1;\n this._tmpQuat.w *= -1;\n this._tmpMat.toggleModelMatrixHandInPlace();\n }\n const result = {\n position: this.autoCloneTransformation ? this._tmpPos.clone() : this._tmpPos,\n rotationQuaternion: this.autoCloneTransformation ? this._tmpQuat.clone() : this._tmpQuat,\n transformationMatrix: this.autoCloneTransformation ? this._tmpMat.clone() : this._tmpMat,\n inputSource: inputSource,\n isTransient: !!inputSource,\n xrHitResult: hitTestResult\n };\n results.push(result);\n });\n this.onHitTestResultObservable.notifyObservers(results);\n }\n}\n/**\n * The module's name\n */\nWebXRHitTest.Name = WebXRFeatureName.HIT_TEST;\n/**\n * The (Babylon) version of this module.\n * This is an integer representing the implementation version.\n * This number does not correspond to the WebXR specs version\n */\nWebXRHitTest.Version = 2;\n//register the plugin versions\nWebXRFeaturesManager.AddWebXRFeature(WebXRHitTest.Name, (xrSessionManager, options) => {\n return () => new WebXRHitTest(xrSessionManager, options);\n}, WebXRHitTest.Version, false);","map":{"version":3,"names":["WebXRFeaturesManager","WebXRFeatureName","Observable","Vector3","Matrix","Quaternion","WebXRAbstractFeature","Tools","WebXRHitTest","constructor","_xrSessionManager","options","_tmpMat","_tmpPos","_tmpQuat","_initHitTestSource","referenceSpace","offsetRay","XRRay","hitTestOptions","space","useReferenceSpace","viewerReferenceSpace","entityTypes","Warn","session","requestHitTestSource","then","hitTestSource","_xrHitTestSource","cancel","autoCloneTransformation","onHitTestResultObservable","paused","xrNativeFeatureName","attach","disablePermanentHitTest","onXRReferenceSpaceChanged","add","enableTransientHitTest","transientOffsetRay","requestHitTestSourceForTransientInput","profile","transientHitTestProfile","hitSource","_transientXrHitTestSource","detach","removeCallback","dispose","clear","_onXRFrame","frame","attached","results","getHitTestResults","_processWebXRHitTestResult","hitTestResultsPerInputSource","getHitTestResultsForTransientInput","forEach","resultsPerInputSource","inputSource","hitTestResults","hitTestResult","pose","getPose","pos","transform","position","quat","orientation","set","x","y","z","scaleInPlace","worldScalingFactor","w","FromFloat32ArrayToRefScaled","matrix","scene","useRightHandedSystem","toggleModelMatrixHandInPlace","result","clone","rotationQuaternion","transformationMatrix","isTransient","xrHitResult","push","notifyObservers","Name","HIT_TEST","Version","AddWebXRFeature","xrSessionManager"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/XR/features/WebXRHitTest.js"],"sourcesContent":["import { WebXRFeaturesManager, WebXRFeatureName } from \"../webXRFeaturesManager.js\";\nimport { Observable } from \"../../Misc/observable.js\";\nimport { Vector3, Matrix, Quaternion } from \"../../Maths/math.vector.js\";\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature.js\";\nimport { Tools } from \"../../Misc/tools.js\";\n/**\n * The currently-working hit-test module.\n * Hit test (or Ray-casting) is used to interact with the real world.\n * For further information read here - https://github.com/immersive-web/hit-test\n *\n * Tested on chrome (mobile) 80.\n */\nexport class WebXRHitTest extends WebXRAbstractFeature {\n /**\n * Creates a new instance of the hit test feature\n * @param _xrSessionManager an instance of WebXRSessionManager\n * @param options options to use when constructing this feature\n */\n constructor(_xrSessionManager, \n /**\n * [Empty Object] options to use when constructing this feature\n */\n options = {}) {\n super(_xrSessionManager);\n this.options = options;\n this._tmpMat = new Matrix();\n this._tmpPos = new Vector3();\n this._tmpQuat = new Quaternion();\n this._initHitTestSource = (referenceSpace) => {\n if (!referenceSpace) {\n return;\n }\n const offsetRay = new XRRay(this.options.offsetRay || {});\n const hitTestOptions = {\n space: this.options.useReferenceSpace ? referenceSpace : this._xrSessionManager.viewerReferenceSpace,\n offsetRay: offsetRay,\n };\n if (this.options.entityTypes) {\n hitTestOptions.entityTypes = this.options.entityTypes;\n }\n if (!hitTestOptions.space) {\n Tools.Warn(\"waiting for viewer reference space to initialize\");\n return;\n }\n this._xrSessionManager.session.requestHitTestSource(hitTestOptions).then((hitTestSource) => {\n if (this._xrHitTestSource) {\n this._xrHitTestSource.cancel();\n }\n this._xrHitTestSource = hitTestSource;\n });\n };\n /**\n * When set to true, each hit test will have its own position/rotation objects\n * When set to false, position and rotation objects will be reused for each hit test. It is expected that\n * the developers will clone them or copy them as they see fit.\n */\n this.autoCloneTransformation = false;\n /**\n * Triggered when new babylon (transformed) hit test results are available\n * Note - this will be called when results come back from the device. It can be an empty array!!\n */\n this.onHitTestResultObservable = new Observable();\n /**\n * Use this to temporarily pause hit test checks.\n */\n this.paused = false;\n this.xrNativeFeatureName = \"hit-test\";\n Tools.Warn(\"Hit test is an experimental and unstable feature.\");\n }\n /**\n * attach this feature\n * Will usually be called by the features manager\n *\n * @returns true if successful.\n */\n attach() {\n if (!super.attach()) {\n return false;\n }\n // Feature enabled, but not available\n if (!this._xrSessionManager.session.requestHitTestSource) {\n return false;\n }\n if (!this.options.disablePermanentHitTest) {\n if (this._xrSessionManager.referenceSpace) {\n this._initHitTestSource(this._xrSessionManager.referenceSpace);\n }\n this._xrSessionManager.onXRReferenceSpaceChanged.add(this._initHitTestSource);\n }\n if (this.options.enableTransientHitTest) {\n const offsetRay = new XRRay(this.options.transientOffsetRay || {});\n this._xrSessionManager.session.requestHitTestSourceForTransientInput({\n profile: this.options.transientHitTestProfile || \"generic-touchscreen\",\n offsetRay,\n entityTypes: this.options.entityTypes,\n }).then((hitSource) => {\n this._transientXrHitTestSource = hitSource;\n });\n }\n return true;\n }\n /**\n * detach this feature.\n * Will usually be called by the features manager\n *\n * @returns true if successful.\n */\n detach() {\n if (!super.detach()) {\n return false;\n }\n if (this._xrHitTestSource) {\n this._xrHitTestSource.cancel();\n this._xrHitTestSource = null;\n }\n this._xrSessionManager.onXRReferenceSpaceChanged.removeCallback(this._initHitTestSource);\n if (this._transientXrHitTestSource) {\n this._transientXrHitTestSource.cancel();\n this._transientXrHitTestSource = null;\n }\n return true;\n }\n /**\n * Dispose this feature and all of the resources attached\n */\n dispose() {\n super.dispose();\n this.onHitTestResultObservable.clear();\n }\n _onXRFrame(frame) {\n // make sure we do nothing if (async) not attached\n if (!this.attached || this.paused) {\n return;\n }\n if (this._xrHitTestSource) {\n const results = frame.getHitTestResults(this._xrHitTestSource);\n this._processWebXRHitTestResult(results);\n }\n if (this._transientXrHitTestSource) {\n const hitTestResultsPerInputSource = frame.getHitTestResultsForTransientInput(this._transientXrHitTestSource);\n hitTestResultsPerInputSource.forEach((resultsPerInputSource) => {\n this._processWebXRHitTestResult(resultsPerInputSource.results, resultsPerInputSource.inputSource);\n });\n }\n }\n _processWebXRHitTestResult(hitTestResults, inputSource) {\n const results = [];\n hitTestResults.forEach((hitTestResult) => {\n const pose = hitTestResult.getPose(this._xrSessionManager.referenceSpace);\n if (!pose) {\n return;\n }\n const pos = pose.transform.position;\n const quat = pose.transform.orientation;\n this._tmpPos.set(pos.x, pos.y, pos.z).scaleInPlace(this._xrSessionManager.worldScalingFactor);\n this._tmpQuat.set(quat.x, quat.y, quat.z, quat.w);\n Matrix.FromFloat32ArrayToRefScaled(pose.transform.matrix, 0, 1, this._tmpMat);\n if (!this._xrSessionManager.scene.useRightHandedSystem) {\n this._tmpPos.z *= -1;\n this._tmpQuat.z *= -1;\n this._tmpQuat.w *= -1;\n this._tmpMat.toggleModelMatrixHandInPlace();\n }\n const result = {\n position: this.autoCloneTransformation ? this._tmpPos.clone() : this._tmpPos,\n rotationQuaternion: this.autoCloneTransformation ? this._tmpQuat.clone() : this._tmpQuat,\n transformationMatrix: this.autoCloneTransformation ? this._tmpMat.clone() : this._tmpMat,\n inputSource: inputSource,\n isTransient: !!inputSource,\n xrHitResult: hitTestResult,\n };\n results.push(result);\n });\n this.onHitTestResultObservable.notifyObservers(results);\n }\n}\n/**\n * The module's name\n */\nWebXRHitTest.Name = WebXRFeatureName.HIT_TEST;\n/**\n * The (Babylon) version of this module.\n * This is an integer representing the implementation version.\n * This number does not correspond to the WebXR specs version\n */\nWebXRHitTest.Version = 2;\n//register the plugin versions\nWebXRFeaturesManager.AddWebXRFeature(WebXRHitTest.Name, (xrSessionManager, options) => {\n return () => new WebXRHitTest(xrSessionManager, options);\n}, WebXRHitTest.Version, false);\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}