UNPKG

@ar-js-org/ar.js-threejs

Version:

AR.js (THREEx, ARjs) modular package - Typescript version

53 lines (43 loc) 1.88 kB
import { PerspectiveCamera, Vector3, Vector2, Raycaster } from "three"; export class ARClickability { private _sourceElement: any; private _cameraPicking: PerspectiveCamera; constructor(sourceElement: HTMLElement) { this._sourceElement = sourceElement; // Create cameraPicking var fullWidth = parseInt(sourceElement.style.width); var fullHeight = parseInt(sourceElement.style.height); this._cameraPicking = new PerspectiveCamera( 42, fullWidth / fullHeight, 0.1, 100 ); console.warn("ARClickability works only in modelViewMatrix"); console.warn("OBSOLETE OBSOLETE! instead use THREEx.HitTestingPlane"); } onResize() { var sourceElement = this._sourceElement; var cameraPicking = this._cameraPicking; var fullWidth = parseInt(sourceElement.style.width); var fullHeight = parseInt(sourceElement.style.height); cameraPicking.aspect = fullWidth / fullHeight; cameraPicking.updateProjectionMatrix(); }; computeIntersects(domEvent: any, objects: any) { var sourceElement = this._sourceElement; var cameraPicking = this._cameraPicking; // compute mouse coordinatge with [-1,1] var eventCoords = new Vector2(); eventCoords.x = (domEvent.layerX / parseInt(sourceElement.style.width)) * 2 - 1; eventCoords.y = -(domEvent.layerY / parseInt(sourceElement.style.height)) * 2 + 1; // compute intersections between eventCoords and pickingPlane var raycaster = new Raycaster(); raycaster.setFromCamera(eventCoords, cameraPicking); var intersects = raycaster.intersectObjects(objects); return intersects; }; update() { }; };