1 |
- {"ast":null,"code":"import { WebXRFeaturesManager, WebXRFeatureName } from \"../webXRFeaturesManager.js\";\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature.js\";\nimport { Observable } from \"../../Misc/observable.js\";\nimport { Vector3, TmpVectors } from \"../../Maths/math.vector.js\";\nimport { Ray } from \"../../Culling/ray.js\";\n/**\n * The WebXR Eye Tracking feature grabs eye data from the device and provides it in an easy-access format.\n * Currently only enabled for BabylonNative applications.\n */\nexport class WebXREyeTracking extends WebXRAbstractFeature {\n /**\n * Creates a new instance of the XR eye tracking feature.\n * @param _xrSessionManager An instance of WebXRSessionManager.\n */\n constructor(_xrSessionManager) {\n super(_xrSessionManager);\n /**\n * This observable will notify registered observers when eye tracking starts\n */\n this.onEyeTrackingStartedObservable = new Observable();\n /**\n * This observable will notify registered observers when eye tracking ends\n */\n this.onEyeTrackingEndedObservable = new Observable();\n /**\n * This observable will notify registered observers on each frame that has valid tracking\n */\n this.onEyeTrackingFrameUpdateObservable = new Observable();\n this._eyeTrackingStartListener = event => {\n this._latestEyeSpace = event.gazeSpace;\n this._gazeRay = new Ray(Vector3.Zero(), Vector3.Forward());\n this.onEyeTrackingStartedObservable.notifyObservers(this._gazeRay);\n };\n this._eyeTrackingEndListener = () => {\n this._latestEyeSpace = null;\n this._gazeRay = null;\n this.onEyeTrackingEndedObservable.notifyObservers();\n };\n this.xrNativeFeatureName = \"eye-tracking\";\n if (this._xrSessionManager.session) {\n this._init();\n } else {\n this._xrSessionManager.onXRSessionInit.addOnce(() => {\n this._init();\n });\n }\n }\n /**\n * Dispose this feature and all of the resources attached.\n */\n dispose() {\n super.dispose();\n this._xrSessionManager.session.removeEventListener(\"eyetrackingstart\", this._eyeTrackingStartListener);\n this._xrSessionManager.session.removeEventListener(\"eyetrackingend\", this._eyeTrackingEndListener);\n this.onEyeTrackingStartedObservable.clear();\n this.onEyeTrackingEndedObservable.clear();\n this.onEyeTrackingFrameUpdateObservable.clear();\n }\n /**\n * Returns whether the gaze data is valid or not\n * @returns true if the data is valid\n */\n get isEyeGazeValid() {\n return !!this._gazeRay;\n }\n /**\n * Get a reference to the gaze ray. This data is valid while eye tracking persists, and will be set to null when gaze data is no longer available\n * @returns a reference to the gaze ray if it exists and is valid, returns null otherwise.\n */\n getEyeGaze() {\n return this._gazeRay;\n }\n _onXRFrame(frame) {\n if (!this.attached || !frame) {\n return;\n }\n if (this._latestEyeSpace && this._gazeRay) {\n const pose = frame.getPose(this._latestEyeSpace, this._xrSessionManager.referenceSpace);\n if (pose) {\n this._gazeRay.origin.set(pose.transform.position.x, pose.transform.position.y, pose.transform.position.z).scaleInPlace(this._xrSessionManager.worldScalingFactor);\n const quat = pose.transform.orientation;\n TmpVectors.Quaternion[0].set(quat.x, quat.y, quat.z, quat.w);\n if (!this._xrSessionManager.scene.useRightHandedSystem) {\n this._gazeRay.origin.z *= -1;\n TmpVectors.Quaternion[0].z *= -1;\n TmpVectors.Quaternion[0].w *= -1;\n Vector3.LeftHandedForwardReadOnly.rotateByQuaternionToRef(TmpVectors.Quaternion[0], this._gazeRay.direction);\n } else {\n Vector3.RightHandedForwardReadOnly.rotateByQuaternionToRef(TmpVectors.Quaternion[0], this._gazeRay.direction);\n }\n this.onEyeTrackingFrameUpdateObservable.notifyObservers(this._gazeRay);\n }\n }\n }\n _init() {\n // Only supported by BabylonNative\n if (this._xrSessionManager.isNative) {\n this._xrSessionManager.session.addEventListener(\"eyetrackingstart\", this._eyeTrackingStartListener);\n this._xrSessionManager.session.addEventListener(\"eyetrackingend\", this._eyeTrackingEndListener);\n }\n }\n}\n/**\n * The module's name\n */\nWebXREyeTracking.Name = WebXRFeatureName.EYE_TRACKING;\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 */\nWebXREyeTracking.Version = 1;\nWebXRFeaturesManager.AddWebXRFeature(WebXREyeTracking.Name, xrSessionManager => {\n return () => new WebXREyeTracking(xrSessionManager);\n}, WebXREyeTracking.Version, false);","map":{"version":3,"names":["WebXRFeaturesManager","WebXRFeatureName","WebXRAbstractFeature","Observable","Vector3","TmpVectors","Ray","WebXREyeTracking","constructor","_xrSessionManager","onEyeTrackingStartedObservable","onEyeTrackingEndedObservable","onEyeTrackingFrameUpdateObservable","_eyeTrackingStartListener","event","_latestEyeSpace","gazeSpace","_gazeRay","Zero","Forward","notifyObservers","_eyeTrackingEndListener","xrNativeFeatureName","session","_init","onXRSessionInit","addOnce","dispose","removeEventListener","clear","isEyeGazeValid","getEyeGaze","_onXRFrame","frame","attached","pose","getPose","referenceSpace","origin","set","transform","position","x","y","z","scaleInPlace","worldScalingFactor","quat","orientation","Quaternion","w","scene","useRightHandedSystem","LeftHandedForwardReadOnly","rotateByQuaternionToRef","direction","RightHandedForwardReadOnly","isNative","addEventListener","Name","EYE_TRACKING","Version","AddWebXRFeature","xrSessionManager"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/XR/features/WebXREyeTracking.js"],"sourcesContent":["import { WebXRFeaturesManager, WebXRFeatureName } from \"../webXRFeaturesManager.js\";\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature.js\";\nimport { Observable } from \"../../Misc/observable.js\";\nimport { Vector3, TmpVectors } from \"../../Maths/math.vector.js\";\nimport { Ray } from \"../../Culling/ray.js\";\n/**\n * The WebXR Eye Tracking feature grabs eye data from the device and provides it in an easy-access format.\n * Currently only enabled for BabylonNative applications.\n */\nexport class WebXREyeTracking extends WebXRAbstractFeature {\n /**\n * Creates a new instance of the XR eye tracking feature.\n * @param _xrSessionManager An instance of WebXRSessionManager.\n */\n constructor(_xrSessionManager) {\n super(_xrSessionManager);\n /**\n * This observable will notify registered observers when eye tracking starts\n */\n this.onEyeTrackingStartedObservable = new Observable();\n /**\n * This observable will notify registered observers when eye tracking ends\n */\n this.onEyeTrackingEndedObservable = new Observable();\n /**\n * This observable will notify registered observers on each frame that has valid tracking\n */\n this.onEyeTrackingFrameUpdateObservable = new Observable();\n this._eyeTrackingStartListener = (event) => {\n this._latestEyeSpace = event.gazeSpace;\n this._gazeRay = new Ray(Vector3.Zero(), Vector3.Forward());\n this.onEyeTrackingStartedObservable.notifyObservers(this._gazeRay);\n };\n this._eyeTrackingEndListener = () => {\n this._latestEyeSpace = null;\n this._gazeRay = null;\n this.onEyeTrackingEndedObservable.notifyObservers();\n };\n this.xrNativeFeatureName = \"eye-tracking\";\n if (this._xrSessionManager.session) {\n this._init();\n }\n else {\n this._xrSessionManager.onXRSessionInit.addOnce(() => {\n this._init();\n });\n }\n }\n /**\n * Dispose this feature and all of the resources attached.\n */\n dispose() {\n super.dispose();\n this._xrSessionManager.session.removeEventListener(\"eyetrackingstart\", this._eyeTrackingStartListener);\n this._xrSessionManager.session.removeEventListener(\"eyetrackingend\", this._eyeTrackingEndListener);\n this.onEyeTrackingStartedObservable.clear();\n this.onEyeTrackingEndedObservable.clear();\n this.onEyeTrackingFrameUpdateObservable.clear();\n }\n /**\n * Returns whether the gaze data is valid or not\n * @returns true if the data is valid\n */\n get isEyeGazeValid() {\n return !!this._gazeRay;\n }\n /**\n * Get a reference to the gaze ray. This data is valid while eye tracking persists, and will be set to null when gaze data is no longer available\n * @returns a reference to the gaze ray if it exists and is valid, returns null otherwise.\n */\n getEyeGaze() {\n return this._gazeRay;\n }\n _onXRFrame(frame) {\n if (!this.attached || !frame) {\n return;\n }\n if (this._latestEyeSpace && this._gazeRay) {\n const pose = frame.getPose(this._latestEyeSpace, this._xrSessionManager.referenceSpace);\n if (pose) {\n this._gazeRay.origin.set(pose.transform.position.x, pose.transform.position.y, pose.transform.position.z).scaleInPlace(this._xrSessionManager.worldScalingFactor);\n const quat = pose.transform.orientation;\n TmpVectors.Quaternion[0].set(quat.x, quat.y, quat.z, quat.w);\n if (!this._xrSessionManager.scene.useRightHandedSystem) {\n this._gazeRay.origin.z *= -1;\n TmpVectors.Quaternion[0].z *= -1;\n TmpVectors.Quaternion[0].w *= -1;\n Vector3.LeftHandedForwardReadOnly.rotateByQuaternionToRef(TmpVectors.Quaternion[0], this._gazeRay.direction);\n }\n else {\n Vector3.RightHandedForwardReadOnly.rotateByQuaternionToRef(TmpVectors.Quaternion[0], this._gazeRay.direction);\n }\n this.onEyeTrackingFrameUpdateObservable.notifyObservers(this._gazeRay);\n }\n }\n }\n _init() {\n // Only supported by BabylonNative\n if (this._xrSessionManager.isNative) {\n this._xrSessionManager.session.addEventListener(\"eyetrackingstart\", this._eyeTrackingStartListener);\n this._xrSessionManager.session.addEventListener(\"eyetrackingend\", this._eyeTrackingEndListener);\n }\n }\n}\n/**\n * The module's name\n */\nWebXREyeTracking.Name = WebXRFeatureName.EYE_TRACKING;\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 */\nWebXREyeTracking.Version = 1;\nWebXRFeaturesManager.AddWebXRFeature(WebXREyeTracking.Name, (xrSessionManager) => {\n return () => new WebXREyeTracking(xrSessionManager);\n}, WebXREyeTracking.Version, false);\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|