three-stdlib 2.8.4 → 2.8.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,55 @@
1
+ import { GLTFLoader } from '../loaders/GLTFLoader.js';
2
+
3
+ const DEFAULT_HAND_PROFILE_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/';
4
+
5
+ class XRHandMeshModel {
6
+ constructor(handModel, controller, path, handedness) {
7
+ this.controller = controller;
8
+ this.handModel = handModel;
9
+ this.bones = [];
10
+ const loader = new GLTFLoader();
11
+ loader.setPath(path || DEFAULT_HAND_PROFILE_PATH);
12
+ loader.load(`${handedness}.glb`, gltf => {
13
+ const object = gltf.scene.children[0];
14
+ this.handModel.add(object);
15
+ const mesh = object.getObjectByProperty('type', 'SkinnedMesh');
16
+ mesh.frustumCulled = false;
17
+ mesh.castShadow = true;
18
+ mesh.receiveShadow = true;
19
+ 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'];
20
+ joints.forEach(jointName => {
21
+ const bone = object.getObjectByName(jointName);
22
+
23
+ if (bone !== undefined) {
24
+ bone.jointName = jointName;
25
+ } else {
26
+ console.warn(`Couldn't find ${jointName} in ${handedness} hand mesh`);
27
+ }
28
+
29
+ this.bones.push(bone);
30
+ });
31
+ });
32
+ }
33
+
34
+ updateMesh() {
35
+ // XR Joints
36
+ const XRJoints = this.controller.joints;
37
+
38
+ for (let i = 0; i < this.bones.length; i++) {
39
+ const bone = this.bones[i];
40
+
41
+ if (bone) {
42
+ const XRJoint = XRJoints[bone.jointName];
43
+
44
+ if (XRJoint.visible) {
45
+ const position = XRJoint.position;
46
+ bone.position.copy(position);
47
+ bone.quaternion.copy(XRJoint.quaternion); // bone.scale.setScalar( XRJoint.jointRadius || defaultRadius );
48
+ }
49
+ }
50
+ }
51
+ }
52
+
53
+ }
54
+
55
+ export { XRHandMeshModel };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),t=require("./XRHandPrimitiveModel.cjs.js"),o=require("./XRHandOculusMeshModel.cjs.js");function r(t){e.Object3D.call(this),this.controller=t,this.motionController=null,this.envMap=null,this.mesh=null}require("../loaders/FBXLoader.cjs.js"),require("fflate"),require("../curves/NURBSCurve.cjs.js"),require("../curves/NURBSUtils.cjs.js"),r.prototype=Object.assign(Object.create(e.Object3D.prototype),{constructor:r,updateMatrixWorld:function(t){e.Object3D.prototype.updateMatrixWorld.call(this,t),this.motionController&&this.motionController.updateMesh()}});const n=function(){function e(){this.path=""}return e.prototype={constructor:e,setPath:function(e){return this.path=e,this},createHandModel:function(e,n,s){const i=new r(e);return e.addEventListener("connected",(r=>{const l=r.data;l.hand&&!i.motionController&&(i.visible=!0,i.xrInputSource=l,void 0===n||"spheres"===n?i.motionController=new t.XRHandPrimitiveModel(i,e,this.path,l.handedness,{primitive:"sphere"}):"boxes"===n?i.motionController=new t.XRHandPrimitiveModel(i,e,this.path,l.handedness,{primitive:"box"}):"oculus"===n&&(i.motionController=new o.XRHandOculusMeshModel(i,e,this.path,l.handedness,s)))})),e.addEventListener("disconnected",(()=>{})),i}},e}();exports.XRHandModelFactory=n;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),t=require("./XRHandPrimitiveModel.cjs.js"),r=require("./XRHandMeshModel.cjs.js");require("../loaders/GLTFLoader.cjs.js");class o extends e.Object3D{constructor(e){super(),this.controller=e,this.motionController=null,this.envMap=null,this.mesh=null}updateMatrixWorld(e){super.updateMatrixWorld(e),this.motionController&&this.motionController.updateMesh()}}exports.XRHandModelFactory=class{constructor(){this.path=null}setPath(e){return this.path=e,this}createHandModel(e,n){const s=new o(e);return e.addEventListener("connected",(o=>{const i=o.data;i.hand&&!s.motionController&&(s.xrInputSource=i,void 0===n||"spheres"===n?s.motionController=new t.XRHandPrimitiveModel(s,e,this.path,i.handedness,{primitive:"sphere"}):"boxes"===n?s.motionController=new t.XRHandPrimitiveModel(s,e,this.path,i.handedness,{primitive:"box"}):"mesh"===n&&(s.motionController=new r.XRHandMeshModel(s,e,this.path,i.handedness)))})),e.addEventListener("disconnected",(()=>{})),s}};
@@ -1,67 +1,64 @@
1
1
  import { Object3D } from 'three';
