| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /**
- * @author chrisl / Geodan
- *
- * adapted from Potree.FirstPersonControls by
- *
- * @author mschuetz / http://mschuetz.at
- *
- * and THREE.DeviceOrientationControls by
- *
- * @author richt / http://richt.me
- * @author WestLangley / http://github.com/WestLangley
- *
- *
- *
- */
- import * as THREE from "../../libs/three.js/build/three.module.js";
- import {EventDispatcher} from "../EventDispatcher.js";
- export class DeviceOrientationControls extends EventDispatcher{
- constructor(viewer){
- super();
- this.viewer = viewer;
- this.renderer = viewer.renderer;
- this.scene = null;
- this.sceneControls = new THREE.Scene();
- this.screenOrientation = window.orientation || 0;
- let deviceOrientationChange = e => {
- this.deviceOrientation = e;
- };
- let screenOrientationChange = e => {
- this.screenOrientation = window.orientation || 0;
- };
- if ('ondeviceorientationabsolute' in window) {
- window.addEventListener('deviceorientationabsolute', deviceOrientationChange);
- } else if ('ondeviceorientation' in window) {
- window.addEventListener('deviceorientation', deviceOrientationChange);
- } else {
- console.warn("No device orientation found.");
- }
- // window.addEventListener('deviceorientation', deviceOrientationChange);
- window.addEventListener('orientationchange', screenOrientationChange);
- }
- setScene (scene) {
- this.scene = scene;
- }
- update (delta) {
- let computeQuaternion = function (alpha, beta, gamma, orient) {
- let quaternion = new THREE.Quaternion();
- let zee = new THREE.Vector3(0, 0, 1);
- let euler = new THREE.Euler();
- let q0 = new THREE.Quaternion();
- euler.set(beta, gamma, alpha, 'ZXY');
- quaternion.setFromEuler(euler);
- quaternion.multiply(q0.setFromAxisAngle(zee, -orient));
- return quaternion;
- };
- if (typeof this.deviceOrientation !== 'undefined') {
- let alpha = this.deviceOrientation.alpha ? THREE.Math.degToRad(this.deviceOrientation.alpha) : 0;
- let beta = this.deviceOrientation.beta ? THREE.Math.degToRad(this.deviceOrientation.beta) : 0;
- let gamma = this.deviceOrientation.gamma ? THREE.Math.degToRad(this.deviceOrientation.gamma) : 0;
- let orient = this.screenOrientation ? THREE.Math.degToRad(this.screenOrientation) : 0;
- let quaternion = computeQuaternion(alpha, beta, gamma, orient);
- viewer.scene.cameraP.quaternion.set(quaternion.x, quaternion.y, quaternion.z, quaternion.w);
- }
- }
- };
|