three-stdlib 2.10.1 → 2.11.0

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "three-stdlib",
3
- "version": "2.10.1",
3
+ "version": "2.11.0",
4
4
  "private": false,
5
5
  "description": "stand-alone library of threejs examples",
6
6
  "main": "index.cjs.js",
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),t={createMeshesFromInstancedMesh:function(t){var a=new e.Group,r=t.count,n=t.geometry,c=t.material;for(let s=0;s<r;s++){var o=new e.Mesh(n,c);t.getMatrixAt(s,o.matrix),o.matrix.decompose(o.position,o.quaternion,o.scale),a.add(o)}return a.copy(t),a.updateMatrixWorld(),a},createMultiMaterialObject:function(t,a){var r=new e.Group;for(let n=0,c=a.length;n<c;n++)r.add(new e.Mesh(t,a[n]));return r},detach:function(e,t,a){console.warn("THREE.SceneUtils: detach() has been deprecated. Use scene.attach( child ) instead."),a.attach(e)},attach:function(e,t,a){console.warn("THREE.SceneUtils: attach() has been deprecated. Use parent.attach( child ) instead."),a.attach(e)}};exports.SceneUtils=t;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three");const t={createMeshesFromInstancedMesh:function(t){const a=new e.Group,n=t.count,c=t.geometry,r=t.material;for(let o=0;o<n;o++){const n=new e.Mesh(c,r);t.getMatrixAt(o,n.matrix),n.matrix.decompose(n.position,n.quaternion,n.scale),a.add(n)}return a.copy(t),a.updateMatrixWorld(),a},createMultiMaterialObject:function(t,a){const n=new e.Group;for(let c=0,r=a.length;c<r;c++)n.add(new e.Mesh(t,a[c]));return n},detach:function(e,t,a){console.warn("THREE.SceneUtils: detach() has been deprecated. Use scene.attach( child ) instead."),a.attach(e)},attach:function(e,t,a){console.warn("THREE.SceneUtils: attach() has been deprecated. Use parent.attach( child ) instead."),a.attach(e)}};exports.SceneUtils=t;
@@ -1,12 +1,9 @@
1
- import { BufferGeometry, Group, InstancedMesh, Material, Object3D, Scene } from 'three';
2
-
3
- export function createMeshesFromInstancedMesh(instancedMesh: InstancedMesh): Group;
4
- export function createMultiMaterialObject(geometry: BufferGeometry, materials: Material[]): Group;
5
- /**
6
- * @deprecated Use scene.attach( child ) instead.
7
- */
8
- export function detach(child: Object3D, parent: Object3D, scene: Scene): void;
9
- /**
10
- * @deprecated Use parent.attach( child ) instead.
11
- */
12
- export function attach(child: Object3D, scene: Scene, parent: Object3D): void;
1
+ import { Group } from 'three';
2
+ import type { BufferGeometry, InstancedMesh, Material, Object3D, Scene } from 'three';
3
+ declare const SceneUtils: {
4
+ createMeshesFromInstancedMesh: (instancedMesh: InstancedMesh) => Group;
5
+ createMultiMaterialObject: (geometry: BufferGeometry, materials: Material[]) => Group;
6
+ detach: (child: Object3D, parent: Object3D, scene: Scene) => void;
7
+ attach: (child: Object3D, scene: Scene, parent: Object3D) => void;
8
+ };
9
+ export { SceneUtils };
@@ -1,14 +1,14 @@
1
1
  import { Group, Mesh } from 'three';
2
2
 