2
2
  import { XRHandPrimitiveModel } from './XRHandPrimitiveModel.js';
3
- import { XRHandOculusMeshModel } from './XRHandOculusMeshModel.js';
3
+ import { XRHandMeshModel } from './XRHandMeshModel.js';
4
4
 
5
- function XRHandModel(controller) {
6
- Object3D.call(this);
7
- this.controller = controller;
8
- this.motionController = null;
9
- this.envMap = null;
10
- this.mesh = null;
11
- }
5
+ class XRHandModel extends Object3D {
6
+ constructor(controller) {
7
+ super();
8
+ this.controller = controller;
9
+ this.motionController = null;
10
+ this.envMap = null;
11
+ this.mesh = null;
12
+ }
12
13
 
13
- XRHandModel.prototype = Object.assign(Object.create(Object3D.prototype), {
14
- constructor: XRHandModel,
15
- updateMatrixWorld: function (force) {
16
- Object3D.prototype.updateMatrixWorld.call(this, force);
14
+ updateMatrixWorld(force) {
15
+ super.updateMatrixWorld(force);
17
16
 
18
17
  if (this.motionController) {
19
18
  this.motionController.updateMesh();
20
19
  }
21
20
  }
22
- });
23
21
 
24
- const XRHandModelFactory = function () {
25
- function XRHandModelFactory() {
26
- this.path = '';
22
+ }
23
+
24
+ class XRHandModelFactory {
25
+ constructor() {
26
+ this.path = null;
27
+ }
28
+
29
+ setPath(path) {
30
+ this.path = path;
31
+ return this;
27
32
  }
28
33
 
29
- XRHandModelFactory.prototype = {
30
- constructor: XRHandModelFactory,
31
- setPath: function (path) {
32
- this.path = path;
33
- return this;
34
- },
35
- createHandModel: function (controller, profile, options) {
36
- const handModel = new XRHandModel(controller);
37
- controller.addEventListener('connected', event => {
38
- const xrInputSource = event.data;
34
+ createHandModel(controller, profile) {
35
+ const handModel = new XRHandModel(controller);
36
+ controller.addEventListener('connected', event => {
37
+ const xrInputSource = event.data;
39
38
 
40
- if (xrInputSource.hand && !handModel.motionController) {
41
- handModel.visible = true;
42
- handModel.xrInputSource = xrInputSource; // @todo Detect profile if not provided
39
+ if (xrInputSource.hand && !handModel.motionController) {
40
+ handModel.xrInputSource = xrInputSource; // @todo Detect profile if not provided
43
41
 
44
- if (profile === undefined || profile === 'spheres') {
45
- handModel.motionController = new XRHandPrimitiveModel(handModel, controller, this.path, xrInputSource.handedness, {
46
- primitive: 'sphere'
47
- });
48
- } else if (profile === 'boxes') {
49
- handModel.motionController = new XRHandPrimitiveModel(handModel, controller, this.path, xrInputSource.handedness, {
50
- primitive: 'box'
51
- });
52
- } else if (profile === 'oculus') {
53
- handModel.motionController = new XRHandOculusMeshModel(handModel, controller, this.path, xrInputSource.handedness, options);
54
- }
42
+ if (profile === undefined || profile === 'spheres') {
43
+ handModel.motionController = new XRHandPrimitiveModel(handModel, controller, this.path, xrInputSource.handedness, {
44
+ primitive: 'sphere'
45
+ });
46
+ } else if (profile === 'boxes') {
47
+ handModel.motionController = new XRHandPrimitiveModel(handModel, controller, this.path, xrInputSource.handedness, {
48
+ primitive: 'box'
49
+ });
50
+ } else if (profile === 'mesh') {
51
+ handModel.motionController = new XRHandMeshModel(handModel, controller, this.path, xrInputSource.handedness);
55
52
  }
56
- });
57
- controller.addEventListener('disconnected', () => {// handModel.motionController = null;
58
- // handModel.remove( scene );
59
- // scene = null;
60
- });
61
- return handModel;
62
- }
63
- };
64
- return XRHandModelFactory;
65
- }();
53
+ }
54
+ });
55
+ controller.addEventListener('disconnected', () => {// handModel.motionController = null;
56
+ // handModel.remove( scene );
57
+ // scene = null;
58
+ });
59
+ return handModel;
60
+ }
61
+
62
+ }
66
63
 
67
64
  export { XRHandModelFactory };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three");exports.XRHandPrimitiveModel=class{constructor(i,n,a,r,t){if(this.controller=n,this.handModel=i,this.envMap=null,this.handMesh=new e.Group,this.handModel.add(this.handMesh),window.XRHand){let i;t&&t.primitive&&"sphere"!==t.primitive?"box"===t.primitive&&(i=new e.BoxGeometry(1,1,1)):i=new e.SphereGeometry(1,10,10);const n=new e.MeshStandardMaterial({color:16777215,roughness:1,metalness:0}),a=new e.MeshStandardMaterial({color:10066329,roughness:1,metalness:0}),r=["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"];for(let t of r){var l=new e.Mesh(i,-1!==t.indexOf("tip")?a:n);l.castShadow=!0,l.receiveShadow=!0,l.jointName=t,this.handMesh.add(l)}}}updateMesh(){const e=this.handMesh.children,i=this.controller.joints;for(let n=0;n<e.length;n++){const a=e[n],r=i[a.jointName];r.visible&&(a.position.copy(r.position),a.quaternion.copy(r.quaternion),a.scale.setScalar(r.jointRadius||.008)),a.visible=r.visible}}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three");const i=new e.Matrix4,n=new e.Vector3;exports.XRHandPrimitiveModel=class{constructor(i,n,a,t,r){let s;this.controller=n,this.handModel=i,this.envMap=null,r&&r.primitive&&"sphere"!==r.primitive?"box"===r.primitive&&(s=new e.BoxGeometry(1,1,1)):s=new e.SphereGeometry(1,10,10);const h=new e.MeshStandardMaterial;this.handMesh=new e.InstancedMesh(s,h,30),this.handMesh.instanceMatrix.setUsage(e.DynamicDrawUsage),this.handMesh.castShadow=!0,this.handMesh.receiveShadow=!0,this.handModel.add(this.handMesh),this.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"]}updateMesh(){const e=this.controller.joints;let a=0;for(let t=0;t<this.joints.length;t++){const r=e[this.joints[t]];r.visible&&(n.setScalar(r.jointRadius||.008),i.compose(r.position,r.quaternion,n),this.handMesh.setMatrixAt(t,i),a++)}this.handMesh.count=a,this.handMesh.instanceMatrix.needsUpdate=!0}};
@@ -1,62 +1,52 @@
1
- import { Group, SphereGeometry, BoxGeometry, MeshStandardMaterial, Mesh } from 'three';
1
+ import { Matrix4, Vector3, SphereGeometry, BoxGeometry, MeshStandardMaterial, InstancedMesh, DynamicDrawUsage } from 'three';
2
+
3
+ const _matrix = new Matrix4();
4
+
5
+ const _vector = new Vector3();
2
6
 
3
7
  class XRHandPrimitiveModel {
4
8
  constructor(handModel, controller, path, handedness, options) {
5
9
  this.controller = controller;
6
10
  this.handModel = handModel;
7
11
  this.envMap = null;
8
- this.handMesh = new Group();
9
- this.handModel.add(this.handMesh);
12
+ let geometry;
10
13
 
11
- if (window.XRHand) {
12
- let geometry;
13
-
14
- if (!options || !options.primitive || options.primitive === 'sphere') {
15
- geometry = new SphereGeometry(1, 10, 10);
16
- } else if (options.primitive === 'box') {
17
- geometry = new BoxGeometry(1, 1, 1);
18
- }
14
+ if (!options || !options.primitive || options.primitive === 'sphere') {
15
+ geometry = new SphereGeometry(1, 10, 10);
16
+ } else if (options.primitive === 'box') {
17
+ geometry = new BoxGeometry(1, 1, 1);
18
+ }
19
19
 
20
- const jointMaterial = new MeshStandardMaterial({
21
- color: 0xffffff,
22
- roughness: 1,
23
- metalness: 0
24
- });
25
- const tipMaterial = new MeshStandardMaterial({
26
- color: 0x999999,
27
- roughness: 1,
28
- metalness: 0
29
- });
30
- 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'];
20
+ const material = new MeshStandardMaterial();
21
+ this.handMesh = new InstancedMesh(geometry, material, 30);
22
+ this.handMesh.instanceMatrix.setUsage(DynamicDrawUsage); // will be updated every frame
31
23
 
32
- for (let jointName of joints) {
33
- var cube = new Mesh(geometry, jointName.indexOf('tip') !== -1 ? tipMaterial : jointMaterial);
34
- cube.castShadow = true;
35
- cube.receiveShadow = true;
36
- cube.jointName = jointName;
37
- this.handMesh.add(cube);
38
- }
39
- }
24
+ this.handMesh.castShadow = true;
25
+ this.handMesh.receiveShadow = true;
26
+ this.handModel.add(this.handMesh);
27
+ this.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'];
40
28
  }
41
29
 
42
30
  updateMesh() {
43
31
  const defaultRadius = 0.008;
44
- const objects = this.handMesh.children; // XR Joints
32
+ const joints = this.controller.joints;
33
+ let count = 0;
45
34
 
46
- const XRJoints = this.controller.joints;
35
+ for (let i = 0; i < this.joints.length; i++) {
36
+ const joint = joints[this.joints[i]];
47
37
 
48
- for (let i = 0; i < objects.length; i++) {
49
- const jointMesh = objects[i];
50
- const XRJoint = XRJoints[jointMesh.jointName];
38
+ if (joint.visible) {
39
+ _vector.setScalar(joint.jointRadius || defaultRadius);
51
40
 
52
- if (XRJoint.visible) {
53
- jointMesh.position.copy(XRJoint.position);
54
- jointMesh.quaternion.copy(XRJoint.quaternion);
55
- jointMesh.scale.setScalar(XRJoint.jointRadius || defaultRadius);
56
- }
41
+ _matrix.compose(joint.position, joint.quaternion, _vector);
57
42
 
58
- jointMesh.visible = XRJoint.visible;
43
+ this.handMesh.setMatrixAt(i, _matrix);
44
+ count++;
45
+ }
59
46
  }
47
+
48
+ this.handMesh.count = count;
49
+ this.handMesh.instanceMatrix.needsUpdate = true;
60
50
  }
61
51
 
62
52
  }
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../loaders/FBXLoader.cjs.js");require("three"),require("fflate"),require("../curves/NURBSCurve.cjs.js"),require("../curves/NURBSUtils.cjs.js");exports.XRHandOculusMeshModel=class{constructor(i,n,l,r,t){this.controller=n,this.handModel=i,this.bones=[];const a=new e.FBXLoader,s=t&&"lowpoly"===t.model?"_low":"";a.setPath(l),a.load(`OculusHand_${"right"===r?"R":"L"}${s}.fbx`,(e=>{this.handModel.add(e),e.scale.setScalar(.01);const i=e.getObjectByProperty("type","SkinnedMesh");i.frustumCulled=!1,i.castShadow=!0,i.receiveShadow=!0;const n=["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"];let l=0;["b_%_wrist","b_%_thumb1","b_%_thumb2","b_%_thumb3","b_%_thumb_null",null,"b_%_index1","b_%_index2","b_%_index3","b_%_index_null",null,"b_%_middle1","b_%_middle2","b_%_middle3","b_%_middlenull",null,"b_%_ring1","b_%_ring2","b_%_ring3","b_%_ring_inull","b_%_pinky0","b_%_pinky1","b_%_pinky2","b_%_pinky3","b_%_pinkynull"].forEach((i=>{if(i){const t=e.getObjectByName(i.replace(/%/g,"right"===r?"r":"l"));void 0!==t&&(t.jointName=n[l]),this.bones.push(t)}else this.bones.push(null);l++}))}))}updateMesh(){const e=this.controller.joints;for(let i=0;i<this.bones.length;i++){const n=this.bones[i];if(n){const i=e[n.jointName];if(i.visible){const e=i.position;n&&(n.position.copy(e.clone().multiplyScalar(100)),n.quaternion.copy(i.quaternion))}}}}};
@@ -1,89 +0,0 @@
1
- import { FBXLoader } from '../loaders/FBXLoader.js';
2
-
3
- class XRHandOculusMeshModel {
4
- constructor(handModel, controller, path, handedness, options) {
5
- this.controller = controller;
6
- this.handModel = handModel;
7
- this.bones = [];
8
- const loader = new FBXLoader();
9
- const low = options && options.model === 'lowpoly' ? '_low' : '';
10
- loader.setPath(path);
11
- loader.load(`OculusHand_${handedness === 'right' ? 'R' : 'L'}${low}.fbx`, object => {
12
- this.handModel.add(object); // Hack because of the scale of the skinnedmesh
13
-
14
- object.scale.setScalar(0.01);
15
- const mesh = object.getObjectByProperty('type', 'SkinnedMesh');
16
- mesh.frustumCulled = false;
17
- mesh.castShadow = true;
18
- mesh.receiveShadow = true;
19
- const bonesMapping = ['b_%_wrist', // XRHand.WRIST,
20
- 'b_%_thumb1', // XRHand.THUMB_METACARPAL,
21
- 'b_%_thumb2', // XRHand.THUMB_PHALANX_PROXIMAL,
22
- 'b_%_thumb3', // XRHand.THUMB_PHALANX_DISTAL,
23
- 'b_%_thumb_null', // XRHand.THUMB_PHALANX_TIP,
24
- null, //'b_%_index1', // XRHand.INDEX_METACARPAL,
25
- 'b_%_index1', // XRHand.INDEX_PHALANX_PROXIMAL,
26
- 'b_%_index2', // XRHand.INDEX_PHALANX_INTERMEDIATE,
27
- 'b_%_index3', // XRHand.INDEX_PHALANX_DISTAL,
28
- 'b_%_index_null', // XRHand.INDEX_PHALANX_TIP,
29
- null, //'b_%_middle1', // XRHand.MIDDLE_METACARPAL,
30
- 'b_%_middle1', // XRHand.MIDDLE_PHALANX_PROXIMAL,
31
- 'b_%_middle2', // XRHand.MIDDLE_PHALANX_INTERMEDIATE,
32
- 'b_%_middle3', // XRHand.MIDDLE_PHALANX_DISTAL,
33
- 'b_%_middlenull', // XRHand.MIDDLE_PHALANX_TIP,
34
- null, //'b_%_ring1', // XRHand.RING_METACARPAL,
35
- 'b_%_ring1', // XRHand.RING_PHALANX_PROXIMAL,
36
- 'b_%_ring2', // XRHand.RING_PHALANX_INTERMEDIATE,
37
- 'b_%_ring3', // XRHand.RING_PHALANX_DISTAL,
38
- 'b_%_ring_inull', // XRHand.RING_PHALANX_TIP,
39
- 'b_%_pinky0', // XRHand.LITTLE_METACARPAL,
40
- 'b_%_pinky1', // XRHand.LITTLE_PHALANX_PROXIMAL,
41
- 'b_%_pinky2', // XRHand.LITTLE_PHALANX_INTERMEDIATE,
42
- 'b_%_pinky3', // XRHand.LITTLE_PHALANX_DISTAL,
43
- 'b_%_pinkynull' // XRHand.LITTLE_PHALANX_TIP
44
- ];
45
- 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'];
46
- let i = 0;
47
- bonesMapping.forEach(boneName => {
48
- if (boneName) {
49
- const bone = object.getObjectByName(boneName.replace(/%/g, handedness === 'right' ? 'r' : 'l'));
50
-
51
- if (bone !== undefined) {
52
- bone.jointName = joints[i];
53
- }
54
-
55
- this.bones.push(bone);
56
- } else {
57
- this.bones.push(null);
58
- }
59
-
60
- i++;
61
- });
62
- });
63
- }
64
-
65
- updateMesh() {
66
- // XR Joints
67
- const XRJoints = this.controller.joints;
68
-
69
- for (let i = 0; i < this.bones.length; i++) {
70
- const bone = this.bones[i];
71
-
72
- if (bone) {
73
- const XRJoint = XRJoints[bone.jointName];
74
-
75
- if (XRJoint.visible) {
76
- const position = XRJoint.position;
77
-
78
- if (bone) {
79
- bone.position.copy(position.clone().multiplyScalar(100));
80
- bone.quaternion.copy(XRJoint.quaternion); // bone.scale.setScalar( XRJoint.jointRadius || defaultRadius );
81
- }
82
- }
83
- }
84
- }
85
- }
86
-
87
- }
88
-
89
- export { XRHandOculusMeshModel };