1 |
- {"ast":null,"code":"import _asyncToGenerator from \"F:/workspace/202226701027/huinongbao-app/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature.js\";\nimport { WebXRFeatureName, WebXRFeaturesManager } from \"../webXRFeaturesManager.js\";\nimport { Matrix, Quaternion } from \"../../Maths/math.vector.js\";\nimport { PhysicsImpostor } from \"../../Physics/v1/physicsImpostor.js\";\nimport { Observable } from \"../../Misc/observable.js\";\nimport { SceneLoader } from \"../../Loading/sceneLoader.js\";\nimport { Color3 } from \"../../Maths/math.color.js\";\nimport { NodeMaterial } from \"../../Materials/Node/nodeMaterial.js\";\nimport { Material } from \"../../Materials/material.js\";\nimport { CreateIcoSphere } from \"../../Meshes/Builders/icoSphereBuilder.js\";\nimport { TransformNode } from \"../../Meshes/transformNode.js\";\nimport { Axis } from \"../../Maths/math.axis.js\";\nimport { EngineStore } from \"../../Engines/engineStore.js\";\n\n/**\n * Parts of the hands divided to writs and finger names\n */\nexport var HandPart;\n(function (HandPart) {\n /**\n * HandPart - Wrist\n */\n HandPart[\"WRIST\"] = \"wrist\";\n /**\n * HandPart - The thumb\n */\n HandPart[\"THUMB\"] = \"thumb\";\n /**\n * HandPart - Index finger\n */\n HandPart[\"INDEX\"] = \"index\";\n /**\n * HandPart - Middle finger\n */\n HandPart[\"MIDDLE\"] = \"middle\";\n /**\n * HandPart - Ring finger\n */\n HandPart[\"RING\"] = \"ring\";\n /**\n * HandPart - Little finger\n */\n HandPart[\"LITTLE\"] = \"little\";\n})(HandPart || (HandPart = {}));\n/**\n * Joints of the hand as defined by the WebXR specification.\n * https://immersive-web.github.io/webxr-hand-input/#skeleton-joints-section\n */\nexport var WebXRHandJoint;\n(function (WebXRHandJoint) {\n /** Wrist */\n WebXRHandJoint[\"WRIST\"] = \"wrist\";\n /** Thumb near wrist */\n WebXRHandJoint[\"THUMB_METACARPAL\"] = \"thumb-metacarpal\";\n /** Thumb first knuckle */\n WebXRHandJoint[\"THUMB_PHALANX_PROXIMAL\"] = \"thumb-phalanx-proximal\";\n /** Thumb second knuckle */\n WebXRHandJoint[\"THUMB_PHALANX_DISTAL\"] = \"thumb-phalanx-distal\";\n /** Thumb tip */\n WebXRHandJoint[\"THUMB_TIP\"] = \"thumb-tip\";\n /** Index finger near wrist */\n WebXRHandJoint[\"INDEX_FINGER_METACARPAL\"] = \"index-finger-metacarpal\";\n /** Index finger first knuckle */\n WebXRHandJoint[\"INDEX_FINGER_PHALANX_PROXIMAL\"] = \"index-finger-phalanx-proximal\";\n /** Index finger second knuckle */\n WebXRHandJoint[\"INDEX_FINGER_PHALANX_INTERMEDIATE\"] = \"index-finger-phalanx-intermediate\";\n /** Index finger third knuckle */\n WebXRHandJoint[\"INDEX_FINGER_PHALANX_DISTAL\"] = \"index-finger-phalanx-distal\";\n /** Index finger tip */\n WebXRHandJoint[\"INDEX_FINGER_TIP\"] = \"index-finger-tip\";\n /** Middle finger near wrist */\n WebXRHandJoint[\"MIDDLE_FINGER_METACARPAL\"] = \"middle-finger-metacarpal\";\n /** Middle finger first knuckle */\n WebXRHandJoint[\"MIDDLE_FINGER_PHALANX_PROXIMAL\"] = \"middle-finger-phalanx-proximal\";\n /** Middle finger second knuckle */\n WebXRHandJoint[\"MIDDLE_FINGER_PHALANX_INTERMEDIATE\"] = \"middle-finger-phalanx-intermediate\";\n /** Middle finger third knuckle */\n WebXRHandJoint[\"MIDDLE_FINGER_PHALANX_DISTAL\"] = \"middle-finger-phalanx-distal\";\n /** Middle finger tip */\n WebXRHandJoint[\"MIDDLE_FINGER_TIP\"] = \"middle-finger-tip\";\n /** Ring finger near wrist */\n WebXRHandJoint[\"RING_FINGER_METACARPAL\"] = \"ring-finger-metacarpal\";\n /** Ring finger first knuckle */\n WebXRHandJoint[\"RING_FINGER_PHALANX_PROXIMAL\"] = \"ring-finger-phalanx-proximal\";\n /** Ring finger second knuckle */\n WebXRHandJoint[\"RING_FINGER_PHALANX_INTERMEDIATE\"] = \"ring-finger-phalanx-intermediate\";\n /** Ring finger third knuckle */\n WebXRHandJoint[\"RING_FINGER_PHALANX_DISTAL\"] = \"ring-finger-phalanx-distal\";\n /** Ring finger tip */\n WebXRHandJoint[\"RING_FINGER_TIP\"] = \"ring-finger-tip\";\n /** Pinky finger near wrist */\n WebXRHandJoint[\"PINKY_FINGER_METACARPAL\"] = \"pinky-finger-metacarpal\";\n /** Pinky finger first knuckle */\n WebXRHandJoint[\"PINKY_FINGER_PHALANX_PROXIMAL\"] = \"pinky-finger-phalanx-proximal\";\n /** Pinky finger second knuckle */\n WebXRHandJoint[\"PINKY_FINGER_PHALANX_INTERMEDIATE\"] = \"pinky-finger-phalanx-intermediate\";\n /** Pinky finger third knuckle */\n WebXRHandJoint[\"PINKY_FINGER_PHALANX_DISTAL\"] = \"pinky-finger-phalanx-distal\";\n /** Pinky finger tip */\n WebXRHandJoint[\"PINKY_FINGER_TIP\"] = \"pinky-finger-tip\";\n})(WebXRHandJoint || (WebXRHandJoint = {}));\nconst handJointReferenceArray = [\"wrist\" /* WebXRHandJoint.WRIST */, \"thumb-metacarpal\" /* WebXRHandJoint.THUMB_METACARPAL */, \"thumb-phalanx-proximal\" /* WebXRHandJoint.THUMB_PHALANX_PROXIMAL */, \"thumb-phalanx-distal\" /* WebXRHandJoint.THUMB_PHALANX_DISTAL */, \"thumb-tip\" /* WebXRHandJoint.THUMB_TIP */, \"index-finger-metacarpal\" /* WebXRHandJoint.INDEX_FINGER_METACARPAL */, \"index-finger-phalanx-proximal\" /* WebXRHandJoint.INDEX_FINGER_PHALANX_PROXIMAL */, \"index-finger-phalanx-intermediate\" /* WebXRHandJoint.INDEX_FINGER_PHALANX_INTERMEDIATE */, \"index-finger-phalanx-distal\" /* WebXRHandJoint.INDEX_FINGER_PHALANX_DISTAL */, \"index-finger-tip\" /* WebXRHandJoint.INDEX_FINGER_TIP */, \"middle-finger-metacarpal\" /* WebXRHandJoint.MIDDLE_FINGER_METACARPAL */, \"middle-finger-phalanx-proximal\" /* WebXRHandJoint.MIDDLE_FINGER_PHALANX_PROXIMAL */, \"middle-finger-phalanx-intermediate\" /* WebXRHandJoint.MIDDLE_FINGER_PHALANX_INTERMEDIATE */, \"middle-finger-phalanx-distal\" /* WebXRHandJoint.MIDDLE_FINGER_PHALANX_DISTAL */, \"middle-finger-tip\" /* WebXRHandJoint.MIDDLE_FINGER_TIP */, \"ring-finger-metacarpal\" /* WebXRHandJoint.RING_FINGER_METACARPAL */, \"ring-finger-phalanx-proximal\" /* WebXRHandJoint.RING_FINGER_PHALANX_PROXIMAL */, \"ring-finger-phalanx-intermediate\" /* WebXRHandJoint.RING_FINGER_PHALANX_INTERMEDIATE */, \"ring-finger-phalanx-distal\" /* WebXRHandJoint.RING_FINGER_PHALANX_DISTAL */, \"ring-finger-tip\" /* WebXRHandJoint.RING_FINGER_TIP */, \"pinky-finger-metacarpal\" /* WebXRHandJoint.PINKY_FINGER_METACARPAL */, \"pinky-finger-phalanx-proximal\" /* WebXRHandJoint.PINKY_FINGER_PHALANX_PROXIMAL */, \"pinky-finger-phalanx-intermediate\" /* WebXRHandJoint.PINKY_FINGER_PHALANX_INTERMEDIATE */, \"pinky-finger-phalanx-distal\" /* WebXRHandJoint.PINKY_FINGER_PHALANX_DISTAL */, \"pinky-finger-tip\" /* WebXRHandJoint.PINKY_FINGER_TIP */];\nconst handPartsDefinition = {\n [\"wrist\" /* HandPart.WRIST */]: [\"wrist\" /* WebXRHandJoint.WRIST */],\n [\"thumb\" /* HandPart.THUMB */]: [\"thumb-metacarpal\" /* WebXRHandJoint.THUMB_METACARPAL */, \"thumb-phalanx-proximal\" /* WebXRHandJoint.THUMB_PHALANX_PROXIMAL */, \"thumb-phalanx-distal\" /* WebXRHandJoint.THUMB_PHALANX_DISTAL */, \"thumb-tip\" /* WebXRHandJoint.THUMB_TIP */],\n [\"index\" /* HandPart.INDEX */]: [\"index-finger-metacarpal\" /* WebXRHandJoint.INDEX_FINGER_METACARPAL */, \"index-finger-phalanx-proximal\" /* WebXRHandJoint.INDEX_FINGER_PHALANX_PROXIMAL */, \"index-finger-phalanx-intermediate\" /* WebXRHandJoint.INDEX_FINGER_PHALANX_INTERMEDIATE */, \"index-finger-phalanx-distal\" /* WebXRHandJoint.INDEX_FINGER_PHALANX_DISTAL */, \"index-finger-tip\" /* WebXRHandJoint.INDEX_FINGER_TIP */],\n [\"middle\" /* HandPart.MIDDLE */]: [\"middle-finger-metacarpal\" /* WebXRHandJoint.MIDDLE_FINGER_METACARPAL */, \"middle-finger-phalanx-proximal\" /* WebXRHandJoint.MIDDLE_FINGER_PHALANX_PROXIMAL */, \"middle-finger-phalanx-intermediate\" /* WebXRHandJoint.MIDDLE_FINGER_PHALANX_INTERMEDIATE */, \"middle-finger-phalanx-distal\" /* WebXRHandJoint.MIDDLE_FINGER_PHALANX_DISTAL */, \"middle-finger-tip\" /* WebXRHandJoint.MIDDLE_FINGER_TIP */],\n [\"ring\" /* HandPart.RING */]: [\"ring-finger-metacarpal\" /* WebXRHandJoint.RING_FINGER_METACARPAL */, \"ring-finger-phalanx-proximal\" /* WebXRHandJoint.RING_FINGER_PHALANX_PROXIMAL */, \"ring-finger-phalanx-intermediate\" /* WebXRHandJoint.RING_FINGER_PHALANX_INTERMEDIATE */, \"ring-finger-phalanx-distal\" /* WebXRHandJoint.RING_FINGER_PHALANX_DISTAL */, \"ring-finger-tip\" /* WebXRHandJoint.RING_FINGER_TIP */],\n [\"little\" /* HandPart.LITTLE */]: [\"pinky-finger-metacarpal\" /* WebXRHandJoint.PINKY_FINGER_METACARPAL */, \"pinky-finger-phalanx-proximal\" /* WebXRHandJoint.PINKY_FINGER_PHALANX_PROXIMAL */, \"pinky-finger-phalanx-intermediate\" /* WebXRHandJoint.PINKY_FINGER_PHALANX_INTERMEDIATE */, \"pinky-finger-phalanx-distal\" /* WebXRHandJoint.PINKY_FINGER_PHALANX_DISTAL */, \"pinky-finger-tip\" /* WebXRHandJoint.PINKY_FINGER_TIP */]\n};\n/**\n * Representing a single hand (with its corresponding native XRHand object)\n */\nexport class WebXRHand {\n /**\n * Get the hand mesh.\n */\n get handMesh() {\n return this._handMesh;\n }\n /**\n * Get meshes of part of the hand.\n * @param part The part of hand to get.\n * @returns An array of meshes that correlate to the hand part requested.\n */\n getHandPartMeshes(part) {\n return handPartsDefinition[part].map(name => this._jointMeshes[handJointReferenceArray.indexOf(name)]);\n }\n /**\n * Retrieves a mesh linked to a named joint in the hand.\n * @param jointName The name of the joint.\n * @returns An AbstractMesh whose position corresponds with the joint position.\n */\n getJointMesh(jointName) {\n return this._jointMeshes[handJointReferenceArray.indexOf(jointName)];\n }\n /**\n * Construct a new hand object\n * @param xrController The controller to which the hand correlates.\n * @param _jointMeshes The meshes to be used to track the hand joints.\n * @param _handMesh An optional hand mesh.\n * @param rigMapping An optional rig mapping for the hand mesh.\n * If not provided (but a hand mesh is provided),\n * it will be assumed that the hand mesh's bones are named\n * directly after the WebXR bone names.\n * @param _leftHandedMeshes Are the hand meshes left-handed-system meshes\n * @param _jointsInvisible Are the tracked joint meshes visible\n * @param _jointScaleFactor Scale factor for all joint meshes\n */\n constructor( /** The controller to which the hand correlates. */\n xrController, _jointMeshes, _handMesh,\n /** An optional rig mapping for the hand mesh. If not provided (but a hand mesh is provided),\n * it will be assumed that the hand mesh's bones are named directly after the WebXR bone names. */\n rigMapping, _leftHandedMeshes = false, _jointsInvisible = false, _jointScaleFactor = 1) {\n this.xrController = xrController;\n this._jointMeshes = _jointMeshes;\n this._handMesh = _handMesh;\n this.rigMapping = rigMapping;\n this._leftHandedMeshes = _leftHandedMeshes;\n this._jointsInvisible = _jointsInvisible;\n this._jointScaleFactor = _jointScaleFactor;\n /**\n * This observable will notify registered observers when the hand object has been set with a new mesh.\n * you can get the hand mesh using `webxrHand.handMesh`\n */\n this.onHandMeshSetObservable = new Observable();\n /**\n * Transform nodes that will directly receive the transforms from the WebXR matrix data.\n */\n this._jointTransforms = new Array(handJointReferenceArray.length);\n /**\n * The float array that will directly receive the transform matrix data from WebXR.\n */\n this._jointTransformMatrices = new Float32Array(handJointReferenceArray.length * 16);\n this._tempJointMatrix = new Matrix();\n /**\n * The float array that will directly receive the joint radii from WebXR.\n */\n this._jointRadii = new Float32Array(handJointReferenceArray.length);\n this._scene = _jointMeshes[0].getScene();\n // Initialize the joint transform quaternions and link the transforms to the bones.\n for (let jointIdx = 0; jointIdx < this._jointTransforms.length; jointIdx++) {\n this._jointTransforms[jointIdx] = new TransformNode(handJointReferenceArray[jointIdx], this._scene);\n this._jointTransforms[jointIdx].rotationQuaternion = new Quaternion();\n // Set the rotation quaternion so we can use it later for tracking.\n if (_jointMeshes[jointIdx].rotationQuaternion) {\n _jointMeshes[jointIdx].rotationQuaternion = new Quaternion();\n } else {\n var _jointMeshes$jointIdx;\n (_jointMeshes$jointIdx = _jointMeshes[jointIdx].rotationQuaternion) === null || _jointMeshes$jointIdx === void 0 || _jointMeshes$jointIdx.set(0, 0, 0, 1);\n }\n }\n if (_handMesh) {\n // Note that this logic needs to happen after we initialize the joint tracking transform nodes.\n this.setHandMesh(_handMesh, rigMapping);\n }\n // hide the motion controller, if available/loaded\n if (this.xrController.motionController) {\n if (this.xrController.motionController.rootMesh) {\n this.xrController.motionController.rootMesh.dispose(false, true);\n }\n }\n this.xrController.onMotionControllerInitObservable.add(motionController => {\n motionController._doNotLoadControllerMesh = true;\n });\n }\n /**\n * Sets the current hand mesh to render for the WebXRHand.\n * @param handMesh The rigged hand mesh that will be tracked to the user's hand.\n * @param rigMapping The mapping from XRHandJoint to bone names to use with the mesh.\n * @param _xrSessionManager The XRSessionManager used to initialize the hand mesh.\n */\n setHandMesh(handMesh, rigMapping, _xrSessionManager) {\n this._handMesh = handMesh;\n // Avoid any strange frustum culling. We will manually control visibility via attach and detach.\n handMesh.alwaysSelectAsActiveMesh = true;\n handMesh.getChildMeshes().forEach(mesh => {\n mesh.alwaysSelectAsActiveMesh = true;\n });\n // Link the bones in the hand mesh to the transform nodes that will be bound to the WebXR tracked joints.\n if (this._handMesh.skeleton) {\n const handMeshSkeleton = this._handMesh.skeleton;\n handJointReferenceArray.forEach((jointName, jointIdx) => {\n const jointBoneIdx = handMeshSkeleton.getBoneIndexByName(rigMapping ? rigMapping[jointName] : jointName);\n if (jointBoneIdx !== -1) {\n handMeshSkeleton.bones[jointBoneIdx].linkTransformNode(this._jointTransforms[jointIdx]);\n }\n });\n }\n this.onHandMeshSetObservable.notifyObservers(this);\n }\n /**\n * Update this hand from the latest xr frame.\n * @param xrFrame The latest frame received from WebXR.\n * @param referenceSpace The current viewer reference space.\n */\n updateFromXRFrame(xrFrame, referenceSpace) {\n const hand = this.xrController.inputSource.hand;\n if (!hand) {\n return;\n }\n // TODO: Modify webxr.d.ts to better match WebXR IDL so we don't need this any cast.\n const anyHand = hand;\n const jointSpaces = handJointReferenceArray.map(jointName => anyHand[jointName] || hand.get(jointName));\n let trackingSuccessful = false;\n if (xrFrame.fillPoses && xrFrame.fillJointRadii) {\n trackingSuccessful = xrFrame.fillPoses(jointSpaces, referenceSpace, this._jointTransformMatrices) && xrFrame.fillJointRadii(jointSpaces, this._jointRadii);\n } else if (xrFrame.getJointPose) {\n trackingSuccessful = true;\n // Warning: This codepath is slow by comparison, only here for compat.\n for (let jointIdx = 0; jointIdx < jointSpaces.length; jointIdx++) {\n const jointPose = xrFrame.getJointPose(jointSpaces[jointIdx], referenceSpace);\n if (jointPose) {\n this._jointTransformMatrices.set(jointPose.transform.matrix, jointIdx * 16);\n this._jointRadii[jointIdx] = jointPose.radius || 0.008;\n } else {\n trackingSuccessful = false;\n break;\n }\n }\n }\n if (!trackingSuccessful) {\n return;\n }\n handJointReferenceArray.forEach((_jointName, jointIdx) => {\n const jointTransform = this._jointTransforms[jointIdx];\n Matrix.FromArrayToRef(this._jointTransformMatrices, jointIdx * 16, this._tempJointMatrix);\n this._tempJointMatrix.decompose(undefined, jointTransform.rotationQuaternion, jointTransform.position);\n // The radius we need to make the joint in order for it to roughly cover the joints of the user's real hand.\n const scaledJointRadius = this._jointRadii[jointIdx] * this._jointScaleFactor;\n const jointMesh = this._jointMeshes[jointIdx];\n jointMesh.isVisible = !this._handMesh && !this._jointsInvisible;\n jointMesh.position.copyFrom(jointTransform.position);\n jointMesh.rotationQuaternion.copyFrom(jointTransform.rotationQuaternion);\n jointMesh.scaling.setAll(scaledJointRadius);\n // The WebXR data comes as right-handed, so we might need to do some conversions.\n if (!this._scene.useRightHandedSystem) {\n jointMesh.position.z *= -1;\n jointMesh.rotationQuaternion.z *= -1;\n jointMesh.rotationQuaternion.w *= -1;\n if (this._leftHandedMeshes && this._handMesh) {\n jointTransform.position.z *= -1;\n jointTransform.rotationQuaternion.z *= -1;\n jointTransform.rotationQuaternion.w *= -1;\n }\n }\n });\n if (this._handMesh) {\n this._handMesh.isVisible = true;\n }\n }\n /**\n * Dispose this Hand object\n * @param disposeMeshes Should the meshes be disposed as well\n */\n dispose(disposeMeshes = false) {\n if (this._handMesh) {\n if (disposeMeshes) {\n var _this$_handMesh$skele;\n (_this$_handMesh$skele = this._handMesh.skeleton) === null || _this$_handMesh$skele === void 0 || _this$_handMesh$skele.dispose();\n this._handMesh.dispose(false, true);\n } else {\n this._handMesh.isVisible = false;\n }\n }\n this._jointTransforms.forEach(transform => transform.dispose());\n this._jointTransforms.length = 0;\n this.onHandMeshSetObservable.clear();\n }\n}\n/**\n * WebXR Hand Joint tracking feature, available for selected browsers and devices\n */\nexport class WebXRHandTracking extends WebXRAbstractFeature {\n static _GenerateTrackedJointMeshes(featureOptions, originalMesh = CreateIcoSphere(\"jointParent\", WebXRHandTracking._ICOSPHERE_PARAMS)) {\n const meshes = {};\n [\"left\", \"right\"].map(handedness => {\n var _featureOptions$joint;\n const trackedMeshes = [];\n originalMesh.isVisible = !!((_featureOptions$joint = featureOptions.jointMeshes) !== null && _featureOptions$joint !== void 0 && _featureOptions$joint.keepOriginalVisible);\n for (let i = 0; i < handJointReferenceArray.length; ++i) {\n var _featureOptions$joint2, _featureOptions$joint3;\n let newInstance = originalMesh.createInstance(`${handedness}-handJoint-${i}`);\n if ((_featureOptions$joint2 = featureOptions.jointMeshes) !== null && _featureOptions$joint2 !== void 0 && _featureOptions$joint2.onHandJointMeshGenerated) {\n const returnedMesh = featureOptions.jointMeshes.onHandJointMeshGenerated(newInstance, i, handedness);\n if (returnedMesh) {\n if (returnedMesh !== newInstance) {\n newInstance.dispose();\n newInstance = returnedMesh;\n }\n }\n }\n newInstance.isPickable = false;\n if ((_featureOptions$joint3 = featureOptions.jointMeshes) !== null && _featureOptions$joint3 !== void 0 && _featureOptions$joint3.enablePhysics) {\n var _featureOptions$joint4;\n const props = ((_featureOptions$joint4 = featureOptions.jointMeshes) === null || _featureOptions$joint4 === void 0 ? void 0 : _featureOptions$joint4.physicsProps) || {};\n // downscale the instances so that physics will be initialized correctly\n newInstance.scaling.setAll(0.02);\n const type = props.impostorType !== undefined ? props.impostorType : PhysicsImpostor.SphereImpostor;\n newInstance.physicsImpostor = new PhysicsImpostor(newInstance, type, {\n mass: 0,\n ...props\n });\n }\n newInstance.rotationQuaternion = new Quaternion();\n newInstance.isVisible = false;\n trackedMeshes.push(newInstance);\n }\n meshes[handedness] = trackedMeshes;\n });\n return {\n left: meshes.left,\n right: meshes.right\n };\n }\n static _GenerateDefaultHandMeshesAsync(scene, xrSessionManager, options) {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise( /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (resolve) {\n var _WebXRHandTracking$_R, _WebXRHandTracking$_L, _options$handMeshes, _xrSessionManager$_ge;\n const riggedMeshes = {};\n // check the cache, defensive\n if ((_WebXRHandTracking$_R = WebXRHandTracking._RightHandGLB) !== null && _WebXRHandTracking$_R !== void 0 && (_WebXRHandTracking$_R = _WebXRHandTracking$_R.meshes[1]) !== null && _WebXRHandTracking$_R !== void 0 && _WebXRHandTracking$_R.isDisposed()) {\n WebXRHandTracking._RightHandGLB = null;\n }\n if ((_WebXRHandTracking$_L = WebXRHandTracking._LeftHandGLB) !== null && _WebXRHandTracking$_L !== void 0 && (_WebXRHandTracking$_L = _WebXRHandTracking$_L.meshes[1]) !== null && _WebXRHandTracking$_L !== void 0 && _WebXRHandTracking$_L.isDisposed()) {\n WebXRHandTracking._LeftHandGLB = null;\n }\n const handsDefined = !!(WebXRHandTracking._RightHandGLB && WebXRHandTracking._LeftHandGLB);\n // load them in parallel\n const handGLBs = yield Promise.all([WebXRHandTracking._RightHandGLB || SceneLoader.ImportMeshAsync(\"\", WebXRHandTracking.DEFAULT_HAND_MODEL_BASE_URL, WebXRHandTracking.DEFAULT_HAND_MODEL_RIGHT_FILENAME, scene), WebXRHandTracking._LeftHandGLB || SceneLoader.ImportMeshAsync(\"\", WebXRHandTracking.DEFAULT_HAND_MODEL_BASE_URL, WebXRHandTracking.DEFAULT_HAND_MODEL_LEFT_FILENAME, scene)]);\n WebXRHandTracking._RightHandGLB = handGLBs[0];\n WebXRHandTracking._LeftHandGLB = handGLBs[1];\n const handShader = yield NodeMaterial.ParseFromFileAsync(\"handShader\", WebXRHandTracking.DEFAULT_HAND_MODEL_SHADER_URL, scene, undefined, true);\n // depth prepass and alpha mode\n handShader.needDepthPrePass = true;\n handShader.transparencyMode = Material.MATERIAL_ALPHABLEND;\n handShader.alphaMode = 2;\n // build node materials\n handShader.build(false);\n // shader\n const handColors = {\n base: Color3.FromInts(116, 63, 203),\n fresnel: Color3.FromInts(149, 102, 229),\n fingerColor: Color3.FromInts(177, 130, 255),\n tipFresnel: Color3.FromInts(220, 200, 255),\n ...(options === null || options === void 0 || (_options$handMeshes = options.handMeshes) === null || _options$handMeshes === void 0 ? void 0 : _options$handMeshes.customColors)\n };\n const handNodes = {\n base: handShader.getBlockByName(\"baseColor\"),\n fresnel: handShader.getBlockByName(\"fresnelColor\"),\n fingerColor: handShader.getBlockByName(\"fingerColor\"),\n tipFresnel: handShader.getBlockByName(\"tipFresnelColor\")\n };\n handNodes.base.value = handColors.base;\n handNodes.fresnel.value = handColors.fresnel;\n handNodes.fingerColor.value = handColors.fingerColor;\n handNodes.tipFresnel.value = handColors.tipFresnel;\n const isMultiview = (_xrSessionManager$_ge = xrSessionManager._getBaseLayerWrapper()) === null || _xrSessionManager$_ge === void 0 ? void 0 : _xrSessionManager$_ge.isMultiview;\n [\"left\", \"right\"].forEach(handedness => {\n var _options$handMeshes2;\n const handGLB = handedness == \"left\" ? WebXRHandTracking._LeftHandGLB : WebXRHandTracking._RightHandGLB;\n if (!handGLB) {\n // this should never happen!\n throw new Error(\"Could not load hand model\");\n }\n const handMesh = handGLB.meshes[1];\n handMesh._internalAbstractMeshDataInfo._computeBonesUsingShaders = true;\n // if in multiview do not use the material\n if (!isMultiview && !(options !== null && options !== void 0 && (_options$handMeshes2 = options.handMeshes) !== null && _options$handMeshes2 !== void 0 && _options$handMeshes2.disableHandShader)) {\n handMesh.material = handShader.clone(`${handedness}HandShaderClone`, true);\n }\n handMesh.isVisible = false;\n riggedMeshes[handedness] = handMesh;\n // single change for left handed systems\n if (!handsDefined && !scene.useRightHandedSystem) {\n handGLB.meshes[1].rotate(Axis.Y, Math.PI);\n }\n });\n handShader.dispose();\n resolve({\n left: riggedMeshes.left,\n right: riggedMeshes.right\n });\n });\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n }\n /**\n * Generates a mapping from XRHandJoint to bone name for the default hand mesh.\n * @param handedness The handedness being mapped for.\n * @returns A mapping from XRHandJoint to bone name.\n */\n static _GenerateDefaultHandMeshRigMapping(handedness) {\n const H = handedness == \"right\" ? \"R\" : \"L\";\n return {\n [\"wrist\" /* WebXRHandJoint.WRIST */]: `wrist_${H}`,\n [\"thumb-metacarpal\" /* WebXRHandJoint.THUMB_METACARPAL */]: `thumb_metacarpal_${H}`,\n [\"thumb-phalanx-proximal\" /* WebXRHandJoint.THUMB_PHALANX_PROXIMAL */]: `thumb_proxPhalanx_${H}`,\n [\"thumb-phalanx-distal\" /* WebXRHandJoint.THUMB_PHALANX_DISTAL */]: `thumb_distPhalanx_${H}`,\n [\"thumb-tip\" /* WebXRHandJoint.THUMB_TIP */]: `thumb_tip_${H}`,\n [\"index-finger-metacarpal\" /* WebXRHandJoint.INDEX_FINGER_METACARPAL */]: `index_metacarpal_${H}`,\n [\"index-finger-phalanx-proximal\" /* WebXRHandJoint.INDEX_FINGER_PHALANX_PROXIMAL */]: `index_proxPhalanx_${H}`,\n [\"index-finger-phalanx-intermediate\" /* WebXRHandJoint.INDEX_FINGER_PHALANX_INTERMEDIATE */]: `index_intPhalanx_${H}`,\n [\"index-finger-phalanx-distal\" /* WebXRHandJoint.INDEX_FINGER_PHALANX_DISTAL */]: `index_distPhalanx_${H}`,\n [\"index-finger-tip\" /* WebXRHandJoint.INDEX_FINGER_TIP */]: `index_tip_${H}`,\n [\"middle-finger-metacarpal\" /* WebXRHandJoint.MIDDLE_FINGER_METACARPAL */]: `middle_metacarpal_${H}`,\n [\"middle-finger-phalanx-proximal\" /* WebXRHandJoint.MIDDLE_FINGER_PHALANX_PROXIMAL */]: `middle_proxPhalanx_${H}`,\n [\"middle-finger-phalanx-intermediate\" /* WebXRHandJoint.MIDDLE_FINGER_PHALANX_INTERMEDIATE */]: `middle_intPhalanx_${H}`,\n [\"middle-finger-phalanx-distal\" /* WebXRHandJoint.MIDDLE_FINGER_PHALANX_DISTAL */]: `middle_distPhalanx_${H}`,\n [\"middle-finger-tip\" /* WebXRHandJoint.MIDDLE_FINGER_TIP */]: `middle_tip_${H}`,\n [\"ring-finger-metacarpal\" /* WebXRHandJoint.RING_FINGER_METACARPAL */]: `ring_metacarpal_${H}`,\n [\"ring-finger-phalanx-proximal\" /* WebXRHandJoint.RING_FINGER_PHALANX_PROXIMAL */]: `ring_proxPhalanx_${H}`,\n [\"ring-finger-phalanx-intermediate\" /* WebXRHandJoint.RING_FINGER_PHALANX_INTERMEDIATE */]: `ring_intPhalanx_${H}`,\n [\"ring-finger-phalanx-distal\" /* WebXRHandJoint.RING_FINGER_PHALANX_DISTAL */]: `ring_distPhalanx_${H}`,\n [\"ring-finger-tip\" /* WebXRHandJoint.RING_FINGER_TIP */]: `ring_tip_${H}`,\n [\"pinky-finger-metacarpal\" /* WebXRHandJoint.PINKY_FINGER_METACARPAL */]: `little_metacarpal_${H}`,\n [\"pinky-finger-phalanx-proximal\" /* WebXRHandJoint.PINKY_FINGER_PHALANX_PROXIMAL */]: `little_proxPhalanx_${H}`,\n [\"pinky-finger-phalanx-intermediate\" /* WebXRHandJoint.PINKY_FINGER_PHALANX_INTERMEDIATE */]: `little_intPhalanx_${H}`,\n [\"pinky-finger-phalanx-distal\" /* WebXRHandJoint.PINKY_FINGER_PHALANX_DISTAL */]: `little_distPhalanx_${H}`,\n [\"pinky-finger-tip\" /* WebXRHandJoint.PINKY_FINGER_TIP */]: `little_tip_${H}`\n };\n }\n /**\n * Check if the needed objects are defined.\n * This does not mean that the feature is enabled, but that the objects needed are well defined.\n * @returns true if the needed objects for this feature are defined\n */\n isCompatible() {\n return typeof XRHand !== \"undefined\";\n }\n /**\n * Get the hand object according to the controller id\n * @param controllerId the controller id to which we want to get the hand\n * @returns null if not found or the WebXRHand object if found\n */\n getHandByControllerId(controllerId) {\n return this._attachedHands[controllerId];\n }\n /**\n * Get a hand object according to the requested handedness\n * @param handedness the handedness to request\n * @returns null if not found or the WebXRHand object if found\n */\n getHandByHandedness(handedness) {\n if (handedness == \"none\") {\n return null;\n }\n return this._trackingHands[handedness];\n }\n /**\n * Creates a new instance of the XR hand tracking feature.\n * @param _xrSessionManager An instance of WebXRSessionManager.\n * @param options Options to use when constructing this feature.\n */\n constructor(_xrSessionManager, /** Options to use when constructing this feature. */\n options) {\n super(_xrSessionManager);\n this.options = options;\n this._attachedHands = {};\n this._trackingHands = {\n left: null,\n right: null\n };\n this._handResources = {\n jointMeshes: null,\n handMeshes: null,\n rigMappings: null\n };\n this._worldScaleObserver = null;\n /**\n * This observable will notify registered observers when a new hand object was added and initialized\n */\n this.onHandAddedObservable = new Observable();\n /**\n * This observable will notify its observers right before the hand object is disposed\n */\n this.onHandRemovedObservable = new Observable();\n this._attachHand = xrController => {\n var _this$options$handMes, _this$options$jointMe, _this$options$jointMe2;\n if (!xrController.inputSource.hand || xrController.inputSource.handedness == \"none\" || !this._handResources.jointMeshes) {\n return;\n }\n const handedness = xrController.inputSource.handedness;\n const webxrHand = new WebXRHand(xrController, this._handResources.jointMeshes[handedness], this._handResources.handMeshes && this._handResources.handMeshes[handedness], this._handResources.rigMappings && this._handResources.rigMappings[handedness], (_this$options$handMes = this.options.handMeshes) === null || _this$options$handMes === void 0 ? void 0 : _this$options$handMes.meshesUseLeftHandedCoordinates, (_this$options$jointMe = this.options.jointMeshes) === null || _this$options$jointMe === void 0 ? void 0 : _this$options$jointMe.invisible, (_this$options$jointMe2 = this.options.jointMeshes) === null || _this$options$jointMe2 === void 0 ? void 0 : _this$options$jointMe2.scaleFactor);\n this._attachedHands[xrController.uniqueId] = webxrHand;\n this._trackingHands[handedness] = webxrHand;\n this.onHandAddedObservable.notifyObservers(webxrHand);\n };\n this._detachHand = xrController => {\n this._detachHandById(xrController.uniqueId);\n };\n this.xrNativeFeatureName = \"hand-tracking\";\n // Support legacy versions of the options object by copying over joint mesh properties\n const anyOptions = options;\n const anyJointMeshOptions = anyOptions.jointMeshes;\n if (anyJointMeshOptions) {\n if (typeof anyJointMeshOptions.disableDefaultHandMesh !== \"undefined\") {\n options.handMeshes = options.handMeshes || {};\n options.handMeshes.disableDefaultMeshes = anyJointMeshOptions.disableDefaultHandMesh;\n }\n if (typeof anyJointMeshOptions.handMeshes !== \"undefined\") {\n options.handMeshes = options.handMeshes || {};\n options.handMeshes.customMeshes = anyJointMeshOptions.handMeshes;\n }\n if (typeof anyJointMeshOptions.leftHandedSystemMeshes !== \"undefined\") {\n options.handMeshes = options.handMeshes || {};\n options.handMeshes.meshesUseLeftHandedCoordinates = anyJointMeshOptions.leftHandedSystemMeshes;\n }\n if (typeof anyJointMeshOptions.rigMapping !== \"undefined\") {\n options.handMeshes = options.handMeshes || {};\n const leftRigMapping = {};\n const rightRigMapping = {};\n [[anyJointMeshOptions.rigMapping.left, leftRigMapping], [anyJointMeshOptions.rigMapping.right, rightRigMapping]].forEach(rigMappingTuple => {\n const legacyRigMapping = rigMappingTuple[0];\n const rigMapping = rigMappingTuple[1];\n legacyRigMapping.forEach((modelJointName, index) => {\n rigMapping[handJointReferenceArray[index]] = modelJointName;\n });\n });\n options.handMeshes.customRigMappings = {\n left: leftRigMapping,\n right: rightRigMapping\n };\n }\n }\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 var _this$options$handMes2, _this$options$handMes3, _this$options$handMes4, _this$options$handMes5;\n if (!super.attach()) {\n return false;\n }\n if (!this._handResources.jointMeshes) {\n var _this$options$jointMe3;\n this._originalMesh = this._originalMesh || ((_this$options$jointMe3 = this.options.jointMeshes) === null || _this$options$jointMe3 === void 0 ? void 0 : _this$options$jointMe3.sourceMesh) || CreateIcoSphere(\"jointParent\", WebXRHandTracking._ICOSPHERE_PARAMS);\n this._originalMesh.isVisible = false;\n this._handResources.jointMeshes = WebXRHandTracking._GenerateTrackedJointMeshes(this.options, this._originalMesh);\n }\n this._handResources.handMeshes = ((_this$options$handMes2 = this.options.handMeshes) === null || _this$options$handMes2 === void 0 ? void 0 : _this$options$handMes2.customMeshes) || null;\n this._handResources.rigMappings = ((_this$options$handMes3 = this.options.handMeshes) === null || _this$options$handMes3 === void 0 ? void 0 : _this$options$handMes3.customRigMappings) || null;\n // If they didn't supply custom meshes and are not disabling the default meshes...\n if (!((_this$options$handMes4 = this.options.handMeshes) !== null && _this$options$handMes4 !== void 0 && _this$options$handMes4.customMeshes) && !((_this$options$handMes5 = this.options.handMeshes) !== null && _this$options$handMes5 !== void 0 && _this$options$handMes5.disableDefaultMeshes)) {\n WebXRHandTracking._GenerateDefaultHandMeshesAsync(EngineStore.LastCreatedScene, this._xrSessionManager, this.options).then(defaultHandMeshes => {\n var _this$_trackingHands$, _this$_trackingHands$2;\n this._handResources.handMeshes = defaultHandMeshes;\n this._handResources.rigMappings = {\n left: WebXRHandTracking._GenerateDefaultHandMeshRigMapping(\"left\"),\n right: WebXRHandTracking._GenerateDefaultHandMeshRigMapping(\"right\")\n };\n // Apply meshes to existing hands if already tracking.\n (_this$_trackingHands$ = this._trackingHands.left) === null || _this$_trackingHands$ === void 0 || _this$_trackingHands$.setHandMesh(this._handResources.handMeshes.left, this._handResources.rigMappings.left, this._xrSessionManager);\n (_this$_trackingHands$2 = this._trackingHands.right) === null || _this$_trackingHands$2 === void 0 || _this$_trackingHands$2.setHandMesh(this._handResources.handMeshes.right, this._handResources.rigMappings.right, this._xrSessionManager);\n this._handResources.handMeshes.left.scaling.setAll(this._xrSessionManager.worldScalingFactor);\n this._handResources.handMeshes.right.scaling.setAll(this._xrSessionManager.worldScalingFactor);\n });\n this._worldScaleObserver = this._xrSessionManager.onWorldScaleFactorChangedObservable.add(scalingFactors => {\n if (this._handResources.handMeshes) {\n this._handResources.handMeshes.left.scaling.scaleInPlace(scalingFactors.newScaleFactor / scalingFactors.previousScaleFactor);\n this._handResources.handMeshes.right.scaling.scaleInPlace(scalingFactors.newScaleFactor / scalingFactors.previousScaleFactor);\n }\n });\n }\n this.options.xrInput.controllers.forEach(this._attachHand);\n this._addNewAttachObserver(this.options.xrInput.onControllerAddedObservable, this._attachHand);\n this._addNewAttachObserver(this.options.xrInput.onControllerRemovedObservable, this._detachHand);\n return true;\n }\n _onXRFrame(_xrFrame) {\n var _this$_trackingHands$3, _this$_trackingHands$4;\n (_this$_trackingHands$3 = this._trackingHands.left) === null || _this$_trackingHands$3 === void 0 || _this$_trackingHands$3.updateFromXRFrame(_xrFrame, this._xrSessionManager.referenceSpace);\n (_this$_trackingHands$4 = this._trackingHands.right) === null || _this$_trackingHands$4 === void 0 || _this$_trackingHands$4.updateFromXRFrame(_xrFrame, this._xrSessionManager.referenceSpace);\n }\n _detachHandById(controllerId, disposeMesh) {\n const hand = this.getHandByControllerId(controllerId);\n if (hand) {\n var _this$_trackingHands$5;\n const handedness = hand.xrController.inputSource.handedness == \"left\" ? \"left\" : \"right\";\n if (((_this$_trackingHands$5 = this._trackingHands[handedness]) === null || _this$_trackingHands$5 === void 0 ? void 0 : _this$_trackingHands$5.xrController.uniqueId) === controllerId) {\n this._trackingHands[handedness] = null;\n }\n this.onHandRemovedObservable.notifyObservers(hand);\n hand.dispose(disposeMesh);\n delete this._attachedHands[controllerId];\n }\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 var _this$options$handMes7;\n if (!super.detach()) {\n return false;\n }\n Object.keys(this._attachedHands).forEach(uniqueId => {\n var _this$options$handMes6;\n return this._detachHandById(uniqueId, (_this$options$handMes6 = this.options.handMeshes) === null || _this$options$handMes6 === void 0 ? void 0 : _this$options$handMes6.disposeOnSessionEnd);\n });\n if ((_this$options$handMes7 = this.options.handMeshes) !== null && _this$options$handMes7 !== void 0 && _this$options$handMes7.disposeOnSessionEnd) {\n var _WebXRHandTracking$_R2, _WebXRHandTracking$_L2, _this$_originalMesh;\n if (this._handResources.jointMeshes) {\n this._handResources.jointMeshes.left.forEach(trackedMesh => trackedMesh.dispose());\n this._handResources.jointMeshes.right.forEach(trackedMesh => trackedMesh.dispose());\n this._handResources.jointMeshes = null;\n }\n if (this._handResources.handMeshes) {\n this._handResources.handMeshes.left.dispose();\n this._handResources.handMeshes.right.dispose();\n this._handResources.handMeshes = null;\n }\n (_WebXRHandTracking$_R2 = WebXRHandTracking._RightHandGLB) === null || _WebXRHandTracking$_R2 === void 0 || _WebXRHandTracking$_R2.meshes.forEach(mesh => mesh.dispose());\n (_WebXRHandTracking$_L2 = WebXRHandTracking._LeftHandGLB) === null || _WebXRHandTracking$_L2 === void 0 || _WebXRHandTracking$_L2.meshes.forEach(mesh => mesh.dispose());\n WebXRHandTracking._RightHandGLB = null;\n WebXRHandTracking._LeftHandGLB = null;\n (_this$_originalMesh = this._originalMesh) === null || _this$_originalMesh === void 0 || _this$_originalMesh.dispose();\n this._originalMesh = undefined;\n }\n // remove world scale observer\n if (this._worldScaleObserver) {\n this._xrSessionManager.onWorldScaleFactorChangedObservable.remove(this._worldScaleObserver);\n }\n return true;\n }\n /**\n * Dispose this feature and all of the resources attached.\n */\n dispose() {\n var _this$options$handMes8;\n super.dispose();\n this.onHandAddedObservable.clear();\n this.onHandRemovedObservable.clear();\n if (this._handResources.handMeshes && !((_this$options$handMes8 = this.options.handMeshes) !== null && _this$options$handMes8 !== void 0 && _this$options$handMes8.customMeshes)) {\n var _WebXRHandTracking$_R3, _WebXRHandTracking$_L3;\n // this will dispose the cached meshes\n this._handResources.handMeshes.left.dispose();\n this._handResources.handMeshes.right.dispose();\n // remove the cached meshes\n (_WebXRHandTracking$_R3 = WebXRHandTracking._RightHandGLB) === null || _WebXRHandTracking$_R3 === void 0 || _WebXRHandTracking$_R3.meshes.forEach(mesh => mesh.dispose());\n (_WebXRHandTracking$_L3 = WebXRHandTracking._LeftHandGLB) === null || _WebXRHandTracking$_L3 === void 0 || _WebXRHandTracking$_L3.meshes.forEach(mesh => mesh.dispose());\n WebXRHandTracking._RightHandGLB = null;\n WebXRHandTracking._LeftHandGLB = null;\n }\n if (this._handResources.jointMeshes) {\n this._handResources.jointMeshes.left.forEach(trackedMesh => trackedMesh.dispose());\n this._handResources.jointMeshes.right.forEach(trackedMesh => trackedMesh.dispose());\n }\n }\n}\n/**\n * The module's name\n */\nWebXRHandTracking.Name = WebXRFeatureName.HAND_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 */\nWebXRHandTracking.Version = 1;\n/** The base URL for the default hand model. */\nWebXRHandTracking.DEFAULT_HAND_MODEL_BASE_URL = \"https://assets.babylonjs.com/meshes/HandMeshes/\";\n/** The filename to use for the default right hand model. */\nWebXRHandTracking.DEFAULT_HAND_MODEL_RIGHT_FILENAME = \"r_hand_rhs.glb\";\n/** The filename to use for the default left hand model. */\nWebXRHandTracking.DEFAULT_HAND_MODEL_LEFT_FILENAME = \"l_hand_rhs.glb\";\n/** The URL pointing to the default hand model NodeMaterial shader. */\nWebXRHandTracking.DEFAULT_HAND_MODEL_SHADER_URL = \"https://assets.babylonjs.com/meshes/HandMeshes/handsShader.json\";\n// We want to use lightweight models, diameter will initially be 1 but scaled to the values returned from WebXR.\nWebXRHandTracking._ICOSPHERE_PARAMS = {\n radius: 0.5,\n flat: false,\n subdivisions: 2\n};\nWebXRHandTracking._RightHandGLB = null;\nWebXRHandTracking._LeftHandGLB = null;\n//register the plugin\nWebXRFeaturesManager.AddWebXRFeature(WebXRHandTracking.Name, (xrSessionManager, options) => {\n return () => new WebXRHandTracking(xrSessionManager, options);\n}, WebXRHandTracking.Version, false);","map":{"version":3,"names":["WebXRAbstractFeature","WebXRFeatureName","WebXRFeaturesManager","Matrix","Quaternion","PhysicsImpostor","Observable","SceneLoader","Color3","NodeMaterial","Material","CreateIcoSphere","TransformNode","Axis","EngineStore","HandPart","WebXRHandJoint","handJointReferenceArray","handPartsDefinition","WebXRHand","handMesh","_handMesh","getHandPartMeshes","part","map","name","_jointMeshes","indexOf","getJointMesh","jointName","constructor","xrController","rigMapping","_leftHandedMeshes","_jointsInvisible","_jointScaleFactor","onHandMeshSetObservable","_jointTransforms","Array","length","_jointTransformMatrices","Float32Array","_tempJointMatrix","_jointRadii","_scene","getScene","jointIdx","rotationQuaternion","_jointMeshes$jointIdx","set","setHandMesh","motionController","rootMesh","dispose","onMotionControllerInitObservable","add","_doNotLoadControllerMesh","_xrSessionManager","alwaysSelectAsActiveMesh","getChildMeshes","forEach","mesh","skeleton","handMeshSkeleton","jointBoneIdx","getBoneIndexByName","bones","linkTransformNode","notifyObservers","updateFromXRFrame","xrFrame","referenceSpace","hand","inputSource","anyHand","jointSpaces","get","trackingSuccessful","fillPoses","fillJointRadii","getJointPose","jointPose","transform","matrix","radius","_jointName","jointTransform","FromArrayToRef","decompose","undefined","position","scaledJointRadius","jointMesh","isVisible","copyFrom","scaling","setAll","useRightHandedSystem","z","w","disposeMeshes","_this$_handMesh$skele","clear","WebXRHandTracking","_GenerateTrackedJointMeshes","featureOptions","originalMesh","_ICOSPHERE_PARAMS","meshes","handedness","_featureOptions$joint","trackedMeshes","jointMeshes","keepOriginalVisible","i","_featureOptions$joint2","_featureOptions$joint3","newInstance","createInstance","onHandJointMeshGenerated","returnedMesh","isPickable","enablePhysics","_featureOptions$joint4","props","physicsProps","type","impostorType","SphereImpostor","physicsImpostor","mass","push","left","right","_GenerateDefaultHandMeshesAsync","scene","xrSessionManager","options","Promise","_ref","_asyncToGenerator","resolve","_WebXRHandTracking$_R","_WebXRHandTracking$_L","_options$handMeshes","_xrSessionManager$_ge","riggedMeshes","_RightHandGLB","isDisposed","_LeftHandGLB","handsDefined","handGLBs","all","ImportMeshAsync","DEFAULT_HAND_MODEL_BASE_URL","DEFAULT_HAND_MODEL_RIGHT_FILENAME","DEFAULT_HAND_MODEL_LEFT_FILENAME","handShader","ParseFromFileAsync","DEFAULT_HAND_MODEL_SHADER_URL","needDepthPrePass","transparencyMode","MATERIAL_ALPHABLEND","alphaMode","build","handColors","base","FromInts","fresnel","fingerColor","tipFresnel","handMeshes","customColors","handNodes","getBlockByName","value","isMultiview","_getBaseLayerWrapper","_options$handMeshes2","handGLB","Error","_internalAbstractMeshDataInfo","_computeBonesUsingShaders","disableHandShader","material","clone","rotate","Y","Math","PI","_x","apply","arguments","_GenerateDefaultHandMeshRigMapping","H","isCompatible","XRHand","getHandByControllerId","controllerId","_attachedHands","getHandByHandedness","_trackingHands","_handResources","rigMappings","_worldScaleObserver","onHandAddedObservable","onHandRemovedObservable","_attachHand","_this$options$handMes","_this$options$jointMe","_this$options$jointMe2","webxrHand","meshesUseLeftHandedCoordinates","invisible","scaleFactor","uniqueId","_detachHand","_detachHandById","xrNativeFeatureName","anyOptions","anyJointMeshOptions","disableDefaultHandMesh","disableDefaultMeshes","customMeshes","leftHandedSystemMeshes","leftRigMapping","rightRigMapping","rigMappingTuple","legacyRigMapping","modelJointName","index","customRigMappings","attach","_this$options$handMes2","_this$options$handMes3","_this$options$handMes4","_this$options$handMes5","_this$options$jointMe3","_originalMesh","sourceMesh","LastCreatedScene","then","defaultHandMeshes","_this$_trackingHands$","_this$_trackingHands$2","worldScalingFactor","onWorldScaleFactorChangedObservable","scalingFactors","scaleInPlace","newScaleFactor","previousScaleFactor","xrInput","controllers","_addNewAttachObserver","onControllerAddedObservable","onControllerRemovedObservable","_onXRFrame","_xrFrame","_this$_trackingHands$3","_this$_trackingHands$4","disposeMesh","_this$_trackingHands$5","detach","_this$options$handMes7","Object","keys","_this$options$handMes6","disposeOnSessionEnd","_WebXRHandTracking$_R2","_WebXRHandTracking$_L2","_this$_originalMesh","trackedMesh","remove","_this$options$handMes8","_WebXRHandTracking$_R3","_WebXRHandTracking$_L3","Name","HAND_TRACKING","Version","flat","subdivisions","AddWebXRFeature"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/XR/features/WebXRHandTracking.js"],"sourcesContent":["import { WebXRAbstractFeature } from \"./WebXRAbstractFeature.js\";\nimport { WebXRFeatureName, WebXRFeaturesManager } from \"../webXRFeaturesManager.js\";\nimport { Matrix, Quaternion } from \"../../Maths/math.vector.js\";\nimport { PhysicsImpostor } from \"../../Physics/v1/physicsImpostor.js\";\nimport { Observable } from \"../../Misc/observable.js\";\nimport { SceneLoader } from \"../../Loading/sceneLoader.js\";\nimport { Color3 } from \"../../Maths/math.color.js\";\nimport { NodeMaterial } from \"../../Materials/Node/nodeMaterial.js\";\nimport { Material } from \"../../Materials/material.js\";\nimport { CreateIcoSphere } from \"../../Meshes/Builders/icoSphereBuilder.js\";\nimport { TransformNode } from \"../../Meshes/transformNode.js\";\nimport { Axis } from \"../../Maths/math.axis.js\";\nimport { EngineStore } from \"../../Engines/engineStore.js\";\n\n/**\n * Parts of the hands divided to writs and finger names\n */\nexport var HandPart;\n(function (HandPart) {\n /**\n * HandPart - Wrist\n */\n HandPart[\"WRIST\"] = \"wrist\";\n /**\n * HandPart - The thumb\n */\n HandPart[\"THUMB\"] = \"thumb\";\n /**\n * HandPart - Index finger\n */\n HandPart[\"INDEX\"] = \"index\";\n /**\n * HandPart - Middle finger\n */\n HandPart[\"MIDDLE\"] = \"middle\";\n /**\n * HandPart - Ring finger\n */\n HandPart[\"RING\"] = \"ring\";\n /**\n * HandPart - Little finger\n */\n HandPart[\"LITTLE\"] = \"little\";\n})(HandPart || (HandPart = {}));\n/**\n * Joints of the hand as defined by the WebXR specification.\n * https://immersive-web.github.io/webxr-hand-input/#skeleton-joints-section\n */\nexport var WebXRHandJoint;\n(function (WebXRHandJoint) {\n /** Wrist */\n WebXRHandJoint[\"WRIST\"] = \"wrist\";\n /** Thumb near wrist */\n WebXRHandJoint[\"THUMB_METACARPAL\"] = \"thumb-metacarpal\";\n /** Thumb first knuckle */\n WebXRHandJoint[\"THUMB_PHALANX_PROXIMAL\"] = \"thumb-phalanx-proximal\";\n /** Thumb second knuckle */\n WebXRHandJoint[\"THUMB_PHALANX_DISTAL\"] = \"thumb-phalanx-distal\";\n /** Thumb tip */\n WebXRHandJoint[\"THUMB_TIP\"] = \"thumb-tip\";\n /** Index finger near wrist */\n WebXRHandJoint[\"INDEX_FINGER_METACARPAL\"] = \"index-finger-metacarpal\";\n /** Index finger first knuckle */\n WebXRHandJoint[\"INDEX_FINGER_PHALANX_PROXIMAL\"] = \"index-finger-phalanx-proximal\";\n /** Index finger second knuckle */\n WebXRHandJoint[\"INDEX_FINGER_PHALANX_INTERMEDIATE\"] = \"index-finger-phalanx-intermediate\";\n /** Index finger third knuckle */\n WebXRHandJoint[\"INDEX_FINGER_PHALANX_DISTAL\"] = \"index-finger-phalanx-distal\";\n /** Index finger tip */\n WebXRHandJoint[\"INDEX_FINGER_TIP\"] = \"index-finger-tip\";\n /** Middle finger near wrist */\n WebXRHandJoint[\"MIDDLE_FINGER_METACARPAL\"] = \"middle-finger-metacarpal\";\n /** Middle finger first knuckle */\n WebXRHandJoint[\"MIDDLE_FINGER_PHALANX_PROXIMAL\"] = \"middle-finger-phalanx-proximal\";\n /** Middle finger second knuckle */\n WebXRHandJoint[\"MIDDLE_FINGER_PHALANX_INTERMEDIATE\"] = \"middle-finger-phalanx-intermediate\";\n /** Middle finger third knuckle */\n WebXRHandJoint[\"MIDDLE_FINGER_PHALANX_DISTAL\"] = \"middle-finger-phalanx-distal\";\n /** Middle finger tip */\n WebXRHandJoint[\"MIDDLE_FINGER_TIP\"] = \"middle-finger-tip\";\n /** Ring finger near wrist */\n WebXRHandJoint[\"RING_FINGER_METACARPAL\"] = \"ring-finger-metacarpal\";\n /** Ring finger first knuckle */\n WebXRHandJoint[\"RING_FINGER_PHALANX_PROXIMAL\"] = \"ring-finger-phalanx-proximal\";\n /** Ring finger second knuckle */\n WebXRHandJoint[\"RING_FINGER_PHALANX_INTERMEDIATE\"] = \"ring-finger-phalanx-intermediate\";\n /** Ring finger third knuckle */\n WebXRHandJoint[\"RING_FINGER_PHALANX_DISTAL\"] = \"ring-finger-phalanx-distal\";\n /** Ring finger tip */\n WebXRHandJoint[\"RING_FINGER_TIP\"] = \"ring-finger-tip\";\n /** Pinky finger near wrist */\n WebXRHandJoint[\"PINKY_FINGER_METACARPAL\"] = \"pinky-finger-metacarpal\";\n /** Pinky finger first knuckle */\n WebXRHandJoint[\"PINKY_FINGER_PHALANX_PROXIMAL\"] = \"pinky-finger-phalanx-proximal\";\n /** Pinky finger second knuckle */\n WebXRHandJoint[\"PINKY_FINGER_PHALANX_INTERMEDIATE\"] = \"pinky-finger-phalanx-intermediate\";\n /** Pinky finger third knuckle */\n WebXRHandJoint[\"PINKY_FINGER_PHALANX_DISTAL\"] = \"pinky-finger-phalanx-distal\";\n /** Pinky finger tip */\n WebXRHandJoint[\"PINKY_FINGER_TIP\"] = \"pinky-finger-tip\";\n})(WebXRHandJoint || (WebXRHandJoint = {}));\nconst handJointReferenceArray = [\n \"wrist\" /* WebXRHandJoint.WRIST */,\n \"thumb-metacarpal\" /* WebXRHandJoint.THUMB_METACARPAL */,\n \"thumb-phalanx-proximal\" /* WebXRHandJoint.THUMB_PHALANX_PROXIMAL */,\n \"thumb-phalanx-distal\" /* WebXRHandJoint.THUMB_PHALANX_DISTAL */,\n \"thumb-tip\" /* WebXRHandJoint.THUMB_TIP */,\n \"index-finger-metacarpal\" /* WebXRHandJoint.INDEX_FINGER_METACARPAL */,\n \"index-finger-phalanx-proximal\" /* WebXRHandJoint.INDEX_FINGER_PHALANX_PROXIMAL */,\n \"index-finger-phalanx-intermediate\" /* WebXRHandJoint.INDEX_FINGER_PHALANX_INTERMEDIATE */,\n \"index-finger-phalanx-distal\" /* WebXRHandJoint.INDEX_FINGER_PHALANX_DISTAL */,\n \"index-finger-tip\" /* WebXRHandJoint.INDEX_FINGER_TIP */,\n \"middle-finger-metacarpal\" /* WebXRHandJoint.MIDDLE_FINGER_METACARPAL */,\n \"middle-finger-phalanx-proximal\" /* WebXRHandJoint.MIDDLE_FINGER_PHALANX_PROXIMAL */,\n \"middle-finger-phalanx-intermediate\" /* WebXRHandJoint.MIDDLE_FINGER_PHALANX_INTERMEDIATE */,\n \"middle-finger-phalanx-distal\" /* WebXRHandJoint.MIDDLE_FINGER_PHALANX_DISTAL */,\n \"middle-finger-tip\" /* WebXRHandJoint.MIDDLE_FINGER_TIP */,\n \"ring-finger-metacarpal\" /* WebXRHandJoint.RING_FINGER_METACARPAL */,\n \"ring-finger-phalanx-proximal\" /* WebXRHandJoint.RING_FINGER_PHALANX_PROXIMAL */,\n \"ring-finger-phalanx-intermediate\" /* WebXRHandJoint.RING_FINGER_PHALANX_INTERMEDIATE */,\n \"ring-finger-phalanx-distal\" /* WebXRHandJoint.RING_FINGER_PHALANX_DISTAL */,\n \"ring-finger-tip\" /* WebXRHandJoint.RING_FINGER_TIP */,\n \"pinky-finger-metacarpal\" /* WebXRHandJoint.PINKY_FINGER_METACARPAL */,\n \"pinky-finger-phalanx-proximal\" /* WebXRHandJoint.PINKY_FINGER_PHALANX_PROXIMAL */,\n \"pinky-finger-phalanx-intermediate\" /* WebXRHandJoint.PINKY_FINGER_PHALANX_INTERMEDIATE */,\n \"pinky-finger-phalanx-distal\" /* WebXRHandJoint.PINKY_FINGER_PHALANX_DISTAL */,\n \"pinky-finger-tip\" /* WebXRHandJoint.PINKY_FINGER_TIP */,\n];\nconst handPartsDefinition = {\n [\"wrist\" /* HandPart.WRIST */]: [\"wrist\" /* WebXRHandJoint.WRIST */],\n [\"thumb\" /* HandPart.THUMB */]: [\"thumb-metacarpal\" /* WebXRHandJoint.THUMB_METACARPAL */, \"thumb-phalanx-proximal\" /* WebXRHandJoint.THUMB_PHALANX_PROXIMAL */, \"thumb-phalanx-distal\" /* WebXRHandJoint.THUMB_PHALANX_DISTAL */, \"thumb-tip\" /* WebXRHandJoint.THUMB_TIP */],\n [\"index\" /* HandPart.INDEX */]: [\n \"index-finger-metacarpal\" /* WebXRHandJoint.INDEX_FINGER_METACARPAL */,\n \"index-finger-phalanx-proximal\" /* WebXRHandJoint.INDEX_FINGER_PHALANX_PROXIMAL */,\n \"index-finger-phalanx-intermediate\" /* WebXRHandJoint.INDEX_FINGER_PHALANX_INTERMEDIATE */,\n \"index-finger-phalanx-distal\" /* WebXRHandJoint.INDEX_FINGER_PHALANX_DISTAL */,\n \"index-finger-tip\" /* WebXRHandJoint.INDEX_FINGER_TIP */,\n ],\n [\"middle\" /* HandPart.MIDDLE */]: [\n \"middle-finger-metacarpal\" /* WebXRHandJoint.MIDDLE_FINGER_METACARPAL */,\n \"middle-finger-phalanx-proximal\" /* WebXRHandJoint.MIDDLE_FINGER_PHALANX_PROXIMAL */,\n \"middle-finger-phalanx-intermediate\" /* WebXRHandJoint.MIDDLE_FINGER_PHALANX_INTERMEDIATE */,\n \"middle-finger-phalanx-distal\" /* WebXRHandJoint.MIDDLE_FINGER_PHALANX_DISTAL */,\n \"middle-finger-tip\" /* WebXRHandJoint.MIDDLE_FINGER_TIP */,\n ],\n [\"ring\" /* HandPart.RING */]: [\n \"ring-finger-metacarpal\" /* WebXRHandJoint.RING_FINGER_METACARPAL */,\n \"ring-finger-phalanx-proximal\" /* WebXRHandJoint.RING_FINGER_PHALANX_PROXIMAL */,\n \"ring-finger-phalanx-intermediate\" /* WebXRHandJoint.RING_FINGER_PHALANX_INTERMEDIATE */,\n \"ring-finger-phalanx-distal\" /* WebXRHandJoint.RING_FINGER_PHALANX_DISTAL */,\n \"ring-finger-tip\" /* WebXRHandJoint.RING_FINGER_TIP */,\n ],\n [\"little\" /* HandPart.LITTLE */]: [\n \"pinky-finger-metacarpal\" /* WebXRHandJoint.PINKY_FINGER_METACARPAL */,\n \"pinky-finger-phalanx-proximal\" /* WebXRHandJoint.PINKY_FINGER_PHALANX_PROXIMAL */,\n \"pinky-finger-phalanx-intermediate\" /* WebXRHandJoint.PINKY_FINGER_PHALANX_INTERMEDIATE */,\n \"pinky-finger-phalanx-distal\" /* WebXRHandJoint.PINKY_FINGER_PHALANX_DISTAL */,\n \"pinky-finger-tip\" /* WebXRHandJoint.PINKY_FINGER_TIP */,\n ],\n};\n/**\n * Representing a single hand (with its corresponding native XRHand object)\n */\nexport class WebXRHand {\n /**\n * Get the hand mesh.\n */\n get handMesh() {\n return this._handMesh;\n }\n /**\n * Get meshes of part of the hand.\n * @param part The part of hand to get.\n * @returns An array of meshes that correlate to the hand part requested.\n */\n getHandPartMeshes(part) {\n return handPartsDefinition[part].map((name) => this._jointMeshes[handJointReferenceArray.indexOf(name)]);\n }\n /**\n * Retrieves a mesh linked to a named joint in the hand.\n * @param jointName The name of the joint.\n * @returns An AbstractMesh whose position corresponds with the joint position.\n */\n getJointMesh(jointName) {\n return this._jointMeshes[handJointReferenceArray.indexOf(jointName)];\n }\n /**\n * Construct a new hand object\n * @param xrController The controller to which the hand correlates.\n * @param _jointMeshes The meshes to be used to track the hand joints.\n * @param _handMesh An optional hand mesh.\n * @param rigMapping An optional rig mapping for the hand mesh.\n * If not provided (but a hand mesh is provided),\n * it will be assumed that the hand mesh's bones are named\n * directly after the WebXR bone names.\n * @param _leftHandedMeshes Are the hand meshes left-handed-system meshes\n * @param _jointsInvisible Are the tracked joint meshes visible\n * @param _jointScaleFactor Scale factor for all joint meshes\n */\n constructor(\n /** The controller to which the hand correlates. */\n xrController, _jointMeshes, _handMesh, \n /** An optional rig mapping for the hand mesh. If not provided (but a hand mesh is provided),\n * it will be assumed that the hand mesh's bones are named directly after the WebXR bone names. */\n rigMapping, _leftHandedMeshes = false, _jointsInvisible = false, _jointScaleFactor = 1) {\n this.xrController = xrController;\n this._jointMeshes = _jointMeshes;\n this._handMesh = _handMesh;\n this.rigMapping = rigMapping;\n this._leftHandedMeshes = _leftHandedMeshes;\n this._jointsInvisible = _jointsInvisible;\n this._jointScaleFactor = _jointScaleFactor;\n /**\n * This observable will notify registered observers when the hand object has been set with a new mesh.\n * you can get the hand mesh using `webxrHand.handMesh`\n */\n this.onHandMeshSetObservable = new Observable();\n /**\n * Transform nodes that will directly receive the transforms from the WebXR matrix data.\n */\n this._jointTransforms = new Array(handJointReferenceArray.length);\n /**\n * The float array that will directly receive the transform matrix data from WebXR.\n */\n this._jointTransformMatrices = new Float32Array(handJointReferenceArray.length * 16);\n this._tempJointMatrix = new Matrix();\n /**\n * The float array that will directly receive the joint radii from WebXR.\n */\n this._jointRadii = new Float32Array(handJointReferenceArray.length);\n this._scene = _jointMeshes[0].getScene();\n // Initialize the joint transform quaternions and link the transforms to the bones.\n for (let jointIdx = 0; jointIdx < this._jointTransforms.length; jointIdx++) {\n this._jointTransforms[jointIdx] = new TransformNode(handJointReferenceArray[jointIdx], this._scene);\n this._jointTransforms[jointIdx].rotationQuaternion = new Quaternion();\n // Set the rotation quaternion so we can use it later for tracking.\n if (_jointMeshes[jointIdx].rotationQuaternion) {\n _jointMeshes[jointIdx].rotationQuaternion = new Quaternion();\n }\n else {\n _jointMeshes[jointIdx].rotationQuaternion?.set(0, 0, 0, 1);\n }\n }\n if (_handMesh) {\n // Note that this logic needs to happen after we initialize the joint tracking transform nodes.\n this.setHandMesh(_handMesh, rigMapping);\n }\n // hide the motion controller, if available/loaded\n if (this.xrController.motionController) {\n if (this.xrController.motionController.rootMesh) {\n this.xrController.motionController.rootMesh.dispose(false, true);\n }\n }\n this.xrController.onMotionControllerInitObservable.add((motionController) => {\n motionController._doNotLoadControllerMesh = true;\n });\n }\n /**\n * Sets the current hand mesh to render for the WebXRHand.\n * @param handMesh The rigged hand mesh that will be tracked to the user's hand.\n * @param rigMapping The mapping from XRHandJoint to bone names to use with the mesh.\n * @param _xrSessionManager The XRSessionManager used to initialize the hand mesh.\n */\n setHandMesh(handMesh, rigMapping, _xrSessionManager) {\n this._handMesh = handMesh;\n // Avoid any strange frustum culling. We will manually control visibility via attach and detach.\n handMesh.alwaysSelectAsActiveMesh = true;\n handMesh.getChildMeshes().forEach((mesh) => {\n mesh.alwaysSelectAsActiveMesh = true;\n });\n // Link the bones in the hand mesh to the transform nodes that will be bound to the WebXR tracked joints.\n if (this._handMesh.skeleton) {\n const handMeshSkeleton = this._handMesh.skeleton;\n handJointReferenceArray.forEach((jointName, jointIdx) => {\n const jointBoneIdx = handMeshSkeleton.getBoneIndexByName(rigMapping ? rigMapping[jointName] : jointName);\n if (jointBoneIdx !== -1) {\n handMeshSkeleton.bones[jointBoneIdx].linkTransformNode(this._jointTransforms[jointIdx]);\n }\n });\n }\n this.onHandMeshSetObservable.notifyObservers(this);\n }\n /**\n * Update this hand from the latest xr frame.\n * @param xrFrame The latest frame received from WebXR.\n * @param referenceSpace The current viewer reference space.\n */\n updateFromXRFrame(xrFrame, referenceSpace) {\n const hand = this.xrController.inputSource.hand;\n if (!hand) {\n return;\n }\n // TODO: Modify webxr.d.ts to better match WebXR IDL so we don't need this any cast.\n const anyHand = hand;\n const jointSpaces = handJointReferenceArray.map((jointName) => anyHand[jointName] || hand.get(jointName));\n let trackingSuccessful = false;\n if (xrFrame.fillPoses && xrFrame.fillJointRadii) {\n trackingSuccessful = xrFrame.fillPoses(jointSpaces, referenceSpace, this._jointTransformMatrices) && xrFrame.fillJointRadii(jointSpaces, this._jointRadii);\n }\n else if (xrFrame.getJointPose) {\n trackingSuccessful = true;\n // Warning: This codepath is slow by comparison, only here for compat.\n for (let jointIdx = 0; jointIdx < jointSpaces.length; jointIdx++) {\n const jointPose = xrFrame.getJointPose(jointSpaces[jointIdx], referenceSpace);\n if (jointPose) {\n this._jointTransformMatrices.set(jointPose.transform.matrix, jointIdx * 16);\n this._jointRadii[jointIdx] = jointPose.radius || 0.008;\n }\n else {\n trackingSuccessful = false;\n break;\n }\n }\n }\n if (!trackingSuccessful) {\n return;\n }\n handJointReferenceArray.forEach((_jointName, jointIdx) => {\n const jointTransform = this._jointTransforms[jointIdx];\n Matrix.FromArrayToRef(this._jointTransformMatrices, jointIdx * 16, this._tempJointMatrix);\n this._tempJointMatrix.decompose(undefined, jointTransform.rotationQuaternion, jointTransform.position);\n // The radius we need to make the joint in order for it to roughly cover the joints of the user's real hand.\n const scaledJointRadius = this._jointRadii[jointIdx] * this._jointScaleFactor;\n const jointMesh = this._jointMeshes[jointIdx];\n jointMesh.isVisible = !this._handMesh && !this._jointsInvisible;\n jointMesh.position.copyFrom(jointTransform.position);\n jointMesh.rotationQuaternion.copyFrom(jointTransform.rotationQuaternion);\n jointMesh.scaling.setAll(scaledJointRadius);\n // The WebXR data comes as right-handed, so we might need to do some conversions.\n if (!this._scene.useRightHandedSystem) {\n jointMesh.position.z *= -1;\n jointMesh.rotationQuaternion.z *= -1;\n jointMesh.rotationQuaternion.w *= -1;\n if (this._leftHandedMeshes && this._handMesh) {\n jointTransform.position.z *= -1;\n jointTransform.rotationQuaternion.z *= -1;\n jointTransform.rotationQuaternion.w *= -1;\n }\n }\n });\n if (this._handMesh) {\n this._handMesh.isVisible = true;\n }\n }\n /**\n * Dispose this Hand object\n * @param disposeMeshes Should the meshes be disposed as well\n */\n dispose(disposeMeshes = false) {\n if (this._handMesh) {\n if (disposeMeshes) {\n this._handMesh.skeleton?.dispose();\n this._handMesh.dispose(false, true);\n }\n else {\n this._handMesh.isVisible = false;\n }\n }\n this._jointTransforms.forEach((transform) => transform.dispose());\n this._jointTransforms.length = 0;\n this.onHandMeshSetObservable.clear();\n }\n}\n/**\n * WebXR Hand Joint tracking feature, available for selected browsers and devices\n */\nexport class WebXRHandTracking extends WebXRAbstractFeature {\n static _GenerateTrackedJointMeshes(featureOptions, originalMesh = CreateIcoSphere(\"jointParent\", WebXRHandTracking._ICOSPHERE_PARAMS)) {\n const meshes = {};\n [\"left\", \"right\"].map((handedness) => {\n const trackedMeshes = [];\n originalMesh.isVisible = !!featureOptions.jointMeshes?.keepOriginalVisible;\n for (let i = 0; i < handJointReferenceArray.length; ++i) {\n let newInstance = originalMesh.createInstance(`${handedness}-handJoint-${i}`);\n if (featureOptions.jointMeshes?.onHandJointMeshGenerated) {\n const returnedMesh = featureOptions.jointMeshes.onHandJointMeshGenerated(newInstance, i, handedness);\n if (returnedMesh) {\n if (returnedMesh !== newInstance) {\n newInstance.dispose();\n newInstance = returnedMesh;\n }\n }\n }\n newInstance.isPickable = false;\n if (featureOptions.jointMeshes?.enablePhysics) {\n const props = featureOptions.jointMeshes?.physicsProps || {};\n // downscale the instances so that physics will be initialized correctly\n newInstance.scaling.setAll(0.02);\n const type = props.impostorType !== undefined ? props.impostorType : PhysicsImpostor.SphereImpostor;\n newInstance.physicsImpostor = new PhysicsImpostor(newInstance, type, { mass: 0, ...props });\n }\n newInstance.rotationQuaternion = new Quaternion();\n newInstance.isVisible = false;\n trackedMeshes.push(newInstance);\n }\n meshes[handedness] = trackedMeshes;\n });\n return { left: meshes.left, right: meshes.right };\n }\n static _GenerateDefaultHandMeshesAsync(scene, xrSessionManager, options) {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve) => {\n const riggedMeshes = {};\n // check the cache, defensive\n if (WebXRHandTracking._RightHandGLB?.meshes[1]?.isDisposed()) {\n WebXRHandTracking._RightHandGLB = null;\n }\n if (WebXRHandTracking._LeftHandGLB?.meshes[1]?.isDisposed()) {\n WebXRHandTracking._LeftHandGLB = null;\n }\n const handsDefined = !!(WebXRHandTracking._RightHandGLB && WebXRHandTracking._LeftHandGLB);\n // load them in parallel\n const handGLBs = await Promise.all([\n WebXRHandTracking._RightHandGLB ||\n SceneLoader.ImportMeshAsync(\"\", WebXRHandTracking.DEFAULT_HAND_MODEL_BASE_URL, WebXRHandTracking.DEFAULT_HAND_MODEL_RIGHT_FILENAME, scene),\n WebXRHandTracking._LeftHandGLB ||\n SceneLoader.ImportMeshAsync(\"\", WebXRHandTracking.DEFAULT_HAND_MODEL_BASE_URL, WebXRHandTracking.DEFAULT_HAND_MODEL_LEFT_FILENAME, scene),\n ]);\n WebXRHandTracking._RightHandGLB = handGLBs[0];\n WebXRHandTracking._LeftHandGLB = handGLBs[1];\n const handShader = await NodeMaterial.ParseFromFileAsync(\"handShader\", WebXRHandTracking.DEFAULT_HAND_MODEL_SHADER_URL, scene, undefined, true);\n // depth prepass and alpha mode\n handShader.needDepthPrePass = true;\n handShader.transparencyMode = Material.MATERIAL_ALPHABLEND;\n handShader.alphaMode = 2;\n // build node materials\n handShader.build(false);\n // shader\n const handColors = {\n base: Color3.FromInts(116, 63, 203),\n fresnel: Color3.FromInts(149, 102, 229),\n fingerColor: Color3.FromInts(177, 130, 255),\n tipFresnel: Color3.FromInts(220, 200, 255),\n ...options?.handMeshes?.customColors,\n };\n const handNodes = {\n base: handShader.getBlockByName(\"baseColor\"),\n fresnel: handShader.getBlockByName(\"fresnelColor\"),\n fingerColor: handShader.getBlockByName(\"fingerColor\"),\n tipFresnel: handShader.getBlockByName(\"tipFresnelColor\"),\n };\n handNodes.base.value = handColors.base;\n handNodes.fresnel.value = handColors.fresnel;\n handNodes.fingerColor.value = handColors.fingerColor;\n handNodes.tipFresnel.value = handColors.tipFresnel;\n const isMultiview = xrSessionManager._getBaseLayerWrapper()?.isMultiview;\n [\"left\", \"right\"].forEach((handedness) => {\n const handGLB = handedness == \"left\" ? WebXRHandTracking._LeftHandGLB : WebXRHandTracking._RightHandGLB;\n if (!handGLB) {\n // this should never happen!\n throw new Error(\"Could not load hand model\");\n }\n const handMesh = handGLB.meshes[1];\n handMesh._internalAbstractMeshDataInfo._computeBonesUsingShaders = true;\n // if in multiview do not use the material\n if (!isMultiview && !options?.handMeshes?.disableHandShader) {\n handMesh.material = handShader.clone(`${handedness}HandShaderClone`, true);\n }\n handMesh.isVisible = false;\n riggedMeshes[handedness] = handMesh;\n // single change for left handed systems\n if (!handsDefined && !scene.useRightHandedSystem) {\n handGLB.meshes[1].rotate(Axis.Y, Math.PI);\n }\n });\n handShader.dispose();\n resolve({ left: riggedMeshes.left, right: riggedMeshes.right });\n });\n }\n /**\n * Generates a mapping from XRHandJoint to bone name for the default hand mesh.\n * @param handedness The handedness being mapped for.\n * @returns A mapping from XRHandJoint to bone name.\n */\n static _GenerateDefaultHandMeshRigMapping(handedness) {\n const H = handedness == \"right\" ? \"R\" : \"L\";\n return {\n [\"wrist\" /* WebXRHandJoint.WRIST */]: `wrist_${H}`,\n [\"thumb-metacarpal\" /* WebXRHandJoint.THUMB_METACARPAL */]: `thumb_metacarpal_${H}`,\n [\"thumb-phalanx-proximal\" /* WebXRHandJoint.THUMB_PHALANX_PROXIMAL */]: `thumb_proxPhalanx_${H}`,\n [\"thumb-phalanx-distal\" /* WebXRHandJoint.THUMB_PHALANX_DISTAL */]: `thumb_distPhalanx_${H}`,\n [\"thumb-tip\" /* WebXRHandJoint.THUMB_TIP */]: `thumb_tip_${H}`,\n [\"index-finger-metacarpal\" /* WebXRHandJoint.INDEX_FINGER_METACARPAL */]: `index_metacarpal_${H}`,\n [\"index-finger-phalanx-proximal\" /* WebXRHandJoint.INDEX_FINGER_PHALANX_PROXIMAL */]: `index_proxPhalanx_${H}`,\n [\"index-finger-phalanx-intermediate\" /* WebXRHandJoint.INDEX_FINGER_PHALANX_INTERMEDIATE */]: `index_intPhalanx_${H}`,\n [\"index-finger-phalanx-distal\" /* WebXRHandJoint.INDEX_FINGER_PHALANX_DISTAL */]: `index_distPhalanx_${H}`,\n [\"index-finger-tip\" /* WebXRHandJoint.INDEX_FINGER_TIP */]: `index_tip_${H}`,\n [\"middle-finger-metacarpal\" /* WebXRHandJoint.MIDDLE_FINGER_METACARPAL */]: `middle_metacarpal_${H}`,\n [\"middle-finger-phalanx-proximal\" /* WebXRHandJoint.MIDDLE_FINGER_PHALANX_PROXIMAL */]: `middle_proxPhalanx_${H}`,\n [\"middle-finger-phalanx-intermediate\" /* WebXRHandJoint.MIDDLE_FINGER_PHALANX_INTERMEDIATE */]: `middle_intPhalanx_${H}`,\n [\"middle-finger-phalanx-distal\" /* WebXRHandJoint.MIDDLE_FINGER_PHALANX_DISTAL */]: `middle_distPhalanx_${H}`,\n [\"middle-finger-tip\" /* WebXRHandJoint.MIDDLE_FINGER_TIP */]: `middle_tip_${H}`,\n [\"ring-finger-metacarpal\" /* WebXRHandJoint.RING_FINGER_METACARPAL */]: `ring_metacarpal_${H}`,\n [\"ring-finger-phalanx-proximal\" /* WebXRHandJoint.RING_FINGER_PHALANX_PROXIMAL */]: `ring_proxPhalanx_${H}`,\n [\"ring-finger-phalanx-intermediate\" /* WebXRHandJoint.RING_FINGER_PHALANX_INTERMEDIATE */]: `ring_intPhalanx_${H}`,\n [\"ring-finger-phalanx-distal\" /* WebXRHandJoint.RING_FINGER_PHALANX_DISTAL */]: `ring_distPhalanx_${H}`,\n [\"ring-finger-tip\" /* WebXRHandJoint.RING_FINGER_TIP */]: `ring_tip_${H}`,\n [\"pinky-finger-metacarpal\" /* WebXRHandJoint.PINKY_FINGER_METACARPAL */]: `little_metacarpal_${H}`,\n [\"pinky-finger-phalanx-proximal\" /* WebXRHandJoint.PINKY_FINGER_PHALANX_PROXIMAL */]: `little_proxPhalanx_${H}`,\n [\"pinky-finger-phalanx-intermediate\" /* WebXRHandJoint.PINKY_FINGER_PHALANX_INTERMEDIATE */]: `little_intPhalanx_${H}`,\n [\"pinky-finger-phalanx-distal\" /* WebXRHandJoint.PINKY_FINGER_PHALANX_DISTAL */]: `little_distPhalanx_${H}`,\n [\"pinky-finger-tip\" /* WebXRHandJoint.PINKY_FINGER_TIP */]: `little_tip_${H}`,\n };\n }\n /**\n * Check if the needed objects are defined.\n * This does not mean that the feature is enabled, but that the objects needed are well defined.\n * @returns true if the needed objects for this feature are defined\n */\n isCompatible() {\n return typeof XRHand !== \"undefined\";\n }\n /**\n * Get the hand object according to the controller id\n * @param controllerId the controller id to which we want to get the hand\n * @returns null if not found or the WebXRHand object if found\n */\n getHandByControllerId(controllerId) {\n return this._attachedHands[controllerId];\n }\n /**\n * Get a hand object according to the requested handedness\n * @param handedness the handedness to request\n * @returns null if not found or the WebXRHand object if found\n */\n getHandByHandedness(handedness) {\n if (handedness == \"none\") {\n return null;\n }\n return this._trackingHands[handedness];\n }\n /**\n * Creates a new instance of the XR hand tracking feature.\n * @param _xrSessionManager An instance of WebXRSessionManager.\n * @param options Options to use when constructing this feature.\n */\n constructor(_xrSessionManager, \n /** Options to use when constructing this feature. */\n options) {\n super(_xrSessionManager);\n this.options = options;\n this._attachedHands = {};\n this._trackingHands = { left: null, right: null };\n this._handResources = { jointMeshes: null, handMeshes: null, rigMappings: null };\n this._worldScaleObserver = null;\n /**\n * This observable will notify registered observers when a new hand object was added and initialized\n */\n this.onHandAddedObservable = new Observable();\n /**\n * This observable will notify its observers right before the hand object is disposed\n */\n this.onHandRemovedObservable = new Observable();\n this._attachHand = (xrController) => {\n if (!xrController.inputSource.hand || xrController.inputSource.handedness == \"none\" || !this._handResources.jointMeshes) {\n return;\n }\n const handedness = xrController.inputSource.handedness;\n const webxrHand = new WebXRHand(xrController, this._handResources.jointMeshes[handedness], this._handResources.handMeshes && this._handResources.handMeshes[handedness], this._handResources.rigMappings && this._handResources.rigMappings[handedness], this.options.handMeshes?.meshesUseLeftHandedCoordinates, this.options.jointMeshes?.invisible, this.options.jointMeshes?.scaleFactor);\n this._attachedHands[xrController.uniqueId] = webxrHand;\n this._trackingHands[handedness] = webxrHand;\n this.onHandAddedObservable.notifyObservers(webxrHand);\n };\n this._detachHand = (xrController) => {\n this._detachHandById(xrController.uniqueId);\n };\n this.xrNativeFeatureName = \"hand-tracking\";\n // Support legacy versions of the options object by copying over joint mesh properties\n const anyOptions = options;\n const anyJointMeshOptions = anyOptions.jointMeshes;\n if (anyJointMeshOptions) {\n if (typeof anyJointMeshOptions.disableDefaultHandMesh !== \"undefined\") {\n options.handMeshes = options.handMeshes || {};\n options.handMeshes.disableDefaultMeshes = anyJointMeshOptions.disableDefaultHandMesh;\n }\n if (typeof anyJointMeshOptions.handMeshes !== \"undefined\") {\n options.handMeshes = options.handMeshes || {};\n options.handMeshes.customMeshes = anyJointMeshOptions.handMeshes;\n }\n if (typeof anyJointMeshOptions.leftHandedSystemMeshes !== \"undefined\") {\n options.handMeshes = options.handMeshes || {};\n options.handMeshes.meshesUseLeftHandedCoordinates = anyJointMeshOptions.leftHandedSystemMeshes;\n }\n if (typeof anyJointMeshOptions.rigMapping !== \"undefined\") {\n options.handMeshes = options.handMeshes || {};\n const leftRigMapping = {};\n const rightRigMapping = {};\n [\n [anyJointMeshOptions.rigMapping.left, leftRigMapping],\n [anyJointMeshOptions.rigMapping.right, rightRigMapping],\n ].forEach((rigMappingTuple) => {\n const legacyRigMapping = rigMappingTuple[0];\n const rigMapping = rigMappingTuple[1];\n legacyRigMapping.forEach((modelJointName, index) => {\n rigMapping[handJointReferenceArray[index]] = modelJointName;\n });\n });\n options.handMeshes.customRigMappings = {\n left: leftRigMapping,\n right: rightRigMapping,\n };\n }\n }\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 if (!this._handResources.jointMeshes) {\n this._originalMesh = this._originalMesh || this.options.jointMeshes?.sourceMesh || CreateIcoSphere(\"jointParent\", WebXRHandTracking._ICOSPHERE_PARAMS);\n this._originalMesh.isVisible = false;\n this._handResources.jointMeshes = WebXRHandTracking._GenerateTrackedJointMeshes(this.options, this._originalMesh);\n }\n this._handResources.handMeshes = this.options.handMeshes?.customMeshes || null;\n this._handResources.rigMappings = this.options.handMeshes?.customRigMappings || null;\n // If they didn't supply custom meshes and are not disabling the default meshes...\n if (!this.options.handMeshes?.customMeshes && !this.options.handMeshes?.disableDefaultMeshes) {\n WebXRHandTracking._GenerateDefaultHandMeshesAsync(EngineStore.LastCreatedScene, this._xrSessionManager, this.options).then((defaultHandMeshes) => {\n this._handResources.handMeshes = defaultHandMeshes;\n this._handResources.rigMappings = {\n left: WebXRHandTracking._GenerateDefaultHandMeshRigMapping(\"left\"),\n right: WebXRHandTracking._GenerateDefaultHandMeshRigMapping(\"right\"),\n };\n // Apply meshes to existing hands if already tracking.\n this._trackingHands.left?.setHandMesh(this._handResources.handMeshes.left, this._handResources.rigMappings.left, this._xrSessionManager);\n this._trackingHands.right?.setHandMesh(this._handResources.handMeshes.right, this._handResources.rigMappings.right, this._xrSessionManager);\n this._handResources.handMeshes.left.scaling.setAll(this._xrSessionManager.worldScalingFactor);\n this._handResources.handMeshes.right.scaling.setAll(this._xrSessionManager.worldScalingFactor);\n });\n this._worldScaleObserver = this._xrSessionManager.onWorldScaleFactorChangedObservable.add((scalingFactors) => {\n if (this._handResources.handMeshes) {\n this._handResources.handMeshes.left.scaling.scaleInPlace(scalingFactors.newScaleFactor / scalingFactors.previousScaleFactor);\n this._handResources.handMeshes.right.scaling.scaleInPlace(scalingFactors.newScaleFactor / scalingFactors.previousScaleFactor);\n }\n });\n }\n this.options.xrInput.controllers.forEach(this._attachHand);\n this._addNewAttachObserver(this.options.xrInput.onControllerAddedObservable, this._attachHand);\n this._addNewAttachObserver(this.options.xrInput.onControllerRemovedObservable, this._detachHand);\n return true;\n }\n _onXRFrame(_xrFrame) {\n this._trackingHands.left?.updateFromXRFrame(_xrFrame, this._xrSessionManager.referenceSpace);\n this._trackingHands.right?.updateFromXRFrame(_xrFrame, this._xrSessionManager.referenceSpace);\n }\n _detachHandById(controllerId, disposeMesh) {\n const hand = this.getHandByControllerId(controllerId);\n if (hand) {\n const handedness = hand.xrController.inputSource.handedness == \"left\" ? \"left\" : \"right\";\n if (this._trackingHands[handedness]?.xrController.uniqueId === controllerId) {\n this._trackingHands[handedness] = null;\n }\n this.onHandRemovedObservable.notifyObservers(hand);\n hand.dispose(disposeMesh);\n delete this._attachedHands[controllerId];\n }\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 Object.keys(this._attachedHands).forEach((uniqueId) => this._detachHandById(uniqueId, this.options.handMeshes?.disposeOnSessionEnd));\n if (this.options.handMeshes?.disposeOnSessionEnd) {\n if (this._handResources.jointMeshes) {\n this._handResources.jointMeshes.left.forEach((trackedMesh) => trackedMesh.dispose());\n this._handResources.jointMeshes.right.forEach((trackedMesh) => trackedMesh.dispose());\n this._handResources.jointMeshes = null;\n }\n if (this._handResources.handMeshes) {\n this._handResources.handMeshes.left.dispose();\n this._handResources.handMeshes.right.dispose();\n this._handResources.handMeshes = null;\n }\n WebXRHandTracking._RightHandGLB?.meshes.forEach((mesh) => mesh.dispose());\n WebXRHandTracking._LeftHandGLB?.meshes.forEach((mesh) => mesh.dispose());\n WebXRHandTracking._RightHandGLB = null;\n WebXRHandTracking._LeftHandGLB = null;\n this._originalMesh?.dispose();\n this._originalMesh = undefined;\n }\n // remove world scale observer\n if (this._worldScaleObserver) {\n this._xrSessionManager.onWorldScaleFactorChangedObservable.remove(this._worldScaleObserver);\n }\n return true;\n }\n /**\n * Dispose this feature and all of the resources attached.\n */\n dispose() {\n super.dispose();\n this.onHandAddedObservable.clear();\n this.onHandRemovedObservable.clear();\n if (this._handResources.handMeshes && !this.options.handMeshes?.customMeshes) {\n // this will dispose the cached meshes\n this._handResources.handMeshes.left.dispose();\n this._handResources.handMeshes.right.dispose();\n // remove the cached meshes\n WebXRHandTracking._RightHandGLB?.meshes.forEach((mesh) => mesh.dispose());\n WebXRHandTracking._LeftHandGLB?.meshes.forEach((mesh) => mesh.dispose());\n WebXRHandTracking._RightHandGLB = null;\n WebXRHandTracking._LeftHandGLB = null;\n }\n if (this._handResources.jointMeshes) {\n this._handResources.jointMeshes.left.forEach((trackedMesh) => trackedMesh.dispose());\n this._handResources.jointMeshes.right.forEach((trackedMesh) => trackedMesh.dispose());\n }\n }\n}\n/**\n * The module's name\n */\nWebXRHandTracking.Name = WebXRFeatureName.HAND_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 */\nWebXRHandTracking.Version = 1;\n/** The base URL for the default hand model. */\nWebXRHandTracking.DEFAULT_HAND_MODEL_BASE_URL = \"https://assets.babylonjs.com/meshes/HandMeshes/\";\n/** The filename to use for the default right hand model. */\nWebXRHandTracking.DEFAULT_HAND_MODEL_RIGHT_FILENAME = \"r_hand_rhs.glb\";\n/** The filename to use for the default left hand model. */\nWebXRHandTracking.DEFAULT_HAND_MODEL_LEFT_FILENAME = \"l_hand_rhs.glb\";\n/** The URL pointing to the default hand model NodeMaterial shader. */\nWebXRHandTracking.DEFAULT_HAND_MODEL_SHADER_URL = \"https://assets.babylonjs.com/meshes/HandMeshes/handsShader.json\";\n// We want to use lightweight models, diameter will initially be 1 but scaled to the values returned from WebXR.\nWebXRHandTracking._ICOSPHERE_PARAMS = { radius: 0.5, flat: false, subdivisions: 2 };\nWebXRHandTracking._RightHandGLB = null;\nWebXRHandTracking._LeftHandGLB = null;\n//register the plugin\nWebXRFeaturesManager.AddWebXRFeature(WebXRHandTracking.Name, (xrSessionManager, options) => {\n return () => new WebXRHandTracking(xrSessionManager, options);\n}, WebXRHandTracking.Version, false);\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|