3
- var SceneUtils = {
3
+ const SceneUtils = {
4
4
  createMeshesFromInstancedMesh: function (instancedMesh) {
5
- var group = new Group();
6
- var count = instancedMesh.count;
7
- var geometry = instancedMesh.geometry;
8
- var material = instancedMesh.material;
5
+ const group = new Group();
6
+ const count = instancedMesh.count;
7
+ const geometry = instancedMesh.geometry;
8
+ const material = instancedMesh.material;
9
9
 
10
10
  for (let i = 0; i < count; i++) {
11
- var mesh = new Mesh(geometry, material);
11
+ const mesh = new Mesh(geometry, material);
12
12
  instancedMesh.getMatrixAt(i, mesh.matrix);
13
13
  mesh.matrix.decompose(mesh.position, mesh.quaternion, mesh.scale);
14
14
  group.add(mesh);
@@ -20,7 +20,7 @@ var SceneUtils = {
20
20
  return group;
21
21
  },
22
22
  createMultiMaterialObject: function (geometry, materials) {
23
- var group = new Group();
23
+ const group = new Group();
24
24
 
25
25
  for (let i = 0, l = materials.length; i < l; i++) {
26
26
  group.add(new Mesh(geometry, materials[i]));
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),t=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,e.addEventListener("connected",(o=>{const n=o.data;n.hand&&!this.motionController&&(this.xrInputSource=n,this.motionController=new t.XRHandMeshModel(this,e,this.path,n.handedness))})),e.addEventListener("disconnected",(()=>{this.clear(),this.motionController=null}))}updateMatrixWorld(e){super.updateMatrixWorld(e),this.motionController&&this.motionController.updateMesh()}getPointerPosition(){const e=this.controller.joints["index-finger-tip"];return e?e.position:null}intersectBoxObject(t){const o=this.getPointerPosition();if(o){const n=new e.Sphere(o,.01),r=(new e.Box3).setFromObject(t);return n.intersectsBox(r)}return!1}checkButton(e){this.intersectBoxObject(e)?e.onPress():e.onClear(),e.isPressed()&&e.whilePressed()}}exports.OculusHandModel=o;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),t=require("./XRHandMeshModel.cjs.js");require("../loaders/GLTFLoader.cjs.js");class o extends e.Object3D{constructor(e,o){super(),this.controller=e,this.motionController=null,this.envMap=null,this.mesh=null,e.addEventListener("connected",(s=>{const n=s.data;n.hand&&!this.motionController&&(this.xrInputSource=n,this.motionController=new t.XRHandMeshModel(this,e,this.path,n.handedness,"left"===n.handedness?o[0]:o[1]))})),e.addEventListener("disconnected",(()=>{this.dispose()}))}updateMatrixWorld(e){super.updateMatrixWorld(e),this.motionController&&this.motionController.updateMesh()}getPointerPosition(){const e=this.controller.joints["index-finger-tip"];return e?e.position:null}intersectBoxObject(t){const o=this.getPointerPosition();if(o){const s=new e.Sphere(o,.01),n=(new e.Box3).setFromObject(t);return s.intersectsBox(n)}return!1}checkButton(e){this.intersectBoxObject(e)?e.onPress():e.onClear(),e.isPressed()&&e.whilePressed()}dispose(){this.clear(),this.motionController&&this.motionController.traverse((e=>{if(e&&"Scene"!==e.type){var t;null===(t=e.dispose)||void 0===t||t.call(e);for(const t in e){var o;null===(o=t.dispose)||void 0===o||o.call(t),delete e[t]}}})),this.motionController=null}}exports.OculusHandModel=o;
@@ -5,7 +5,7 @@ const TOUCH_RADIUS = 0.01;
5
5
  const POINTING_JOINT = 'index-finger-tip';
6
6
 
7
7
  class OculusHandModel extends Object3D {
8
- constructor(controller) {
8
+ constructor(controller, customModels) {
9
9
  super();
10
10
  this.controller = controller;
11
11
  this.motionController = null;
@@ -16,12 +16,11 @@ class OculusHandModel extends Object3D {
16
16
 
17
17
  if (xrInputSource.hand && !this.motionController) {
18
18
  this.xrInputSource = xrInputSource;
19
- this.motionController = new XRHandMeshModel(this, controller, this.path, xrInputSource.handedness);
19
+ this.motionController = new XRHandMeshModel(this, controller, this.path, xrInputSource.handedness, xrInputSource.handedness === 'left' ? customModels[0] : customModels[1]);
20
20
  }
21
21
  });
22
22
  controller.addEventListener('disconnected', () => {
23
- this.clear();
24
- this.motionController = null;
23
+ this.dispose();
25
24
  });
26
25
  }
27
26
 
@@ -67,6 +66,31 @@ class OculusHandModel extends Object3D {
67
66
  }
68
67
  }
69
68
 
69
+ dispose() {
70
+ this.clear();
71
+
72
+ if (this.motionController) {
73
+ this.motionController.traverse(node => {
74
+ if (!node) return;
75
+
76
+ if (node.type !== 'Scene') {
77
+ var _node$dispose;
78
+
79
+ (_node$dispose = node.dispose) === null || _node$dispose === void 0 ? void 0 : _node$dispose.call(node); // Dispose of its properties as well
80
+
81
+ for (const property in node) {
82
+ var _property$dispose;
83
+
84
+ (_property$dispose = property.dispose) === null || _property$dispose === void 0 ? void 0 : _property$dispose.call(property);
85
+ delete node[property];
86
+ }
87
+ }
88
+ });
89
+ }
90
+
91
+ this.motionController = null;
92
+ }
93
+
70
94
  }
71
95
 
72
96
  export { OculusHandModel };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../loaders/GLTFLoader.cjs.js");require("three");exports.XRHandMeshModel=class{constructor(i,n,a,t){this.controller=n,this.handModel=i,this.bones=[];const r=new e.GLTFLoader;r.setPath(a||"https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/"),r.load(`${t}.glb`,(e=>{const i=e.scene.children[0];this.handModel.add(i);const n=i.getObjectByProperty("type","SkinnedMesh");n.frustumCulled=!1,n.castShadow=!0,n.receiveShadow=!0;["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"].forEach((e=>{const n=i.getObjectByName(e);void 0!==n?n.jointName=e:console.warn(`Couldn't find ${e} in ${t} hand mesh`),this.bones.push(n)}))}))}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.position.copy(e),n.quaternion.copy(i.quaternion)}}}}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../loaders/GLTFLoader.cjs.js");require("three");exports.XRHandMeshModel=class{constructor(i,n,a,t,r){this.controller=n,this.handModel=i,this.bones=[];const l=new e.GLTFLoader;r||l.setPath(a||"https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/"),l.load(null!=r?r:`${t}.glb`,(e=>{const i=e.scene.children[0];this.handModel.add(i);const n=i.getObjectByProperty("type","SkinnedMesh");n.frustumCulled=!1,n.castShadow=!0,n.receiveShadow=!0;["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"].forEach((e=>{const n=i.getObjectByName(e);void 0!==n?n.jointName=e:console.warn(`Couldn't find ${e} in ${t} hand mesh`),this.bones.push(n)}))}))}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.position.copy(e),n.quaternion.copy(i.quaternion)}}}}};
@@ -3,13 +3,13 @@ import { GLTFLoader } from '../loaders/GLTFLoader.js';
3
3
  const DEFAULT_HAND_PROFILE_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/';
4
4
 
5
5
  class XRHandMeshModel {
6
- constructor(handModel, controller, path, handedness) {
6
+ constructor(handModel, controller, path, handedness, customModel) {
7
7
  this.controller = controller;
8
8
  this.handModel = handModel;
9
9
  this.bones = [];
10
10
  const loader = new GLTFLoader();
11
- loader.setPath(path || DEFAULT_HAND_PROFILE_PATH);
12
- loader.load(`${handedness}.glb`, gltf => {
11
+ if (!customModel) loader.setPath(path || DEFAULT_HAND_PROFILE_PATH);
12
+ loader.load(customModel != null ? customModel : `${handedness}.glb`, gltf => {
13
13
  const object = gltf.scene.children[0];
14
14
  this.handModel.add(object);
15
15
  const mesh = object.getObjectByProperty('type', 'SkinnedMesh');