XRHandMeshModel constructor
XRHandMeshModel(
- XRHandModel handModel,
- WebXRController controller,
- String? path,
- dynamic handedness, [
- GLTFLoader? loader,
- Function? onLoad,
Constructs a new XR hand mesh model.
@param {XRHandModel} handModel - The hand model.
@param {Group} controller - The WebXR controller.
@param {?string} path - The model path.
@param {XRHandedness} handedness - The handedness of the XR input source.
@param {?Loader} loader=null
- The loader. If not provided, an instance of GLTFLoader
will be used to load models.
@param {?Function} onLoad=null
- A callback that is executed when a controller model has been loaded.
Implementation
XRHandMeshModel(this.handModel, this.controller, this.path, handedness, [this.loader, this.onLoad]){
if ( loader == null ) {
loader = GLTFLoader();
loader?.setPath( path ?? DEFAULT_HAND_PROFILE_PATH );
}
loader!.unknown('$handedness.glb').then((gltf){
final object = gltf!.scene.children[ 0 ];
handModel.add( object );
final 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){
final bone = object.getObjectByName( jointName );
if ( bone != null ) {
bone.userData['jointName'] = jointName;
}
else {
console.warning('Couldn\'t find $jointName in $handedness hand mesh');
}
bones?.add( bone );
});
onLoad?.call( object );
});
}