Skip to content

Commit

Permalink
Fixed code WebXR Hands code.
Browse files Browse the repository at this point in the history
  • Loading branch information
mrdoob committed May 6, 2021
1 parent 2c9b143 commit 571347f
Show file tree
Hide file tree
Showing 6 changed files with 23 additions and 43 deletions.
18 changes: 2 additions & 16 deletions examples/jsm/webxr/OculusHandModel.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
import { Object3D, Sphere, Box3 } from '../../../build/three.module.js';
import { fetchProfile } from '../libs/motion-controllers.module.js';
import { XRHandMeshModel } from './XRHandMeshModel.js';

const DEFAULT_PROFILES_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/[email protected]/dist/profiles';
const DEFAULT_PROFILE = 'generic-hand';

const TOUCH_RADIUS = 0.01;
const POINTING_JOINT = 'index-finger-tip';

Expand All @@ -23,23 +19,13 @@ class OculusHandModel extends Object3D {
controller.addEventListener( 'connected', ( event ) => {

const xrInputSource = event.data;

if ( xrInputSource.hand && ! this.motionController ) {

this.visible = true;
this.xrInputSource = xrInputSource;
fetchProfile( xrInputSource, DEFAULT_PROFILES_PATH, DEFAULT_PROFILE ).then( ( { profile, assetPath } ) => {

this.motionController = new XRHandMeshModel(
this,
controller,
assetPath
);

} ).catch( ( err ) => {

console.warn( err );

} );
this.motionController = new XRHandMeshModel( this, controller, this.path, xrInputSource.handedness );

}

Expand Down
17 changes: 13 additions & 4 deletions examples/jsm/webxr/XRHandMeshModel.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
import { GLTFLoader } from '../loaders/GLTFLoader.js';

const DEFAULT_HAND_PROFILE_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/[email protected]/dist/profiles/generic-hand/';

class XRHandMeshModel {

constructor( handModel, controller, assetUrl ) {
constructor( handModel, controller, path, handedness ) {

this.controller = controller;
this.handModel = handModel;

this.bones = [];
const loader = new GLTFLoader();

loader.setPath( '' );
loader.load( assetUrl, gltf => {
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 );
Expand All @@ -21,6 +23,8 @@ class XRHandMeshModel {
mesh.castShadow = true;
mesh.receiveShadow = true;

mesh.material.side = 0; // Workaround: force FrontSide

const joints = [
'wrist',
'thumb-metacarpal',
Expand Down Expand Up @@ -52,6 +56,7 @@ class XRHandMeshModel {
joints.forEach( jointName => {

const bone = object.getObjectByName( jointName );

if ( bone !== undefined ) {

bone.jointName = jointName;
Expand All @@ -74,15 +79,19 @@ class XRHandMeshModel {

// 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 );
Expand Down
25 changes: 5 additions & 20 deletions examples/jsm/webxr/XRHandModelFactory.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,6 @@ import {
XRHandMeshModel
} from './XRHandMeshModel.js';

import {
fetchProfile
} from '../libs/motion-controllers.module.js';

const DEFAULT_PROFILES_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/[email protected]/dist/profiles';
const DEFAULT_PROFILE = 'generic-hand';

class XRHandModel extends Object3D {

constructor( controller ) {
Expand Down Expand Up @@ -49,18 +42,19 @@ class XRHandModelFactory {

constructor() {

this.path = '';
this.path = null;

}

setPath( path ) {

this.path = path;

return this;

}

createHandModel( controller, profile, options ) {
createHandModel( controller, profile ) {

const handModel = new XRHandModel( controller );

Expand All @@ -70,7 +64,6 @@ class XRHandModelFactory {

if ( xrInputSource.hand && ! handModel.motionController ) {

handModel.visible = true;
handModel.xrInputSource = xrInputSource;

// @todo Detect profile if not provided
Expand All @@ -82,17 +75,9 @@ class XRHandModelFactory {

handModel.motionController = new XRHandPrimitiveModel( handModel, controller, this.path, xrInputSource.handedness, { primitive: 'box' } );

} else if ( profile === 'oculus' ) {

fetchProfile( xrInputSource, DEFAULT_PROFILES_PATH, DEFAULT_PROFILE ).then( ( { profile, assetPath } ) => {

handModel.motionController = new XRHandMeshModel( handModel, controller, assetPath );

} ).catch( ( err ) => {

console.warn( err );
} else if ( profile === 'mesh' ) {

} );
handModel.motionController = new XRHandMeshModel( handModel, controller, this.path, xrInputSource.handedness );

}

Expand Down
2 changes: 1 addition & 1 deletion examples/webxr_vr_handinput.html
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@
scene.add( controller2 );

const controllerModelFactory = new XRControllerModelFactory();
const handModelFactory = new XRHandModelFactory().setPath( "./models/gltf/" );
const handModelFactory = new XRHandModelFactory();

// Hand 1
controllerGrip1 = renderer.xr.getControllerGrip( 0 );
Expand Down
2 changes: 1 addition & 1 deletion examples/webxr_vr_handinput_cubes.html
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@
scene.add( controller2 );

const controllerModelFactory = new XRControllerModelFactory();
const handModelFactory = new XRHandModelFactory().setPath( "./models/gltf/" );
const handModelFactory = new XRHandModelFactory();

// Hand 1
controllerGrip1 = renderer.xr.getControllerGrip( 0 );
Expand Down
2 changes: 1 addition & 1 deletion examples/webxr_vr_handinput_profiles.html
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@
scene.add( controller2 );

const controllerModelFactory = new XRControllerModelFactory();
const handModelFactory = new XRHandModelFactory().setPath( "./models/gltf/" );
const handModelFactory = new XRHandModelFactory();

// Hand 1

Expand Down

0 comments on commit 571347f

Please sign in to comment.