| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 | 
							- import { GLTFLoader } from '../loaders/GLTFLoader.js';
 
- const DEFAULT_HAND_PROFILE_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/';
 
- class XRHandMeshModel {
 
- 	constructor( handModel, controller, path, handedness ) {
 
- 		this.controller = controller;
 
- 		this.handModel = handModel;
 
- 		this.bones = [];
 
- 		const loader = new GLTFLoader();
 
- 		loader.setPath( path || DEFAULT_HAND_PROFILE_PATH );
 
- 		loader.load( `${handedness}.glb`, gltf => {
 
- 			const object = gltf.scene.children[ 0 ];
 
- 			this.handModel.add( object );
 
- 			const mesh = object.getObjectByProperty( 'type', 'SkinnedMesh' );
 
- 			mesh.frustumCulled = false;
 
- 			mesh.castShadow = true;
 
- 			mesh.receiveShadow = true;
 
- 			const joints = [
 
- 				'wrist',
 
- 				'thumb-metacarpal',
 
- 				'thumb-phalanx-proximal',
 
- 				'thumb-phalanx-distal',
 
- 				'thumb-tip',
 
- 				'index-finger-metacarpal',
 
- 				'index-finger-phalanx-proximal',
 
- 				'index-finger-phalanx-intermediate',
 
- 				'index-finger-phalanx-distal',
 
- 				'index-finger-tip',
 
- 				'middle-finger-metacarpal',
 
- 				'middle-finger-phalanx-proximal',
 
- 				'middle-finger-phalanx-intermediate',
 
- 				'middle-finger-phalanx-distal',
 
- 				'middle-finger-tip',
 
- 				'ring-finger-metacarpal',
 
- 				'ring-finger-phalanx-proximal',
 
- 				'ring-finger-phalanx-intermediate',
 
- 				'ring-finger-phalanx-distal',
 
- 				'ring-finger-tip',
 
- 				'pinky-finger-metacarpal',
 
- 				'pinky-finger-phalanx-proximal',
 
- 				'pinky-finger-phalanx-intermediate',
 
- 				'pinky-finger-phalanx-distal',
 
- 				'pinky-finger-tip',
 
- 			];
 
- 			joints.forEach( jointName => {
 
- 				const bone = object.getObjectByName( jointName );
 
- 				if ( bone !== undefined ) {
 
- 					bone.jointName = jointName;
 
- 				} else {
 
- 					console.warn( `Couldn't find ${jointName} in ${handedness} hand mesh` );
 
- 				}
 
- 				this.bones.push( bone );
 
- 			} );
 
- 		} );
 
- 	}
 
- 	updateMesh() {
 
- 		// XR Joints
 
- 		const XRJoints = this.controller.joints;
 
- 		for ( let i = 0; i < this.bones.length; i ++ ) {
 
- 			const bone = this.bones[ i ];
 
- 			if ( bone ) {
 
- 				const XRJoint = XRJoints[ bone.jointName ];
 
- 				if ( XRJoint.visible ) {
 
- 					const position = XRJoint.position;
 
- 					if ( bone ) {
 
- 						bone.position.copy( position );
 
- 						bone.quaternion.copy( XRJoint.quaternion );
 
- 						// bone.scale.setScalar( XRJoint.jointRadius || defaultRadius );
 
- 					}
 
- 				}
 
- 			}
 
- 		}
 
- 	}
 
- }
 
- export { XRHandMeshModel };
 
 
  |