UNPKG

three-stdlib

Version:

stand-alone library of threejs examples

70 lines (69 loc) 2.41 kB
import { SphereGeometry, BoxGeometry, MeshStandardMaterial, InstancedMesh, DynamicDrawUsage, Matrix4, Vector3 } from "three"; const _matrix = /* @__PURE__ */ new Matrix4(); const _vector = /* @__PURE__ */ new Vector3(); class XRHandPrimitiveModel { constructor(handModel, controller, path, handedness, options) { this.controller = controller; this.handModel = handModel; this.envMap = null; let geometry; if (!options || !options.primitive || options.primitive === "sphere") { geometry = new SphereGeometry(1, 10, 10); } else if (options.primitive === "box") { geometry = new BoxGeometry(1, 1, 1); } const material = new MeshStandardMaterial(); this.handMesh = new InstancedMesh(geometry, material, 30); this.handMesh.instanceMatrix.setUsage(DynamicDrawUsage); this.handMesh.castShadow = true; this.handMesh.receiveShadow = true; 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 defaultRadius = 8e-3; const joints = this.controller.joints; let count = 0; for (let i = 0; i < this.joints.length; i++) { const joint = joints[this.joints[i]]; if (joint.visible) { _vector.setScalar(joint.jointRadius || defaultRadius); _matrix.compose(joint.position, joint.quaternion, _vector); this.handMesh.setMatrixAt(i, _matrix); count++; } } this.handMesh.count = count; this.handMesh.instanceMatrix.needsUpdate = true; } } export { XRHandPrimitiveModel }; //# sourceMappingURL=XRHandPrimitiveModel.js.map