12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- 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';
- class OculusHandModel extends Object3D {
- constructor(controller) {
- super();
- this.controller = controller;
- this.motionController = null;
- this.envMap = null;
- this.mesh = null;
- 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);
- });
- }
- });
- controller.addEventListener("disconnected", () => {
- this.clear();
- this.motionController = null;
- })
- }
- updateMatrixWorld(force) {
- super.updateMatrixWorld(force);
- if (this.motionController) {
- this.motionController.updateMesh();
- }
- }
- getPointerPosition() {
- let indexFingerTip = this.controller.joints[POINTING_JOINT];
- if (indexFingerTip) {
- return indexFingerTip.position;
- } else {
- return null;
- }
- }
- intersectBoxObject(boxObject) {
- let pointerPosition = this.getPointerPosition();
- if (pointerPosition) {
- let indexSphere = new Sphere(pointerPosition, TOUCH_RADIUS);
- let box = new Box3().setFromObject(boxObject);
- return indexSphere.intersectsBox(box);
- } else {
- return false;
- }
- }
- checkButton(button) {
- if (this.intersectBoxObject(button)) {
- button.onPress();
- } else {
- button.onClear();
- }
- if (button.isPressed()) {
- button.whilePressed();
- }
- }
- }
- export { OculusHandModel };
|