UNPKG

460 kBSource Map (JSON)View Raw
1{"version":3,"file":"view360.js","sources":["../src/version.ts","../src/utils/browser.ts","../src/utils/browserFeature.ts","../src/utils/math-util.ts","../src/YawPitchControl/utils.ts","../src/YawPitchControl/consts.ts","../src/YawPitchControl/input/lib/webvr-polyfill/math-util.ts","../src/YawPitchControl/input/lib/webvr-polyfill/util.ts","../src/YawPitchControl/input/lib/webvr-polyfill/pose-predictor.ts","../src/YawPitchControl/input/DeviceMotion.ts","../src/YawPitchControl/input/lib/webvr-polyfill/sensor-sample.ts","../src/YawPitchControl/input/lib/webvr-polyfill/complementary-filter.ts","../src/YawPitchControl/input/ComplementaryFilter.ts","../src/YawPitchControl/input/FusionPoseSensor.ts","../src/YawPitchControl/input/TiltMotionInput.ts","../src/YawPitchControl/ScreenRotationAngle.ts","../src/YawPitchControl/input/RotationPanInput.ts","../src/YawPitchControl/DeviceQuaternion.ts","../src/YawPitchControl/YawPitchControl.ts","../src/PanoViewer/consts.ts","../src/utils/utils.ts","../src/PanoImageRenderer/WebGLUtils.ts","../src/PanoImageRenderer/renderer/Renderer.ts","../src/PanoImageRenderer/renderer/CubeRenderer.ts","../src/PanoImageRenderer/renderer/CubeStripRenderer.ts","../src/PanoImageRenderer/renderer/SphereRenderer.ts","../src/PanoImageRenderer/renderer/CylinderRenderer.ts","../src/PanoImageRenderer/vr/VRManager.ts","../src/PanoImageRenderer/vr/XRManager.ts","../src/PanoImageRenderer/WebGLAnimator.ts","../src/PanoImageRenderer/PanoImageRenderer.ts","../src/PanoViewer/PanoViewer.ts","../src/SpinViewer/consts.ts","../src/SpinViewer/SpriteImage.ts","../src/SpinViewer/SpinViewer.ts","../src/cfc/withMethods.ts","../src/cfc/withPanoViewerMethods.ts","../src/cfc/withSpinViewerMethods.ts","../src/cfc/updatePanoViewer.ts","../src/index.umd.ts"],"sourcesContent":["const VERSION = \"#__VERSION__#\";\n\nexport {\n VERSION\n};\n","/* eslint-disable @typescript-eslint/no-implied-eval */\n/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport getAgent from \"@egjs/agent\";\n\n/* eslint-disable no-new-func, no-nested-ternary */\nconst win = typeof window !== \"undefined\" && window.Math === Math\n ? window\n : typeof self !== \"undefined\" && self.Math === Math\n ? self\n : Function(\"return this\")();\n/* eslint-enable no-new-func, no-nested-ternary */\n\nconst doc = win.document;\nconst nav = win.navigator;\nconst agent = getAgent();\nconst osName = agent.os.name;\nconst browserName = agent.browser.name;\nconst IS_IOS = osName === \"ios\";\nconst IS_SAFARI_ON_DESKTOP = osName === \"mac\" && browserName === \"safari\";\nconst IS_SAMSUNG_BROWSER = browserName === \"samsung internet\";\n\nexport {\n win as window,\n doc as document,\n nav as navigator,\n IS_IOS,\n IS_SAFARI_ON_DESKTOP,\n IS_SAMSUNG_BROWSER\n};\n","/* eslint-disable @typescript-eslint/naming-convention */\n/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport { window as win, document as doc } from \"./browser\";\n\nwin.Float32Array = (typeof win.Float32Array !== \"undefined\") ? win.Float32Array : win.Array;\n\nconst Float32Array = win.Float32Array;\nconst getComputedStyle = win.getComputedStyle;\nconst userAgent = win.navigator && win.navigator.userAgent;\nconst SUPPORT_TOUCH = \"ontouchstart\" in win;\nconst SUPPORT_DEVICEMOTION = \"ondevicemotion\" in win;\nconst DeviceMotionEvent = win.DeviceMotionEvent;\nconst devicePixelRatio = win.devicePixelRatio;\n\nconst TRANSFORM = (() => {\n const docStyle = doc?.documentElement.style ?? {};\n const target = [\"transform\", \"webkitTransform\", \"msTransform\", \"mozTransform\"];\n\n for (let i = 0, len = target.length; i < len; i++) {\n if (target[i] in docStyle) {\n return target[i];\n }\n }\n return \"\";\n})();\n\n// check for will-change support\nconst SUPPORT_WILLCHANGE = win.CSS && win.CSS.supports &&\n\twin.CSS.supports(\"will-change\", \"transform\");\n\nlet WEBXR_SUPPORTED = false;\n\nconst checkXRSupport = () => {\n const navigator = window.navigator as any;\n\n if (!navigator.xr) {\n return;\n }\n\n if (navigator.xr.isSessionSupported) {\n navigator.xr.isSessionSupported(\"immersive-vr\").then(res => {\n WEBXR_SUPPORTED = res;\n }).catch(() => void 0);\n } else if (navigator.xr.supportsSession) {\n navigator.xr.supportsSession(\"immersive-vr\").then(res => {\n WEBXR_SUPPORTED = res;\n }).catch(() => void 0);\n }\n};\n\nexport {\n Float32Array,\n getComputedStyle,\n userAgent,\n TRANSFORM,\n SUPPORT_TOUCH,\n SUPPORT_DEVICEMOTION,\n SUPPORT_WILLCHANGE,\n checkXRSupport,\n WEBXR_SUPPORTED,\n DeviceMotionEvent,\n devicePixelRatio\n};\n\n","/**\n * Original Code\n * https://github.com/toji/gl-matrix/blob/v2.3.2/src/gl-matrix.js\n * Math Util\n * modified by egjs\n */\n/**\n * @fileoverview gl-matrix - High performance matrix and vector operations\n * @author Brandon Jones\n * @author Colin MacKenzie IV\n * @version 2.3.2\n */\n\n/* Copyright (c) 2015, Brandon Jones, Colin MacKenzie IV.\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE. */\n\n// Some minimal math functionality borrowed from gl-Matrix and stripped down\n// for the purposes of this library.\n\nimport { vec2, vec3, quat } from \"gl-matrix\";\n\nimport { ValueOf } from \"../types/internal\";\n\nconst quatToVec3 = (quaternion: quat) => {\n const baseV = vec3.fromValues(0, 0, 1);\n\n vec3.transformQuat(baseV, baseV, quaternion);\n return baseV;\n};\n\nconst toDegree = (a: number) => a * 180 / Math.PI;\n\nconst util: any = {};\n\nutil.isPowerOfTwo = (n: number) => n && (n & (n - 1)) === 0;\n\nutil.extractPitchFromQuat = (quaternion: quat) => {\n const baseV = quatToVec3(quaternion);\n\n return -1 * Math.atan2(\n baseV[1],\n Math.sqrt(Math.pow(baseV[0], 2) + Math.pow(baseV[2], 2)));\n};\n\nutil.hypot = Math.hypot || ((x: number, y: number) => Math.sqrt(x * x + y * y));\n\n// implement reference\n// the general equation of a plane : http://www.gisdeveloper.co.kr/entry/평면의-공식\n// calculating angle between two vectors : http://darkpgmr.tistory.com/121\nconst ROTATE_CONSTANT: {\n PITCH_DELTA: 1;\n YAW_DELTA_BY_ROLL: 2;\n YAW_DELTA_BY_YAW: 3;\n} = {\n PITCH_DELTA: 1,\n YAW_DELTA_BY_ROLL: 2,\n YAW_DELTA_BY_YAW: 3\n};\n\nROTATE_CONSTANT[ROTATE_CONSTANT.PITCH_DELTA] = {\n targetAxis: [0, 1, 0],\n meshPoint: [0, 0, 1]\n};\nROTATE_CONSTANT[ROTATE_CONSTANT.YAW_DELTA_BY_ROLL] = {\n targetAxis: [0, 1, 0],\n meshPoint: [1, 0, 0]\n};\nROTATE_CONSTANT[ROTATE_CONSTANT.YAW_DELTA_BY_YAW] = {\n targetAxis: [1, 0, 0],\n meshPoint: [0, 0, 1]\n};\n\nconst getRotationDelta = (prevQ: quat, curQ: quat, rotateKind: ValueOf<typeof ROTATE_CONSTANT>) => {\n const targetAxis = vec3.fromValues(\n ROTATE_CONSTANT[rotateKind].targetAxis[0],\n ROTATE_CONSTANT[rotateKind].targetAxis[1],\n ROTATE_CONSTANT[rotateKind].targetAxis[2]\n );\n const meshPoint = ROTATE_CONSTANT[rotateKind].meshPoint;\n\n const prevQuaternion = quat.clone(prevQ);\n const curQuaternion = quat.clone(curQ);\n\n quat.normalize(prevQuaternion, prevQuaternion);\n quat.normalize(curQuaternion, curQuaternion);\n\n let prevPoint = vec3.fromValues(0, 0, 1);\n let curPoint = vec3.fromValues(0, 0, 1);\n\n vec3.transformQuat(prevPoint, prevPoint, prevQuaternion);\n vec3.transformQuat(curPoint, curPoint, curQuaternion);\n vec3.transformQuat(targetAxis, targetAxis, curQuaternion);\n\n const rotateDistance = vec3.dot(targetAxis, vec3.cross(vec3.create(), prevPoint, curPoint));\n const rotateDirection = rotateDistance > 0 ? 1 : -1;\n\n // when counter clock wise, use vec3.fromValues(0,1,0)\n // when clock wise, use vec3.fromValues(0,-1,0)\n // const meshPoint1 = vec3.fromValues(0, 0, 0);\n const meshPoint2 = vec3.fromValues(meshPoint[0], meshPoint[1], meshPoint[2]);\n\n let meshPoint3;\n\n if (rotateKind !== ROTATE_CONSTANT.YAW_DELTA_BY_YAW) {\n meshPoint3 = vec3.fromValues(0, rotateDirection, 0);\n } else {\n meshPoint3 = vec3.fromValues(rotateDirection, 0, 0);\n }\n\n vec3.transformQuat(meshPoint2, meshPoint2, curQuaternion);\n vec3.transformQuat(meshPoint3, meshPoint3, curQuaternion);\n\n const vecU = meshPoint2;\n const vecV = meshPoint3;\n const vecN = vec3.create();\n\n vec3.cross(vecN, vecU, vecV);\n vec3.normalize(vecN, vecN);\n\n const coefficientA = vecN[0];\n const coefficientB = vecN[1];\n const coefficientC = vecN[2];\n // const coefficientD = -1 * vec3.dot(vecN, meshPoint1);\n\n // a point on the plane\n curPoint = vec3.fromValues(meshPoint[0], meshPoint[1], meshPoint[2]);\n vec3.transformQuat(curPoint, curPoint, curQuaternion);\n\n // a point should project on the plane\n prevPoint = vec3.fromValues(meshPoint[0], meshPoint[1], meshPoint[2]);\n vec3.transformQuat(prevPoint, prevPoint, prevQuaternion);\n\n // distance between prevPoint and the plane\n let distance = Math.abs(\n prevPoint[0] * coefficientA +\n prevPoint[1] * coefficientB +\n prevPoint[2] * coefficientC\n );\n\n const projectedPrevPoint = vec3.create();\n\n vec3.subtract(projectedPrevPoint, prevPoint, vec3.scale(vec3.create(), vecN, distance));\n\n let trigonometricRatio =\n (projectedPrevPoint[0] * curPoint[0] +\n projectedPrevPoint[1] * curPoint[1] +\n projectedPrevPoint[2] * curPoint[2]) /\n (vec3.length(projectedPrevPoint) * vec3.length(curPoint));\n\n // defensive block\n if (trigonometricRatio > 1) {\n trigonometricRatio = 1;\n }\n\n const theta = Math.acos(trigonometricRatio);\n\n const crossVec = vec3.cross(vec3.create(), curPoint, projectedPrevPoint);\n\n distance =\n coefficientA * crossVec[0] +\n coefficientB * crossVec[1] +\n coefficientC * crossVec[2];\n\n let thetaDirection;\n\n if (rotateKind !== ROTATE_CONSTANT.YAW_DELTA_BY_YAW) {\n thetaDirection = distance > 0 ? 1 : -1;\n } else {\n thetaDirection = distance < 0 ? 1 : -1;\n }\n\n const deltaRadian = theta * thetaDirection * rotateDirection;\n\n return toDegree(deltaRadian);\n};\n\nconst angleBetweenVec2 = (v1: vec2, v2: vec2) => {\n const det = v1[0] * v2[1] - v2[0] * v1[1];\n const theta = -Math.atan2(det, vec2.dot(v1, v2));\n return theta;\n};\n\nutil.yawOffsetBetween = (viewDir: number, targetDir: number) => {\n const viewDirXZ = vec2.fromValues(viewDir[0], viewDir[2]);\n const targetDirXZ = vec2.fromValues(targetDir[0], targetDir[2]);\n\n vec2.normalize(viewDirXZ, viewDirXZ);\n vec2.normalize(targetDirXZ, targetDirXZ);\n\n const theta = -angleBetweenVec2(viewDirXZ, targetDirXZ);\n\n return theta;\n};\n\nutil.sign = (x: number) => Math.sign\n ? Math.sign(x)\n : (Number(x > 0) - Number(x < 0)) || +x;\n\nutil.toDegree = toDegree;\nutil.getRotationDelta = getRotationDelta;\nutil.angleBetweenVec2 = angleBetweenVec2;\n\nexport {\n util,\n ROTATE_CONSTANT\n};\n","import { quat } from \"gl-matrix\";\n\nimport {\n util as mathUtil,\n ROTATE_CONSTANT\n} from \"../utils/math-util\";\n\nexport const toAxis = (source, offset) => offset.reduce((acc, v, i) => {\n if (source[i]) {\n acc[source[i]] = v;\n }\n return acc;\n}, {});\n\nexport const getDeltaYaw = (prvQ: quat, curQ: quat) => {\n const yawDeltaByYaw = mathUtil.getRotationDelta(prvQ, curQ, ROTATE_CONSTANT.YAW_DELTA_BY_YAW) as number;\n const yawDeltaByRoll = mathUtil.getRotationDelta(prvQ, curQ, ROTATE_CONSTANT.YAW_DELTA_BY_ROLL) *\n Math.sin(mathUtil.extractPitchFromQuat(curQ));\n\n return yawDeltaByRoll + yawDeltaByYaw;\n};\n\nexport const getDeltaPitch = (prvQ: quat, curQ: quat) => {\n const pitchDelta = mathUtil.getRotationDelta(prvQ, curQ, ROTATE_CONSTANT.PITCH_DELTA);\n\n return pitchDelta;\n};\n","import { userAgent } from \"../utils/browserFeature\";\n/**\n * Returns a number value indiciating the version of Chrome being used,\n * or otherwise `null` if not on Chrome.\n *\n * Ref: https://github.com/immersive-web/cardboard-vr-display/pull/19\n */\n/**\n * In Chrome m65, `devicemotion` events are broken but subsequently fixed\n * in 65.0.3325.148. Since many browsers use Chromium, ensure that\n * we scope this detection by branch and build numbers to provide\n * a proper fallback.\n * https://github.com/immersive-web/webvr-polyfill/issues/307\n */\nlet version = -1; // It should not be null because it will be compared with number\nlet branch: string | null = null;\nlet build: string | null = null;\n\nconst match = /Chrome\\/([0-9]+)\\.(?:[0-9]*)\\.([0-9]*)\\.([0-9]*)/i.exec(userAgent);\n\nif (match) {\n version = parseInt(match[1], 10);\n branch = match[2];\n build = match[3];\n}\n\nconst CHROME_VERSION = version;\nconst IS_CHROME_WITHOUT_DEVICE_MOTION = version === 65 && branch === \"3325\" && parseInt(build!, 10) < 148;\nconst IS_ANDROID = /Android/i.test(userAgent);\n\nconst CONTROL_MODE_VR = 1;\nconst CONTROL_MODE_YAWPITCH = 2;\n\nconst TOUCH_DIRECTION_NONE = 1;\nconst TOUCH_DIRECTION_YAW = 2;\nconst TOUCH_DIRECTION_PITCH = 4;\nconst TOUCH_DIRECTION_ALL = TOUCH_DIRECTION_YAW | TOUCH_DIRECTION_PITCH;\n\n/* Const for MovableCoord */\nconst MC_DECELERATION = 0.0014;\nconst MC_MAXIMUM_DURATION = 1000;\nconst MC_BIND_SCALE = [0.20, 0.20];\n\nconst MIN_FIELD_OF_VIEW = 20;\nconst MAX_FIELD_OF_VIEW = 110;\nconst PAN_SCALE = 320;\n\n// const DELTA_THRESHOLD = 0.015;\n// const DELTA_THRESHOLD = 0.09; // Note4\n// const DELTA_THRESHOLD = 0.0825;\n// const DELTA_THRESHOLD = 0.075;\n// const DELTA_THRESHOLD = 0.06;\n// const DELTA_THRESHOLD = 0.045;\nconst DELTA_THRESHOLD = 0.0375; // Note2\n\nconst YAW_RANGE_HALF = 180;\nconst PITCH_RANGE_HALF = 90;\nconst CIRCULAR_PITCH_RANGE_HALF = 180;\nconst PINCH_EVENTS = \"pinchstart pinchmove pinchend\";\n\nconst KEYMAP = {\n LEFT_ARROW: 37,\n A: 65,\n UP_ARROW: 38,\n W: 87,\n RIGHT_ARROW: 39,\n D: 68,\n DOWN_ARROW: 40,\n S: 83\n};\n\nconst GYRO_MODE: {\n NONE: \"none\";\n YAWPITCH: \"yawPitch\";\n VR: \"VR\";\n} = {\n NONE: \"none\",\n YAWPITCH: \"yawPitch\",\n VR: \"VR\"\n};\n\nexport {\n GYRO_MODE,\n\n CONTROL_MODE_VR,\n CONTROL_MODE_YAWPITCH,\n\n TOUCH_DIRECTION_NONE,\n TOUCH_DIRECTION_YAW,\n TOUCH_DIRECTION_PITCH,\n TOUCH_DIRECTION_ALL,\n\n MC_DECELERATION,\n MC_MAXIMUM_DURATION,\n MC_BIND_SCALE,\n MIN_FIELD_OF_VIEW,\n MAX_FIELD_OF_VIEW,\n PAN_SCALE,\n DELTA_THRESHOLD,\n YAW_RANGE_HALF,\n PITCH_RANGE_HALF,\n CIRCULAR_PITCH_RANGE_HALF,\n PINCH_EVENTS,\n KEYMAP,\n\n CHROME_VERSION,\n IS_CHROME_WITHOUT_DEVICE_MOTION,\n IS_ANDROID\n};\n","/* eslint-disable */\n/*\n * Copyright 2016 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { window as win } from \"../../../../utils/browser\";\n\nconst MathUtil = win.MathUtil || {};\n\nMathUtil.degToRad = Math.PI / 180;\nMathUtil.radToDeg = 180 / Math.PI;\n\n// Some minimal math functionality borrowed from THREE.Math and stripped down\n// for the purposes of this library.\n\n\nMathUtil.Vector2 = function( x, y ) {\n this.x = x || 0;\n this.y = y || 0;\n};\n\nMathUtil.Vector2.prototype = {\n constructor: MathUtil.Vector2,\n\n set: function( x, y ) {\n this.x = x;\n this.y = y;\n\n return this;\n },\n\n copy: function( v ) {\n this.x = v.x;\n this.y = v.y;\n\n return this;\n },\n\n subVectors: function( a, b ) {\n this.x = a.x - b.x;\n this.y = a.y - b.y;\n\n return this;\n }\n};\n\nMathUtil.Vector3 = function( x, y, z ) {\n this.x = x || 0;\n this.y = y || 0;\n this.z = z || 0;\n};\n\nMathUtil.Vector3.prototype = {\n constructor: MathUtil.Vector3,\n\n set: function( x, y, z ) {\n this.x = x;\n this.y = y;\n this.z = z;\n\n return this;\n },\n\n copy: function( v ) {\n this.x = v.x;\n this.y = v.y;\n this.z = v.z;\n\n return this;\n },\n\n length: function() {\n return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n },\n\n normalize: function() {\n const scalar = this.length();\n\n if ( scalar !== 0 ) {\n const invScalar = 1 / scalar;\n\n this.multiplyScalar(invScalar);\n } else {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n }\n\n return this;\n },\n\n multiplyScalar: function( scalar ) {\n this.x *= scalar;\n this.y *= scalar;\n this.z *= scalar;\n },\n\n applyQuaternion: function( q ) {\n const x = this.x;\n const y = this.y;\n const z = this.z;\n\n const qx = q.x;\n const qy = q.y;\n const qz = q.z;\n const qw = q.w;\n\n // calculate quat * vector\n const ix = qw * x + qy * z - qz * y;\n const iy = qw * y + qz * x - qx * z;\n const iz = qw * z + qx * y - qy * x;\n const iw = - qx * x - qy * y - qz * z;\n\n // calculate result * inverse quat\n this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n return this;\n },\n\n dot: function( v ) {\n return this.x * v.x + this.y * v.y + this.z * v.z;\n },\n\n crossVectors: function( a, b ) {\n const ax = a.x;\n const ay = a.y;\n const az = a.z;\n const bx = b.x;\n const by = b.y;\n const bz = b.z;\n\n this.x = ay * bz - az * by;\n this.y = az * bx - ax * bz;\n this.z = ax * by - ay * bx;\n\n return this;\n }\n};\n\nMathUtil.Quaternion = function( x, y, z, w ) {\n this.x = x || 0;\n this.y = y || 0;\n this.z = z || 0;\n this.w = ( w !== undefined ) ? w : 1;\n};\n\nMathUtil.Quaternion.prototype = {\n constructor: MathUtil.Quaternion,\n\n set: function( x, y, z, w ) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.w = w;\n\n return this;\n },\n\n copy: function( quaternion ) {\n this.x = quaternion.x;\n this.y = quaternion.y;\n this.z = quaternion.z;\n this.w = quaternion.w;\n\n return this;\n },\n\n setFromEulerXYZ: function( x, y, z ) {\n const c1 = Math.cos( x / 2 );\n const c2 = Math.cos( y / 2 );\n const c3 = Math.cos( z / 2 );\n const s1 = Math.sin( x / 2 );\n const s2 = Math.sin( y / 2 );\n const s3 = Math.sin( z / 2 );\n\n this.x = s1 * c2 * c3 + c1 * s2 * s3;\n this.y = c1 * s2 * c3 - s1 * c2 * s3;\n this.z = c1 * c2 * s3 + s1 * s2 * c3;\n this.w = c1 * c2 * c3 - s1 * s2 * s3;\n\n return this;\n },\n\n setFromEulerYXZ: function( x, y, z ) {\n const c1 = Math.cos( x / 2 );\n const c2 = Math.cos( y / 2 );\n const c3 = Math.cos( z / 2 );\n const s1 = Math.sin( x / 2 );\n const s2 = Math.sin( y / 2 );\n const s3 = Math.sin( z / 2 );\n\n this.x = s1 * c2 * c3 + c1 * s2 * s3;\n this.y = c1 * s2 * c3 - s1 * c2 * s3;\n this.z = c1 * c2 * s3 - s1 * s2 * c3;\n this.w = c1 * c2 * c3 + s1 * s2 * s3;\n\n return this;\n },\n\n setFromAxisAngle: function( axis, angle ) {\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n // assumes axis is normalized\n\n const halfAngle = angle / 2;\n const s = Math.sin( halfAngle );\n\n this.x = axis.x * s;\n this.y = axis.y * s;\n this.z = axis.z * s;\n this.w = Math.cos( halfAngle );\n\n return this;\n },\n\n multiply: function( q ) {\n return this.multiplyQuaternions( this, q );\n },\n\n multiplyQuaternions: function( a, b ) {\n // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n const qax = a.x;\n const qay = a.y;\n const qaz = a.z;\n const qaw = a.w;\n const qbx = b.x;\n const qby = b.y;\n const qbz = b.z;\n const qbw = b.w;\n\n this.x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n this.y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n this.z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n this.w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n return this;\n },\n\n inverse: function() {\n this.x *= -1;\n this.y *= -1;\n this.z *= -1;\n\n this.normalize();\n\n return this;\n },\n\n normalize: function() {\n let l = Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n if ( l === 0 ) {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n this.w = 1;\n } else {\n l = 1 / l;\n\n this.x = this.x * l;\n this.y = this.y * l;\n this.z = this.z * l;\n this.w = this.w * l;\n }\n\n return this;\n },\n\n slerp: function( qb, t ) {\n if ( t === 0 ) return this;\n if ( t === 1 ) return this.copy( qb );\n\n const x = this.x;\n const y = this.y;\n const z = this.z;\n const w = this.w;\n\n // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n let cosHalfTheta = w * qb.w + x * qb.x + y * qb.y + z * qb.z;\n\n if ( cosHalfTheta < 0 ) {\n this.w = - qb.w;\n this.x = - qb.x;\n this.y = - qb.y;\n this.z = - qb.z;\n\n cosHalfTheta = - cosHalfTheta;\n } else {\n this.copy( qb );\n }\n\n if ( cosHalfTheta >= 1.0 ) {\n this.w = w;\n this.x = x;\n this.y = y;\n this.z = z;\n\n return this;\n }\n\n const halfTheta = Math.acos( cosHalfTheta );\n const sinHalfTheta = Math.sqrt( 1.0 - cosHalfTheta * cosHalfTheta );\n\n if ( Math.abs( sinHalfTheta ) < 0.001 ) {\n this.w = 0.5 * ( w + this.w );\n this.x = 0.5 * ( x + this.x );\n this.y = 0.5 * ( y + this.y );\n this.z = 0.5 * ( z + this.z );\n\n return this;\n }\n\n const ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta;\n const ratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n this.w = ( w * ratioA + this.w * ratioB );\n this.x = ( x * ratioA + this.x * ratioB );\n this.y = ( y * ratioA + this.y * ratioB );\n this.z = ( z * ratioA + this.z * ratioB );\n\n return this;\n },\n\n setFromUnitVectors: function() {\n // http://lolengine.net/blog/2014/02/24/quaternion-from-two-vectors-final\n // assumes direction vectors vFrom and vTo are normalized\n\n let v1;\n let r;\n const EPS = 0.000001;\n\n return function( vFrom, vTo ) {\n if ( v1 === undefined ) v1 = new MathUtil.Vector3();\n\n r = vFrom.dot( vTo ) + 1;\n\n if ( r < EPS ) {\n r = 0;\n\n if ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n v1.set( - vFrom.y, vFrom.x, 0 );\n } else {\n v1.set( 0, - vFrom.z, vFrom.y );\n }\n } else {\n v1.crossVectors( vFrom, vTo );\n }\n\n this.x = v1.x;\n this.y = v1.y;\n this.z = v1.z;\n this.w = r;\n\n this.normalize();\n\n return this;\n };\n }()\n};\n\nexport default MathUtil;\n","/* eslint-disable */\n/*\n * Copyright 2015 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// tslint:disable: only-arrow-functions\n\nimport { window as win, document as doc, navigator as nav } from \"../../../../utils/browser\";\n\nconst userAgent = nav?.userAgent ?? \"\";\nconst Util = (win ).Util || {};\n\nUtil.MIN_TIMESTEP = 0.001;\nUtil.MAX_TIMESTEP = 1;\n\nUtil.base64 = function(mimeType, base64) {\n return \"data:\" + mimeType + \";base64,\" + base64;\n};\n\nUtil.clamp = function(value, min, max) {\n return Math.min(Math.max(min, value), max);\n};\n\nUtil.lerp = function(a, b, t) {\n return a + ((b - a) * t);\n};\n\nUtil.isIOS = (function() {\n const isIOS = /iPad|iPhone|iPod/.test(nav?.platform);\n return function() {\n return isIOS;\n };\n})();\n\nUtil.isWebViewAndroid = (function() {\n const isWebViewAndroid = userAgent.indexOf(\"Version\") !== -1 &&\n userAgent.indexOf(\"Android\") !== -1 &&\n userAgent.indexOf(\"Chrome\") !== -1;\n return function() {\n return isWebViewAndroid;\n };\n})();\n\nUtil.isSafari = (function() {\n const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\n return function() {\n return isSafari;\n };\n})();\n\nUtil.isFirefoxAndroid = (function() {\n const isFirefoxAndroid = userAgent.indexOf(\"Firefox\") !== -1 &&\n userAgent.indexOf(\"Android\") !== -1;\n return function() {\n return isFirefoxAndroid;\n };\n})();\n\nUtil.isR7 = (function() {\n const isR7 = userAgent.indexOf(\"R7 Build\") !== -1;\n return function() {\n return isR7;\n };\n})();\n\nUtil.isLandscapeMode = function() {\n const rtn = (win.orientation === 90 || win.orientation === -90);\n return Util.isR7() ? !rtn : rtn;\n};\n\n// Helper method to validate the time steps of sensor timestamps.\nUtil.isTimestampDeltaValid = function(timestampDeltaS) {\n if (isNaN(timestampDeltaS)) {\n return false;\n }\n if (timestampDeltaS <= Util.MIN_TIMESTEP) {\n return false;\n }\n if (timestampDeltaS > Util.MAX_TIMESTEP) {\n return false;\n }\n return true;\n};\n\nUtil.getScreenWidth = function() {\n return Math.max(win.screen.width, win.screen.height) *\n win.devicePixelRatio;\n};\n\nUtil.getScreenHeight = function() {\n return Math.min(win.screen.width, win.screen.height) *\n win.devicePixelRatio;\n};\n\nUtil.requestFullscreen = function(element) {\n if (Util.isWebViewAndroid()) {\n return false;\n }\n if (element.requestFullscreen) {\n element.requestFullscreen();\n } else if (element.webkitRequestFullscreen) {\n element.webkitRequestFullscreen();\n } else if (element.mozRequestFullScreen) {\n element.mozRequestFullScreen();\n } else if (element.msRequestFullscreen) {\n element.msRequestFullscreen();\n } else {\n return false;\n }\n\n return true;\n};\n\nUtil.exitFullscreen = function() {\n if (doc.exitFullscreen) {\n doc.exitFullscreen();\n } else if (doc.webkitExitFullscreen) {\n doc.webkitExitFullscreen();\n } else if (doc.mozCancelFullScreen) {\n doc.mozCancelFullScreen();\n } else if (doc.msExitFullscreen) {\n doc.msExitFullscreen();\n } else {\n return false;\n }\n\n return true;\n};\n\nUtil.getFullscreenElement = function() {\n return doc.fullscreenElement ||\n doc.webkitFullscreenElement ||\n doc.mozFullScreenElement ||\n doc.msFullscreenElement;\n};\n\nUtil.linkProgram = function(gl, vertexSource, fragmentSource, attribLocationMap) {\n // No error checking for brevity.\n const vertexShader = gl.createShader(gl.VERTEX_SHADER);\n gl.shaderSource(vertexShader, vertexSource);\n gl.compileShader(vertexShader);\n\n const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n gl.shaderSource(fragmentShader, fragmentSource);\n gl.compileShader(fragmentShader);\n\n const program = gl.createProgram();\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n\n for (const attribName in attribLocationMap)\n gl.bindAttribLocation(program, attribLocationMap[attribName], attribName);\n\n gl.linkProgram(program);\n\n gl.deleteShader(vertexShader);\n gl.deleteShader(fragmentShader);\n\n return program;\n};\n\nUtil.getProgramUniforms = function(gl, program) {\n const uniforms = {};\n const uniformCount = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);\n let uniformName = \"\";\n for (let i = 0; i < uniformCount; i++) {\n const uniformInfo = gl.getActiveUniform(program, i);\n uniformName = uniformInfo.name.replace(\"[0]\", \"\");\n uniforms[uniformName] = gl.getUniformLocation(program, uniformName);\n }\n return uniforms;\n};\n\nUtil.orthoMatrix = function(out, left, right, bottom, top, near, far) {\n const lr = 1 / (left - right);\n const bt = 1 / (bottom - top);\n const nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n};\n\nUtil.copyArray = function(source, dest) {\n for (let i = 0, n = source.length; i < n; i++) {\n dest[i] = source[i];\n }\n};\n\nUtil.isMobile = function() {\n let check = false;\n (function(a) {\n if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4)))check = true;\n })(userAgent || nav?.vendor || win.opera);\n return check;\n};\n\nUtil.extend = function(dest, src) {\n for (const key in src) {\n if (src.hasOwnProperty(key)) {\n dest[key] = src[key];\n }\n }\n\n return dest;\n};\n\nUtil.safariCssSizeWorkaround = function(canvas) {\n // TODO(smus): Remove this workaround when Safari for iOS is fixed.\n // iOS only workaround (for https://bugs.webkit.org/show_bug.cgi?id=152556).\n //\n // \"To the last I grapple with thee;\n // from hell's heart I stab at thee;\n // for hate's sake I spit my last breath at thee.\"\n // -- Moby Dick, by Herman Melville\n if (Util.isIOS()) {\n const width = canvas.style.width;\n const height = canvas.style.height;\n canvas.style.width = (parseInt(width) + 1) + \"px\";\n canvas.style.height = (parseInt(height)) + \"px\";\n setTimeout(function() {\n canvas.style.width = width;\n canvas.style.height = height;\n }, 100);\n }\n\n // Debug only.\n win.Util = Util;\n win.canvas = canvas;\n};\n\nUtil.isDebug = function() {\n return Util.getQueryParameter(\"debug\");\n};\n\nUtil.getQueryParameter = function(name) {\n name = name.replace(/[\\[]/, \"\\\\[\").replace(/[\\]]/, \"\\\\]\");\n const regex = new RegExp(\"[\\\\?&]\" + name + \"=([^&#]*)\");\n const results = regex.exec(location.search);\n return results === null ? \"\" : decodeURIComponent(results[1].replace(/\\+/g, \" \"));\n};\n\nUtil.frameDataFromPose = (function() {\n const piOver180 = Math.PI / 180.0;\n const rad45 = Math.PI * 0.25;\n\n // Borrowed from glMatrix.\n function mat4_perspectiveFromFieldOfView(out, fov, near, far) {\n const upTan = Math.tan(fov ? (fov.upDegrees * piOver180) : rad45);\n const downTan = Math.tan(fov ? (fov.downDegrees * piOver180) : rad45);\n const leftTan = Math.tan(fov ? (fov.leftDegrees * piOver180) : rad45);\n const rightTan = Math.tan(fov ? (fov.rightDegrees * piOver180) : rad45);\n const xScale = 2.0 / (leftTan + rightTan);\n const yScale = 2.0 / (upTan + downTan);\n\n out[0] = xScale;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n out[4] = 0.0;\n out[5] = yScale;\n out[6] = 0.0;\n out[7] = 0.0;\n out[8] = -((leftTan - rightTan) * xScale * 0.5);\n out[9] = ((upTan - downTan) * yScale * 0.5);\n out[10] = far / (near - far);\n out[11] = -1.0;\n out[12] = 0.0;\n out[13] = 0.0;\n out[14] = (far * near) / (near - far);\n out[15] = 0.0;\n return out;\n }\n\n function mat4_fromRotationTranslation(out, q, v) {\n // Quaternion math\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n\n return out;\n }\n\n function mat4_translate(out, a, v) {\n const x = v[0];\n const y = v[1];\n const z = v[2];\n let a00;\n let a01;\n let a02;\n let a03;\n let a10;\n let a11;\n let a12;\n let a13;\n let a20;\n let a21;\n let a22;\n let a23;\n\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0]; a01 = a[1]; a02 = a[2]; a03 = a[3];\n a10 = a[4]; a11 = a[5]; a12 = a[6]; a13 = a[7];\n a20 = a[8]; a21 = a[9]; a22 = a[10]; a23 = a[11];\n\n out[0] = a00; out[1] = a01; out[2] = a02; out[3] = a03;\n out[4] = a10; out[5] = a11; out[6] = a12; out[7] = a13;\n out[8] = a20; out[9] = a21; out[10] = a22; out[11] = a23;\n\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n\n return out;\n }\n\n function mat4_invert(out, a) {\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n const a30 = a[12];\n const a31 = a[13];\n const a32 = a[14];\n const a33 = a[15];\n\n const b00 = a00 * a11 - a01 * a10;\n const b01 = a00 * a12 - a02 * a10;\n const b02 = a00 * a13 - a03 * a10;\n const b03 = a01 * a12 - a02 * a11;\n const b04 = a01 * a13 - a03 * a11;\n const b05 = a02 * a13 - a03 * a12;\n const b06 = a20 * a31 - a21 * a30;\n const b07 = a20 * a32 - a22 * a30;\n const b08 = a20 * a33 - a23 * a30;\n const b09 = a21 * a32 - a22 * a31;\n const b10 = a21 * a33 - a23 * a31;\n const b11 = a22 * a33 - a23 * a32;\n\n // Calculate the determinant\n let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n\n return out;\n }\n\n const defaultOrientation = new Float32Array([0, 0, 0, 1]);\n const defaultPosition = new Float32Array([0, 0, 0]);\n\n function updateEyeMatrices(projection, view, pose, parameters, vrDisplay) {\n mat4_perspectiveFromFieldOfView(projection, parameters ? parameters.fieldOfView : null, vrDisplay.depthNear, vrDisplay.depthFar);\n\n const orientation = pose.orientation || defaultOrientation;\n const position = pose.position || defaultPosition;\n\n mat4_fromRotationTranslation(view, orientation, position);\n if (parameters)\n mat4_translate(view, view, parameters.offset);\n mat4_invert(view, view);\n }\n\n return function(frameData, pose, vrDisplay) {\n if (!frameData || !pose)\n return false;\n\n frameData.pose = pose;\n frameData.timestamp = pose.timestamp;\n\n updateEyeMatrices(\n frameData.leftProjectionMatrix, frameData.leftViewMatrix,\n pose, vrDisplay.getEyeParameters(\"left\"), vrDisplay);\n updateEyeMatrices(\n frameData.rightProjectionMatrix, frameData.rightViewMatrix,\n pose, vrDisplay.getEyeParameters(\"right\"), vrDisplay);\n\n return true;\n };\n})();\n\nUtil.isInsideCrossDomainIFrame = function() {\n const isFramed = (win.self !== win.top);\n const refDomain = Util.getDomainFromUrl(doc.referrer);\n const thisDomain = Util.getDomainFromUrl(win.location.href);\n\n return isFramed && (refDomain !== thisDomain);\n};\n\n// From http://stackoverflow.com/a/23945027.\nUtil.getDomainFromUrl = function(url) {\n let domain;\n // Find & remove protocol (http, ftp, etc.) and get domain.\n if (url.indexOf(\"://\") > -1) {\n domain = url.split(\"/\")[2];\n } else {\n domain = url.split(\"/\")[0];\n }\n\n // find & remove port number\n domain = domain.split(\":\")[0];\n\n return domain;\n};\n\nexport default Util;\n","/* eslint-disable */\n\n/*\n * Copyright 2015 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport MathUtil from \"./math-util\";\nimport Util from \"./util\";\n\n/**\n * Given an orientation and the gyroscope data, predicts the future orientation\n * of the head. This makes rendering appear faster.\n *\n * Also see: http://msl.cs.uiuc.edu/~lavalle/papers/LavYerKatAnt14.pdf\n * @param {Number} predictionTimeS time from head movement to the appearance of\n * the corresponding image.\n */\nclass PosePredictor {\n public predictionTimeS;\n public previousQ;\n public previousTimestampS;\n public deltaQ;\n public outQ;\n\n public constructor(predictionTimeS) {\n this.predictionTimeS = predictionTimeS;\n\n // The quaternion corresponding to the previous state.\n this.previousQ = new MathUtil.Quaternion();\n // Previous time a prediction occurred.\n this.previousTimestampS = null;\n\n // The delta quaternion that adjusts the current pose.\n this.deltaQ = new MathUtil.Quaternion();\n // The output quaternion.\n this.outQ = new MathUtil.Quaternion();\n }\n\n public getPrediction(currentQ, gyro, timestampS) {\n if (!this.previousTimestampS) {\n this.previousQ.copy(currentQ);\n this.previousTimestampS = timestampS;\n return currentQ;\n }\n\n // Calculate axis and angle based on gyroscope rotation rate data.\n const axis = new MathUtil.Vector3();\n axis.copy(gyro);\n axis.normalize();\n\n const angularSpeed = gyro.length();\n\n // If we're rotating slowly, don't do prediction.\n if (angularSpeed < MathUtil.degToRad * 20) {\n if (Util.isDebug()) {\n console.log(\"Moving slowly, at %s deg/s: no prediction\",\n (MathUtil.radToDeg * angularSpeed).toFixed(1));\n }\n this.outQ.copy(currentQ);\n this.previousQ.copy(currentQ);\n return this.outQ;\n }\n\n // Get the predicted angle based on the time delta and latency.\n const deltaT = timestampS - this.previousTimestampS;\n const predictAngle = angularSpeed * this.predictionTimeS;\n\n this.deltaQ.setFromAxisAngle(axis, predictAngle);\n this.outQ.copy(this.previousQ);\n this.outQ.multiply(this.deltaQ);\n\n this.previousQ.copy(currentQ);\n this.previousTimestampS = timestampS;\n\n return this.outQ;\n }\n}\n\nexport default PosePredictor;\n","import Component, { ComponentEvent } from \"@egjs/component\";\nimport { vec3 } from \"gl-matrix\";\n\nimport { Mutable } from \"../../types/internal\";\nimport { window } from \"../../utils/browser\";\nimport { IS_CHROME_WITHOUT_DEVICE_MOTION, IS_ANDROID } from \"../consts\";\n\nconst STILLNESS_THRESHOLD = 200; // millisecond\n\nexport default class DeviceMotion extends Component<{\n devicemotion: {\n inputEvent: DeviceMotionEvent | {\n deviceorientation: {\n alpha: number;\n beta: number;\n gamma: number;\n };\n };\n };\n}> {\n public readonly isWithoutDeviceMotion: boolean;\n public readonly isAndroid: boolean;\n\n public stillGyroVec: vec3;\n public rawGyroVec: vec3;\n public adjustedGyroVec: vec3;\n public lastDevicemotionTimestamp: number;\n\n private _timer: number;\n private _isEnabled: boolean;\n\n public constructor() {\n super();\n this._onDeviceMotion = this._onDeviceMotion.bind(this);\n this._onDeviceOrientation = this._onDeviceOrientation.bind(this);\n this._onChromeWithoutDeviceMotion = this._onChromeWithoutDeviceMotion.bind(this);\n\n this.isWithoutDeviceMotion = IS_CHROME_WITHOUT_DEVICE_MOTION;\n this.isAndroid = IS_ANDROID;\n\n this.stillGyroVec = vec3.create();\n this.rawGyroVec = vec3.create();\n this.adjustedGyroVec = vec3.create();\n\n this._timer = -1;\n\n this.lastDevicemotionTimestamp = 0;\n this._isEnabled = false;\n this.enable();\n }\n\n public enable() {\n if (this.isAndroid) {\n window.addEventListener(\"deviceorientation\", this._onDeviceOrientation);\n }\n if (this.isWithoutDeviceMotion) {\n window.addEventListener(\"deviceorientation\", this._onChromeWithoutDeviceMotion);\n } else {\n window.addEventListener(\"devicemotion\", this._onDeviceMotion);\n }\n this._isEnabled = true;\n }\n\n public disable() {\n window.removeEventListener(\"deviceorientation\", this._onDeviceOrientation);\n window.removeEventListener(\"deviceorientation\", this._onChromeWithoutDeviceMotion);\n window.removeEventListener(\"devicemotion\", this._onDeviceMotion);\n this._isEnabled = false;\n }\n\n private _onChromeWithoutDeviceMotion(e: DeviceOrientationEvent) {\n let {alpha, beta, gamma} = e;\n\n // There is deviceorientation event trigged with empty values\n // on Headless Chrome.\n if (alpha === null) {\n return;\n }\n\n // convert to radian\n alpha = (alpha || 0) * Math.PI / 180;\n beta = (beta || 0) * Math.PI / 180;\n gamma = (gamma || 0) * Math.PI / 180;\n\n this.trigger(new ComponentEvent(\"devicemotion\", {\n inputEvent: {\n deviceorientation: {\n alpha,\n beta,\n gamma: -gamma\n }\n }\n }));\n }\n\n private _onDeviceOrientation() {\n if (this._timer) {\n clearTimeout(this._timer);\n }\n\n this._timer = window.setTimeout(() => {\n if ((new Date().getTime() - this.lastDevicemotionTimestamp) < STILLNESS_THRESHOLD) {\n vec3.copy(this.stillGyroVec, this.rawGyroVec);\n }\n }, STILLNESS_THRESHOLD);\n }\n\n private _onDeviceMotion(e: DeviceMotionEvent) {\n // desktop chrome triggers devicemotion event with empthy sensor values.\n // Those events should ignored.\n const isGyroSensorAvailable = !(e.rotationRate!.alpha == null);\n const isGravitySensorAvailable = !(e.accelerationIncludingGravity!.x == null);\n\n if (e.interval === 0 || !(isGyroSensorAvailable && isGravitySensorAvailable)) {\n return;\n }\n\n const devicemotionEvent = {...e} as Mutable<DeviceMotionEvent>;\n\n devicemotionEvent.interval = e.interval;\n devicemotionEvent.timeStamp = e.timeStamp;\n devicemotionEvent.type = e.type;\n devicemotionEvent.rotationRate = {\n alpha: e.rotationRate!.alpha,\n beta: e.rotationRate!.beta,\n gamma: e.rotationRate!.gamma\n };\n devicemotionEvent.accelerationIncludingGravity = {\n x: e.accelerationIncludingGravity!.x,\n y: e.accelerationIncludingGravity!.y,\n z: e.accelerationIncludingGravity!.z\n };\n devicemotionEvent.acceleration = {\n x: e.acceleration!.x,\n y: e.acceleration!.y,\n z: e.acceleration!.z\n };\n\n if (this.isAndroid) {\n vec3.set(\n this.rawGyroVec,\n e.rotationRate!.alpha || 0,\n e.rotationRate!.beta || 0,\n e.rotationRate!.gamma || 0);\n vec3.subtract(this.adjustedGyroVec, this.rawGyroVec, this.stillGyroVec);\n this.lastDevicemotionTimestamp = new Date().getTime();\n\n (devicemotionEvent as any).adjustedRotationRate = {\n alpha: this.adjustedGyroVec[0],\n beta: this.adjustedGyroVec[1],\n gamma: this.adjustedGyroVec[2]};\n }\n\n this.trigger(new ComponentEvent(\"devicemotion\", {\n inputEvent: devicemotionEvent\n }));\n }\n}\n","class SensorSample {\n public sample;\n public timestampS;\n\n public constructor(sample?, timestampS?) {\n this.set(sample, timestampS);\n }\n\n public set(sample, timestampS) {\n this.sample = sample;\n this.timestampS = timestampS;\n }\n\n public copy(sensorSample) {\n this.set(sensorSample.sample, sensorSample.timestampS);\n }\n}\n\nexport default SensorSample;\n","/* eslint-disable */\n/*\n * Copyright 2015 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport SensorSample from \"./sensor-sample\";\nimport MathUtil from \"./math-util\";\nimport Util from \"./util\";\n\n/**\n * An implementation of a simple complementary filter, which fuses gyroscope and\n * accelerometer data from the 'devicemotion' event.\n *\n * Accelerometer data is very noisy, but stable over the long term.\n * Gyroscope data is smooth, but tends to drift over the long term.\n *\n * This fusion is relatively simple:\n * 1. Get orientation estimates from accelerometer by applying a low-pass filter\n * on that data.\n * 2. Get orientation estimates from gyroscope by integrating over time.\n * 3. Combine the two estimates, weighing (1) in the long term, but (2) for the\n * short term.\n */\nclass ComplementaryFilter {\n public kFilter;\n public currentAccelMeasurement;\n public currentGyroMeasurement;\n public previousGyroMeasurement;\n public filterQ;\n public previousFilterQ;\n public accelQ;\n public isOrientationInitialized;\n public estimatedGravity;\n public measuredGravity;\n public gyroIntegralQ;\n\n constructor(kFilter) {\n this.kFilter = kFilter;\n\n // Raw sensor measurements.\n this.currentAccelMeasurement = new SensorSample();\n this.currentGyroMeasurement = new SensorSample();\n this.previousGyroMeasurement = new SensorSample();\n\n // Set default look direction to be in the correct direction.\n if (Util.isIOS()) {\n this.filterQ = new MathUtil.Quaternion(-1, 0, 0, 1);\n } else {\n this.filterQ = new MathUtil.Quaternion(1, 0, 0, 1);\n }\n this.previousFilterQ = new MathUtil.Quaternion();\n this.previousFilterQ.copy(this.filterQ);\n\n // Orientation based on the accelerometer.\n this.accelQ = new MathUtil.Quaternion();\n // Whether or not the orientation has been initialized.\n this.isOrientationInitialized = false;\n // Running estimate of gravity based on the current orientation.\n this.estimatedGravity = new MathUtil.Vector3();\n // Measured gravity based on accelerometer.\n this.measuredGravity = new MathUtil.Vector3();\n\n // Debug only quaternion of gyro-based orientation.\n this.gyroIntegralQ = new MathUtil.Quaternion();\n }\n\n public addAccelMeasurement(vector, timestampS) {\n this.currentAccelMeasurement.set(vector, timestampS);\n }\n\n public addGyroMeasurement = function(vector, timestampS) {\n this.currentGyroMeasurement.set(vector, timestampS);\n\n const deltaT = timestampS - this.previousGyroMeasurement.timestampS;\n if (Util.isTimestampDeltaValid(deltaT)) {\n this.run_();\n }\n\n this.previousGyroMeasurement.copy(this.currentGyroMeasurement);\n };\n\n public getOrientation() {\n return this.filterQ;\n }\n\n public run_() {\n if (!this.isOrientationInitialized) {\n this.accelQ = this.accelToQuaternion_(this.currentAccelMeasurement.sample);\n this.previousFilterQ.copy(this.accelQ);\n this.isOrientationInitialized = true;\n return;\n }\n\n const deltaT = this.currentGyroMeasurement.timestampS -\n this.previousGyroMeasurement.timestampS;\n\n // Convert gyro rotation vector to a quaternion delta.\n const gyroDeltaQ = this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample, deltaT);\n this.gyroIntegralQ.multiply(gyroDeltaQ);\n\n // filter_1 = K * (filter_0 + gyro * dT) + (1 - K) * accel.\n this.filterQ.copy(this.previousFilterQ);\n this.filterQ.multiply(gyroDeltaQ);\n\n // Calculate the delta between the current estimated gravity and the real\n // gravity vector from accelerometer.\n const invFilterQ = new MathUtil.Quaternion();\n invFilterQ.copy(this.filterQ);\n invFilterQ.inverse();\n\n this.estimatedGravity.set(0, 0, -1);\n this.estimatedGravity.applyQuaternion(invFilterQ);\n this.estimatedGravity.normalize();\n\n this.measuredGravity.copy(this.currentAccelMeasurement.sample);\n this.measuredGravity.normalize();\n\n // Compare estimated gravity with measured gravity, get the delta quaternion\n // between the two.\n const deltaQ = new MathUtil.Quaternion();\n deltaQ.setFromUnitVectors(this.estimatedGravity, this.measuredGravity);\n deltaQ.inverse();\n\n if (Util.isDebug()) {\n console.log(\"Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)\",\n MathUtil.radToDeg * Util.getQuaternionAngle(deltaQ),\n (this.estimatedGravity.x).toFixed(1),\n (this.estimatedGravity.y).toFixed(1),\n (this.estimatedGravity.z).toFixed(1),\n (this.measuredGravity.x).toFixed(1),\n (this.measuredGravity.y).toFixed(1),\n (this.measuredGravity.z).toFixed(1));\n }\n\n // Calculate the SLERP target: current orientation plus the measured-estimated\n // quaternion delta.\n const targetQ = new MathUtil.Quaternion();\n targetQ.copy(this.filterQ);\n targetQ.multiply(deltaQ);\n\n // SLERP factor: 0 is pure gyro, 1 is pure accel.\n this.filterQ.slerp(targetQ, 1 - this.kFilter);\n\n this.previousFilterQ.copy(this.filterQ);\n }\n\n private accelToQuaternion_(accel) {\n const normAccel = new MathUtil.Vector3();\n normAccel.copy(accel);\n normAccel.normalize();\n const quat = new MathUtil.Quaternion();\n quat.setFromUnitVectors(new MathUtil.Vector3(0, 0, -1), normAccel);\n quat.inverse();\n return quat;\n }\n\n private gyroToQuaternionDelta_(gyro, dt) {\n // Extract axis and angle from the gyroscope data.\n const quat = new MathUtil.Quaternion();\n const axis = new MathUtil.Vector3();\n axis.copy(gyro);\n axis.normalize();\n quat.setFromAxisAngle(axis, gyro.length() * dt);\n return quat;\n }\n}\n\nexport default ComplementaryFilter;\n","import MathUtil from \"./lib/webvr-polyfill/math-util\";\nimport ComplementaryFilter from \"./lib/webvr-polyfill/complementary-filter\";\n\nComplementaryFilter.prototype.run_ = function() {\n if (!this.isOrientationInitialized) {\n this.accelQ = this.accelToQuaternion_(this.currentAccelMeasurement.sample);\n this.previousFilterQ.copy(this.accelQ);\n this.isOrientationInitialized = true;\n return;\n }\n\n const deltaT = this.currentGyroMeasurement.timestampS -\n this.previousGyroMeasurement.timestampS;\n\n // Convert gyro rotation vector to a quaternion delta.\n const gyroDeltaQ = this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample, deltaT);\n\n this.gyroIntegralQ.multiply(gyroDeltaQ);\n\n // filter_1 = K * (filter_0 + gyro * dT) + (1 - K) * accel.\n this.filterQ.copy(this.previousFilterQ);\n this.filterQ.multiply(gyroDeltaQ);\n\n // Calculate the delta between the current estimated gravity and the real\n // gravity vector from accelerometer.\n const invFilterQ = new MathUtil.Quaternion();\n\n invFilterQ.copy(this.filterQ);\n invFilterQ.inverse();\n\n this.estimatedGravity.set(0, 0, -1);\n this.estimatedGravity.applyQuaternion(invFilterQ);\n this.estimatedGravity.normalize();\n\n this.measuredGravity.copy(this.currentAccelMeasurement.sample);\n this.measuredGravity.normalize();\n\n // Compare estimated gravity with measured gravity, get the delta quaternion\n // between the two.\n const deltaQ = new MathUtil.Quaternion();\n\n deltaQ.setFromUnitVectors(this.estimatedGravity, this.measuredGravity);\n deltaQ.inverse();\n\n // Calculate the SLERP target: current orientation plus the measured-estimated\n // quaternion delta.\n const targetQ = new MathUtil.Quaternion();\n\n targetQ.copy(this.filterQ);\n targetQ.multiply(deltaQ);\n\n // SLERP factor: 0 is pure gyro, 1 is pure accel.\n this.filterQ.slerp(targetQ, 1 - this.kFilter);\n\n this.previousFilterQ.copy(this.filterQ);\n\n if (!this.isFilterQuaternionInitialized) {\n this.isFilterQuaternionInitialized = true;\n }\n};\n\nComplementaryFilter.prototype.getOrientation = function() {\n if (this.isFilterQuaternionInitialized) {\n return this.filterQ;\n } else {\n return null;\n }\n};\n\nexport default ComplementaryFilter;\n","import Component, { ComponentEvent } from \"@egjs/component\";\nimport { quat } from \"gl-matrix\";\n\nimport { window, IS_IOS, IS_SAFARI_ON_DESKTOP } from \"../../utils/browser\";\nimport { CHROME_VERSION } from \"../consts\";\n\nimport PosePredictor from \"./lib/webvr-polyfill/pose-predictor\";\nimport MathUtil from \"./lib/webvr-polyfill/math-util\";\nimport Util from \"./lib/webvr-polyfill/util\";\nimport DeviceMotion from \"./DeviceMotion\";\nimport ComplementaryFilter from \"./ComplementaryFilter\";\n\n\nconst K_FILTER = 0.98;\nconst PREDICTION_TIME_S = 0.040;\n\nexport default class FusionPoseSensor extends Component<{\n change: {\n quaternion: quat;\n };\n}> {\n public deviceMotion: DeviceMotion | null;\n public accelerometer: any;\n public gyroscope: any;\n public filter: ComplementaryFilter;\n public posePredictor: PosePredictor;\n public filterToWorldQ: any;\n public isFirefoxAndroid: boolean;\n public isIOS: boolean;\n public isChromeUsingDegrees: boolean;\n public inverseWorldToScreenQ: any;\n public worldToScreenQ: any;\n public originalPoseAdjustQ: any;\n public resetQ: any;\n public deviceOrientationFixQ: any;\n public predictedQ: any;\n public previousTimestampS: number;\n\n private _isEnabled: boolean;\n private _deviceOrientationQ: any;\n private _prevOrientation: quat;\n private _alpha: number;\n\n public constructor() {\n super();\n\n this.deviceMotion = new DeviceMotion();\n\n this.accelerometer = new MathUtil.Vector3();\n this.gyroscope = new MathUtil.Vector3();\n\n this._onDeviceMotionChange = this._onDeviceMotionChange.bind(this);\n this._onScreenOrientationChange = this._onScreenOrientationChange.bind(this);\n\n this.filter = new ComplementaryFilter(K_FILTER);\n this.posePredictor = new PosePredictor(PREDICTION_TIME_S);\n\n this.filterToWorldQ = new MathUtil.Quaternion();\n\n this.isFirefoxAndroid = Util.isFirefoxAndroid();\n // This includes iPhone & iPad(both desktop and mobile mode) ref #326\n this.isIOS = IS_IOS || IS_SAFARI_ON_DESKTOP;\n\n // Ref https://github.com/immersive-web/cardboard-vr-display/issues/18\n this.isChromeUsingDegrees = CHROME_VERSION >= 66;\n\n this._isEnabled = false;\n\n // Set the filter to world transform, depending on OS.\n if (this.isIOS) {\n this.filterToWorldQ.setFromAxisAngle(new MathUtil.Vector3(1, 0, 0), Math.PI / 2);\n } else {\n this.filterToWorldQ.setFromAxisAngle(new MathUtil.Vector3(1, 0, 0), -Math.PI / 2);\n }\n\n this.inverseWorldToScreenQ = new MathUtil.Quaternion();\n this.worldToScreenQ = new MathUtil.Quaternion();\n this.originalPoseAdjustQ = new MathUtil.Quaternion();\n this.originalPoseAdjustQ.setFromAxisAngle(new MathUtil.Vector3(0, 0, 1),\n -window.orientation * Math.PI / 180);\n\n this._setScreenTransform();\n // Adjust this filter for being in landscape mode.\n if (Util.isLandscapeMode()) {\n this.filterToWorldQ.multiply(this.inverseWorldToScreenQ);\n }\n\n // Keep track of a reset transform for resetSensor.\n this.resetQ = new MathUtil.Quaternion();\n\n this.deviceMotion.on(\"devicemotion\", this._onDeviceMotionChange);\n this.enable();\n }\n\n public enable() {\n if (this.isEnabled()) {\n return;\n }\n this.deviceMotion!.enable();\n this._isEnabled = true;\n window.addEventListener(\"orientationchange\", this._onScreenOrientationChange);\n }\n\n public disable() {\n if (!this.isEnabled()) {\n return;\n }\n this.deviceMotion!.disable();\n this._isEnabled = false;\n window.removeEventListener(\"orientationchange\", this._onScreenOrientationChange);\n }\n\n public isEnabled() {\n return this._isEnabled;\n }\n\n public destroy() {\n this.disable();\n this.deviceMotion = null;\n }\n\n public getOrientation() {\n let orientation;\n\n // Hack around using deviceorientation instead of devicemotion\n if (this.deviceMotion!.isWithoutDeviceMotion && this._deviceOrientationQ) {\n this.deviceOrientationFixQ = this.deviceOrientationFixQ || (() => {\n const y = new MathUtil.Quaternion()\n .setFromAxisAngle(new MathUtil.Vector3(0, 1, 0), -this._alpha);\n\n return y;\n })();\n\n orientation = this._deviceOrientationQ;\n const out = new MathUtil.Quaternion();\n\n out.copy(orientation);\n out.multiply(this.filterToWorldQ);\n out.multiply(this.resetQ);\n out.multiply(this.worldToScreenQ);\n out.multiplyQuaternions(this.deviceOrientationFixQ, out);\n\n // return quaternion as glmatrix quaternion object\n const outQuat = quat.fromValues(\n out.x,\n out.y,\n out.z,\n out.w\n );\n\n return quat.normalize(outQuat, outQuat);\n } else {\n // Convert from filter space to the the same system used by the\n // deviceorientation event.\n orientation = this.filter.getOrientation();\n\n if (!orientation) {\n return null;\n }\n\n const out = this._convertFusionToPredicted(orientation);\n\n // return quaternion as glmatrix quaternion object\n const outQuat = quat.fromValues(\n out.x,\n out.y,\n out.z,\n out.w\n );\n\n return quat.normalize(outQuat, outQuat);\n }\n }\n\n private _triggerChange() {\n const orientation = this.getOrientation();\n\n // if orientation is not prepared. don't trigger change event\n if (!orientation) {\n return;\n }\n\n if (!this._prevOrientation) {\n this._prevOrientation = orientation;\n return;\n }\n\n if (quat.equals(this._prevOrientation, orientation)) {\n return;\n }\n\n this.trigger(new ComponentEvent(\"change\", { quaternion: orientation }));\n }\n\n private _convertFusionToPredicted(orientation: quat) {\n // Predict orientation.\n this.predictedQ =\n this.posePredictor.getPrediction(orientation, this.gyroscope, this.previousTimestampS);\n\n // Convert to THREE coordinate system: -Z forward, Y up, X right.\n const out = new MathUtil.Quaternion();\n\n out.copy(this.filterToWorldQ);\n out.multiply(this.resetQ);\n out.multiply(this.predictedQ);\n out.multiply(this.worldToScreenQ);\n\n return out;\n }\n\n private _onDeviceMotionChange({ inputEvent }) {\n const deviceorientation = inputEvent.deviceorientation;\n const deviceMotion = inputEvent;\n const accGravity = deviceMotion.accelerationIncludingGravity;\n const rotRate = deviceMotion.adjustedRotationRate || deviceMotion.rotationRate;\n let timestampS = deviceMotion.timeStamp / 1000;\n\n if (deviceorientation) {\n if (!this._alpha) {\n this._alpha = deviceorientation.alpha;\n }\n this._deviceOrientationQ = this._deviceOrientationQ || new MathUtil.Quaternion();\n this._deviceOrientationQ.setFromEulerYXZ(\n deviceorientation.beta,\n deviceorientation.alpha,\n deviceorientation.gamma\n );\n\n this._triggerChange();\n } else {\n // Firefox Android timeStamp returns one thousandth of a millisecond.\n if (this.isFirefoxAndroid) {\n timestampS /= 1000;\n }\n\n this.accelerometer.set(-accGravity.x, -accGravity.y, -accGravity.z);\n this.gyroscope.set(rotRate.alpha, rotRate.beta, rotRate.gamma);\n\n // Browsers on iOS, Firefox/Android, and Chrome m66/Android `rotationRate`\n // is reported in degrees, so we first convert to radians.\n if (this.isIOS || this.isFirefoxAndroid || this.isChromeUsingDegrees) {\n this.gyroscope.multiplyScalar(Math.PI / 180);\n }\n\n this.filter.addAccelMeasurement(this.accelerometer, timestampS);\n this.filter.addGyroMeasurement(this.gyroscope, timestampS);\n\n this._triggerChange();\n\n this.previousTimestampS = timestampS;\n }\n }\n\n private _onScreenOrientationChange() {\n this._setScreenTransform();\n }\n\n private _setScreenTransform() {\n this.worldToScreenQ.set(0, 0, 0, 1);\n\n const orientation = window.orientation;\n\n switch (orientation) {\n case 0:\n break;\n case 90:\n case -90:\n case 180:\n this.worldToScreenQ\n .setFromAxisAngle(new MathUtil.Vector3(0, 0, 1), orientation / -180 * Math.PI);\n break;\n default:\n break;\n }\n this.inverseWorldToScreenQ.copy(this.worldToScreenQ);\n this.inverseWorldToScreenQ.inverse();\n }\n}\n","import Component from \"@egjs/component\";\nimport { quat } from \"gl-matrix\";\nimport { IInputTypeObserver } from \"@egjs/axes/declaration/inputType/InputType\";\n\nimport { toAxis } from \"../utils\";\nimport { util, ROTATE_CONSTANT } from \"../../utils/math-util\";\n\nimport FusionPoseSensor from \"./FusionPoseSensor\";\n\nconst getDeltaYaw = (prvQ: quat, curQ: quat): number => {\n const yawDeltaByYaw = util.getRotationDelta(prvQ, curQ, ROTATE_CONSTANT.YAW_DELTA_BY_YAW) as number;\n const yawDeltaByRoll = util.getRotationDelta(prvQ, curQ, ROTATE_CONSTANT.YAW_DELTA_BY_ROLL) *\n Math.sin(util.extractPitchFromQuat(curQ));\n\n return yawDeltaByRoll + yawDeltaByYaw;\n};\n\nconst getDeltaPitch = (prvQ: quat, curQ: quat): number => {\n const pitchDelta = util.getRotationDelta(prvQ, curQ, ROTATE_CONSTANT.PITCH_DELTA);\n\n return pitchDelta;\n};\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport default class TiltMotionInput extends Component<{}> {\n public element: HTMLElement;\n public options: { scale: number; threshold: number };\n public fusionPoseSensor: FusionPoseSensor | null;\n public axes: string[];\n public observer: IInputTypeObserver | null;\n\n private _prevQuaternion: quat | null;\n private _quaternion: quat | null;\n\n public constructor(el: HTMLElement, options: Partial<{ scale: number; threshold: number }> = {}) {\n super();\n this.element = el;\n\n this._prevQuaternion = null;\n this._quaternion = null;\n\n this.fusionPoseSensor = null;\n\n this.options = {\n ...{\n scale: 1,\n threshold: 0\n }, ...options\n };\n\n this._onPoseChange = this._onPoseChange.bind(this);\n }\n\n public mapAxes(axes: string[]) {\n this.axes = axes;\n }\n\n public connect(observer: IInputTypeObserver) {\n if (this.observer) {\n return this;\n }\n this.observer = observer;\n this.fusionPoseSensor = new FusionPoseSensor();\n this.fusionPoseSensor.enable();\n this._attachEvent();\n return this;\n }\n\n public disconnect() {\n if (!this.observer) {\n return this;\n }\n\n this._dettachEvent();\n this.fusionPoseSensor!.disable();\n this.fusionPoseSensor!.destroy();\n this.fusionPoseSensor = null;\n this.observer = null;\n return this;\n }\n\n public destroy() {\n this.disconnect();\n (this.element as any) = null;\n (this.options as any) = null;\n (this.axes as any) = null;\n this._prevQuaternion = null;\n this._quaternion = null;\n }\n\n private _onPoseChange(event) {\n if (!this._prevQuaternion) {\n this._prevQuaternion = quat.clone(event.quaternion);\n this._quaternion = quat.clone(event.quaternion);\n return;\n }\n\n quat.copy(this._prevQuaternion, this._quaternion!);\n quat.copy(this._quaternion!, event.quaternion);\n\n this.observer!.change(this, event, toAxis(this.axes, [\n getDeltaYaw(this._prevQuaternion, this._quaternion as quat),\n getDeltaPitch(this._prevQuaternion, this._quaternion as quat)\n ]));\n }\n\n private _attachEvent() {\n this.fusionPoseSensor!.on(\"change\", this._onPoseChange);\n }\n\n private _dettachEvent() {\n this.fusionPoseSensor!.off(\"change\", this._onPoseChange);\n }\n}\n","import { glMatrix } from \"gl-matrix\";\n\nimport { window } from \"../utils/browser\";\n\n// Singleton\nlet screenRotationAngleInst: ScreenRotationAngle | null = null;\nlet refCount = 0;\n\nexport default class ScreenRotationAngle {\n private _spinR: number;\n private _screenOrientationAngle: number;\n\n public constructor() {\n refCount++;\n\n if (screenRotationAngleInst) {\n return screenRotationAngleInst;\n }\n /* eslint-disable */\n screenRotationAngleInst = this;\n /* eslint-enable */\n this._onDeviceOrientation = this._onDeviceOrientation.bind(this);\n this._onOrientationChange = this._onOrientationChange.bind(this);\n\n this._spinR = 0;\n\n this._screenOrientationAngle = 0;\n window.addEventListener(\"deviceorientation\", this._onDeviceOrientation);\n window.addEventListener(\"orientationchange\", this._onOrientationChange);\n }\n\n public getRadian() {\n // Join with screen orientation\n // this._testVal = this._spinR + \", \" + this._screenOrientationAngle + \", \" + window.orientation;\n return this._spinR + glMatrix.toRadian(this._screenOrientationAngle);\n }\n\n public unref() {\n if (--refCount > 0) {\n return;\n }\n\n window.removeEventListener(\"deviceorientation\", this._onDeviceOrientation);\n window.removeEventListener(\"orientationchange\", this._onOrientationChange);\n\n this._spinR = 0;\n this._screenOrientationAngle = 0;\n /* eslint-disable */\n screenRotationAngleInst = null;\n /* eslint-enable */\n refCount = 0;\n }\n\n private _onDeviceOrientation(e: DeviceOrientationEvent) {\n if (e.beta === null || e.gamma === null) {\n // (Chrome) deviceorientation is fired with invalid information {alpha=null, beta=null, ...} despite of not dispatching it. We skip it.\n return;\n }\n\n // Radian\n const betaR = glMatrix.toRadian(e.beta);\n const gammaR = glMatrix.toRadian(e.gamma);\n\n /* spinR range = [-180, 180], left side: 0 ~ -180(deg), right side: 0 ~ 180(deg) */\n this._spinR = Math.atan2(Math.cos(betaR) * Math.sin(gammaR), Math.sin(betaR));\n }\n\n private _onOrientationChange() {\n if (window.screen && window.screen.orientation && window.screen.orientation.angle !== undefined) {\n this._screenOrientationAngle = screen.orientation.angle;\n } else if (window.orientation !== undefined) {\n /* iOS */\n this._screenOrientationAngle = window.orientation >= 0 ?\n window.orientation : 360 + (window.orientation as number);\n }\n }\n}\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport Axes, { PanInput } from \"@egjs/axes\";\nimport { IInputTypeObserver } from \"@egjs/axes/declaration/inputType/InputType\";\nimport { PanInputOption } from \"@egjs/axes/declaration/inputType/PanInput\";\n\nimport ScreenRotationAngle from \"../ScreenRotationAngle\";\n\n/**\n * RotationPanInput is extension of PanInput to compensate coordinates by screen rotation angle.\n *\n * The reason for using this function is that in VR mode,\n * the roll angle is adjusted in the direction opposite to the screen rotation angle.\n *\n * Therefore, the angle that the user touches and moves does not match the angle at which the actual object should move.\n * @extends PanInput\n */\n// @ts-ignore\nexport default class RotationPanInput extends PanInput {\n private _useRotation: boolean;\n private _screenRotationAngle: ScreenRotationAngle | null;\n private _userDirection: number;\n\n /**\n * Constructor\n * @private\n * @param {HTMLElement} el target element\n * @param {Object} [options] The option object\n * @param {Boolean} [options.useRotation] Whether to use rotation(or VR)\n */\n public constructor(el: HTMLElement, options: Partial<{ useRotation: boolean } & PanInputOption> = {}) {\n super(el, options);\n\n this._useRotation = false;\n this._screenRotationAngle = null;\n\n this.setUseRotation(!!(options && options.useRotation));\n\n this._userDirection = Axes.DIRECTION_ALL;\n }\n\n public setUseRotation(useRotation: boolean) {\n this._useRotation = useRotation;\n\n if (this._screenRotationAngle) {\n this._screenRotationAngle.unref();\n this._screenRotationAngle = null;\n }\n\n if (this._useRotation) {\n this._screenRotationAngle = new ScreenRotationAngle();\n }\n }\n\n public connect(observer: IInputTypeObserver) {\n // User intetened direction\n this._userDirection = this._direction;\n\n // In VR Mode, Use ALL direction if direction is not none\n // Because horizontal and vertical is changed dynamically by screen rotation.\n // this._direction is used to initialize hammerjs\n if (this._useRotation && (this._direction & Axes.DIRECTION_ALL)) {\n this._direction = Axes.DIRECTION_HORIZONTAL;\n }\n\n return super.connect(observer);\n }\n\n public destroy() {\n if (this._useRotation && this._screenRotationAngle) {\n this._screenRotationAngle.unref();\n }\n\n super.destroy();\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private getOffset(properties: number[], useDirection: boolean[]) {\n if (this._useRotation === false) {\n // @ts-ignore\n return super.getOffset(properties, useDirection);\n }\n\n // @ts-ignore\n const offset = super.getOffset(properties, [true, true]);\n const newOffset = [0, 0];\n\n const theta = this._screenRotationAngle!.getRadian();\n\n const cosTheta = Math.cos(theta);\n const sinTheta = Math.sin(theta);\n\n // RotateZ\n newOffset[0] = offset[0] * cosTheta - offset[1] * sinTheta;\n newOffset[1] = offset[1] * cosTheta + offset[0] * sinTheta;\n\n // Use only user allowed direction.\n if (!(this._userDirection & Axes.DIRECTION_HORIZONTAL)) {\n newOffset[0] = 0;\n } else if (!(this._userDirection & Axes.DIRECTION_VERTICAL)) {\n newOffset[1] = 0;\n }\n\n return newOffset;\n }\n}\n\n/**\n * Override getDirectionByAngle to return DIRECTION_ALL\n * Ref: https://github.com/naver/egjs-axes/issues/99\n *\n * But we obey axes's rule. If axes's rule is problem, let's apply following code.\n */\n// PanInput.getDirectionByAngle = function (angle, thresholdAngle) {\n// \treturn DIRECTION_ALL;\n// };\n","import Component, { ComponentEvent } from \"@egjs/component\";\nimport { vec3, glMatrix, quat } from \"gl-matrix\";\n\nimport FusionPoseSensor from \"./input/FusionPoseSensor\";\n\nconst Y_AXIS_VECTOR = vec3.fromValues(0, 1, 0);\n\nexport default class DeviceQuaternion extends Component<{\n change: {\n isTrusted: boolean;\n };\n}> {\n private _fusionPoseSensor: FusionPoseSensor | null;\n private _quaternion: quat;\n\n public constructor() {\n super();\n\n this._fusionPoseSensor = new FusionPoseSensor();\n this._quaternion = quat.create();\n\n this._fusionPoseSensor.enable();\n this._fusionPoseSensor.on(\"change\", e => {\n this._quaternion = e.quaternion;\n\n this.trigger(new ComponentEvent(\"change\", { isTrusted: true }));\n });\n }\n\n public getCombinedQuaternion(yaw: number) {\n const yawQ = quat.setAxisAngle(quat.create(), Y_AXIS_VECTOR, glMatrix.toRadian(-yaw));\n const conj = quat.conjugate(quat.create(), this._quaternion);\n // Multiply pitch quaternion -> device quaternion -> yaw quaternion\n const outQ = quat.multiply(quat.create(), conj, yawQ);\n\n return outQ;\n }\n\n public destroy() {\n // detach all event handler\n this.off();\n\n if (this._fusionPoseSensor) {\n this._fusionPoseSensor.off();\n this._fusionPoseSensor.destroy();\n this._fusionPoseSensor = null;\n }\n }\n}\n","import Component, { ComponentEvent } from \"@egjs/component\";\nimport Axes, { PinchInput, MoveKeyInput, WheelInput } from \"@egjs/axes\";\nimport { vec2, quat, glMatrix } from \"gl-matrix\";\n\nimport { SUPPORT_TOUCH, SUPPORT_DEVICEMOTION } from \"../utils/browserFeature\";\nimport { util as mathUtil } from \"../utils/math-util\";\nimport { VERSION } from \"../version\";\nimport { ValueOf } from \"../types/internal\";\n\nimport TiltMotionInput from \"./input/TiltMotionInput\";\nimport RotationPanInput from \"./input/RotationPanInput\";\nimport DeviceQuaternion from \"./DeviceQuaternion\";\nimport {\n GYRO_MODE,\n TOUCH_DIRECTION_YAW,\n TOUCH_DIRECTION_PITCH,\n TOUCH_DIRECTION_ALL,\n MC_DECELERATION,\n MC_MAXIMUM_DURATION,\n MC_BIND_SCALE,\n MAX_FIELD_OF_VIEW,\n PAN_SCALE,\n YAW_RANGE_HALF,\n PITCH_RANGE_HALF,\n CIRCULAR_PITCH_RANGE_HALF,\n CONTROL_MODE_VR,\n CONTROL_MODE_YAWPITCH,\n TOUCH_DIRECTION_NONE\n} from \"./consts\";\n\n\nconst DEFAULT_YAW_RANGE = [-YAW_RANGE_HALF, YAW_RANGE_HALF];\nconst DEFAULT_PITCH_RANGE = [-PITCH_RANGE_HALF, PITCH_RANGE_HALF];\nconst CIRCULAR_PITCH_RANGE = [-CIRCULAR_PITCH_RANGE_HALF, CIRCULAR_PITCH_RANGE_HALF];\n\nexport interface YawPitchControlOptions {\n element: HTMLElement | null;\n yaw: number;\n pitch: number;\n fov: number;\n showPolePoint: boolean;\n useZoom: boolean;\n useKeyboard: boolean;\n gyroMode: ValueOf<typeof GYRO_MODE>;\n touchDirection: number;\n yawRange: number[];\n pitchRange: number[];\n fovRange: number[];\n aspectRatio: number;\n}\ninterface YawPitchControlEvents {\n change: {\n yaw: number;\n pitch: number;\n fov: number;\n quaternion: quat | null;\n targetElement: HTMLElement;\n isTrusted: boolean;\n };\n hold: {\n isTrusted: boolean;\n };\n animationEnd: {\n isTrusted: boolean;\n };\n}\n\n/**\n * A module used to provide coordinate based on yaw/pitch orientation. This module receives user touch action, keyboard, mouse and device orientation(if it exists) as input, then combines them and converts it to yaw/pitch coordinates.\n * @alias eg.YawPitchControl\n * @extends eg.Component\n *\n * @support {\"ie\": \"10+\", \"ch\" : \"latest\", \"ff\" : \"latest\", \"sf\" : \"latest\", \"edge\" : \"latest\", \"ios\" : \"7+\", \"an\" : \"2.3+ (except 3.x)\"}\n */\nclass YawPitchControl extends Component<YawPitchControlEvents> {\n public static VERSION = VERSION;\n // Expose DeviceOrientationControls sub module for test purpose\n public static CONTROL_MODE_VR = CONTROL_MODE_VR;\n public static CONTROL_MODE_YAWPITCH = CONTROL_MODE_YAWPITCH;\n public static TOUCH_DIRECTION_ALL = TOUCH_DIRECTION_ALL;\n public static TOUCH_DIRECTION_YAW = TOUCH_DIRECTION_YAW;\n public static TOUCH_DIRECTION_PITCH = TOUCH_DIRECTION_PITCH;\n public static TOUCH_DIRECTION_NONE = TOUCH_DIRECTION_NONE;\n\n public options: YawPitchControlOptions;\n\n private _element: HTMLElement | null;\n private _initialFov: number;\n private _enabled: boolean;\n private _isAnimating: boolean;\n private _deviceQuaternion: DeviceQuaternion | null;\n\n private _axes: Axes;\n private _axesPanInput: RotationPanInput;\n private _axesWheelInput: WheelInput;\n private _axesTiltMotionInput: TiltMotionInput | null;\n private _axesPinchInput: PinchInput | null;\n private _axesMoveKeyInput: MoveKeyInput;\n\n /**\n * @param {object} options The option object of the eg.YawPitch module\n * @param {HTMLElement|null}[options.element=null] element A base element for the eg.YawPitch module\n * @param {number} [options.yaw=0] initial yaw (degree)\n * @param {number} [options.pitch=0] initial pitch (degree)\n * @param {number} [options.fov=65] initial field of view (degree)\n * @param {boolean} [optiosn.showPolePoint=true] Indicates whether pole is shown\n * @param {boolean} [options.useZoom=true] Indicates whether zoom is available\n * @param {boolean} [options.useKeyboard=true] Indicates whether keyboard is enabled\n * @param {string} [config.gyroMode=yawPitch] Enables control through device motion.\n * @param {number} [options.touchDirection=TOUCH_DIRECTION_ALL] Direction of the touch movement (TOUCH_DIRECTION_ALL: all, TOUCH_DIRECTION_YAW: horizontal, TOUCH_DIRECTION_PITCH: vertical, TOUCH_DIRECTION_NONE: no move)\n * @param {number[]} [options.yawRange=[-180, 180] Range of visible yaw\n * @param {number[]} [options.pitchRange=[-90, 90] Range of visible pitch\n * @param {number[]} [options.fovRange=[30, 110] Range of FOV\n * @param {number} [options.aspectRatio=1] Aspect Ratio\n */\n public constructor(options: Partial<YawPitchControlOptions>) {\n super();\n this.options = {} as any;\n\n const opt = {\n ...{\n element: null,\n yaw: 0,\n pitch: 0,\n fov: 65,\n showPolePoint: false,\n useZoom: true,\n useKeyboard: true,\n gyroMode: GYRO_MODE.YAWPITCH,\n touchDirection: TOUCH_DIRECTION_ALL,\n yawRange: DEFAULT_YAW_RANGE,\n pitchRange: DEFAULT_PITCH_RANGE,\n fovRange: [30, 110],\n aspectRatio: 1 /* TODO: Need Mandatory? */\n }, ...options\n };\n\n this._element = opt.element;\n this._initialFov = opt.fov;\n this._enabled = false;\n this._isAnimating = false;\n this._deviceQuaternion = null;\n\n this._initAxes(opt);\n this.option(opt);\n }\n\n /**\n * Update Pan Scale\n *\n * Scale(Sensitivity) values of panning is related with fov and height.\n * If at least one of them is changed, this function need to be called.\n * @param {*} param\n */\n public updatePanScale(param: Partial<{\n height: number;\n }> = {}) {\n const fov = this._axes.get().fov;\n const areaHeight = param.height || parseInt(window.getComputedStyle(this._element!).height, 10);\n const scale = MC_BIND_SCALE[0] * fov / this._initialFov * PAN_SCALE / areaHeight;\n\n this._axesPanInput.options.scale = [scale, scale];\n this._axes.options.deceleration = MC_DECELERATION * fov / MAX_FIELD_OF_VIEW;\n\n return this;\n }\n\n public option(): YawPitchControlOptions;\n public option<K extends keyof YawPitchControlOptions>(key: K): YawPitchControlOptions[K];\n public option<K extends keyof YawPitchControlOptions>(key: K, newValue: YawPitchControlOptions[K]): YawPitchControl;\n public option(newOptions: Partial<YawPitchControlOptions>): YawPitchControl;\n /*\n * Override component's option method\n * to call method for updating values which is affected by option change.\n *\n * @param {*} args\n */\n public option<K extends keyof YawPitchControlOptions>(key?: K | Partial<YawPitchControlOptions>, newValue?: YawPitchControlOptions[K]) {\n // Getter\n if (!key) {\n return this._getOptions();\n } else if (key && typeof key === \"string\" && typeof newValue === \"undefined\") {\n return this._getOptions(key);\n }\n\n // Setter\n let newOptions: Partial<YawPitchControlOptions> = {};\n let changedKeyList: string[] = []; // TODO: if value is not changed, then do not push on changedKeyList.\n\n if (typeof key === \"string\") {\n changedKeyList.push(key);\n newOptions[key] = newValue;\n } else {\n const options = key; // Retrieving object here\n changedKeyList = Object.keys(options);\n newOptions = {...options};\n }\n\n this._setOptions(this._getValidatedOptions(newOptions));\n this._applyOptions(changedKeyList);\n return this;\n }\n\n /**\n * Enable YawPitch functionality\n * @method eg.YawPitch#enable\n */\n public enable() {\n if (this._enabled) {\n return this;\n }\n\n this._enabled = true;\n\n // touchDirection is decided by parameter is valid string (Ref. Axes.connect)\n this._applyOptions(Object.keys(this.options));\n\n // TODO: Is this code is needed? Check later.\n this.updatePanScale();\n\n return this;\n }\n\n /**\n * Disable YawPitch functionality\n * @method eg.YawPitch#disable\n */\n public disable(persistOrientation: boolean = false) {\n if (!this._enabled) {\n return this;\n }\n\n // TODO: Check peristOrientation is needed!\n if (!persistOrientation) {\n this._resetOrientation();\n }\n this._axes.disconnect();\n this._enabled = false;\n return this;\n }\n\n /**\n * Set one or more of yaw, pitch, fov\n * @param {Object} coordinate yaw, pitch, fov\n * @param {Number} duration Animation duration. if it is above 0 then it's animated.\n */\n public lookAt({yaw, pitch, fov}, duration) {\n const pos = this._axes.get();\n\n const y = yaw === undefined ? 0 : yaw - pos.yaw;\n const p = pitch === undefined ? 0 : pitch - pos.pitch;\n const f = fov === undefined ? 0 : fov - pos.fov;\n\n // Allow duration of animation to have more than MC_MAXIMUM_DURATION.\n this._axes.options.maximumDuration = Infinity;\n\n this._axes.setBy({\n yaw: y,\n pitch: p,\n fov: f\n }, duration);\n }\n\n public getYawPitch() {\n const yawPitch = this._axes.get();\n\n return {\n yaw: yawPitch.yaw,\n pitch: yawPitch.pitch\n };\n }\n\n public getFov() {\n return this._axes.get().fov;\n }\n\n public getQuaternion() {\n const pos = this._axes.get();\n\n return this._deviceQuaternion!.getCombinedQuaternion(pos.yaw);\n }\n\n public shouldRenderWithQuaternion() {\n return this.options.gyroMode === GYRO_MODE.VR;\n }\n\n /**\n * Destroys objects\n */\n public destroy() {\n /* eslint-disable @typescript-eslint/no-unused-expressions */\n this._axes && this._axes.destroy();\n this._axesPanInput && this._axesPanInput.destroy();\n this._axesWheelInput && this._axesWheelInput.destroy();\n this._axesTiltMotionInput && this._axesTiltMotionInput.destroy();\n this._axesPinchInput && this._axesPinchInput.destroy();\n this._axesMoveKeyInput && this._axesMoveKeyInput.destroy();\n this._deviceQuaternion && this._deviceQuaternion.destroy();\n /* eslint-enable @typescript-eslint/no-unused-expressions */\n }\n\n private _initAxes(opt: YawPitchControlOptions) {\n const yRange = this._updateYawRange(opt.yawRange, opt.fov, opt.aspectRatio);\n const pRange = this._updatePitchRange(opt.pitchRange, opt.fov, opt.showPolePoint);\n const useRotation = opt.gyroMode === GYRO_MODE.VR;\n\n this._axesPanInput = new RotationPanInput(this._element!, {useRotation});\n this._axesWheelInput = new WheelInput(this._element, {scale: -4});\n this._axesTiltMotionInput = null;\n this._axesPinchInput = SUPPORT_TOUCH ? new PinchInput(this._element, {scale: -1}) : null;\n this._axesMoveKeyInput = new MoveKeyInput(this._element, {scale: [-6, 6]});\n\n this._axes = new Axes({\n yaw: {\n range: yRange,\n circular: this._isCircular(yRange),\n bounce: [0, 0]\n },\n pitch: {\n range: pRange,\n circular: this._isCircular(pRange),\n bounce: [0, 0]\n },\n fov: {\n range: opt.fovRange,\n circular: [false, false],\n bounce: [0, 0]\n }\n }, {\n deceleration: MC_DECELERATION,\n maximumDuration: MC_MAXIMUM_DURATION\n }, {\n yaw: opt.yaw,\n pitch: opt.pitch,\n fov: opt.fov\n }).on({\n // TODO: change event type after Axes event type inference update\n hold: (evt: any) => {\n // Restore maximumDuration not to be spin too mush.\n this._axes.options.maximumDuration = MC_MAXIMUM_DURATION;\n\n this.trigger(new ComponentEvent(\"hold\", { isTrusted: evt.isTrusted }));\n },\n change: (evt: any) => {\n if (evt.delta.fov !== 0) {\n this._updateControlScale(evt);\n this.updatePanScale();\n }\n this._triggerChange(evt);\n },\n release: evt => {\n this._triggerChange(evt);\n },\n animationEnd: (evt: any) => {\n this.trigger(new ComponentEvent(\"animationEnd\", { isTrusted: evt.isTrusted }));\n }\n });\n }\n\n private _getValidatedOptions(newOptions: Partial<YawPitchControlOptions>) {\n if (newOptions.yawRange) {\n newOptions.yawRange =\n this._getValidYawRange(newOptions.yawRange, newOptions.fov, newOptions.aspectRatio);\n }\n if (newOptions.pitchRange) {\n newOptions.pitchRange = this._getValidPitchRange(newOptions.pitchRange, newOptions.fov);\n }\n return newOptions;\n }\n\n private _getOptions(): YawPitchControlOptions;\n private _getOptions<K extends keyof YawPitchControlOptions>(key: K): YawPitchControlOptions[K];\n private _getOptions<K extends keyof YawPitchControlOptions>(key?: K) {\n let value;\n\n if (typeof key === \"string\") {\n value = this.options[key];\n } else if (arguments.length === 0) {\n value = this.options;\n }\n return value;\n }\n\n private _setOptions(options: Partial<YawPitchControlOptions>): void {\n for (const key in options) {\n this.options[key] = options[key];\n }\n }\n\n private _applyOptions(keys: string[]) {\n const options = this.options;\n const axes = this._axes;\n const isVR = options.gyroMode === GYRO_MODE.VR;\n const isYawPitch = options.gyroMode === GYRO_MODE.YAWPITCH;\n // If it's VR mode, restrict user interaction to yaw direction only\n const touchDirection = isVR ?\n (TOUCH_DIRECTION_YAW & options.touchDirection) :\n options.touchDirection;\n\n // If one of below is changed, call updateControlScale()\n if (keys.some(key =>\n key === \"showPolePoint\" || key === \"fov\" || key === \"aspectRatio\" ||\n key === \"yawRange\" || key === \"pitchRange\"\n )) {\n // If fov is changed, update pan scale\n if (keys.indexOf(\"fov\") >= 0) {\n axes.setTo({\"fov\": options.fov});\n this.updatePanScale();\n }\n\n this._updateControlScale();\n }\n\n if (keys.some(key => key === \"fovRange\")) {\n const fovRange = options.fovRange;\n const prevFov = axes.get().fov;\n let nextFov = axes.get().fov;\n\n vec2.copy(axes.axis.fov.range as vec2, fovRange as vec2);\n\n if (nextFov < fovRange[0]) {\n nextFov = fovRange[0];\n } else if (prevFov > fovRange[1]) {\n nextFov = fovRange[1];\n }\n\n if (prevFov !== nextFov) {\n axes.setTo({\n fov: nextFov\n }, 0);\n this._updateControlScale();\n this.updatePanScale();\n }\n }\n\n if (keys.some(key => key === \"gyroMode\") && SUPPORT_DEVICEMOTION) {\n // Disconnect first\n if (this._axesTiltMotionInput) {\n this._axes.disconnect(this._axesTiltMotionInput);\n this._axesTiltMotionInput.destroy();\n this._axesTiltMotionInput = null;\n }\n\n if (this._deviceQuaternion) {\n this._deviceQuaternion.destroy();\n this._deviceQuaternion = null;\n }\n\n if (isVR) {\n this._initDeviceQuaternion();\n } else if (isYawPitch) {\n this._axesTiltMotionInput = new TiltMotionInput(this._element!);\n this._axes.connect([\"yaw\", \"pitch\"], this._axesTiltMotionInput);\n }\n\n this._axesPanInput.setUseRotation(isVR);\n }\n\n if (keys.some(key => key === \"useKeyboard\")) {\n const useKeyboard = options.useKeyboard;\n\n if (useKeyboard) {\n axes.connect([\"yaw\", \"pitch\"], this._axesMoveKeyInput);\n } else {\n axes.disconnect(this._axesMoveKeyInput);\n }\n }\n\n if (keys.some(key => key === \"useZoom\")) {\n const useZoom = options.useZoom;\n\n // Disconnect first\n axes.disconnect(this._axesWheelInput);\n if (useZoom) {\n axes.connect([\"fov\"], this._axesWheelInput);\n }\n }\n\n this._togglePinchInputByOption(options.touchDirection, options.useZoom);\n\n if (keys.some(key => key === \"touchDirection\") && this._enabled) {\n this._enableTouch(touchDirection);\n }\n }\n\n private _togglePinchInputByOption(touchDirection: YawPitchControlOptions[\"touchDirection\"], useZoom: boolean) {\n if (this._axesPinchInput) {\n // disconnect first\n this._axes.disconnect(this._axesPinchInput);\n\n // If the touchDirection option is not ALL, pinchInput should be disconnected to make use of a native scroll.\n if (\n useZoom &&\n touchDirection === TOUCH_DIRECTION_ALL &&\n // TODO: Get rid of using private property of axes instance.\n (this._axes as any)._inputs.indexOf(this._axesPinchInput) === -1\n ) {\n this._axes.connect([\"fov\"], this._axesPinchInput);\n }\n }\n }\n\n private _enableTouch(direction: YawPitchControlOptions[\"touchDirection\"]) {\n // Disconnect first\n if (this._axesPanInput) {\n this._axes.disconnect(this._axesPanInput);\n }\n\n const yawEnabled = direction & TOUCH_DIRECTION_YAW ? \"yaw\" : null;\n const pitchEnabled = direction & TOUCH_DIRECTION_PITCH ? \"pitch\" : null;\n\n this._axes.connect([yawEnabled, pitchEnabled] as string[], this._axesPanInput);\n }\n\n private _initDeviceQuaternion() {\n this._deviceQuaternion = new DeviceQuaternion();\n this._deviceQuaternion.on(\"change\", e => {\n this._triggerChange(e);\n });\n }\n\n private _getValidYawRange(newYawRange: number[], newFov?: number, newAspectRatio?: number) {\n const ratio = this._adjustAspectRatio(newAspectRatio || this.options.aspectRatio || 1);\n const fov = newFov || this._axes.get().fov;\n const horizontalFov = fov * ratio;\n const isValid = newYawRange[1] - newYawRange[0] >= horizontalFov;\n\n if (isValid) {\n return newYawRange;\n } else {\n return this.options.yawRange || DEFAULT_YAW_RANGE;\n }\n }\n\n private _getValidPitchRange(newPitchRange: number[], newFov?: number) {\n const fov = newFov || this._axes.get().fov;\n const isValid = newPitchRange[1] - newPitchRange[0] >= fov;\n\n if (isValid) {\n return newPitchRange;\n } else {\n return this.options.pitchRange || DEFAULT_PITCH_RANGE;\n }\n }\n\n private _isCircular(range: number[]) {\n return range[1] - range[0] < 360 ? [false, false] : [true, true];\n }\n\n /**\n * Update yaw/pitch min/max by 5 factor\n *\n * 1. showPolePoint\n * 2. fov\n * 3. yawRange\n * 4. pitchRange\n * 5. aspectRatio\n *\n * If one of above is changed, call this function\n */\n private _updateControlScale(changeEvt?: any) { // TODO: Change type after Axes type inference update\n const opt = this.options;\n const fov = this._axes.get().fov;\n\n const pRange = this._updatePitchRange(opt.pitchRange, fov, opt.showPolePoint);\n const yRange = this._updateYawRange(opt.yawRange, fov, opt.aspectRatio);\n\n // TODO: If not changed!?\n const pos = this._axes.get();\n let y = pos.yaw;\n let p = pos.pitch;\n\n vec2.copy(this._axes.axis.yaw.range as any, yRange as any);\n vec2.copy(this._axes.axis.pitch.range as any, pRange as any);\n this._axes.axis.yaw.circular = this._isCircular(yRange);\n this._axes.axis.pitch.circular = this._isCircular(pRange);\n\n /**\n * update yaw/pitch by it's range.\n */\n if (y < yRange[0]) {\n y = yRange[0];\n } else if (y > yRange[1]) {\n y = yRange[1];\n }\n\n if (p < pRange[0]) {\n p = pRange[0];\n } else if (p > pRange[1]) {\n p = pRange[1];\n }\n\n if (changeEvt) {\n changeEvt.set({\n yaw: y,\n pitch: p\n });\n }\n\n this._axes.setTo({\n yaw: y,\n pitch: p\n }, 0);\n\n return this;\n }\n\n private _updatePitchRange(pitchRange: number[], fov: number, showPolePoint: boolean) {\n if (this.options.gyroMode === GYRO_MODE.VR) {\n // Circular pitch on VR\n return CIRCULAR_PITCH_RANGE;\n }\n\n const verticalAngle = pitchRange[1] - pitchRange[0];\n const halfFov = fov / 2;\n const isPanorama = verticalAngle < 180;\n\n if (showPolePoint && !isPanorama) {\n // Use full pinch range\n return pitchRange.concat();\n }\n\n // Round value as movableCood do.\n return [pitchRange[0] + halfFov, pitchRange[1] - halfFov];\n }\n\n private _updateYawRange(yawRange: number[], fov: number, aspectRatio: number) {\n if (this.options.gyroMode === GYRO_MODE.VR) {\n return DEFAULT_YAW_RANGE;\n }\n\n const horizontalAngle = yawRange[1] - yawRange[0];\n\n /**\n * Full 360 Mode\n */\n if (horizontalAngle >= 360) {\n // Don't limit yaw range on Full 360 mode.\n return yawRange.concat();\n }\n\n /**\n * Panorama mode\n */\n // Ref : https://github.com/naver/egjs-view360/issues/290\n const halfHorizontalFov =\n mathUtil.toDegree(Math.atan2(aspectRatio, 1 / Math.tan(glMatrix.toRadian(fov / 2)))) as number;\n\n // Round value as movableCood do.\n return [\n yawRange[0] + halfHorizontalFov,\n yawRange[1] - halfHorizontalFov\n ];\n }\n\n // TODO: update param type after Axes event type inference update\n private _triggerChange(evt: any) {\n const pos = this._axes.get();\n const opt = this.options;\n const event: YawPitchControlEvents[\"change\"] = {\n targetElement: opt.element as HTMLElement,\n isTrusted: evt.isTrusted,\n yaw: pos.yaw,\n pitch: pos.pitch,\n fov: pos.fov,\n quaternion: null\n };\n\n if (opt.gyroMode === GYRO_MODE.VR && this._deviceQuaternion) {\n event.quaternion = this._deviceQuaternion.getCombinedQuaternion(pos.yaw);\n }\n this.trigger(new ComponentEvent(\"change\", event));\n }\n\n // TODO: makes constant to be logic\n private _adjustAspectRatio(input: number) {\n const inputRange = [\n 0.520, 0.540, 0.563, 0.570, 0.584, 0.590, 0.609, 0.670,\n 0.702, 0.720, 0.760, 0.780, 0.820, 0.920, 0.970, 1.00, 1.07, 1.14, 1.19,\n 1.25, 1.32, 1.38, 1.40, 1.43, 1.53, 1.62, 1.76, 1.77, 1.86, 1.96, 2.26,\n 2.30, 2.60, 3.00, 5.00, 6.00\n ];\n const outputRange = [\n 0.510, 0.540, 0.606, 0.560, 0.628, 0.630, 0.647, 0.710,\n 0.736, 0.757, 0.780, 0.770, 0.800, 0.890, 0.975, 1.00, 1.07, 1.10, 1.15,\n 1.18, 1.22, 1.27, 1.30, 1.33, 1.39, 1.45, 1.54, 1.55, 1.58, 1.62, 1.72,\n 1.82, 1.92, 2.00, 2.24, 2.30\n ];\n\n let rangeIdx = -1;\n\n for (let i = 0; i < inputRange.length - 1; i++) {\n if (inputRange[i] <= input && inputRange[i + 1] >= input) {\n rangeIdx = i;\n break;\n }\n }\n\n if (rangeIdx === -1) {\n if (inputRange[0] > input) {\n return outputRange[0];\n } else {\n // FIXME: this looks definitely wrong\n return outputRange[(outputRange[0] as any).length - 1];\n }\n }\n\n const inputA = inputRange[rangeIdx];\n const inputB = inputRange[rangeIdx + 1];\n const outputA = outputRange[rangeIdx];\n const outputB = outputRange[rangeIdx + 1];\n\n return this._lerp(outputA, outputB, (input - inputA) / (inputB - inputA));\n }\n\n private _lerp(a: number, b: number, fraction: number) {\n return a + fraction * (b - a);\n }\n\n private _resetOrientation() {\n const opt = this.options;\n\n this._axes.setTo({\n yaw: opt.yaw,\n pitch: opt.pitch,\n fov: opt.fov\n }, 0);\n\n return this;\n }\n}\n\nexport default YawPitchControl;\n","/**\n * Constant value for gyro mode. <br>(Reference {@link https://github.com/naver/egjs-view360/wiki/PanoViewer-3.0-User-Guide})\n * @ko gyro 모드 대한 상수 값. <br>({@link https://github.com/naver/egjs-view360/wiki/PanoViewer-3.0-User-Guide} 참고)\n * @namespace\n * @name GYRO_MODE\n * @memberof eg.view360.PanoViewer\n */\n/**\n * Disable gyro\n * @ko gyro 비활성화\n * @name NONE\n * @memberof eg.view360.PanoViewer.GYRO_MODE\n * @constant\n * @type {String}\n * @default \"none\"\n */\n/**\n * YawPitch Mode\n * @ko YawPitch Mode\n * @name YAWPITCH\n * @memberof eg.view360.PanoViewer.GYRO_MODE\n * @constant\n * @type {String}\n * @default \"yawPitch\"\n */\n/**\n * VR Mode\n * @ko VR Mode\n * @name VR\n * @memberof eg.view360.PanoViewer.GYRO_MODE\n * @constant\n * @type {String}\n * @default \"VR\"\n */\nimport { PanoViewerOptions } from \"../PanoViewer/PanoViewer\";\nimport { GYRO_MODE } from \"../YawPitchControl/consts\";\n\n/**\n * Constant value for errors\n * @ko 에러에 대한 상수 값\n * @namespace\n * @name ERROR_TYPE\n * @memberof eg.view360.PanoViewer\n */\nconst ERROR_TYPE = {\n /**\n * Unsupported device\n * @ko 미지원 기기\n * @name INVALID_DEVICE\n * @memberof eg.view360.PanoViewer.ERROR_TYPE\n * @constant\n * @type {Number}\n * @default 10\n */\n INVALID_DEVICE: 10,\n /**\n * Webgl not support\n * @ko WEBGL 미지원\n * @name NO_WEBGL\n * @memberof eg.view360.PanoViewer.ERROR_TYPE\n * @constant\n * @type {Number}\n * @default 11\n */\n NO_WEBGL: 11,\n /**\n * Failed to load image\n * @ko 이미지 로드 실패\n * @name FAIL_IMAGE_LOAD\n * @memberof eg.view360.PanoViewer.ERROR_TYPE\n * @constant\n * @type {Number}\n * @default 12\n */\n FAIL_IMAGE_LOAD: 12,\n /**\n * Failed to bind texture\n * @ko 텍스쳐 바인딩 실패\n * @name FAIL_BIND_TEXTURE\n * @memberof eg.view360.PanoViewer.ERROR_TYPE\n * @constant\n * @type {Number}\n * @default 13\n */\n FAIL_BIND_TEXTURE: 13,\n /**\n * Only one resource(image or video) should be specified\n * @ko 리소스 지정 오류 (image 혹은 video 중 하나만 지정되어야 함)\n * @name INVALID_RESOURCE\n * @memberof eg.view360.PanoViewer.ERROR_TYPE\n * @constant\n * @type {Number}\n * @default 14\n */\n INVALID_RESOURCE: 14,\n /**\n * WebGL context lost occurred\n * @ko WebGL context lost 발생\n * @name RENDERING_CONTEXT_LOST\n * @memberof eg.view360.PanoViewer.ERROR_TYPE\n * @constant\n * @type {Number}\n * @default 15\n */\n RENDERING_CONTEXT_LOST: 15\n};\n\n/**\n * Constant value for events\n * @ko 이벤트에 대한 상수 값\n * @namespace\n * @name EVENTS\n * @memberof eg.view360.PanoViewer\n */\nconst PANOVIEWER_EVENTS: {\n READY: \"ready\";\n VIEW_CHANGE: \"viewChange\";\n ANIMATION_END: \"animationEnd\";\n ERROR: \"error\";\n} = {\n /**\n * Events that is fired when PanoViewer is ready to show image and handle user interaction.\n * @ko PanoViewer 가 사용자의 인터렉션 및 렌더링이 준비되상태에 발생하는 이벤트\n * @name READY\n * @memberof eg.view360.PanoViewer.EVENTS\n * @constant\n * @type {String}\n * @default ready\n */\n READY: \"ready\",\n /**\n * Events that is fired when direction or fov is changed.\n * @ko PanoViewer 에서 바라보고 있는 방향이나 FOV(화각)가 변경되었을때 발생하는 이벤트\n * @name VIEW_CHANGE\n * @memberof eg.view360.PanoViewer.EVENTS\n * @constant\n * @type {String}\n * @default viewChange\n */\n VIEW_CHANGE: \"viewChange\",\n /**\n * Events that is fired when animation which is triggered by inertia is ended.\n * @ko 관성에 의한 애니메이션 동작이 완료되었을때 발생하는 이벤트\n * @name ANIMATION_END\n * @memberof eg.view360.PanoViewer.EVENTS\n * @constant\n * @type {String}\n * @default animationEnd\n */\n ANIMATION_END: \"animationEnd\",\n /**\n * Events that is fired when error occurs\n * @ko 에러 발생 시 발생하는 이벤트\n * @name ERROR\n * @memberof eg.view360.PanoViewer.EVENTS\n * @constant\n * @type {String}\n * @default error\n */\n ERROR: \"error\"\n};\n\n/**\n * Constant value for projection type\n * @ko 프로젝션 타입 대한 상수 값\n * @namespace\n * @name PROJECTION_TYPE\n * @memberof eg.view360.PanoViewer\n */\nconst PROJECTION_TYPE: {\n EQUIRECTANGULAR: \"equirectangular\";\n CUBEMAP: \"cubemap\";\n CUBESTRIP: \"cubestrip\";\n PANORAMA: \"panorama\";\n STEREOSCOPIC_EQUI: \"stereoequi\";\n} = {\n /**\n * Constant value for equirectangular type.\n * @ko equirectangular 에 대한 상수 값.\n * @name EQUIRECTANGULAR\n * @memberof eg.view360.PanoViewer.PROJECTION_TYPE\n * @constant\n * @type {String}\n * @default equirectangular\n */\n EQUIRECTANGULAR: \"equirectangular\",\n /**\n * Constant value for cubemap type.\n * @ko cubemap 에 대한 상수 값.\n * @name CUBEMAP\n * @memberof eg.view360.PanoViewer.PROJECTION_TYPE\n * @constant\n * @type {String}\n * @default cubemap\n */\n CUBEMAP: \"cubemap\",\n /**\n * Constant value for cubestrip type.\n * Cubestrip is a format for a single image with a combination of six cube faces. It is almost identical to cubemap, but it is implemented in a different way. It aims at better performance and efficiency. In addition, it automatically detects and supports EAC.\n * @ko cubemap 에 대한 상수 값.Cubestrip 은 cube 면이 6개가 조합된 조합을 한장의 이미지를 위한 포맷이다. cubemap 과 사용방법이 거의 동일하지만 다른 방식으로 구현되었다. 보다 좋은 성능과 효율성을 목적으로 한다. 더불어 자동으로 EAC 를 감지하고 지원한다.\n * @name CUBESTRIP\n * @memberof eg.view360.PanoViewer.PROJECTION_TYPE\n * @constant\n * @type {String}\n * @default cubestrip\n */\n CUBESTRIP: \"cubestrip\",\n /**\n * Constant value for PANORAMA type.\n *\n * PANORAMA is a format for a panorma image which is taken from smartphone.\n * @ko PANORAMA 에 대한 상수값. 파노라마는 스마트 폰에서 가져온 파노라마 이미지의 형식입니다.\n *\n * @name PANORAMA\n * @memberof eg.view360.PanoViewer.PROJECTION_TYPE\n * @constant\n * @type {String}\n * @default panorama\n */\n PANORAMA: \"panorama\",\n /**\n * Constant value for EQUI_STEREOSCOPY type.\n *\n * Constant value for EQUI_STEREOSCOPY. Stereoscopy image format of EQUIRECTANGULAR. It is an experimental function to show a stereoscopic type equirectangular image on a plane. It does not support stereoscopic viewing function through special visual equipment at present.\n * @ko EQUI_STEREOSCOPY 에 대한 상수값. EQUIRECTANGULAR 의 Stereoscopy 이미지 형식입니다. Stereoscopic 형태의 equirectangular 이미지를 평면에 보여주기 위한 실험적인 기능으로 현재는 특수한 시각 장비를 통한 입체적인 보기 기능은 지원하지 않습니다.\n *\n * @name STEREOSCOPIC_EQUI\n * @memberof eg.view360.PanoViewer.PROJECTION_TYPE\n * @constant\n * @type {String}\n * @default stereoequi\n */\n STEREOSCOPIC_EQUI: \"stereoequi\"\n};\n\n/**\n * A constant value for the format of the stereoscopic equirectangular projection type.\n * @ko Stereoscopic equirectangular 프로젝션 타입의 포맷에 대한 상수 값\n * @namespace\n * @name STEREO_FORMAT\n * @memberof eg.view360.PanoViewer\n */\nconst STEREO_FORMAT: {\n TOP_BOTTOM: \"3dv\";\n LEFT_RIGHT: \"3dh\";\n NONE: \"\";\n} = {\n /**\n * A constant value for format of top bottom stereoscopic 360 equirectangular projection.\n * @ko top bottom stereoscopic 360 equirectangular projection 콘텐츠 포맷에 대한 상수값.\n * @name TOP_BOTTOM\n * @memberof eg.view360.PanoViewer.STEREO_FORMAT\n * @constant\n * @type {String}\n * @default \"3dv\"\n */\n TOP_BOTTOM: \"3dv\",\n /**\n * A constant value for format of left right stereoscopic 360 equirectangular projection.\n * @ko Left right stereoscopic 360 equirectangular projection 콘텐츠 포맷에 대한 상수값.\n * @name LEFT_RIGHT\n * @memberof eg.view360.PanoViewer.STEREO_FORMAT\n * @constant\n * @type {String}\n * @default \"3dh\"\n */\n LEFT_RIGHT: \"3dh\",\n /**\n * A constant value specifying media is not in stereoscopic format.\n * @ko Stereoscopic 영상이 아닐 경우에 적용하는 상수값.\n * @name NONE\n * @memberof eg.view360.PanoViewer.STEREO_FORMAT\n * @constant\n * @type {String}\n * @default \"\"\n */\n NONE: \"\"\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst PANOVIEWER_OPTIONS: { [key in keyof PanoViewerOptions]: true } = {\n image: true,\n video: true,\n projectionType: true,\n cubemapConfig: true,\n stereoFormat: true,\n width: true,\n height: true,\n yaw: true,\n pitch: true,\n fov: true,\n showPolePoint: true,\n useZoom: true,\n useKeyboard: true,\n gyroMode: true,\n yawRange: true,\n pitchRange: true,\n fovRange: true,\n touchDirection: true,\n canvasClass: true\n};\n\nconst DEFAULT_CANVAS_CLASS = \"view360-canvas\";\n\nexport {\n GYRO_MODE,\n PANOVIEWER_EVENTS,\n ERROR_TYPE,\n PROJECTION_TYPE,\n STEREO_FORMAT,\n PANOVIEWER_OPTIONS,\n DEFAULT_CANVAS_CLASS\n};\n","import { ImageCandidate, VideoCandidate } from \"../types/internal\";\nimport { Merged } from \"../types/internal\";\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const merge = <From extends object, To extends object>(target: From, ...srcs: To[]): Merged<From, To> => {\n srcs.forEach(source => {\n\t Object.keys(source).forEach(key => {\n const value = source[key];\n if (Array.isArray(target[key]) && Array.isArray(value)) {\n target[key] = [...target[key], ...value];\n } else {\n target[key] = value;\n }\n\t });\n });\n\n return target as Merged<From, To>;\n};\n\nexport const toImageElement = (image: ImageCandidate): HTMLImageElement | HTMLImageElement[] => {\n const images = image instanceof Array ? image : [image];\n const parsedImages = images.map(img => {\n let imgEl = img;\n\n if (typeof img === \"string\") {\n imgEl = new Image();\n imgEl.crossOrigin = \"anonymous\";\n imgEl.src = img;\n }\n return imgEl as HTMLImageElement;\n });\n\n return parsedImages.length === 1\n ? parsedImages[0]\n : parsedImages;\n};\n\nexport const toVideoElement = (videoCandidate: VideoCandidate): HTMLVideoElement => {\n if (videoCandidate instanceof HTMLVideoElement) {\n return videoCandidate;\n } else {\n // url\n const video = document.createElement(\"video\");\n video.setAttribute(\"crossorigin\", \"anonymous\");\n video.setAttribute(\"webkit-playsinline\", \"\");\n video.setAttribute(\"playsinline\", \"\");\n\n if (videoCandidate instanceof Array) {\n videoCandidate.forEach(v => appendSourceElement(video, v));\n } else {\n appendSourceElement(video, videoCandidate);\n }\n\n const sourceCount = video.querySelectorAll(\"source\").length;\n if (sourceCount > 0) {\n if (video.readyState < 1) {\n video.load();\n }\n }\n\n return video;\n }\n};\n\n/**\n *\n * @param {Object | String} videoUrl Object or String containing Video Source URL<ko>비디오 URL 정보를 담고 있는 문자열이나 객체 {type, src}</ko>\n */\nexport const appendSourceElement = (video: HTMLVideoElement, videoUrl: string | { src: string; type: string }) => {\n let videoSrc: string | undefined;\n let videoType: string | undefined;\n\n if (typeof videoUrl === \"object\") {\n videoSrc = videoUrl.src;\n videoType = videoUrl.type;\n } else if (typeof videoUrl === \"string\") {\n videoSrc = videoUrl;\n }\n\n if (!videoSrc) {\n return false;\n }\n\n const sourceElement = document.createElement(\"source\");\n\n sourceElement.src = videoSrc;\n if (videoType) {\n sourceElement.type = videoType;\n }\n\n video.appendChild(sourceElement);\n};\n","import agent from \"@egjs/agent\";\n\nimport { TypedArray } from \"../types/internal\";\n\nconst WEBGL_ERROR_CODE = {\n \"0\": \"NO_ERROR\",\n \"1280\": \"INVALID_ENUM\",\n \"1281\": \"INVALID_VALUE\",\n \"1282\": \"INVALID_OPERATION\",\n \"1285\": \"OUT_OF_MEMORY\",\n \"1286\": \"INVALID_FRAMEBUFFER_OPERATION\",\n \"37442\": \"CONTEXT_LOST_WEBGL\"\n};\n\nlet webglAvailability: boolean | null = null;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nlet MAX_TEXTURE_SIZE_FOR_TEST: number | null = null;\n\nexport default class WebGLUtils {\n public static createShader(gl: WebGLRenderingContext, type: number, source: string) {\n const shader = gl.createShader(type)!;\n\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n const success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n\n if (success) {\n return shader;\n }\n\n // eslint-disable-next-line\n console.error(gl.getShaderInfoLog(shader));\n\n return null;\n }\n\n public static createProgram(gl: WebGLRenderingContext, vertexShader: WebGLShader, fragmentShader: WebGLShader) {\n const program = gl.createProgram()!;\n\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n\n gl.deleteShader(vertexShader);\n gl.deleteShader(fragmentShader);\n\n const success = gl.getProgramParameter(program, gl.LINK_STATUS);\n\n if (success) {\n return program;\n }\n\n gl.deleteProgram(program);\n return null;\n }\n\n public static initBuffer(gl: WebGLRenderingContext, target: number /* bind point */, data: TypedArray, itemSize: number, attr?: number) {\n const buffer = gl.createBuffer()!;\n\n gl.bindBuffer(target, buffer);\n gl.bufferData(target, data, gl.STATIC_DRAW);\n\n if (buffer) {\n (buffer as any).itemSize = itemSize;\n (buffer as any).numItems = data.length / itemSize;\n }\n\n if (attr !== undefined) {\n gl.enableVertexAttribArray(attr);\n gl.vertexAttribPointer(attr, (buffer as any).itemSize, gl.FLOAT, false, 0, 0);\n }\n\n return buffer;\n }\n\n public static getWebglContext(canvas: HTMLCanvasElement, userContextAttributes?: WebGLContextAttributes) {\n const webglIdentifiers = [\"webgl\", \"experimental-webgl\", \"webkit-3d\", \"moz-webgl\"];\n let context: WebGLRenderingContext | null = null;\n const contextAttributes = {\n ...{\n preserveDrawingBuffer: false,\n antialias: false\n }, ...userContextAttributes\n };\n\n const onWebglcontextcreationerror = e => e.statusMessage;\n\n canvas.addEventListener(\"webglcontextcreationerror\", onWebglcontextcreationerror);\n\n for (const identifier of webglIdentifiers) {\n try {\n context = canvas.getContext(identifier, contextAttributes) as WebGLRenderingContext;\n } catch (t) {} // eslint-disable-line no-empty\n if (context) {\n break;\n }\n }\n\n canvas.removeEventListener(\"webglcontextcreationerror\", onWebglcontextcreationerror);\n\n return context;\n }\n\n public static createTexture(gl: WebGLRenderingContext, textureTarget: number) {\n const texture = gl.createTexture();\n\n gl.bindTexture(textureTarget, texture);\n gl.texParameteri(textureTarget, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(textureTarget, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(textureTarget, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(textureTarget, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.bindTexture(textureTarget, null);\n\n return texture;\n }\n\n /**\n * Returns the webgl availability of the current browser.\n * @method WebGLUtils#isWebGLAvailable\n * @retuen {Boolean} isWebGLAvailable\n */\n public static isWebGLAvailable(): boolean {\n if (webglAvailability === null) {\n const canvas = document.createElement(\"canvas\");\n const webglContext = WebGLUtils.getWebglContext(canvas);\n\n webglAvailability = !!webglContext;\n\n // webglContext Resource forced collection\n if (webglContext) {\n const loseContextExtension = webglContext.getExtension(\"WEBGL_lose_context\");\n\n if (loseContextExtension) {\n loseContextExtension.loseContext();\n }\n }\n }\n return !!webglAvailability;\n }\n\n /**\n * Returns whether webgl is stable in the current browser.\n * @method WebGLUtils#isStableWebGL\n * @retuen {Boolean} isStableWebGL\n */\n public static isStableWebGL() {\n const agentInfo = agent();\n let isStableWebgl = true;\n\n if (agentInfo.os.name === \"android\") {\n const version = parseFloat(agentInfo.os.version);\n\n if (version <= 4.3 && version >= 1) {\n isStableWebgl = false;\n } else if (version === 4.4) {\n if (agentInfo.browser.name !== \"chrome\") {\n isStableWebgl = false;\n }\n }\n }\n return isStableWebgl;\n }\n\n public static getErrorNameFromWebGLErrorCode(code: number | string) {\n if (!(code in WEBGL_ERROR_CODE)) {\n return \"UNKNOWN_ERROR\";\n }\n\n return WEBGL_ERROR_CODE[code];\n }\n\n\n /**\n * This function is wrapper for texImage2D to handle exceptions on texImage2D.\n * Purpose is to prevent service from being stopped by script error.\n */\n public static texImage2D(gl: WebGLRenderingContext, target: number, pixels: TexImageSource) {\n try {\n gl.texImage2D(target, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n } catch (error) {\n /* eslint-disable no-console */\n console.error(\"WebGLUtils.texImage2D error:\", error);\n /* eslint-enable no-console */\n }\n }\n\n public static getMaxTextureSize(gl: WebGLRenderingContext) {\n // WARN: MAX_TEXTURE_SIZE_FOR_TEST is used for test\n return MAX_TEXTURE_SIZE_FOR_TEST || gl.getParameter(gl.MAX_TEXTURE_SIZE);\n }\n}\n\n/**\n * This function should not be used in service code. It's provided only for test purpose.\n * It should be set to null or 0 when test is done.\n * @param {Number} size\n */\nconst setMaxTextureSizeForTestOnlyPurpose = (size: number) => {\n MAX_TEXTURE_SIZE_FOR_TEST = size;\n};\n\nexport {\n setMaxTextureSizeForTestOnlyPurpose\n};\n","import Component, { ComponentEvent } from \"@egjs/component\";\nimport agent from \"@egjs/agent\";\nimport { mat4 } from \"gl-matrix\";\n\nimport { CubemapConfig, TileConfig } from \"../../types/internal\";\n\nconst agentInfo = agent();\nconst isIE11 = agentInfo.browser.name === \"ie\" && agentInfo.browser.majorVersion === 11;\n\nconst EVENTS: {\n ERROR: \"error\";\n} = {\n ERROR: \"error\"\n};\n\n/**\n *\n * Extends Component for firing errors occurs internally.\n */\nabstract class Renderer extends Component<{\n [EVENTS.ERROR]: {\n message: string;\n };\n}> {\n public static EVENTS = EVENTS;\n\n private _forceDimension: { width: number; height: number } | null;\n private _pixelCanvas: HTMLCanvasElement | null;\n private _pixelContext: CanvasRenderingContext2D | null;\n\n public constructor() {\n super();\n\n this._forceDimension = null;\n this._pixelCanvas = null;\n this._pixelContext = null;\n }\n\n public abstract getVertexPositionData(): number[];\n public abstract getIndexData(): number[];\n public abstract getTextureCoordData(textureData: {\n image: HTMLImageElement | HTMLVideoElement;\n imageConfig: CubemapConfig;\n }): number[];\n\n public abstract getVertexShaderSource(): string;\n public abstract getFragmentShaderSource(): string;\n public abstract bindTexture(gl: WebGLRenderingContext, texture: WebGLTexture, image: HTMLImageElement | HTMLVideoElement, imageConfig?: CubemapConfig): void;\n public abstract updateTexture(gl: WebGLRenderingContext, image: HTMLImageElement | HTMLVideoElement, imageConfig?: CubemapConfig): void;\n\n public render({ gl, shaderProgram, indexBuffer, mvMatrix, pMatrix }: {\n gl: WebGLRenderingContext;\n shaderProgram: WebGLProgram;\n indexBuffer: WebGLBuffer;\n mvMatrix: mat4;\n pMatrix: mat4;\n }) {\n gl.uniformMatrix4fv((shaderProgram as any).pMatrixUniform, false, pMatrix);\n gl.uniformMatrix4fv((shaderProgram as any).mvMatrixUniform, false, mvMatrix);\n\n if (indexBuffer) {\n gl.drawElements(gl.TRIANGLES, (indexBuffer as any).numItems, gl.UNSIGNED_SHORT, 0);\n }\n }\n\n // Define interface for Renderers\n /**\n * Following MUST BE DEFINED on Child of Renderer\n *\n * DATA\n *\n * - getVertexPositionData\n * - getIndexData\n * - getTextureCoordData\n *\n * SOURCE\n *\n * - getVertexShaderSource\n * - getFragmentShaderSource\n *\n * TEXTURE\n *\n * - bindTexture\n */\n public getDimension(pixelSource: HTMLImageElement | HTMLVideoElement) {\n const width = (pixelSource as HTMLImageElement).naturalWidth\n || (pixelSource as HTMLVideoElement).videoWidth;\n const height = (pixelSource as HTMLImageElement).naturalHeight\n || (pixelSource as HTMLVideoElement).videoHeight;\n\n return { width, height };\n }\n\n /**\n * Update data used by shader\n */\n public updateShaderData(param) { // eslint-disable-line @typescript-eslint/no-unused-vars\n /*\n * Update following data in implementation layer.\n * If the data is not changed, it does not need to implement this function.\n *\n * - _VERTEX_POSITION_DATA\n * - _TEXTURE_COORD_DATA\n * - _INDEX_DATA\n */\n }\n\n /**\n *\n * @param {HTMLImageElement | HTMLVideoElement} image\n * @param {Object = {width, height}} forceDimension Forced dimension to resize\n */\n protected _initPixelSource(image: HTMLImageElement | HTMLVideoElement, forceDimension: Renderer[\"_forceDimension\"] = null) {\n const isIE11Video = isIE11 && (image instanceof HTMLVideoElement);\n\n if (isIE11Video || forceDimension) {\n const {width, height} = forceDimension || this.getDimension(image);\n\n this._pixelCanvas = document.createElement(\"canvas\");\n this._pixelCanvas.width = width;\n this._pixelCanvas.height = height;\n this._pixelContext = this._pixelCanvas.getContext(\"2d\");\n }\n this._forceDimension = forceDimension;\n }\n\n protected _getPixelSource(image: HTMLImageElement | HTMLVideoElement) {\n if (!this._pixelCanvas) {\n return image;\n }\n\n /**\n * IE11 && Video\n * or\n * Dimension is forced (Image is larger than texture size.)\n */\n const contentDimension = this.getDimension(image);\n const textureDimension = this._forceDimension || contentDimension;\n\n if (this._pixelCanvas.width !== textureDimension.width) {\n this._pixelCanvas.width = textureDimension.width;\n }\n\n if (this._pixelCanvas.height !== textureDimension.height) {\n this._pixelCanvas.height = textureDimension.height;\n }\n\n if (this._forceDimension) {\n this._pixelContext!.drawImage(image,\n 0, 0, contentDimension.width, contentDimension.height,\n 0, 0, textureDimension.width, textureDimension.height);\n } else {\n this._pixelContext!.drawImage(image, 0, 0);\n }\n\n return this._pixelCanvas;\n }\n\n protected _extractTileConfig(imageConfig: CubemapConfig) {\n let tileConfig: TileConfig[] =\n Array.isArray(imageConfig.tileConfig) ?\n imageConfig.tileConfig : Array(...Array(6)).map(() => imageConfig.tileConfig) as TileConfig[];\n\n tileConfig = tileConfig.map(\n config => ({\n ...{\n flipHorizontal: false,\n rotation: 0\n }, ...config\n })\n );\n\n return tileConfig;\n }\n\n protected _triggerError(error) {\n /* eslint-disable no-console */\n console.error(\"Renderer Error:\", error);\n /* eslint-enable no-console */\n\n this.trigger(new ComponentEvent(EVENTS.ERROR, {\n message: typeof error === \"string\" ? error : error.message\n }));\n }\n}\n\nexport default Renderer;\n","import agent from \"@egjs/agent\";\n\nimport WebGLUtils from \"../WebGLUtils\";\nimport { util as mathUtil } from \"../../utils/math-util\";\nimport { CubemapConfig } from \"../../types/internal\";\n\nimport Renderer from \"./Renderer\";\n\nclass CubeRenderer extends Renderer {\n public static extractOrder(imageConfig: CubemapConfig) {\n return imageConfig.order || \"RLUDBF\";\n }\n\n private static _VERTEX_POSITION_DATA: number[] | null = null;\n private static _INDEX_DATA: number[] | null = null;\n\n public getVertexPositionData() {\n CubeRenderer._VERTEX_POSITION_DATA =\n CubeRenderer._VERTEX_POSITION_DATA !== null ? CubeRenderer._VERTEX_POSITION_DATA : [\n // back\n 1, -1, 1,\n -1, -1, 1,\n -1, 1, 1,\n 1, 1, 1,\n\n // front\n -1, -1, -1,\n 1, -1, -1,\n 1, 1, -1,\n -1, 1, -1,\n\n // top\n -1, 1, -1,\n 1, 1, -1,\n 1, 1, 1,\n -1, 1, 1,\n\n // bottom\n 1, -1, -1,\n -1, -1, -1,\n -1, -1, 1,\n 1, -1, 1,\n\n // right\n 1, -1, -1,\n 1, -1, 1,\n 1, 1, 1,\n 1, 1, -1,\n\n // left\n -1, -1, 1,\n -1, -1, -1,\n -1, 1, -1,\n -1, 1, 1\n ];\n\n return CubeRenderer._VERTEX_POSITION_DATA;\n }\n\n public getIndexData() {\n if (CubeRenderer._INDEX_DATA) {\n return CubeRenderer._INDEX_DATA;\n }\n\n const indexData: number[] = [];\n const vertexPositionData = this.getVertexPositionData();\n\n for (let i = 0; i < (vertexPositionData.length / 3); i += 4) {\n indexData.push(\n i,\n i + 2,\n i + 1,\n i,\n i + 3,\n i + 2\n );\n }\n\n CubeRenderer._INDEX_DATA = indexData;\n return indexData;\n }\n\n public getTextureCoordData({ image, imageConfig }: {\n image: HTMLImageElement | HTMLVideoElement;\n imageConfig: CubemapConfig;\n }) {\n const vertexOrder = \"BFUDRL\";\n const order = CubeRenderer.extractOrder(imageConfig);\n const base = this.getVertexPositionData();\n const tileConfig = this._extractTileConfig(imageConfig);\n const elemSize = 3;\n const vertexPerTile = 4;\n const { trim } = imageConfig;\n\n const texCoords = vertexOrder.split(\"\")\n .map(face => tileConfig[order.indexOf(face)])\n .map((config, i) => {\n const rotation = Math.floor(config.rotation / 90);\n const ordermap = config.flipHorizontal ? [0, 1, 2, 3] : [1, 0, 3, 2];\n\n for (let r = 0; r < Math.abs(rotation); r++) {\n if ((config.flipHorizontal && rotation > 0) ||\n (!config.flipHorizontal && rotation < 0)) {\n ordermap.push(ordermap.shift()!);\n } else {\n ordermap.unshift(ordermap.pop()!);\n }\n }\n\n const elemPerTile = elemSize * vertexPerTile;\n const tileVertex = base.slice(i * elemPerTile, i * elemPerTile + elemPerTile);\n const tileTemp: number[][] = [];\n\n for (let j = 0; j < vertexPerTile; j++) {\n tileTemp[ordermap[j]] = tileVertex.splice(0, elemSize);\n }\n return tileTemp;\n })\n .map(coord => this._shrinkCoord({ image, faceCoords: coord, trim }))\n .reduce((acc: number[], val: number[][]) => [\n ...acc,\n ...val.reduce((coords, coord) => [...coords, ...coord], [])\n ], []);\n\n return texCoords;\n }\n\n public getVertexShaderSource() {\n return `\nattribute vec3 aVertexPosition;\nattribute vec3 aTextureCoord;\nuniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nvarying highp vec3 vVertexDirectionVector;\nvoid main(void) {\n vVertexDirectionVector = aTextureCoord;\n gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\n}`;\n }\n\n public getFragmentShaderSource() {\n return `\nprecision highp float;\nuniform samplerCube uSampler;\nvarying highp vec3 vVertexDirectionVector;\nvoid main(void) {\n gl_FragColor = textureCube(uSampler, vVertexDirectionVector);\n}`;\n }\n\n public updateTexture(gl: WebGLRenderingContext, image: HTMLImageElement | HTMLVideoElement, imageConfig: CubemapConfig) {\n const baseOrder = \"RLUDBF\";\n const order = CubeRenderer.extractOrder(imageConfig);\n const orderMap = {};\n\n order.split(\"\").forEach((v, i) => {\n orderMap[v] = i;\n });\n\n try {\n if (image instanceof Array) {\n for (let surfaceIdx = 0; surfaceIdx < 6; surfaceIdx++) {\n const tileIdx = orderMap[baseOrder[surfaceIdx]];\n\n WebGLUtils.texImage2D(gl, gl.TEXTURE_CUBE_MAP_POSITIVE_X + surfaceIdx, image[tileIdx]);\n }\n } else {\n const maxCubeMapTextureSize = this.getMaxCubeMapTextureSize(gl, image);\n\n for (let surfaceIdx = 0; surfaceIdx < 6; surfaceIdx++) {\n const tileIdx = orderMap[baseOrder[surfaceIdx]];\n const tile = this.extractTileFromImage(\n image, tileIdx, maxCubeMapTextureSize\n );\n\n WebGLUtils.texImage2D(gl, gl.TEXTURE_CUBE_MAP_POSITIVE_X + surfaceIdx, tile);\n }\n }\n } catch (e) {\n this._triggerError(e);\n }\n }\n\n public bindTexture(gl: WebGLRenderingContext, texture: WebGLTexture, image: HTMLImageElement | HTMLVideoElement, imageConfig: CubemapConfig) {\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, texture);\n this.updateTexture(gl, image, imageConfig);\n }\n\n public getSourceTileSize(image: HTMLImageElement | HTMLVideoElement) {\n const {width, height} = this.getDimension(image);\n const aspectRatio = width / height;\n let inputTextureSize;\n\n if (aspectRatio === 1 / 6) {\n inputTextureSize = width;\n } else if (aspectRatio === 6) {\n inputTextureSize = height;\n } else if (aspectRatio === 2 / 3) {\n inputTextureSize = width / 2;\n } else {\n inputTextureSize = width / 3;\n }\n return inputTextureSize;\n }\n\n public extractTileFromImage(image: HTMLImageElement | HTMLVideoElement, tileIdx: number, outputTextureSize: number) {\n const {width} = this.getDimension(image);\n const inputTextureSize = this.getSourceTileSize(image);\n\n const canvas = document.createElement(\"canvas\");\n\n canvas.width = outputTextureSize;\n canvas.height = outputTextureSize;\n const context = canvas.getContext(\"2d\");\n const tilePerRow = width / inputTextureSize;\n\n const x = inputTextureSize * tileIdx % (inputTextureSize * tilePerRow);\n const y = Math.floor(tileIdx / tilePerRow) * (inputTextureSize);\n\n context!.drawImage(\n image, x, y,\n inputTextureSize, inputTextureSize, 0, 0, outputTextureSize, outputTextureSize\n );\n return canvas;\n }\n\n public getMaxCubeMapTextureSize(gl: WebGLRenderingContext, image: HTMLImageElement | HTMLVideoElement) {\n const agentInfo = agent();\n const maxCubeMapTextureSize = gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE);\n let imageWidth = this.getSourceTileSize(image);\n\n if (agentInfo.browser.name === \"ie\" && agentInfo.browser.majorVersion === 11) {\n if (!mathUtil.isPowerOfTwo(imageWidth)) {\n for (let i = 1; i < maxCubeMapTextureSize; i *= 2) {\n if (i < imageWidth) {\n continue;\n } else {\n imageWidth = i;\n break;\n }\n }\n }\n }\n if (agentInfo.os.name === \"ios\") {\n const majorVersion = agentInfo.os.majorVersion;\n\n // ios 9 의 경우 텍스쳐 최대사이즈는 1024 이다.\n if (majorVersion === 9) {\n imageWidth = 1024;\n }\n // ios 8 의 경우 텍스쳐 최대사이즈는 512 이다.\n if (majorVersion === 8) {\n imageWidth = 512;\n }\n }\n // maxCubeMapTextureSize 보다는 작고, imageWidth 보다 큰 2의 승수 중 가장 작은 수\n return Math.min(maxCubeMapTextureSize, imageWidth);\n }\n\n private _shrinkCoord(coordData: {\n image: HTMLImageElement | HTMLVideoElement;\n faceCoords: number[][];\n trim: number;\n }) {\n const { image, faceCoords, trim } = coordData;\n\n const inputTextureSize = Array.isArray(image)\n ? this.getDimension(image[0]).width\n : this.getSourceTileSize(image);\n\n // Shrink by \"trim\" px\n const SHRINK_MULTIPLIER = 1 - trim * (2 / inputTextureSize);\n\n const axisMultipliers = [0, 1, 2].map(axisIndex => {\n const axisDir = mathUtil.sign(faceCoords[0][axisIndex]);\n const notSameDir = faceCoords.some(coord => mathUtil.sign(coord[axisIndex]) !== axisDir);\n\n return notSameDir;\n }).map(notSameDir => notSameDir ? SHRINK_MULTIPLIER : 1);\n\n return faceCoords.map(coords => coords.map((coord, axisIndex) => coord * axisMultipliers[axisIndex]));\n }\n}\n\nexport default CubeRenderer;\n","\nimport WebGLUtils from \"../WebGLUtils\";\nimport { CubemapConfig, TileConfig } from \"../../types/internal\";\n\nimport Renderer from \"./Renderer\";\n\nexport default class CubeStripRenderer extends Renderer {\n private _vertices: number[];\n\n public getVertexShaderSource() {\n return `\nattribute vec3 aVertexPosition;\nattribute vec2 aTextureCoord;\nuniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nvarying highp vec2 vTextureCoord;\nvoid main(void) {\n vTextureCoord = aTextureCoord;\n gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\n}`;\n }\n\n public getFragmentShaderSource() {\n return `\n#define PI 3.14159265359\nprecision highp float;\nvarying highp vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform bool uIsEAC;\nconst vec2 OPERATE_COORDS_RANGE = vec2(-1.0, 1.0);\nconst vec2 TEXTURE_COORDS_RANGE = vec2(0.0, 1.0);\n// vector type is used for initializing values instead of array.\nconst vec4 TEXTURE_DIVISION_X = vec4(0.0, 1.0 / 3.0, 2.0 / 3.0, 1.0);\nconst vec3 TEXTURE_DIVISION_Y = vec3(0.0, 1.0 / 2.0, 1.0);\nconst float EAC_CONST = 2.0 / PI;\nfloat scale(vec2 domainRange, vec2 targetRange, float val) {\n float unit = 1.0 / (domainRange[1] - domainRange[0]);\n return targetRange[0] + (targetRange[1] - targetRange[0]) * (val - domainRange[0]) * unit;\n}\nvoid main(void) {\n float transformedCoordX;\n float transformedCoordY;\n\n if (uIsEAC) {\n vec2 orgTextureRangeX;\n vec2 orgTextureRangeY;\n\n // Apply EAC transform\n if (vTextureCoord.s >= TEXTURE_DIVISION_X[2]) {\n orgTextureRangeX = vec2(TEXTURE_DIVISION_X[2], TEXTURE_DIVISION_X[3]);\n } else if (vTextureCoord.s >= TEXTURE_DIVISION_X[1]) {\n orgTextureRangeX = vec2(TEXTURE_DIVISION_X[1], TEXTURE_DIVISION_X[2]);\n } else {\n orgTextureRangeX = vec2(TEXTURE_DIVISION_X[0], TEXTURE_DIVISION_X[1]);\n }\n\n if (vTextureCoord.t >= TEXTURE_DIVISION_Y[1]) {\n orgTextureRangeY = vec2(TEXTURE_DIVISION_Y[1], TEXTURE_DIVISION_Y[2]);\n } else {\n orgTextureRangeY = vec2(TEXTURE_DIVISION_Y[0], TEXTURE_DIVISION_Y[1]);\n }\n\n // scaling coors by the coordinates following the range from -1.0 to 1.0.\n float px = scale(orgTextureRangeX, OPERATE_COORDS_RANGE, vTextureCoord.s);\n float py = scale(orgTextureRangeY, OPERATE_COORDS_RANGE, vTextureCoord.t);\n\n float qu = EAC_CONST * atan(px) + 0.5;\n float qv = EAC_CONST * atan(py) + 0.5;\n\n // re-scaling coors by original coordinates ranges\n transformedCoordX = scale(TEXTURE_COORDS_RANGE, orgTextureRangeX, qu);\n transformedCoordY = scale(TEXTURE_COORDS_RANGE, orgTextureRangeY, qv);\n } else {\n // normal cubemap\n transformedCoordX = vTextureCoord.s;\n transformedCoordY = vTextureCoord.t;\n }\n\n gl_FragColor = texture2D(uSampler, vec2(transformedCoordX, transformedCoordY));\n}`;\n }\n\n public getVertexPositionData() {\n if (!this._vertices) {\n this._vertices = [\n // back\n 1, -1, 1,\n -1, -1, 1,\n -1, 1, 1,\n 1, 1, 1,\n\n // front\n -1, -1, -1,\n 1, -1, -1,\n 1, 1, -1,\n -1, 1, -1,\n\n // up\n -1, 1, -1,\n 1, 1, -1,\n 1, 1, 1,\n -1, 1, 1,\n\n // down\n -1, -1, 1,\n 1, -1, 1,\n 1, -1, -1,\n -1, -1, -1,\n\n // right\n 1, -1, -1,\n 1, -1, 1,\n 1, 1, 1,\n 1, 1, -1,\n\n // left\n -1, -1, 1,\n -1, -1, -1,\n -1, 1, -1,\n -1, 1, 1\n ];\n }\n\n return this._vertices;\n }\n\n public getIndexData() {\n // TODO: 한번만 계산하도록 수정하기\n const indices = (() => {\n const indexData: number[] = [];\n\n for (let i = 0; i < (this._vertices.length / 3); i += 4) {\n indexData.push(\n i,\n i + 1,\n i + 2,\n i,\n i + 2,\n i + 3\n );\n }\n return indexData;\n })();\n\n return indices;\n }\n\n public getTextureCoordData({ image, imageConfig }: {\n image: HTMLImageElement | HTMLVideoElement;\n imageConfig: CubemapConfig;\n }) {\n // TODO: make it cols, rows as config.\n const cols = 3;\n const rows = 2;\n\n const textureSize = this.getDimension(image);\n const { trim } = imageConfig;\n\n const order = imageConfig.order || \"RLUDFB\";\n let coords: number[][] = [];\n\n // 텍스쳐의 좌표는 윗쪽이 큰 값을 가지므로 row 는 역순으로 넣는다.\n for (let r = rows - 1; r >= 0; r--) {\n for (let c = 0; c < cols; c++) {\n const coord = [\n c / cols, r / rows,\n (c + 1) / cols, r / rows,\n (c + 1) / cols, (r + 1) / rows,\n c / cols, (r + 1) / rows\n ];\n\n coords.push(coord);\n }\n }\n\n const tileConfigs = this._extractTileConfig(imageConfig);\n\n // Transform Coord By Flip & Rotation\n coords = coords\n // shrink coord to avoid pixel bleeding\n .map(coord => this._shrinkCoord(coord, textureSize, trim))\n .map((coord, i) => this._transformCoord(coord, tileConfigs[i]));\n\n // vertices 에서 지정된 순서대로 그대로 그리기 위해 vertex 의 순서를 BFUDRL 로 재배치\n return \"BFUDRL\".split(\"\")\n .map(face => order.indexOf(face))\n .map(index => coords[index])\n .reduce((acc, val) => acc.concat(val), []);\n }\n\n public updateTexture(gl: WebGLRenderingContext, image: HTMLImageElement | HTMLVideoElement) {\n WebGLUtils.texImage2D(gl, gl.TEXTURE_2D, this._getPixelSource(image));\n }\n\n public bindTexture(gl: WebGLRenderingContext, texture: WebGLTexture, image: HTMLImageElement | HTMLVideoElement) {\n // Make sure image isn't too big\n const {width, height} = this.getDimension(image);\n const size = Math.max(width, height);\n const maxSize = WebGLUtils.getMaxTextureSize(gl);\n\n if (size > maxSize) {\n this._triggerError(`Image width(${width}) exceeds device limit(${maxSize}))`);\n return;\n }\n\n // Pixel Source for IE11 & Video\n this._initPixelSource(image);\n\n gl.activeTexture(gl.TEXTURE0);\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n\n this.updateTexture(gl, image);\n }\n\n private _transformCoord(coord: number[], tileConfig: TileConfig) {\n let newCoord = coord.slice();\n\n if (tileConfig.flipHorizontal) {\n newCoord = this._flipHorizontalCoord(newCoord);\n }\n\n if (tileConfig.rotation) {\n newCoord = this._rotateCoord(newCoord, tileConfig.rotation);\n }\n\n return newCoord;\n }\n\n private _shrinkCoord(coord: number[], textureSize: { width: number; height: number }, trim: number) {\n const { width, height } = textureSize;\n\n // Shrink by \"trim\" px\n const SHRINK_Y = trim * (1 / height);\n const SHRINK_X = trim * (1 / width);\n\n return [\n coord[0] + SHRINK_X, coord[1] + SHRINK_Y,\n coord[2] - SHRINK_X, coord[3] + SHRINK_Y,\n coord[4] - SHRINK_X, coord[5] - SHRINK_Y,\n coord[6] + SHRINK_X, coord[7] - SHRINK_Y\n ];\n }\n\n private _rotateCoord(coord: number[], rotationAngle: number) {\n const SIZE = 2; // coord means x,y coordinates. Two values(x, y) makes a one coord.\n const shiftCount = Math.floor(rotationAngle / 90) % 4;\n\n if (shiftCount === 0) {\n return coord;\n }\n\n let moved;\n let rotatedCoord: number[] = [];\n\n if (shiftCount > 0) {\n moved = coord.splice(0, shiftCount * SIZE);\n rotatedCoord = coord.concat(moved);\n } else {\n moved = coord.splice((4 + shiftCount) * SIZE, -shiftCount * SIZE);\n rotatedCoord = moved.concat(coord);\n }\n\n return rotatedCoord;\n }\n\n private _flipHorizontalCoord(coord: number[]) {\n return [\n coord[2], coord[3],\n coord[0], coord[1],\n coord[6], coord[7],\n coord[4], coord[5]\n ];\n }\n}\n","import WebGLUtils from \"../WebGLUtils\";\nimport { STEREO_FORMAT } from \"../../PanoViewer/consts\";\nimport { ValueOf } from \"../../types/internal\";\n\nimport Renderer from \"./Renderer\";\n\nconst latitudeBands = 60;\nconst longitudeBands = 60;\nconst radius = 2;\nconst ANGLE_CORRECTION_FOR_CENTER_ALIGN = -0.5 * Math.PI;\n\nconst textureCoordData: number[] = [];\nconst vertexPositionData: number[] = [];\nconst indexData: number[] = [];\nlet latIdx: number;\nlet lngIdx: number;\n\nfor (latIdx = 0; latIdx <= latitudeBands; latIdx++) {\n const theta = (latIdx / latitudeBands - 0.5) * Math.PI;\n const sinTheta = Math.sin(theta);\n const cosTheta = Math.cos(theta);\n\n for (lngIdx = 0; lngIdx <= longitudeBands; lngIdx++) {\n const phi = (lngIdx / longitudeBands - 0.5) * 2 * Math.PI + ANGLE_CORRECTION_FOR_CENTER_ALIGN;\n const sinPhi = Math.sin(phi);\n const cosPhi = Math.cos(phi);\n const x = cosPhi * cosTheta;\n const y = sinTheta;\n const z = sinPhi * cosTheta;\n const u = lngIdx / longitudeBands;\n const v = latIdx / latitudeBands;\n\n textureCoordData.push(u, v);\n vertexPositionData.push(radius * x, radius * y, radius * z);\n\n if (lngIdx !== longitudeBands && latIdx !== latitudeBands) {\n const a = latIdx * (longitudeBands + 1) + lngIdx;\n const b = a + longitudeBands + 1;\n\n indexData.push(a, b, a + 1, b, b + 1, a + 1);\n }\n }\n}\n\nclass SphereRenderer extends Renderer {\n private static _VERTEX_POSITION_DATA = vertexPositionData;\n private static _TEXTURE_COORD_DATA = textureCoordData;\n private static _INDEX_DATA = indexData;\n\n private _stereoFormat: ValueOf<typeof STEREO_FORMAT>;\n\n public constructor(format: SphereRenderer[\"_stereoFormat\"]) {\n super();\n\n this._stereoFormat = format;\n }\n\n public render(ctx: Parameters<Renderer[\"render\"]>[0]) {\n const {gl, shaderProgram} = ctx;\n\n let leftEyeScaleOffset: number[];\n let rightEyeScaleOffset: number[];\n\n switch (this._stereoFormat) {\n case STEREO_FORMAT.TOP_BOTTOM:\n leftEyeScaleOffset = [1, 0.5, 0, 0];\n rightEyeScaleOffset = [1, 0.5, 0, 0.5];\n break;\n case STEREO_FORMAT.LEFT_RIGHT:\n leftEyeScaleOffset = [0.5, 1, 0, 0];\n rightEyeScaleOffset = [0.5, 1, 0.5, 0];\n break;\n default:\n leftEyeScaleOffset = [1, 1, 0, 0];\n rightEyeScaleOffset = [1, 1, 0, 0];\n }\n\n const uTexScaleOffset = gl.getUniformLocation(shaderProgram, \"uTexScaleOffset\");\n\n gl.uniform4fv(uTexScaleOffset, [...leftEyeScaleOffset, ...rightEyeScaleOffset]);\n\n super.render(ctx);\n }\n\n public getVertexPositionData() {\n return SphereRenderer._VERTEX_POSITION_DATA;\n }\n\n public getIndexData() {\n return SphereRenderer._INDEX_DATA;\n }\n\n public getTextureCoordData() {\n return SphereRenderer._TEXTURE_COORD_DATA;\n }\n\n public getVertexShaderSource() {\n return `\nattribute vec3 aVertexPosition;\nattribute vec2 aTextureCoord;\nuniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nuniform float uEye;\nuniform vec4 uTexScaleOffset[2];\nvarying highp vec2 vTextureCoord;\nvoid main(void) {\n vec4 scaleOffset = uTexScaleOffset[int(uEye)];\n vTextureCoord = aTextureCoord.xy * scaleOffset.xy + scaleOffset.zw;\n gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\n}`;\n }\n\n public getFragmentShaderSource() {\n return `\nprecision highp float;\nvarying highp vec2 vTextureCoord;\nuniform sampler2D uSampler;\nvoid main(void) {\n gl_FragColor = texture2D(uSampler, vTextureCoord.st);\n}`;\n }\n\n public updateTexture(gl: WebGLRenderingContext, image: HTMLImageElement | HTMLVideoElement) {\n WebGLUtils.texImage2D(gl, gl.TEXTURE_2D, this._getPixelSource(image));\n }\n\n public bindTexture(gl: WebGLRenderingContext, texture: WebGLTexture, image: HTMLImageElement | HTMLVideoElement) {\n // Make sure image isn't too big\n const { width, height } = this.getDimension(image);\n const size = Math.max(width, height);\n const maxSize = WebGLUtils.getMaxTextureSize(gl);\n\n if (size > maxSize) {\n this._triggerError(`Image width(${width}) exceeds device limit(${maxSize}))`);\n return;\n }\n\n // Pixel Source for IE11 & Video\n this._initPixelSource(image);\n\n gl.activeTexture(gl.TEXTURE0);\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n\n this.updateTexture(gl, image);\n }\n}\n\nexport default SphereRenderer;\n","import { glMatrix } from \"gl-matrix\";\n\nimport WebGLUtils from \"../WebGLUtils\";\n\nimport Renderer from \"./Renderer\";\n\n// const latitudeBands = 60;\nconst MIN_ASPECT_RATIO_FOR_FULL_PANORAMA = 6;\nconst longitudeBands = 60;\n\nconst textureCoordData: number[] = [];\nconst vertexPositionData: number[] = [];\nconst indexData: number[] = [];\n\nclass CylinderRenderer extends Renderer {\n private static _VERTEX_POSITION_DATA = vertexPositionData;\n private static _TEXTURE_COORD_DATA = textureCoordData;\n private static _INDEX_DATA = indexData;\n\n public getVertexPositionData() {\n return CylinderRenderer._VERTEX_POSITION_DATA;\n }\n\n public getIndexData() {\n return CylinderRenderer._INDEX_DATA;\n }\n\n public getTextureCoordData() {\n return CylinderRenderer._TEXTURE_COORD_DATA;\n }\n\n public getVertexShaderSource() {\n return `\nattribute vec3 aVertexPosition;\nattribute vec2 aTextureCoord;\nuniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nvarying highp vec2 vTextureCoord;\nvoid main(void) {\n vTextureCoord = aTextureCoord;\n gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\n}`;\n }\n\n public getFragmentShaderSource() {\n return `\nprecision highp float;\nvarying highp vec2 vTextureCoord;\nuniform sampler2D uSampler;\nvoid main(void) {\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));\n}`;\n }\n\n public updateTexture(gl: WebGLRenderingContext, image: HTMLImageElement | HTMLVideoElement) {\n WebGLUtils.texImage2D(gl, gl.TEXTURE_2D, this._getPixelSource(image));\n }\n\n public bindTexture(gl: WebGLRenderingContext, texture: WebGLTexture, image: HTMLImageElement | HTMLVideoElement) {\n // Make sure image isn't too big\n const {width, height} = this.getDimension(image);\n const size = Math.max(width, height);\n const maxSize = WebGLUtils.getMaxTextureSize(gl);\n let resizeDimension: { width: number; height: number } | undefined;\n\n if (size > maxSize) {\n this._triggerError(`Image width(${width}) exceeds device texture limit(${maxSize}))`);\n\n // Request resizing texture.\n /**\n * TODO: Is it need to apply on another projection type?\n */\n resizeDimension = width > height ?\n {width: maxSize, height: maxSize * height / width} :\n {width: maxSize * width / height, height: maxSize};\n }\n\n // Pixel Source for IE11 & Video or resizing needed\n this._initPixelSource(image, resizeDimension);\n\n gl.activeTexture(gl.TEXTURE0);\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n\n this.updateTexture(gl, image);\n }\n\n public updateShaderData({ imageAspectRatio = MIN_ASPECT_RATIO_FOR_FULL_PANORAMA }) {\n let lngIdx: number;\n let cylinderMaxRadian: number;\n let halfCylinderY: number;\n let rotated: boolean;\n let aspectRatio: number;\n\n // Exception case: orientation is rotated.\n if (imageAspectRatio < 1) {\n /**\n * If rotated is true, we assume that image is rotated counter clockwise.\n * TODO: If there's other rotation, it is need to implement by each rotation.\n */\n rotated = true;\n aspectRatio = 1 / imageAspectRatio;\n } else {\n rotated = false;\n aspectRatio = imageAspectRatio;\n }\n\n if (aspectRatio >= MIN_ASPECT_RATIO_FOR_FULL_PANORAMA) {\n const fov = 360 / aspectRatio;\n\n cylinderMaxRadian = 2 * Math.PI; // 360 deg\n halfCylinderY = Math.tan(glMatrix.toRadian(fov / 2));\n } else {\n cylinderMaxRadian = aspectRatio;\n halfCylinderY = 0.5; // Range of cylinder is [-0.5, 0.5] to make height to 1.\n }\n\n // initialize shader data before update\n textureCoordData.length = 0;\n vertexPositionData.length = 0;\n indexData.length = 0;\n\n const CYLIDER_Y = [-halfCylinderY, halfCylinderY];\n const startAngleForCenterAlign = Math.PI / 2 + (2 * Math.PI - cylinderMaxRadian) / 2; // Math.PI / 2 start point when cylinderMaxRadian is 2 phi(360)\n\n // console.log(\"cylinderMaxRadian:\", glMatrix.toDegree(cylinderMaxRadian), \"CYLIDER_Y\", CYLIDER_Y, \"start angle\", glMatrix.toDegree(startAngleForCenterAlign));\n for (let yIdx = 0, yLength = CYLIDER_Y.length; yIdx < yLength/* bottom & top */; yIdx++) {\n for (lngIdx = 0; lngIdx <= longitudeBands; lngIdx++) {\n const angle = startAngleForCenterAlign + (lngIdx / longitudeBands * cylinderMaxRadian);\n const x = Math.cos(angle);\n const y = CYLIDER_Y[yIdx];\n const z = Math.sin(angle);\n let u: number;\n let v: number;\n\n if (rotated) {\n // Rotated 90 degree (counter clock wise)\n u = 1 - yIdx; // yLength - yIdx;\n v = lngIdx / longitudeBands;\n } else {\n // \t// Normal case (Not rotated)\n u = lngIdx / longitudeBands;\n v = yIdx;\n }\n\n textureCoordData.push(u, v);\n vertexPositionData.push(x, y, z);\n\n if (yIdx === 0 && lngIdx < longitudeBands) {\n const a = lngIdx;\n const b = a + longitudeBands + 1;\n\n indexData.push(a, b, a + 1, b, b + 1, a + 1);\n }\n }\n }\n }\n}\n\nexport default CylinderRenderer;\n","import Promise from \"promise-polyfill\";\nimport { mat4 } from \"gl-matrix\";\n\nconst VR_DISPLAY_PRESENT_CHANGE = \"vrdisplaypresentchange\";\nconst DEFAULT_LEFT_BOUNDS = [0, 0, 0.5, 1];\nconst DEFAULT_RIGHT_BOUNDS = [0.5, 0, 0.5, 1];\nconst EYES = {\n LEFT: \"left\",\n RIGHT: \"right\"\n} as const;\n\nclass VRManager {\n private _vrDisplay: VRDisplay | null;\n private _frameData: VRFrameData;\n private _yawOffset: number;\n private _leftBounds: number[];\n private _rightBounds: number[];\n\n public constructor() {\n this._frameData = new window.VRFrameData();\n this._clear();\n }\n\n public get context() { return this._vrDisplay; }\n\n public destroy = () => {\n const vrDisplay = this._vrDisplay;\n\n this.removeEndCallback(this.destroy);\n\n if (vrDisplay && vrDisplay.isPresenting) {\n void vrDisplay.exitPresent();\n }\n\n this._clear();\n };\n\n public canRender() {\n return Boolean(this._vrDisplay);\n }\n\n public beforeRender(gl: WebGLRenderingContext) {\n // Render to the default backbuffer\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n }\n\n public afterRender() {\n this._vrDisplay!.submitFrame();\n }\n\n public getEyeParams(gl: WebGLRenderingContext) {\n const display = this._vrDisplay!;\n const halfWidth = gl.drawingBufferWidth * 0.5;\n const height = gl.drawingBufferHeight;\n const frameData = this._frameData;\n\n display.getFrameData(frameData);\n\n const leftMVMatrix = frameData.leftViewMatrix;\n const rightMVMatrix = frameData.rightViewMatrix;\n\n mat4.rotateY(leftMVMatrix, leftMVMatrix, this._yawOffset);\n mat4.rotateY(rightMVMatrix, rightMVMatrix, this._yawOffset);\n\n return [\n {\n viewport: [0, 0, halfWidth, height],\n mvMatrix: leftMVMatrix,\n pMatrix: frameData.leftProjectionMatrix\n },\n {\n viewport: [halfWidth, 0, halfWidth, height],\n mvMatrix: rightMVMatrix,\n pMatrix: frameData.rightProjectionMatrix\n }\n ];\n }\n\n public isPresenting() {\n return Boolean(this._vrDisplay && this._vrDisplay.isPresenting);\n }\n\n public addEndCallback(callback: (evt?: Event) => any) {\n window.addEventListener(VR_DISPLAY_PRESENT_CHANGE, callback);\n }\n\n public removeEndCallback(callback: (evt?: Event) => any) {\n window.removeEventListener(VR_DISPLAY_PRESENT_CHANGE, callback);\n }\n\n public requestPresent(canvas: HTMLCanvasElement) {\n return navigator.getVRDisplays().then(displays => {\n const vrDisplay = displays.length && displays[0];\n\n if (!vrDisplay) {\n return Promise.reject(new Error(\"No displays available.\"));\n }\n if (!vrDisplay.capabilities.canPresent) {\n return Promise.reject(new Error(\"Display lacking capability to present.\"));\n }\n\n return vrDisplay.requestPresent([{source: canvas}]).then(() => {\n const leftEye = vrDisplay.getEyeParameters(EYES.LEFT);\n const rightEye = vrDisplay.getEyeParameters(EYES.RIGHT);\n\n canvas.width = Math.max(leftEye.renderWidth, rightEye.renderWidth) * 2;\n canvas.height = Math.max(leftEye.renderHeight, rightEye.renderHeight);\n\n this._setDisplay(vrDisplay);\n });\n });\n }\n\n public setYawOffset(offset: number) {\n this._yawOffset = offset;\n }\n\n private _setDisplay(vrDisplay: VRDisplay) {\n this._vrDisplay = vrDisplay;\n\n const layers = vrDisplay.getLayers();\n\n if (layers.length) {\n const layer = layers[0];\n\n this._leftBounds = layer.leftBounds as number[];\n this._rightBounds = layer.rightBounds as number[];\n }\n\n this.addEndCallback(this.destroy);\n }\n\n private _clear() {\n this._vrDisplay = null;\n this._leftBounds = DEFAULT_LEFT_BOUNDS;\n this._rightBounds = DEFAULT_RIGHT_BOUNDS;\n this._yawOffset = 0;\n }\n}\n\nexport default VRManager;\n","import { mat4, glMatrix } from \"gl-matrix\";\nimport { XRFrame, XRLayer, XRReferenceSpace, XRSession, XRSessionInit } from \"webxr\";\n\nimport { IS_SAFARI_ON_DESKTOP } from \"../../utils/browser\";\nimport { merge } from \"../../utils/utils\";\n\nconst XR_REFERENCE_SPACE = \"local\";\n\ninterface XRSessionOptions extends XRSessionInit {\n [key: string]: any;\n}\n\nclass XRManager {\n private _xrSession: XRSession | null;\n private _xrLayer: XRLayer | null;\n private _xrRefSpace: XRReferenceSpace | null;\n private _options: XRSessionOptions;\n private _yawOffset: number;\n private _presenting: boolean;\n\n public constructor(options: XRSessionOptions = {}) {\n this._clear();\n this._options = options;\n }\n\n public get context() { return this._xrSession; }\n\n public destroy = () => {\n const xrSession = this._xrSession;\n\n this.removeEndCallback(this.destroy);\n\n if (xrSession) {\n // Capture to avoid errors\n xrSession.end().then(() => void 0, () => void 0);\n }\n this._clear();\n };\n\n public canRender(frame: XRFrame) {\n const pose = frame.getViewerPose(this._xrRefSpace!);\n\n return Boolean(pose);\n }\n\n public beforeRender(gl: WebGLRenderingContext, frame: XRFrame) {\n const session = frame.session;\n const baseLayer = session.renderState.baseLayer;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, baseLayer!.framebuffer);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public afterRender() {}\n\n public getEyeParams(gl: WebGLRenderingContext, frame: XRFrame) {\n const session = frame.session;\n const pose = frame.getViewerPose(this._xrRefSpace!);\n\n if (!pose) {\n // Can't render\n return null;\n }\n\n const glLayer = session.renderState.baseLayer;\n\n return pose.views.map(view => {\n const viewport = glLayer!.getViewport(view);\n const mvMatrix = view.transform.inverse.matrix;\n\n if (IS_SAFARI_ON_DESKTOP) {\n mat4.rotateX(mvMatrix, mvMatrix, glMatrix.toRadian(180));\n }\n\n mat4.rotateY(mvMatrix, mvMatrix, this._yawOffset);\n\n return {\n viewport: [viewport.x, viewport.y, viewport.width, viewport.height],\n mvMatrix,\n pMatrix: view.projectionMatrix\n };\n });\n }\n\n public isPresenting() {\n return this._presenting;\n }\n\n public addEndCallback(callback: (evt?: Event) => any) {\n this._xrSession?.addEventListener(\"end\", callback);\n }\n\n public removeEndCallback(callback: (evt?: Event) => any) {\n this._xrSession?.removeEventListener(\"end\", callback);\n }\n\n public async requestPresent(canvas: HTMLCanvasElement, gl: WebGLRenderingContext) {\n const options = merge({\n requiredFeatures: [XR_REFERENCE_SPACE]\n }, this._options);\n\n const attributes = gl.getContextAttributes();\n if (attributes && (attributes as any).xrCompatible !== true) {\n await (gl as any).makeXRCompatible();\n }\n\n return (navigator as any).xr.requestSession(\"immersive-vr\", options).then(session => {\n const xrLayer = new (window as any).XRWebGLLayer(session, gl);\n\n session.updateRenderState({baseLayer: xrLayer});\n return session.requestReferenceSpace(XR_REFERENCE_SPACE)\n .then(refSpace => {\n this._setSession(session, xrLayer, refSpace);\n });\n });\n }\n\n public setYawOffset(offset: number) {\n this._yawOffset = offset;\n }\n\n private _setSession(session: XRSession, xrLayer: XRLayer, refSpace: XRReferenceSpace) {\n this._xrSession = session;\n this._xrLayer = xrLayer;\n this._xrRefSpace = refSpace;\n this._presenting = true;\n this.addEndCallback(this.destroy);\n }\n\n private _clear() {\n this._xrSession = null;\n this._xrLayer = null;\n this._xrRefSpace = null;\n this._presenting = false;\n this._yawOffset = 0;\n this._options = {};\n }\n}\n\nexport default XRManager;\n","import { IS_SAFARI_ON_DESKTOP } from \"../utils/browser\";\n\nclass WebGLAnimator {\n private _callback: ((...args: any[]) => any) | null;\n private _context: any;\n private _rafId: number;\n private _rafTimer: number;\n\n public constructor() {\n this._callback = null;\n this._context = window;\n this._rafId = -1;\n this._rafTimer = -1;\n }\n\n public setCallback(callback: (...args: any[]) => any) {\n this._callback = callback;\n }\n\n public setContext(context: any) {\n this._context = context;\n }\n\n public start() {\n const context = this._context;\n const callback = this._callback;\n\n // No context / callback set\n if (!context || !callback) return;\n // Animation already started\n if (this._rafId >= 0 || this._rafTimer >= 0) return;\n\n if (IS_SAFARI_ON_DESKTOP) {\n this._rafId = context.requestAnimationFrame(this._onLoopNextTick);\n } else {\n this._rafId = context.requestAnimationFrame(this._onLoop);\n }\n }\n\n public stop() {\n if (this._rafId >= 0) {\n this._context.cancelAnimationFrame(this._rafId);\n }\n\n if (this._rafTimer >= 0) {\n clearTimeout(this._rafTimer);\n }\n\n this._rafId = -1;\n this._rafTimer = -1;\n }\n\n /**\n * There can be more than 1 argument when we use XRSession's raf\n */\n private _onLoop = (...args: any[]) => {\n this._callback!(...args);\n this._rafId = this._context.requestAnimationFrame(this._onLoop);\n };\n\n /**\n * MacOS X Safari Bug Fix\n * This code guarantees that rendering should be occurred.\n *\n * In MacOS X(10.14.2), Safari (12.0.2)\n * The requestAnimationFrame(RAF) callback is called just after previous RAF callback without term\n * only if requestAnimationFrame is called for next frame while updating frame is delayed (~over 2ms)\n * So browser cannot render the frame and may be freezing.\n */\n private _onLoopNextTick = (...args: any[]) => {\n const before = performance.now();\n\n this._callback!(...args);\n\n const diff = performance.now() - before;\n\n if (this._rafTimer >= 0) {\n clearTimeout(this._rafTimer);\n this._rafTimer = -1;\n }\n\n /* Use requestAnimationFrame only if current rendering could be possible over 60fps (1000/60) */\n if (diff < 16) {\n this._rafId = this._context.requestAnimationFrame(this._onLoop);\n } else {\n /* Otherwise, Call setTimeout instead of requestAnimationFrame to gaurantee renering should be occurred */\n this._rafTimer = window.setTimeout(this._onLoop, 0);\n }\n };\n}\n\nexport default WebGLAnimator;\n","import Component, { ComponentEvent } from \"@egjs/component\";\nimport { XRFrame } from \"webxr\";\nimport Promise from \"promise-polyfill\";\nimport { glMatrix, vec3, mat3, mat4, quat } from \"gl-matrix\";\nimport ImReady, { OnReady } from \"@egjs/imready\";\n\nimport { util as mathUtil } from \"../utils/math-util\";\nimport { devicePixelRatio, WEBXR_SUPPORTED } from \"../utils/browserFeature\";\nimport { PROJECTION_TYPE, STEREO_FORMAT } from \"../PanoViewer/consts\";\nimport { IS_IOS } from \"../utils/browser\";\nimport { CubemapConfig, ImageCandidate, ValueOf, VideoCandidate } from \"../types/internal\";\nimport YawPitchControl from \"../YawPitchControl/YawPitchControl\";\nimport { toImageElement, toVideoElement } from \"../utils/utils\";\n\nimport WebGLUtils from \"./WebGLUtils\";\nimport Renderer from \"./renderer/Renderer\";\nimport CubeRenderer from \"./renderer/CubeRenderer\";\nimport CubeStripRenderer from \"./renderer/CubeStripRenderer\";\nimport SphereRenderer from \"./renderer/SphereRenderer\";\nimport CylinderRenderer from \"./renderer/CylinderRenderer\";\nimport VRManager from \"./vr/VRManager\";\nimport XRManager from \"./vr/XRManager\";\nimport WebGLAnimator from \"./WebGLAnimator\";\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst ImageType = PROJECTION_TYPE;\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nlet DEVICE_PIXEL_RATIO = devicePixelRatio || 1;\n\n// DEVICE_PIXEL_RATIO 가 2를 초과하는 경우는 리소스 낭비이므로 2로 맞춘다.\nif (DEVICE_PIXEL_RATIO > 2) {\n DEVICE_PIXEL_RATIO = 2;\n}\n\n// define custom events name\n/**\n * TODO: how to manage events/errortype with PanoViewer\n *\n * I think renderer events should be seperated from viewer events although it has same name.\n */\nconst EVENTS: {\n BIND_TEXTURE: \"bindTexture\";\n IMAGE_LOADED: \"imageLoaded\";\n ERROR: \"error\";\n RENDERING_CONTEXT_LOST: \"renderingContextLost\";\n RENDERING_CONTEXT_RESTORE: \"renderingContextRestore\";\n} = {\n BIND_TEXTURE: \"bindTexture\",\n IMAGE_LOADED: \"imageLoaded\",\n ERROR: \"error\",\n RENDERING_CONTEXT_LOST: \"renderingContextLost\",\n RENDERING_CONTEXT_RESTORE: \"renderingContextRestore\"\n};\n\nconst ERROR_TYPE = {\n INVALID_DEVICE: 10,\n NO_WEBGL: 11,\n FAIL_IMAGE_LOAD: 12,\n RENDERER_ERROR: 13\n};\n\nclass PanoImageRenderer extends Component<{\n [EVENTS.ERROR]: {\n type: number;\n message: string;\n };\n [EVENTS.IMAGE_LOADED]: {\n content: HTMLElement;\n isVideo: boolean;\n projectionType: ValueOf<typeof PROJECTION_TYPE>;\n };\n [EVENTS.BIND_TEXTURE]: ComponentEvent;\n [EVENTS.RENDERING_CONTEXT_LOST]: ComponentEvent;\n [EVENTS.RENDERING_CONTEXT_RESTORE]: ComponentEvent;\n}> {\n public static EVENTS = EVENTS;\n public static ERROR_TYPE = ERROR_TYPE;\n\n public sphericalConfig: {\n initialYaw: number;\n initialPitch: number;\n fieldOfView: number;\n imageType: ValueOf<typeof PROJECTION_TYPE>;\n stereoFormat: ValueOf<typeof STEREO_FORMAT>;\n cubemapConfig: CubemapConfig;\n };\n\n public fieldOfView: number;\n public width: number;\n public height: number;\n\n public canvas: HTMLCanvasElement;\n public context: WebGLRenderingContext;\n public shaderProgram: WebGLProgram | null;\n public texture: WebGLTexture;\n\n public pMatrix: mat4;\n public mvMatrix: mat4;\n\n public textureCoordBuffer: WebGLBuffer | null = null;\n public vertexBuffer: WebGLBuffer | null = null;\n public indexBuffer: WebGLBuffer | null = null;\n\n private _wrapper: HTMLElement | null;\n private _wrapperOrigStyle: string | null;\n private _lastQuaternion: quat | null;\n private _lastYaw: number | null;\n private _lastPitch: number | null;\n private _lastFieldOfView: number | null;\n private _renderingContextAttributes?: WebGLContextAttributes;\n\n private _renderer: Renderer;\n private _contentLoader: ImReady | null;\n private _image: HTMLImageElement | HTMLImageElement[] | HTMLVideoElement | null;\n private _imageConfig: CubemapConfig | null;\n private _imageType: ValueOf<typeof PROJECTION_TYPE>;\n private _imageIsReady: boolean;\n private _isVideo: boolean;\n private _isCubeMap: boolean;\n private _shouldForceDraw: boolean;\n private _keepUpdate: boolean;\n private _hasExternalCanvas: boolean;\n\n private _yawPitchControl: YawPitchControl;\n private _animator: WebGLAnimator;\n private _vr: VRManager | XRManager | null;\n\n public constructor(\n image: ImageCandidate | VideoCandidate,\n width: number,\n height: number,\n isVideo: boolean,\n container: HTMLElement,\n canvasClass: string,\n sphericalConfig: PanoImageRenderer[\"sphericalConfig\"],\n renderingContextAttributes?: WebGLContextAttributes\n ) {\n // Super constructor\n super();\n\n this.sphericalConfig = sphericalConfig;\n this.fieldOfView = sphericalConfig.fieldOfView;\n\n this.width = width;\n this.height = height;\n\n this._lastQuaternion = null;\n this._lastYaw = null;\n this._lastPitch = null;\n this._lastFieldOfView = null;\n\n this.pMatrix = mat4.create();\n this.mvMatrix = mat4.create();\n\n // initialzie pMatrix\n mat4.perspective(this.pMatrix, glMatrix.toRadian(this.fieldOfView), width / height, 0.1, 100);\n\n this.textureCoordBuffer = null;\n this.vertexBuffer = null;\n this.indexBuffer = null;\n\n this.canvas = this._initCanvas(container, canvasClass, width, height);\n\n this._setDefaultCanvasStyle();\n this._wrapper = null; // canvas wrapper\n this._wrapperOrigStyle = null;\n\n this._renderingContextAttributes = renderingContextAttributes;\n this._image = null;\n this._imageConfig = null;\n this._imageIsReady = false;\n this._shouldForceDraw = false;\n this._keepUpdate = false; // Flag to specify 'continuous update' on video even when still.\n\n this._onContentLoad = this._onContentLoad.bind(this);\n this._onContentError = \tthis._onContentError.bind(this);\n\n this._animator = new WebGLAnimator();\n\n // VR/XR manager\n this._vr = null;\n\n if (image) {\n this.setImage({\n image,\n imageType: sphericalConfig.imageType,\n isVideo,\n cubemapConfig: sphericalConfig.cubemapConfig\n });\n }\n }\n\n // FIXME: Please refactor me to have more loose connection to yawpitchcontrol\n public setYawPitchControl(yawPitchControl: YawPitchControl) {\n this._yawPitchControl = yawPitchControl;\n }\n\n public getContent() {\n return this._image;\n }\n\n public setImage({\n image,\n imageType,\n isVideo = false,\n cubemapConfig\n }: {\n image: ImageCandidate | VideoCandidate;\n imageType: PanoImageRenderer[\"_imageType\"];\n isVideo: boolean;\n cubemapConfig: CubemapConfig;\n }) {\n this._imageIsReady = false;\n this._isVideo = isVideo;\n this._imageConfig = {\n ...{\n /* RLUDBF is abnormal, we use it on CUBEMAP only */\n order: (imageType === ImageType.CUBEMAP) ? \"RLUDBF\" : \"RLUDFB\",\n tileConfig: {\n flipHorizontal: false,\n rotation: 0\n },\n trim: 0\n },\n ...cubemapConfig\n };\n this._setImageType(imageType);\n\n if (this._contentLoader) {\n this._contentLoader.destroy();\n }\n\n this._contentLoader = new ImReady()\n .on(\"ready\", this._onContentLoad)\n .on(\"error\", this._onContentError);\n\n if (isVideo) {\n this._image = toVideoElement(image as VideoCandidate);\n this._contentLoader.check([this._image]);\n this._keepUpdate = true;\n } else {\n this._image = toImageElement(image as ImageCandidate);\n this._contentLoader.check(Array.isArray(this._image) ? this._image : [this._image]);\n this._keepUpdate = false;\n }\n }\n\n public isImageLoaded() {\n return !!this._image && this._imageIsReady &&\n (!this._isVideo || (this._image as HTMLVideoElement).readyState >= 2 /* HAVE_CURRENT_DATA */);\n }\n\n public bindTexture() {\n return new Promise((res, rej) => {\n const contentLoader = this._contentLoader;\n\n if (!this._image) {\n return rej(\"Image is not defined\");\n }\n\n if (!contentLoader) {\n return rej(\"ImageLoader is not initialized\");\n }\n\n if (contentLoader.isReady()) {\n this._bindTexture();\n res();\n } else {\n contentLoader.check(Array.isArray(this._image) ? this._image : [this._image]);\n contentLoader.once(\"ready\", e => {\n if (e.errorCount > 0) {\n rej(\"Failed to load images.\");\n } else {\n this._bindTexture();\n res();\n }\n });\n }\n });\n }\n\n // 부모 엘리먼트에 canvas 를 붙임\n public attachTo(parentElement) {\n if (!this._hasExternalCanvas) {\n this.detach();\n parentElement.appendChild(this.canvas);\n }\n this._wrapper = parentElement;\n }\n\n public forceContextLoss() {\n if (this.hasRenderingContext()) {\n const loseContextExtension = this.context.getExtension(\"WEBGL_lose_context\");\n\n if (loseContextExtension) {\n loseContextExtension.loseContext();\n }\n }\n }\n\n // 부모 엘리먼트에서 canvas 를 제거\n public detach() {\n if (!this._hasExternalCanvas && this.canvas.parentElement) {\n this.canvas.parentElement.removeChild(this.canvas);\n }\n }\n\n public destroy() {\n if (this._contentLoader) {\n this._contentLoader.destroy();\n }\n\n this._animator.stop();\n this.detach();\n this.forceContextLoss();\n\n this.off();\n\n this.canvas.removeEventListener(\"webglcontextlost\", this._onWebglcontextlost);\n this.canvas.removeEventListener(\"webglcontextrestored\", this._onWebglcontextrestored);\n }\n\n public hasRenderingContext() {\n const ctx = this.context;\n if (\n !ctx\n || ctx.isContextLost()\n || !ctx.getProgramParameter(this.shaderProgram!, ctx.LINK_STATUS)) {\n return false;\n }\n return true;\n }\n\n public updateFieldOfView(fieldOfView) {\n this.fieldOfView = fieldOfView;\n this._updateViewport();\n }\n\n public updateViewportDimensions(width, height) {\n let viewPortChanged = false;\n\n this.width = width;\n this.height = height;\n\n const w = width * DEVICE_PIXEL_RATIO;\n const h = height * DEVICE_PIXEL_RATIO;\n\n if (w !== this.canvas.width) {\n this.canvas.width = w;\n viewPortChanged = true;\n }\n\n if (h !== this.canvas.height) {\n this.canvas.height = h;\n viewPortChanged = true;\n }\n\n if (!viewPortChanged) {\n return;\n }\n\n this._updateViewport();\n this._shouldForceDraw = true;\n }\n\n public keepUpdate(doUpdate) {\n if (doUpdate && this.isImageLoaded() === false) {\n // Force to draw a frame after image is loaded on render()\n this._shouldForceDraw = true;\n }\n\n this._keepUpdate = doUpdate;\n }\n\n public startRender() {\n this._animator.setCallback(this._render.bind(this));\n this._animator.start();\n }\n\n public stopRender() {\n this._animator.stop();\n }\n\n public renderWithQuaternion(quaternion, fieldOfView) {\n if (!this.isImageLoaded()) {\n return;\n }\n\n if (this._keepUpdate === false &&\n this._lastQuaternion && quat.exactEquals(this._lastQuaternion, quaternion) &&\n this.fieldOfView && this.fieldOfView === fieldOfView &&\n this._shouldForceDraw === false) {\n return;\n }\n\n // updatefieldOfView only if fieldOfView is changed.\n if (fieldOfView !== undefined && fieldOfView !== this.fieldOfView) {\n this.updateFieldOfView(fieldOfView);\n }\n\n this.mvMatrix = mat4.fromQuat(mat4.create(), quaternion);\n\n this._draw();\n\n this._lastQuaternion = quat.clone(quaternion);\n if (this._shouldForceDraw) {\n this._shouldForceDraw = false;\n }\n }\n\n public renderWithYawPitch(yaw, pitch, fieldOfView) {\n if (!this.isImageLoaded()) {\n return;\n }\n\n if (this._keepUpdate === false &&\n this._lastYaw !== null && this._lastYaw === yaw &&\n this._lastPitch !== null && this._lastPitch === pitch &&\n this.fieldOfView && this.fieldOfView === fieldOfView &&\n this._shouldForceDraw === false) {\n return;\n }\n\n // fieldOfView 가 존재하면서 기존의 값과 다를 경우에만 업데이트 호출\n if (fieldOfView !== undefined && fieldOfView !== this.fieldOfView) {\n this.updateFieldOfView(fieldOfView);\n }\n\n mat4.identity(this.mvMatrix);\n mat4.rotateX(this.mvMatrix, this.mvMatrix, -glMatrix.toRadian(pitch));\n mat4.rotateY(this.mvMatrix, this.mvMatrix, -glMatrix.toRadian(yaw));\n\n this._draw();\n\n this._lastYaw = yaw;\n this._lastPitch = pitch;\n if (this._shouldForceDraw) {\n this._shouldForceDraw = false;\n }\n }\n\n /**\n * Returns projection renderer by each type\n */\n public getProjectionRenderer() {\n return this._renderer;\n }\n\n /**\n * @return Promise\n */\n public enterVR(options) {\n const vr = this._vr;\n\n if (!WEBXR_SUPPORTED && !(navigator as any).getVRDisplays) {\n return Promise.reject(\"VR is not available on this browser.\");\n }\n if (vr && vr.isPresenting()) {\n return Promise.resolve(\"VR already enabled.\");\n }\n\n return this._requestPresent(options);\n }\n\n public exitVR = () => {\n const vr = this._vr;\n const gl = this.context;\n const animator = this._animator;\n\n if (!vr) return;\n\n vr.removeEndCallback(this.exitVR);\n vr.destroy();\n this._vr = null;\n\n // Restore canvas & context on iOS\n if (IS_IOS) {\n this._restoreStyle();\n }\n this.updateViewportDimensions(this.width, this.height);\n this._updateViewport();\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n this._bindBuffers();\n this._shouldForceDraw = true;\n\n animator.stop();\n animator.setContext(window);\n animator.setCallback(this._render.bind(this));\n animator.start();\n };\n\n private _setImageType(imageType) {\n if (!imageType || this._imageType === imageType) {\n return;\n }\n\n this._imageType = imageType;\n this._isCubeMap = imageType === ImageType.CUBEMAP;\n\n if (this._renderer) {\n this._renderer.off();\n }\n\n switch (imageType) {\n case ImageType.CUBEMAP:\n this._renderer = new CubeRenderer();\n break;\n case ImageType.CUBESTRIP:\n this._renderer = new CubeStripRenderer();\n break;\n case ImageType.PANORAMA:\n this._renderer = new CylinderRenderer();\n break;\n case ImageType.STEREOSCOPIC_EQUI:\n this._renderer = new SphereRenderer(this.sphericalConfig.stereoFormat);\n break;\n default:\n this._renderer = new SphereRenderer(STEREO_FORMAT.NONE);\n break;\n }\n\n this._renderer.on(Renderer.EVENTS.ERROR, e => {\n this.trigger(new ComponentEvent(EVENTS.ERROR, {\n type: ERROR_TYPE.RENDERER_ERROR,\n message: e.message\n }));\n });\n\n this._initWebGL();\n }\n\n private _initCanvas(container: HTMLElement, canvasClass: string, width: number, height: number) {\n const canvasInContainer = container.querySelector<HTMLCanvasElement>(`.${canvasClass}`);\n const canvas = canvasInContainer || this._createCanvas(canvasClass);\n\n this._hasExternalCanvas = !!canvasInContainer;\n\n canvas.width = width;\n canvas.height = height;\n\n this._onWebglcontextlost = this._onWebglcontextlost.bind(this);\n this._onWebglcontextrestored = this._onWebglcontextrestored.bind(this);\n\n canvas.addEventListener(\"webglcontextlost\", this._onWebglcontextlost);\n canvas.addEventListener(\"webglcontextrestored\", this._onWebglcontextrestored);\n\n return canvas;\n }\n\n private _createCanvas(className: string) {\n const canvas = document.createElement(\"canvas\");\n\n canvas.className = className;\n\n return canvas;\n }\n\n private _setDefaultCanvasStyle() {\n const canvas = this.canvas;\n\n canvas.style.bottom = \"0\";\n canvas.style.left = \"0\";\n canvas.style.right = \"0\";\n canvas.style.top = \"0\";\n canvas.style.margin = \"auto\";\n canvas.style.maxHeight = \"100%\";\n canvas.style.maxWidth = \"100%\";\n canvas.style.outline = \"none\";\n canvas.style.position = \"absolute\";\n }\n\n private _onContentError() {\n this._imageIsReady = false;\n this._image = null;\n this.trigger(new ComponentEvent(EVENTS.ERROR, {\n type: ERROR_TYPE.FAIL_IMAGE_LOAD,\n message: \"failed to load image\"\n }));\n\n return false;\n }\n\n private _triggerContentLoad() {\n this.trigger(new ComponentEvent(EVENTS.IMAGE_LOADED, {\n content: this._image as HTMLElement,\n isVideo: this._isVideo,\n projectionType: this._imageType\n }));\n }\n\n private _onContentLoad(e: OnReady) {\n if (e.errorCount > 0) return;\n\n this._imageIsReady = true;\n\n this._triggerContentLoad();\n }\n\n private _initShaderProgram() {\n const gl = this.context;\n\n if (this.shaderProgram) {\n gl.deleteProgram(this.shaderProgram);\n this.shaderProgram = null;\n }\n\n const renderer = this._renderer;\n\n const vsSource = renderer.getVertexShaderSource();\n const fsSource = renderer.getFragmentShaderSource();\n\n const vertexShader = WebGLUtils.createShader(gl, gl.VERTEX_SHADER, vsSource)!;\n const fragmentShader = WebGLUtils.createShader(gl, gl.FRAGMENT_SHADER, fsSource)!;\n\n const shaderProgram = WebGLUtils.createProgram(gl, vertexShader, fragmentShader);\n\n if (!shaderProgram) {\n throw new Error(`Failed to initialize shaders: ${WebGLUtils.getErrorNameFromWebGLErrorCode(gl.getError())}`);\n }\n\n gl.useProgram(shaderProgram);\n (shaderProgram as any).vertexPositionAttribute = gl.getAttribLocation(shaderProgram, \"aVertexPosition\");\n (shaderProgram as any).pMatrixUniform = gl.getUniformLocation(shaderProgram, \"uPMatrix\");\n (shaderProgram as any).mvMatrixUniform = gl.getUniformLocation(shaderProgram, \"uMVMatrix\");\n (shaderProgram as any).samplerUniform = gl.getUniformLocation(shaderProgram, \"uSampler\");\n (shaderProgram as any).textureCoordAttribute = gl.getAttribLocation(shaderProgram, \"aTextureCoord\");\n (shaderProgram as any).uEye = gl.getUniformLocation(shaderProgram, \"uEye\");\n\n gl.enableVertexAttribArray((shaderProgram as any).vertexPositionAttribute);\n gl.enableVertexAttribArray((shaderProgram as any).textureCoordAttribute);\n\n // clear buffer\n gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);\n // Use TEXTURE0\n gl.uniform1i((shaderProgram as any).samplerUniform, 0);\n\n this.shaderProgram = shaderProgram;\n }\n\n private _onWebglcontextlost(e) {\n e.preventDefault();\n this.trigger(new ComponentEvent(EVENTS.RENDERING_CONTEXT_LOST));\n }\n\n private _onWebglcontextrestored() {\n this._initWebGL();\n this.trigger(new ComponentEvent(EVENTS.RENDERING_CONTEXT_RESTORE));\n }\n\n private _updateViewport() {\n mat4.perspective(\n this.pMatrix,\n glMatrix.toRadian(this.fieldOfView),\n this.canvas.width / this.canvas.height,\n 0.1,\n 100);\n\n this.context.viewport(0, 0, this.context.drawingBufferWidth, this.context.drawingBufferHeight);\n }\n\n private _initWebGL() {\n let gl: WebGLRenderingContext;\n\n // TODO: Following code does need to be executed only if width/height, cubicStrip property is changed.\n try {\n this._initRenderingContext();\n gl = this.context;\n\n this.updateViewportDimensions(this.width, this.height);\n this._initShaderProgram();\n } catch (e) {\n this.trigger(new ComponentEvent(EVENTS.ERROR, {\n type: ERROR_TYPE.NO_WEBGL,\n message: \"no webgl support\"\n }));\n this.destroy();\n console.error(e); // eslint-disable-line no-console\n return;\n }\n // 캔버스를 투명으로 채운다.\n gl.clearColor(0, 0, 0, 0);\n const textureTarget = this._isCubeMap ? gl.TEXTURE_CUBE_MAP : gl.TEXTURE_2D;\n\n if (this.texture) {\n gl.deleteTexture(this.texture);\n }\n\n this.texture = WebGLUtils.createTexture(gl, textureTarget)!;\n\n if (this._imageType === ImageType.CUBESTRIP) {\n // TODO: Apply following options on other projection type.\n gl.enable(gl.CULL_FACE);\n // gl.enable(gl.DEPTH_TEST);\n }\n }\n\n private _initRenderingContext() {\n if (this.hasRenderingContext()) {\n return;\n }\n\n if (!window.WebGLRenderingContext) {\n throw new Error(\"WebGLRenderingContext not available.\");\n }\n\n this.context = WebGLUtils.getWebglContext(this.canvas, this._renderingContextAttributes)!;\n\n if (!this.context) {\n throw new Error(\"Failed to acquire 3D rendering context\");\n }\n }\n\n private _initBuffers() {\n const image = this._image as HTMLImageElement | HTMLVideoElement;\n\n const vertexPositionData = this._renderer.getVertexPositionData();\n const indexData = this._renderer.getIndexData();\n const textureCoordData = this._renderer.getTextureCoordData({\n image,\n imageConfig: this._imageConfig!\n });\n const gl = this.context;\n\n this.vertexBuffer = WebGLUtils.initBuffer(\n gl, gl.ARRAY_BUFFER, new Float32Array(vertexPositionData), 3,\n (this.shaderProgram as any).vertexPositionAttribute);\n\n this.indexBuffer = WebGLUtils.initBuffer(\n gl, gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indexData), 1);\n\n this.textureCoordBuffer = WebGLUtils.initBuffer(\n gl, gl.ARRAY_BUFFER, new Float32Array(textureCoordData), this._isCubeMap ? 3 : 2,\n (this.shaderProgram as any).textureCoordAttribute);\n\n this._bindBuffers();\n }\n\n private _bindTexture() {\n // Detect if it is EAC Format while CUBESTRIP mode.\n // We assume it is EAC if image is not 3/2 ratio.\n if (this._imageType === ImageType.CUBESTRIP) {\n const { width, height } = this._renderer.getDimension(this._image as HTMLImageElement | HTMLVideoElement);\n const isEAC = width && height && width / height !== 1.5 ? 1 : 0;\n\n this.context.uniform1f(this.context.getUniformLocation(this.shaderProgram!, \"uIsEAC\"), isEAC);\n } else if (this._imageType === ImageType.PANORAMA) {\n const { width, height } = this._renderer.getDimension(this._image as HTMLImageElement | HTMLVideoElement);\n const imageAspectRatio = width && height && width / height;\n\n this._renderer.updateShaderData({imageAspectRatio});\n }\n\n // initialize shader buffers after image is loaded.(by updateShaderData)\n // because buffer may be differ by image size.(eg. CylinderRenderer)\n this._initBuffers();\n\n this._renderer.bindTexture(\n this.context,\n this.texture,\n this._image as HTMLImageElement | HTMLVideoElement,\n this._imageConfig!,\n );\n this._shouldForceDraw = true;\n\n this.trigger(new ComponentEvent(EVENTS.BIND_TEXTURE));\n }\n\n private _updateTexture() {\n this._renderer.updateTexture(\n this.context,\n this._image as HTMLImageElement | HTMLVideoElement,\n this._imageConfig!,\n );\n }\n\n private _render() {\n const yawPitchControl = this._yawPitchControl;\n const fov = yawPitchControl.getFov();\n\n if (yawPitchControl.shouldRenderWithQuaternion()) {\n const quaternion = yawPitchControl.getQuaternion();\n\n this.renderWithQuaternion(quaternion, fov);\n } else {\n const yawPitch = yawPitchControl.getYawPitch();\n\n this.renderWithYawPitch(yawPitch.yaw, yawPitch.pitch, fov);\n }\n }\n\n private _renderStereo = (time: number, frame: XRFrame) => {\n const vr = this._vr;\n const gl = this.context;\n\n const eyeParams = vr!.getEyeParams(gl, frame);\n\n if (!eyeParams) return;\n\n vr!.beforeRender(gl, frame);\n\n // Render both eyes\n for (const eyeIndex of [0, 1]) {\n const eyeParam = eyeParams[eyeIndex];\n\n this.mvMatrix = eyeParam.mvMatrix;\n this.pMatrix = eyeParam.pMatrix;\n\n gl.viewport(...eyeParam.viewport as [number, number, number, number]);\n gl.uniform1f((this.shaderProgram as any).uEye, eyeIndex);\n\n this._bindBuffers();\n this._draw();\n }\n\n vr!.afterRender();\n };\n\n private _bindBuffers() {\n const gl = this.context;\n const program = this.shaderProgram;\n\n const vertexBuffer = this.vertexBuffer;\n const textureCoordBuffer = this.textureCoordBuffer;\n\n gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);\n gl.enableVertexAttribArray((program as any).vertexPositionAttribute);\n gl.vertexAttribPointer(\n (program as any).vertexPositionAttribute, (vertexBuffer as any).itemSize, gl.FLOAT, false, 0, 0\n );\n\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);\n gl.bindBuffer(gl.ARRAY_BUFFER, textureCoordBuffer);\n gl.enableVertexAttribArray((program as any).textureCoordAttribute);\n gl.vertexAttribPointer(\n (program as any).textureCoordAttribute, (textureCoordBuffer as any).itemSize, gl.FLOAT, false, 0, 0\n );\n }\n\n private _draw() {\n if (this._isVideo && this._keepUpdate) {\n this._updateTexture();\n }\n\n this._renderer.render({\n gl: this.context,\n shaderProgram: this.shaderProgram!,\n indexBuffer: this.indexBuffer!,\n mvMatrix: this.mvMatrix,\n pMatrix: this.pMatrix\n });\n }\n\n private _requestPresent(options) {\n const gl = this.context;\n const canvas = this.canvas;\n const animator = this._animator;\n\n this._vr = WEBXR_SUPPORTED ?\n new XRManager(options) :\n new VRManager();\n\n const vr = this._vr;\n\n animator.stop();\n return new Promise((resolve, reject) => {\n vr.requestPresent(canvas, gl)\n .then(() => {\n vr.addEndCallback(this.exitVR);\n animator.setContext(vr.context);\n animator.setCallback(this._onFirstVRFrame);\n\n if (IS_IOS) {\n this._setWrapperFullscreen();\n }\n\n this._shouldForceDraw = true;\n animator.start();\n\n resolve(\"success\");\n })\n .catch(e => {\n vr.destroy();\n this._vr = null;\n animator.start();\n\n reject(e);\n });\n });\n }\n\n private _onFirstVRFrame = (time, frame) => {\n const vr = this._vr!;\n const gl = this.context;\n const animator = this._animator;\n\n // If rendering is not ready, wait for next frame\n if (!vr.canRender(frame)) return;\n\n const minusZDir = vec3.fromValues(0, 0, -1);\n const eyeParam = vr.getEyeParams(gl, frame)![0];\n // Extract only rotation\n const mvMatrix = mat3.fromMat4(mat3.create(), eyeParam.mvMatrix);\n const pMatrix = mat3.fromMat4(mat3.create(), eyeParam.pMatrix);\n\n const mvInv = mat3.invert(mat3.create(), mvMatrix);\n const pInv = mat3.invert(mat3.create(), pMatrix);\n const viewDir = vec3.transformMat3(vec3.create(), minusZDir, pInv);\n\n vec3.transformMat3(viewDir, viewDir, mvInv);\n\n const yawOffset = mathUtil.yawOffsetBetween(viewDir, vec3.fromValues(0, 0, 1));\n\n if (yawOffset === 0) {\n // If the yawOffset is exactly 0, then device sensor is not ready\n // So read it again until it has any value in it\n return;\n }\n\n vr.setYawOffset(yawOffset);\n animator.setCallback(this._renderStereo);\n };\n\n private _setWrapperFullscreen() {\n const wrapper = this._wrapper;\n\n if (!wrapper) return;\n\n this._wrapperOrigStyle = wrapper.getAttribute(\"style\");\n const wrapperStyle = wrapper.style;\n\n wrapperStyle.width = \"100vw\";\n wrapperStyle.height = \"100vh\";\n wrapperStyle.position = \"fixed\";\n wrapperStyle.left = \"0\";\n wrapperStyle.top = \"0\";\n wrapperStyle.zIndex = \"9999\";\n }\n\n private _restoreStyle() {\n const wrapper = this._wrapper;\n const canvas = this.canvas;\n\n if (!wrapper) return;\n\n if (this._wrapperOrigStyle) {\n wrapper.setAttribute(\"style\", this._wrapperOrigStyle);\n } else {\n wrapper.removeAttribute(\"style\");\n }\n\n this._wrapperOrigStyle = null;\n\n // Restore canvas style\n canvas.removeAttribute(\"style\");\n this._setDefaultCanvasStyle();\n }\n}\n\nexport default PanoImageRenderer;\n","import Component, { ComponentEvent } from \"@egjs/component\";\nimport Promise from \"promise-polyfill\";\nimport { quat } from \"gl-matrix\";\n\nimport { DeviceMotionEvent, checkXRSupport } from \"../utils/browserFeature\";\nimport YawPitchControl, { YawPitchControlOptions } from \"../YawPitchControl/YawPitchControl\";\nimport PanoImageRenderer from \"../PanoImageRenderer/PanoImageRenderer\";\nimport WebGLUtils from \"../PanoImageRenderer/WebGLUtils\";\nimport { util as mathUtil } from \"../utils/math-util\";\nimport { VERSION } from \"../version\";\nimport { CubemapConfig, ValueOf } from \"../types/internal\";\nimport { AnimationEndEvent, ReadyEvent, ViewChangeEvent, ErrorEvent } from \"../types/event\";\n\nimport { ERROR_TYPE, PANOVIEWER_EVENTS as EVENTS, GYRO_MODE, PROJECTION_TYPE, STEREO_FORMAT, DEFAULT_CANVAS_CLASS } from \"./consts\";\n\nexport interface PanoViewerOptions {\n image: string | HTMLElement;\n video: string | HTMLElement;\n projectionType: ValueOf<typeof PROJECTION_TYPE>;\n cubemapConfig: CubemapConfig;\n stereoFormat: ValueOf<typeof STEREO_FORMAT>;\n width: number;\n height: number;\n yaw: number;\n pitch: number;\n fov: number;\n showPolePoint: boolean;\n useZoom: boolean;\n useKeyboard: boolean;\n gyroMode: ValueOf<typeof GYRO_MODE>;\n yawRange: number[];\n pitchRange: number[];\n fovRange: number[];\n touchDirection: ValueOf<typeof PanoViewer.TOUCH_DIRECTION>;\n canvasClass: string;\n}\n\nexport interface PanoViewerEvent {\n ready: ReadyEvent;\n viewChange: ViewChangeEvent;\n animationEnd: AnimationEndEvent<PanoViewer>;\n error: ErrorEvent;\n}\n\n/**\n * @memberof eg.view360\n * @extends eg.Component\n * PanoViewer\n */\nclass PanoViewer extends Component<PanoViewerEvent> {\n /**\n * Check whether the current environment can execute PanoViewer\n * @ko 현재 브라우저 환경에서 PanoViewer 실행이 가능한지 여부를 반환합니다.\n * @return PanoViewer executable <ko>PanoViewer 실행가능 여부</ko>\n */\n public static isSupported(): boolean {\n return WebGLUtils.isWebGLAvailable() && WebGLUtils.isStableWebGL();\n }\n\n /**\n * Check whether the current environment supports the WebGL\n * @ko 현재 브라우저 환경이 WebGL 을 지원하는지 여부를 확인합니다.\n * @return WebGL support <ko>WebGL 지원여부</ko>\n */\n public static isWebGLAvailable(): boolean {\n return WebGLUtils.isWebGLAvailable();\n }\n\n /**\n * Check whether the current environment supports the gyro sensor.\n * @ko 현재 브라우저 환경이 자이로 센서를 지원하는지 여부를 확인합니다.\n * @param callback Function to take the gyro sensor availability as argument <ko>자이로 센서를 지원하는지 여부를 인자로 받는 함수</ko>\n */\n public static isGyroSensorAvailable(callback: (isAvailable: boolean) => any) {\n if (!DeviceMotionEvent && callback) {\n callback(false);\n return;\n }\n\n let onDeviceMotionChange;\n\n const checkGyro = () => new Promise(res => {\n onDeviceMotionChange = deviceMotion => {\n const isGyroSensorAvailable = !(deviceMotion.rotationRate.alpha == null);\n\n res(isGyroSensorAvailable);\n };\n\n window.addEventListener(\"devicemotion\", onDeviceMotionChange);\n });\n\n const timeout = () => new Promise(res => {\n setTimeout(() => res(false), 1000);\n });\n\n Promise.race([checkGyro(), timeout()]).then((isGyroSensorAvailable: boolean) => {\n window.removeEventListener(\"devicemotion\", onDeviceMotionChange);\n\n if (callback) {\n callback(isGyroSensorAvailable);\n }\n\n PanoViewer.isGyroSensorAvailable = fb => {\n if (fb) {\n fb(isGyroSensorAvailable);\n }\n return isGyroSensorAvailable;\n };\n });\n }\n\n private static _isValidTouchDirection(direction) {\n return direction === PanoViewer.TOUCH_DIRECTION.NONE ||\n direction === PanoViewer.TOUCH_DIRECTION.YAW ||\n direction === PanoViewer.TOUCH_DIRECTION.PITCH ||\n direction === PanoViewer.TOUCH_DIRECTION.ALL;\n }\n\n /**\n * Version info string\n * @ko 버전정보 문자열\n * @name VERSION\n * @static\n * @type {String}\n * @example\n * eg.view360.PanoViewer.VERSION; // ex) 3.0.1\n * @memberof eg.view360.PanoViewer\n */\n public static VERSION = VERSION;\n public static ERROR_TYPE = ERROR_TYPE;\n public static EVENTS = EVENTS;\n public static PROJECTION_TYPE = PROJECTION_TYPE;\n public static GYRO_MODE = GYRO_MODE;\n // This should be deprecated!\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public static ProjectionType = PROJECTION_TYPE;\n public static STEREO_FORMAT = STEREO_FORMAT;\n\n /**\n * Constant value for touch directions\n * @ko 터치 방향에 대한 상수 값.\n * @namespace\n * @name TOUCH_DIRECTION\n */\n public static TOUCH_DIRECTION = {\n /**\n * Constant value for none direction.\n * @ko none 방향에 대한 상수 값.\n * @name NONE\n * @memberof eg.view360.PanoViewer.TOUCH_DIRECTION\n * @constant\n * @type {Number}\n * @default 1\n */\n NONE: YawPitchControl.TOUCH_DIRECTION_NONE,\n /**\n * Constant value for horizontal(yaw) direction.\n * @ko horizontal(yaw) 방향에 대한 상수 값.\n * @name YAW\n * @memberof eg.view360.PanoViewer.TOUCH_DIRECTION\n * @constant\n * @type {Number}\n * @default 6\n */\n YAW: YawPitchControl.TOUCH_DIRECTION_YAW,\n /**\n * Constant value for vertical direction.\n * @ko vertical(pitch) 방향에 대한 상수 값.\n * @name PITCH\n * @memberof eg.view360.PanoViewer.TOUCH_DIRECTION\n * @constant\n * @type {Number}\n * @default 24\n */\n PITCH: YawPitchControl.TOUCH_DIRECTION_PITCH,\n /**\n * Constant value for all direction.\n * @ko all 방향에 대한 상수 값.\n * @name ALL\n * @memberof eg.view360.PanoViewer.TOUCH_DIRECTION\n * @constant\n * @type {Number}\n * @default 30\n */\n ALL: YawPitchControl.TOUCH_DIRECTION_ALL\n };\n\n private _container: HTMLElement;\n // Options\n private _image: ConstructorParameters<typeof PanoImageRenderer>[0];\n private _isVideo: boolean;\n private _projectionType: ValueOf<typeof PROJECTION_TYPE>;\n private _cubemapConfig: CubemapConfig;\n private _stereoFormat: ValueOf<typeof STEREO_FORMAT>;\n private _width: number;\n private _height: number;\n private _yaw: number;\n private _pitch: number;\n private _fov: number;\n private _gyroMode: ValueOf<typeof GYRO_MODE>;\n private _quaternion: quat | null;\n private _aspectRatio: number;\n private _isReady: boolean;\n private _canvasClass: string;\n\n // Internal Values\n private _photoSphereRenderer: PanoImageRenderer | null;\n private _yawPitchControl: YawPitchControl | null;\n\n /**\n * @classdesc 360 media viewer\n * @ko 360 미디어 뷰어\n *\n * @param container The container element for the renderer. <ko>렌더러의 컨테이너 엘리먼트</ko>\n * @param options\n *\n * @param {String|HTMLImageElement} options.image Input image url or element (Use only image property or video property)<ko>입력 이미지 URL 혹은 엘리먼트(image 와 video 둘 중 하나만 설정)</ko>\n * @param {String|HTMLVideoElement} options.video Input video url or element(Use only image property or video property)<ko>입력 비디오 URL 혹은 엘리먼트(image 와 video 둘 중 하나만 설정)</ko>\n * @param {String} [options.projectionType=equirectangular] The type of projection: equirectangular, cubemap <br/>{@link eg.view360.PanoViewer.PROJECTION_TYPE}<ko>Projection 유형 : equirectangular, cubemap <br/>{@link eg.view360.PanoViewer.PROJECTION_TYPE}</ko>\n * @param {Object} options.cubemapConfig Config cubemap projection layout. It is applied when projectionType is {@link eg.view360.PanoViewer.PROJECTION_TYPE.CUBEMAP} or {@link eg.view360.PanoViewer.PROJECTION_TYPE.CUBESTRIP}<ko>cubemap projection type 의 레이아웃을 설정한다. 이 설정은 ProjectionType이 {@link eg.view360.PanoViewer.PROJECTION_TYPE.CUBEMAP} 혹은 {@link eg.view360.PanoViewer.PROJECTION_TYPE.CUBESTRIP} 인 경우에만 적용된다.</ko>\n * @param {Object} [options.cubemapConfig.order = \"RLUDBF\"(ProjectionType === CUBEMAP) | \"RLUDFB\" (ProjectionType === CUBESTRIP)] Order of cubemap faces <ko>Cubemap 형태의 이미지가 배치된 순서</ko>\n * @param {Object} [options.cubemapConfig.tileConfig = { flipHorizontal:false, rotation: 0 }] Setting about rotation angle(degree) and whether to flip horizontal for each cubemap faces, if you put this object as a array, you can set each faces with different setting. For example, [{flipHorizontal:false, rotation:90}, {flipHorizontal: true, rotation: 180}, ...]<ko>각 Cubemap 면에 대한 회전 각도/좌우반전 여부 설정, 객체를 배열 형태로 지정하여 각 면에 대한 설정을 다르게 지정할 수도 있다. 예를 들어 [{flipHorizontal:false, rotation:90}, {flipHorizontal: true, rotation: 180}, ...]과 같이 지정할 수 있다.</ko>\n * @param {Number} [options.cubemapConfig.trim=0] A px distance to discard from each tile side. You can use this value to avoid graphical glitch at where tiles are connected. This option is available when there's only one texture.<ko>각 타일의 끝으로부터 폐기할 px 거리. 이 옵션을 사용하여 타일의 접합부에서 나타나는 그래픽 결함을 완화할 수 있습니다. 이 옵션은 한 개의 텍스쳐만 사용할 때 적용 가능합니다.</ko>\n * @param {String} [options.stereoFormat=\"3dv\"] Contents format of the stereoscopic equirectangular projection.<br/>See {@link eg.view360.PanoViewer.STEREO_FORMAT}.<ko>Stereoscopic equirectangular projection type의 콘텐츠 포맷을 설정한다.<br/>{@link eg.view360.PanoViewer.STEREO_FORMAT} 참조.</ko>\n * @param {Number} [options.width=width of container] the viewer's width. (in px) <ko>뷰어의 너비 (px 단위)</ko>\n * @param {Number} [options.height=height of container] the viewer's height.(in px) <ko>뷰어의 높이 (px 단위)</ko>\n * @param {Number} [options.yaw=0] Initial Yaw of camera (in degree) <ko>카메라의 초기 Yaw (degree 단위)</ko>\n * @param {Number} [options.pitch=0] Initial Pitch of camera (in degree) <ko>카메라의 초기 Pitch (degree 단위)</ko>\n * @param {Number} [options.fov=65] Initial vertical field of view of camera (in degree) <ko>카메라의 초기 수직 field of view (degree 단위)</ko>\n * @param {Boolean} [options.showPolePoint=false] If false, the pole is not displayed inside the viewport <ko>false 인 경우, 극점은 뷰포트 내부에 표시되지 않습니다</ko>\n * @param {Boolean} [options.useZoom=true] When true, enables zoom with the wheel and Pinch gesture <ko>true 일 때 휠 및 집기 제스춰로 확대 / 축소 할 수 있습니다.</ko>\n * @param {Boolean} [options.useKeyboard=true] When true, enables the keyboard move key control: awsd, arrow keys <ko>true 이면 키보드 이동 키 컨트롤을 활성화합니다: awsd, 화살표 키</ko>\n * @param {String} [options.gyroMode=yawPitch] Enables control through device motion. (\"none\", \"yawPitch\", \"VR\") <br/>{@link eg.view360.PanoViewer.GYRO_MODE} <ko>디바이스 움직임을 통한 컨트롤을 활성화 합니다. (\"none\", \"yawPitch\", \"VR\") <br/>{@link eg.view360.PanoViewer.GYRO_MODE} </ko>\n * @param {Array} [options.yawRange=[-180, 180]] Range of controllable Yaw values <ko>제어 가능한 Yaw 값의 범위</ko>\n * @param {Array} [options.pitchRange=[-90, 90]] Range of controllable Pitch values <ko>제어 가능한 Pitch 값의 범위</ko>\n * @param {Array} [options.fovRange=[30, 110]] Range of controllable vertical field of view values <ko>제어 가능한 수직 field of view 값의 범위</ko>\n * @param {Number} [options.touchDirection= {@link eg.view360.PanoViewer.TOUCH_DIRECTION.ALL}(6)] Direction of touch that can be controlled by user <br/>{@link eg.view360.PanoViewer.TOUCH_DIRECTION}<ko>사용자가 터치로 조작 가능한 방향 <br/>{@link eg.view360.PanoViewer.TOUCH_DIRECTION}</ko>\n * @param {String} [options.canvasClass=\"view360-canvas\"] A class name for the canvas element inside the container element. PanoViewer will use the canvas that has this class instead of creating one if it exists<ko>콘테이너 엘리먼트 내부의 캔버스 엘리먼트의 클래스 이름. PanoViewer는 해당 클래스를 갖는 캔버스 엘리먼트가 콘테이너 엘리먼트 내부에 존재할 경우, 새로 생성하는 대신 그 엘리먼트를 사용할 것입니다</ko>\n *\n * @example\n * ```\n * // PanoViewer Creation\n * // create PanoViewer with option\n * var PanoViewer = eg.view360.PanoViewer;\n * // Area where the image will be displayed(HTMLElement)\n * var container = document.getElementById(\"myPanoViewer\");\n *\n * var panoViewer = new PanoViewer(container, {\n * // If projectionType is not specified, the default is \"equirectangular\".\n * // Specifies an image of the \"equirectangular\" type.\n * image: \"/path/to/image/image.jpg\"\n * });\n * ```\n *\n * @example\n * ```\n * // Cubemap Config Setting Example\n * // For support Youtube EAC projection, You should set cubemapConfig as follows.\n * cubemapConfig: {\n * order: \"LFRDBU\",\n * tileConfig: [{rotation: 0}, {rotation: 0}, {rotation: 0}, {rotation: 0}, {rotation: -90}, {rotation: 180}]\n * }\n * ```\n */\n public constructor(container: HTMLElement, options: Partial<PanoViewerOptions> = {}) {\n super();\n\n // Raises the error event if webgl is not supported.\n if (!WebGLUtils.isWebGLAvailable()) {\n setTimeout(() => {\n this.trigger(new ComponentEvent(EVENTS.ERROR, {\n type: ERROR_TYPE.NO_WEBGL,\n message: \"no webgl support\"\n }));\n }, 0);\n return this;\n }\n\n if (!WebGLUtils.isStableWebGL()) {\n setTimeout(() => {\n this.trigger(new ComponentEvent(EVENTS.ERROR, {\n type: ERROR_TYPE.INVALID_DEVICE,\n message: \"blacklisted browser\"\n }));\n }, 0);\n\n return this;\n }\n\n if (!!options.image && !!options.video) {\n setTimeout(() => {\n this.trigger(new ComponentEvent(EVENTS.ERROR, {\n type: ERROR_TYPE.INVALID_RESOURCE,\n message: \"Specifying multi resouces(both image and video) is not valid.\"\n }));\n }, 0);\n return this;\n }\n\n // Check XR support at not when imported, but when created.\n // This is intended to make polyfills easier to use.\n checkXRSupport();\n\n this._container = container;\n this._image = options.image! as HTMLImageElement || options.video! as HTMLVideoElement;\n this._isVideo = !!options.video;\n this._projectionType = options.projectionType || PROJECTION_TYPE.EQUIRECTANGULAR;\n this._cubemapConfig = {\n ...{\n /* RLUDBF is abnormal, we use it on CUBEMAP only for backward compatibility*/\n order: this._projectionType === PROJECTION_TYPE.CUBEMAP ? \"RLUDBF\" : \"RLUDFB\",\n tileConfig: {\n flipHorizontal: false,\n rotation: 0\n },\n trim: 0\n }, ...options.cubemapConfig\n };\n this._stereoFormat = options.stereoFormat || STEREO_FORMAT.TOP_BOTTOM;\n\n // If the width and height are not provided, will use the size of the container.\n this._width = options.width || parseInt(window.getComputedStyle(container).width, 10);\n this._height = options.height || parseInt(window.getComputedStyle(container).height, 10);\n\n /**\n * Cache the direction for the performance in renderLoop\n *\n * This value should be updated by \"change\" event of YawPitchControl.\n */\n this._yaw = options.yaw || 0;\n this._pitch = options.pitch || 0;\n this._fov = options.fov || 65;\n\n this._gyroMode = options.gyroMode || GYRO_MODE.YAWPITCH;\n this._quaternion = null;\n\n this._aspectRatio = this._height !== 0 ? this._width / this._height : 1;\n\n this._canvasClass = options.canvasClass || DEFAULT_CANVAS_CLASS;\n\n const fovRange = options.fovRange || [30, 110];\n const touchDirection = PanoViewer._isValidTouchDirection(options.touchDirection) ?\n options.touchDirection : YawPitchControl.TOUCH_DIRECTION_ALL;\n const yawPitchConfig = {\n ...options,\n ...{\n element: container,\n yaw: this._yaw,\n pitch: this._pitch,\n fov: this._fov,\n gyroMode: this._gyroMode,\n fovRange,\n aspectRatio: this._aspectRatio,\n touchDirection\n }\n };\n\n this._isReady = false;\n\n this._initYawPitchControl(yawPitchConfig);\n this._initRenderer(this._yaw, this._pitch, this._fov, this._projectionType, this._cubemapConfig);\n }\n\n /**\n * Get the video element that the viewer is currently playing. You can use this for playback.\n * @ko 뷰어가 현재 사용 중인 비디오 요소를 얻습니다. 이 요소를 이용해 비디오의 컨트롤을 할 수 있습니다.\n * @return HTMLVideoElement<ko>HTMLVideoElement</ko>\n * @example\n * ```\n * var videoTag = panoViewer.getVideo();\n * videoTag.play(); // play the video!\n * ```\n */\n public getVideo() {\n if (!this._isVideo) {\n return null;\n }\n\n return this._photoSphereRenderer!.getContent() as HTMLVideoElement;\n }\n\n /**\n * Set the video information to be used by the viewer.\n * @ko 뷰어가 사용할 이미지 정보를 설정합니다.\n * @param {string|HTMLVideoElement|object} video Input video url or element or config object<ko>입력 비디오 URL 혹은 엘리먼트 혹은 설정객체를 활용(image 와 video 둘 중 하나만 설정)</ko>\n * @param {object} param\n * @param {string} [param.projectionType={@link eg.view360.PanoViewer.PROJECTION_TYPE.EQUIRECTANGULAR}(\"equirectangular\")] Projection Type<ko>프로젝션 타입</ko>\n * @param {object} param.cubemapConfig config cubemap projection layout. <ko>cubemap projection type 의 레이아웃 설정</ko>\n * @param {string} [param.stereoFormat=\"3dv\"] Contents format of the stereoscopic equirectangular projection. See {@link eg.view360.PanoViewer.STEREO_FORMAT}.<ko>Stereoscopic equirectangular projection type의 콘텐츠 포맷을 설정한다. {@link eg.view360.PanoViewer.STEREO_FORMAT} 참조.</ko>\n *\n * @return PanoViewer instance<ko>PanoViewer 인스턴스</ko>\n * @example\n * ```\n * panoViewer.setVideo(\"/path/to/video/video.mp4\", {\n * projectionType: eg.view360.PanoViewer.PROJECTION_TYPE.EQUIRECTANGULAR\n * });\n * ```\n */\n public setVideo(video: string | HTMLElement | { type: string; src: string }, param: Partial<{\n projectionType: PanoViewer[\"_projectionType\"];\n cubemapConfig: PanoViewer[\"_cubemapConfig\"];\n stereoFormat: PanoViewer[\"_stereoFormat\"];\n }> = {}) {\n if (video) {\n this.setImage(video, {\n projectionType: param.projectionType,\n isVideo: true,\n cubemapConfig: param.cubemapConfig,\n stereoFormat: param.stereoFormat\n });\n }\n\n return this;\n }\n\n /**\n * Get the image information that the viewer is currently using.\n * @ko 뷰어가 현재 사용하고있는 이미지 정보를 얻습니다.\n * @return Image Object<ko>이미지 객체</ko>\n * @example\n * var imageObj = panoViewer.getImage();\n */\n public getImage() {\n if (this._isVideo) {\n return null;\n }\n\n return this._photoSphereRenderer!.getContent();\n }\n\n /**\n * Set the image information to be used by the viewer.\n * @ko 뷰어가 사용할 이미지 정보를 설정합니다.\n * @param {string|HTMLElement|object} image Input image url or element or config object<ko>입력 이미지 URL 혹은 엘리먼트 혹은 설정객체를 활용(image 와 video 둘 중 하나만 설정한다.)</ko>\n * @param {object} param Additional information<ko>이미지 추가 정보</ko>\n * @param {string} [param.projectionType=\"equirectangular\"] Projection Type<ko>프로젝션 타입</ko>\n * @param {object} param.cubemapConfig config cubemap projection layout. <ko>cubemap projection type 레이아웃</ko>\n * @param {string} [param.stereoFormat=\"3dv\"] Contents format of the stereoscopic equirectangular projection. See {@link eg.view360.PanoViewer.STEREO_FORMAT}.<ko>Stereoscopic equirectangular projection type의 콘텐츠 포맷을 설정한다. {@link eg.view360.PanoViewer.STEREO_FORMAT} 참조.</ko>\n * @param {boolean} [param.isVideo=false] Whether the given `imaage` is video or not.<ko>이미지가 비디오인지 여부</ko>\n *\n * @return PanoViewer instance<ko>PanoViewer 인스턴스</ko>\n * @example\n * ```\n * panoViewer.setImage(\"/path/to/image/image.png\", {\n * projectionType: eg.view360.PanoViewer.PROJECTION_TYPE.CUBEMAP\n * });\n * ```\n */\n public setImage(image: string | HTMLElement | { src: string; type: string }, param: Partial<{\n projectionType: PanoViewer[\"_projectionType\"];\n cubemapConfig: PanoViewer[\"_cubemapConfig\"];\n stereoFormat: PanoViewer[\"_stereoFormat\"];\n isVideo: boolean;\n }> = {}) {\n const cubemapConfig = {\n ...{\n order: \"RLUDBF\",\n tileConfig: {\n flipHorizontal: false,\n rotation: 0\n },\n trim: 0\n }, ...param.cubemapConfig\n };\n const stereoFormat = param.stereoFormat || STEREO_FORMAT.TOP_BOTTOM;\n const isVideo = !!(param.isVideo);\n\n if (this._image && this._isVideo !== isVideo) {\n /* eslint-disable no-console */\n console.warn(\"PanoViewer is not currently supporting content type changes. (Image <--> Video)\");\n /* eslint-enable no-console */\n return this;\n }\n\n if (image) {\n this._deactivate();\n\n this._image = image as HTMLImageElement;\n this._isVideo = isVideo;\n this._projectionType = param.projectionType || PROJECTION_TYPE.EQUIRECTANGULAR;\n this._cubemapConfig = cubemapConfig;\n this._stereoFormat = stereoFormat;\n\n this._initRenderer(this._yaw, this._pitch, this._fov, this._projectionType, this._cubemapConfig);\n }\n\n return this;\n }\n\n /**\n * Set whether the renderer always updates the texture and renders.\n * @ko 렌더러가 항상 텍스쳐를 갱신하고 화면을 렌더링 할지 여부를 설정할 수 있습니다.\n * @param doUpdate When true viewer will always update texture and render, when false viewer will not update texture and render only camera config is changed.<ko>true면 항상 텍스쳐를 갱신하고 화면을 그리는 반면, false면 텍스쳐 갱신은 하지 않으며, 카메라 요소에 변화가 있을 때에만 화면을 그립니다.</ko>\n * @return PanoViewer instance<ko>PanoViewer 인스턴스</ko>\n */\n public keepUpdate(doUpdate: boolean) {\n this._photoSphereRenderer!.keepUpdate(doUpdate);\n return this;\n }\n\n /**\n * Get the current projection type (equirectangular/cube)\n * @ko 현재 프로젝션 타입(Equirectangular 혹은 Cube)을 반환합니다.\n * @return {@link eg.view360.PanoViewer.PROJECTION_TYPE}\n */\n public getProjectionType() {\n return this._projectionType;\n }\n\n /**\n * Activate the device's motion sensor, and return the Promise whether the sensor is enabled\n * If it's iOS13+, this method must be used in the context of user interaction, like onclick callback on the button element.\n * @ko 디바이스의 모션 센서를 활성화하고, 활성화 여부를 담는 Promise를 리턴합니다.\n * iOS13+일 경우, 사용자 인터렉션에 의해서 호출되어야 합니다. 예로, 버튼의 onclick 콜백과 같은 콘텍스트에서 호출되어야 합니다.\n * @return Promise containing nothing when resolved, or string of the rejected reason when rejected.<ko>Promise. resolve되었을 경우 아무것도 반환하지 않고, reject되었을 경우 그 이유를 담고있는 string을 반환한다.</ko>\n */\n public enableSensor() {\n return new Promise((resolve, reject) => {\n if (DeviceMotionEvent && typeof DeviceMotionEvent.requestPermission === \"function\") {\n DeviceMotionEvent.requestPermission().then(permissionState => {\n if (permissionState === \"granted\") {\n resolve();\n } else {\n reject(new Error(\"permission denied\"));\n }\n }).catch(e => {\n // This can happen when this method wasn't triggered by user interaction\n reject(e);\n });\n } else {\n resolve();\n }\n });\n }\n\n /**\n * Disable the device's motion sensor.\n * @ko 디바이스의 모션 센서를 비활성화합니다.\n * @deprecated\n * @return PanoViewer instance<ko>PanoViewer 인스턴스</ko>\n */\n public disableSensor() {\n return this;\n }\n\n /**\n * Switch to VR stereo rendering mode which uses WebXR / WebVR API (WebXR is preferred).\n * This method must be used in the context of user interaction, like onclick callback on the button element.\n * It can be rejected when an enabling device sensor fails or image/video is still loading(\"ready\" event not triggered).\n * @ko WebXR / WebVR API를 사용하는 VR 스테레오 렌더링 모드로 전환합니다. (WebXR을 더 선호합니다)\n * 이 메소드는 사용자 인터렉션에 의해서 호출되어야 합니다. 예로, 버튼의 onclick 콜백과 같은 콘텍스트에서 호출되어야 합니다.\n * 디바이스 센서 활성화에 실패시 혹은 아직 이미지/비디오가 로딩중인 경우(\"ready\"이벤트가 아직 트리거되지 않은 경우)에는 Promise가 reject됩니다.\n * @param {object} [options={}] Additional options for WebXR session, see {@link https://developer.mozilla.org/en-US/docs/Web/API/XRSessionInit XRSessionInit}.<ko>WebXR용 추가 옵션, {@link https://developer.mozilla.org/en-US/docs/Web/API/XRSessionInit XRSessionInit}을 참조해주세요.</ko>\n * @return Promise containing either a string of resolved reason or an Error instance of rejected reason.<ko>Promise가 resolve된 이유(string) 혹은 reject된 이유(Error)</ko>\n */\n public enterVR(options: {\n requiredFeatures?: any[];\n optionalFeatures?: any[];\n [key: string]: any;\n } = {}): globalThis.Promise<string> {\n if (!this._isReady) {\n return Promise.reject(new Error(\"PanoViewer is not ready to show image.\")) as any;\n }\n\n return new Promise((resolve, reject) => {\n this.enableSensor()\n .then(() => this._photoSphereRenderer!.enterVR(options))\n .then((res: string) => resolve(res))\n .catch(e => reject(e));\n }) as any;\n }\n\n /**\n * Exit VR stereo rendering mode.\n * @ko VR 스테레오 렌더링 모드에서 일반 렌더링 모드로 전환합니다.\n * @return PanoViewer instance<ko>PanoViewer 인스턴스</ko>\n */\n public exitVR() {\n this._photoSphereRenderer!.exitVR();\n return this;\n }\n\n /**\n * When set true, enables zoom with the wheel or pinch gesture. However, in the case of touch, pinch works only when the touchDirection setting is {@link eg.view360.PanoViewer.TOUCH_DIRECTION.ALL}.\n * @ko true 로 설정 시 휠 혹은 집기 동작으로 확대/축소 할 수 있습니다. false 설정 시 확대/축소 기능을 비활성화 합니다. 단, 터치인 경우 touchDirection 설정이 {@link eg.view360.PanoViewer.TOUCH_DIRECTION.ALL} 인 경우에만 pinch 가 동작합니다.\n * @param useZoom\n * @return PanoViewer instance<ko>PanoViewer 인스턴스</ko>\n */\n public setUseZoom(useZoom: boolean): this {\n if (typeof useZoom === \"boolean\") {\n this._yawPitchControl!.option(\"useZoom\", useZoom);\n }\n\n return this;\n }\n\n /**\n * When true, enables the keyboard move key control: awsd, arrow keys\n * @ko true이면 키보드 이동 키 컨트롤을 활성화합니다. (awsd, 화살표 키)\n * @param useKeyboard\n * @return PanoViewer instance<ko>PanoViewer 인스턴스</ko>\n */\n public setUseKeyboard(useKeyboard: boolean): this {\n this._yawPitchControl!.option(\"useKeyboard\", useKeyboard);\n return this;\n }\n\n /**\n * Enables control through device motion. (\"none\", \"yawPitch\", \"VR\")\n * @ko 디바이스 움직임을 통한 컨트롤을 활성화 합니다. (\"none\", \"yawPitch\", \"VR\")\n * @param gyroMode {@link eg.view360.PanoViewer.GYRO_MODE}\n * @return PanoViewer instance<ko>PanoViewer 인스턴스</ko>\n * @example\n * ```\n * panoViewer.setGyroMode(\"yawPitch\");\n * //equivalent\n * panoViewer.setGyroMode(eg.view360.PanoViewer.GYRO_MODE.YAWPITCH);\n * ```\n */\n public setGyroMode(gyroMode: PanoViewer[\"_gyroMode\"]) {\n this._yawPitchControl!.option(\"gyroMode\", gyroMode);\n return this;\n }\n\n /**\n * Set the range of controllable FOV values\n * @ko 제어 가능한 FOV 구간을 설정합니다.\n * @param range\n * @return PanoViewer instance<ko>PanoViewer 인스턴스</ko>\n * @example\n * panoViewer.setFovRange([50, 90]);\n */\n public setFovRange(range: number[]) {\n this._yawPitchControl!.option(\"fovRange\", range);\n return this;\n }\n\n /**\n * Get the range of controllable FOV values\n * @ko 제어 가능한 FOV 구간을 반환합니다.\n * @return FOV range\n * @example\n * var range = panoViewer.getFovRange(); // [50, 90]\n */\n public getFovRange(): [number, number] {\n return this._yawPitchControl!.option(\"fovRange\") as [number, number];\n }\n\n /**\n * Update size of canvas element by it's container element's or specified size. If size is not specified, the size of the container area is obtained and updated to that size.\n * @ko 캔버스 엘리먼트의 크기를 컨테이너 엘리먼트의 크기나 지정된 크기로 업데이트합니다. 만약 size 가 지정되지 않으면 컨테이너 영역의 크기를 얻어와 해당 크기로 갱신합니다.\n * @param {object} [size]\n * @param {number} [size.width=width of the container]\n * @param {number} [size.height=height of the container]\n * @return PanoViewer instance<ko>PanoViewer 인스턴스</ko>\n */\n public updateViewportDimensions(size: Partial<{\n width: number;\n height: number;\n }> = {}): this {\n if (!this._isReady) {\n return this;\n }\n\n let containerSize;\n\n if (size.width === undefined || size.height === undefined) {\n containerSize = window.getComputedStyle(this._container);\n }\n\n const width = size.width || parseInt(containerSize.width, 10);\n const height = size.height || parseInt(containerSize.height, 10);\n\n // Skip if viewport is not changed.\n if (width === this._width && height === this._height) {\n return this;\n }\n\n this._width = width;\n this._height = height;\n\n this._aspectRatio = width / height;\n this._photoSphereRenderer!.updateViewportDimensions(width, height);\n this._yawPitchControl!.option(\"aspectRatio\", this._aspectRatio);\n this._yawPitchControl!.updatePanScale({height});\n\n this.lookAt({}, 0);\n return this;\n }\n\n /**\n * Get the current field of view(FOV)\n * @ko 현재 field of view(FOV) 값을 반환합니다.\n */\n public getFov(): number {\n return this._fov;\n }\n\n /**\n * Get current yaw value\n * @ko 현재 yaw 값을 반환합니다.\n */\n public getYaw() {\n return this._yaw;\n }\n\n /**\n * Get current pitch value\n * @ko 현재 pitch 값을 반환합니다.\n */\n public getPitch() {\n return this._pitch;\n }\n\n /**\n * Get the range of controllable Yaw values\n * @ko 컨트롤 가능한 Yaw 구간을 반환합니다.\n */\n public getYawRange(): [number, number] {\n return this._yawPitchControl!.option(\"yawRange\") as [number, number];\n }\n\n /**\n * Get the range of controllable Pitch values\n * @ko 컨트롤 가능한 Pitch 구간을 가져옵니다.\n */\n public getPitchRange(): [number, number] {\n return this._yawPitchControl!.option(\"pitchRange\") as [number, number];\n }\n\n /**\n * Set the range of controllable yaw\n * @ko 컨트롤 가능한 Yaw 구간을 반환합니다.\n * @param {number[]} range\n * @return PanoViewer instance<ko>PanoViewer 인스턴스</ko>\n * @example\n * panoViewer.setYawRange([-90, 90]);\n */\n public setYawRange(yawRange: number[]) {\n this._yawPitchControl!.option(\"yawRange\", yawRange);\n return this;\n }\n\n /**\n * Set the range of controllable Pitch values\n * @ko 컨트롤 가능한 Pitch 구간을 설정합니다.\n * @param {number[]} range\n * @return PanoViewer instance<ko>PanoViewer 인스턴스</ko>\n * @example\n * panoViewer.setPitchRange([-40, 40]);\n */\n public setPitchRange(pitchRange: number[]) {\n this._yawPitchControl!.option(\"pitchRange\", pitchRange);\n return this;\n }\n\n /**\n * Specifies whether to display the pole by limiting the pitch range. If it is true, pole point can be displayed. If it is false, it is not displayed.\n * @ko pitch 범위를 제한하여 극점을 표시할지를 지정합니다. true 인 경우 극점까지 표현할 수 있으며 false 인 경우 극점까지 표시하지 않습니다.\n * @param showPolePoint\n * @return PanoViewer instance<ko>PanoViewer 인스턴스</ko>\n */\n public setShowPolePoint(showPolePoint: boolean) {\n this._yawPitchControl!.option(\"showPolePoint\", showPolePoint);\n return this;\n }\n\n /**\n * Set a new view by setting camera configuration. Any parameters not specified remain the same.\n * @ko 카메라 설정을 지정하여 화면을 갱신합니다. 지정되지 않은 매개 변수는 동일하게 유지됩니다.\n * @param {object} orientation\n * @param {number} orientation.yaw Target yaw in degree <ko>목표 yaw (degree 단위)</ko>\n * @param {number} orientation.pitch Target pitch in degree <ko>목표 pitch (degree 단위)</ko>\n * @param {number} orientation.fov Target vertical fov in degree <ko>목표 수직 fov (degree 단위)</ko>\n * @param {number} duration Animation duration in milliseconds <ko>애니메이션 시간 (밀리 초)</ko>\n * @return PanoViewer instance<ko>PanoViewer 인스턴스</ko>\n * @example\n * ```\n * // Change the yaw angle (absolute angle) to 30 degrees for one second.\n * panoViewer.lookAt({yaw: 30}, 1000);\n * ```\n */\n public lookAt(orientation: Partial<{\n yaw: number;\n pitch: number;\n fov: number;\n }>, duration: number = 0) {\n if (!this._isReady) {\n return this;\n }\n\n const yaw = orientation.yaw !== undefined ? orientation.yaw : this._yaw;\n const pitch = orientation.pitch !== undefined ? orientation.pitch : this._pitch;\n const pitchRange = this._yawPitchControl!.option(\"pitchRange\");\n const verticalAngleOfImage = pitchRange[1] - pitchRange[0];\n let fov = orientation.fov !== undefined ? orientation.fov : this._fov;\n\n if (verticalAngleOfImage < fov) {\n fov = verticalAngleOfImage;\n }\n\n this._yawPitchControl!.lookAt({yaw, pitch, fov}, duration);\n\n if (duration === 0) {\n this._photoSphereRenderer!.renderWithYawPitch(yaw, pitch, fov);\n }\n return this;\n }\n\n /**\n * Set touch direction by which user can control.\n * @ko 사용자가 조작가능한 터치 방향을 지정합니다.\n * @param direction of the touch. {@link eg.view360.PanoViewer.TOUCH_DIRECTION}<ko>컨트롤 가능한 방향 {@link eg.view360.PanoViewer.TOUCH_DIRECTION}</ko>\n * @return PanoViewer instance\n * @example\n * ```\n * panoViewer = new PanoViewer(el);\n * // Limit the touch direction to the yaw direction only.\n * panoViewer.setTouchDirection(eg.view360.PanoViewer.TOUCH_DIRECTION.YAW);\n * ```\n */\n public setTouchDirection(direction: number): this {\n if (PanoViewer._isValidTouchDirection(direction)) {\n this._yawPitchControl!.option(\"touchDirection\", direction);\n }\n\n return this;\n }\n\n /**\n * Returns touch direction by which user can control\n * @ko 사용자가 조작가능한 터치 방향을 반환한다.\n * @return direction of the touch. {@link eg.view360.PanoViewer.TOUCH_DIRECTION}<ko>컨트롤 가능한 방향 {@link eg.view360.PanoViewer.TOUCH_DIRECTION}</ko>\n * @example\n * ```\n * panoViewer = new PanoViewer(el);\n * // Returns the current touch direction.\n * var dir = panoViewer.getTouchDirection();\n * ```\n */\n public getTouchDirection(): number {\n return this._yawPitchControl!.option(\"touchDirection\") ;\n }\n\n /**\n * Destroy viewer. Remove all registered event listeners and remove viewer canvas.\n * @ko 뷰어 인스턴스를 해제합니다. 모든 등록된 이벤트리스너를 제거하고 뷰어 캔버스를 삭제합니다.\n * @return PanoViewer instance<ko>PanoViewer 인스턴스</ko>\n */\n public destroy(): this {\n this._deactivate();\n\n if (this._yawPitchControl) {\n this._yawPitchControl.destroy();\n this._yawPitchControl = null;\n }\n\n return this;\n }\n\n // TODO: Remove parameters as they're just using private values\n private _initRenderer(\n yaw: number,\n pitch: number,\n fov: number,\n projectionType: PanoViewer[\"_projectionType\"],\n cubemapConfig: PanoViewer[\"_cubemapConfig\"]\n ) {\n this._photoSphereRenderer = new PanoImageRenderer(\n this._image,\n this._width,\n this._height,\n this._isVideo,\n this._container,\n this._canvasClass,\n {\n initialYaw: yaw,\n initialPitch: pitch,\n fieldOfView: fov,\n imageType: projectionType,\n cubemapConfig,\n stereoFormat: this._stereoFormat\n },\n );\n this._photoSphereRenderer.setYawPitchControl(this._yawPitchControl!);\n\n this._bindRendererHandler();\n\n this._photoSphereRenderer\n .bindTexture()\n .then(() => this._activate())\n .catch(() => {\n this.trigger(new ComponentEvent(EVENTS.ERROR, {\n type: ERROR_TYPE.FAIL_BIND_TEXTURE,\n message: \"failed to bind texture\"\n }));\n });\n }\n\n /**\n * @private\n * update values of YawPitchControl if needed.\n * For example, In Panorama mode, initial fov and pitchRange is changed by aspect ratio of image.\n *\n * This function should be called after isReady status is true.\n */\n private _updateYawPitchIfNeeded() {\n if (this._projectionType === PanoViewer.ProjectionType.PANORAMA) {\n // update fov by aspect ratio\n const image = this._photoSphereRenderer!.getContent()! as HTMLImageElement;\n let imageAspectRatio = image.naturalWidth / image.naturalHeight;\n let yawSize;\n let maxFov;\n\n // If height is larger than width, then we assume it's rotated by 90 degree.\n if (imageAspectRatio < 1) {\n // So inverse the aspect ratio.\n imageAspectRatio = 1 / imageAspectRatio;\n }\n\n if (imageAspectRatio < 6) {\n yawSize = mathUtil.toDegree(imageAspectRatio);\n // 0.5 means ratio of half height of cylinder(0.5) and radius of cylider(1). 0.5/1 = 0.5\n maxFov = mathUtil.toDegree(Math.atan(0.5)) * 2;\n } else {\n yawSize = 360;\n maxFov = (360 / imageAspectRatio); // Make it 5 fixed as axes does.\n }\n\n // console.log(\"_updateYawPitchIfNeeded\", maxFov, \"aspectRatio\", image.naturalWidth, image.naturalHeight, \"yawSize\", yawSize);\n const minFov = (this._yawPitchControl!.option(\"fovRange\"))[0];\n\n // this option should be called after fov is set.\n this._yawPitchControl!.option({\n \"fov\": maxFov, /* parameter for internal validation for pitchrange */\n \"yawRange\": [-yawSize / 2, yawSize / 2],\n \"pitchRange\": [-maxFov / 2, maxFov / 2],\n \"fovRange\": [minFov, maxFov]\n });\n this.lookAt({fov: maxFov});\n }\n }\n\n private\t_bindRendererHandler() {\n this._photoSphereRenderer!.on(PanoImageRenderer.EVENTS.ERROR, e => {\n this.trigger(new ComponentEvent(EVENTS.ERROR, e));\n });\n\n this._photoSphereRenderer!.on(PanoImageRenderer.EVENTS.RENDERING_CONTEXT_LOST, () => {\n this._deactivate();\n this.trigger(new ComponentEvent(EVENTS.ERROR, {\n type: ERROR_TYPE.RENDERING_CONTEXT_LOST,\n message: \"webgl rendering context lost\"\n }));\n });\n }\n\n private _initYawPitchControl(yawPitchConfig: Partial<YawPitchControlOptions>) {\n this._yawPitchControl = new YawPitchControl(yawPitchConfig);\n\n this._yawPitchControl.on(EVENTS.ANIMATION_END, e => {\n this.trigger(new ComponentEvent(EVENTS.ANIMATION_END, e));\n });\n\n this._yawPitchControl.on(\"change\", e => {\n this._yaw = e.yaw;\n this._pitch = e.pitch;\n this._fov = e.fov;\n this._quaternion = e.quaternion;\n\n this.trigger(new ComponentEvent(EVENTS.VIEW_CHANGE, e));\n });\n }\n\n private _activate() {\n this._photoSphereRenderer!.attachTo(this._container);\n this._yawPitchControl!.enable();\n\n this.updateViewportDimensions();\n\n this._isReady = true;\n\n // update yawPitchControl after isReady status is true.\n this._updateYawPitchIfNeeded();\n\n this.trigger(new ComponentEvent(EVENTS.READY));\n this._photoSphereRenderer!.startRender();\n }\n\n /**\n * Destroy webgl context and block user interaction and stop rendering\n */\n private _deactivate() {\n // Turn off the video if it has one\n const video = this.getVideo();\n if (video) {\n video.pause();\n }\n\n if (this._isReady) {\n this._photoSphereRenderer!.stopRender();\n this._yawPitchControl!.disable();\n this._isReady = false;\n }\n\n if (this._photoSphereRenderer) {\n this._photoSphereRenderer.destroy();\n this._photoSphereRenderer = null;\n }\n }\n}\n\nexport default PanoViewer;\n\n","import { SpinViewerOptions, SpinViewerEvent } from \"./SpinViewer\";\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const SPINVIEWER_OPTIONS: { [key in keyof SpinViewerOptions]: true } = {\n imageUrl: true,\n rowCount: true,\n colCount: true,\n width: true,\n height: true,\n autoHeight: true,\n colRow: true,\n scale: true,\n frameIndex: true,\n wrapperClass: true,\n imageClass: true\n};\n\nexport const SPINVIEWER_EVENTS: {\n [key: string]: keyof SpinViewerEvent;\n} = {\n LOAD: \"load\",\n IMAGE_ERROR: \"imageError\",\n CHANGE: \"change\",\n ANIMATION_END: \"animationEnd\"\n};\n\nexport const DEFAULT_WRAPPER_CLASS = \"view360-wrapper\";\nexport const DEFAULT_IMAGE_CLASS = \"view360-image\";\n","import Component, { ComponentEvent } from \"@egjs/component\";\n\nimport { TRANSFORM, SUPPORT_WILLCHANGE } from \"../utils/browserFeature\";\nimport { VERSION } from \"../version\";\n\nimport { SpinViewerOptions } from \"./SpinViewer\";\nimport { DEFAULT_IMAGE_CLASS, DEFAULT_WRAPPER_CLASS } from \"./consts\";\n\nexport interface SpriteImageEvent {\n /**\n * Events that occur when component loading is complete\n * @ko 컴포넌트 로딩이 완료되면 발생하는 이벤트\n * @name eg.view360.SpriteImage#load\n * @event\n * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n * @param {HTMLElement} param.target The target element for which to display the image <ko>이미지를 보여줄 대상 엘리먼트</ko>\n * @param {HTMLElement} param.bgElement Generated background image element <ko>생성된 background 이미지 엘리먼트</ko>\n *\n * @example\n *\n * sprites.on({\n * \"load\" : function(evt) {\n * console.log(\"load event fired - e.target\", e.target, \"e.bgElement\", e.bgElement);\n * }\n * });\n */\n load: {\n target: HTMLElement;\n bgElement: HTMLDivElement;\n };\n /**\n * An event that occurs when the image index is changed by the user's left / right panning\n * @ko 사용자의 좌우 Panning 에 의해 이미지 인덱스가 변경되었을때 발생하는 이벤트\n * @name eg.view360.SpriteImage#imageError\n * @event\n * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n * @param {String} param.imageUrl User-specified image URL <ko>사용자가 지정한 이미지 URL</ko>\n *\n * @example\n *\n * sprites.on({\n * \"imageError\" : function(evt) {\n * // Error handling\n * console.log(e.imageUrl);\n * }\n * });\n */\n imageError: {\n imageUrl?: string;\n };\n}\n\n/**\n * @memberof eg.view360\n * @extends eg.Component\n * SpriteImage\n */\nclass SpriteImage extends Component<SpriteImageEvent> {\n private static _createBgDiv(wrapperInContainer: HTMLDivElement | null, img: HTMLImageElement, rowCount: number, colCount: number, autoHeight: boolean) {\n const el = wrapperInContainer || document.createElement(\"div\");\n\n el.style.position = \"relative\";\n el.style.overflow = \"hidden\";\n\n img.style.position = \"absolute\";\n img.style.width = `${colCount * 100}%`;\n img.style.height = `${rowCount * 100}%`;\n\n /** Prevent image from being dragged on IE10, IE11, Safari especially */\n img.ondragstart = () => (false); // img.style.pointerEvents = \"none\";\n // Use hardware accelerator if available\n if (SUPPORT_WILLCHANGE) {\n (img.style.willChange = \"transform\");\n }\n\n el.appendChild(img);\n\n const unitWidth = img.naturalWidth / colCount;\n const unitHeight = img.naturalHeight / rowCount;\n\n if (autoHeight) {\n const r = unitHeight / unitWidth;\n\n el.style.paddingBottom = `${r * 100}%`;\n } else {\n el.style.height = \"100%\";\n }\n\n return el;\n }\n\n private static _getSizeString(size) {\n if (typeof size === \"number\") {\n return `${size}px`;\n }\n\n return size;\n }\n\n public static VERSION = VERSION;\n\n private _el: HTMLElement;\n private _rowCount: number;\n private _colCount: number;\n private _totalCount: number;\n private _width: number | string;\n private _height: number | string;\n private _autoHeight: boolean;\n private _colRow: number[];\n private _image: HTMLImageElement;\n private _bg: HTMLDivElement;\n private _autoPlayReservedInfo: { interval: number; playCount: number } | null;\n private _autoPlayTimer: number;\n\n /**\n * @class eg.view360.SpriteImage\n * @classdesc A module that displays a single or continuous image of any one of the \"sprite images\". SpinViewer internally uses SpriteImage to show each frame of the sprite image.\n * @ko 스프라이트 이미지 중 임의의 한 프레임을 단발성 혹은 연속적으로 보여주는 컴포넌트입니다. SpinViewer 는 내부적으로 SpriteImage 를 사용하여 스프라이트 이미지의 각 프레임을 보여줍니다.\n * @extends eg.Component\n *\n * @param {HTMLElement} element The element to show the image <ko>이미지를 보여줄 대상 요소</ko>\n * @param {Object} options The option object<ko>파라미터 객체</ko>\n * @param {String} options.imageUrl The url of the sprite image <ko>스프라이트 이미지의 url</ko>\n * @param {Number} [options.rowCount=1] Number of horizontal frames in the sprite image <ko>스프라이트 이미지의 가로 프레임 갯수</ko>\n * @param {Number} [options.colCount=1] Number of vertical frames in the sprite image <ko>스프라이트 이미지의 세로 프레임 갯수</ko>\n * @param {Number|String} [options.width=\"auto\"] The width of the target element to show the image <ko>이미지를 보여줄 대상 요소의 너비</ko>\n * @param {Number|String} [options.height=\"auto\"] The height of the target element to show the image <ko>이미지를 보여줄 대상 요소의 높이</ko>\n * @param {Boolean} [options.autoHeight=true] Whether to automatically set the height of the image area to match the original image's proportion <ko>원본 이미지 비율에 맞게 이미지 영역의 높이를 자동으로 설정할지 여부</ko>\n * @param {Number[]} [options.colRow=[0, 0]] The column, row coordinates of the first frame of the sprite image (based on 0 index) <ko> 스프라이트 이미지 중 처음 보여줄 프레임의 (column, row) 좌표 (0 index 기반)</ko>\n * @param {Number} [options.frameIndex=0] frameIndex specifies the index of the frame to be displayed in the \"Sprite image\". The frameIndex order is zero-based and indexed in Z form (left-to-right, top-to-bottom, and newline again from left to right).<br>- colRow is equivalent to frameIndex. However, if colRow is specified at the same time, colRow takes precedence.<ko>스프라이트 이미지 중에서 보여질 프레임의 인덱스를 지정합니다. frameIndex 순서는 0부터 시작하며 Z 형태(왼쪽에서 오른쪽, 위에서 아래, 개행 시 다시 왼쪽 부터)로 인덱싱합니다.<br>- colRow 는 frameIndex 와 동일한 기능을 합니다. 단, colRow 가 동시에 지정된 경우 colRow 가 우선합니다.</ko>\n * @param {Number} [options.scale=1] Spin scale (The larger the spin, the more).<ko>Spin 배율 (클 수록 더 많이 움직임)</ko>\n *\n * @support {\"ie\": \"9+\", \"ch\" : \"latest\", \"ff\" : \"latest\", \"sf\" : \"latest\", \"edge\" : \"latest\", \"ios\" : \"7+\", \"an\" : \"2.3+ (except 3.x)\"}\n * @example\n *\n * // Initialize SpriteImage\n *\n * var el = document.getElementById(\"image-div\");\n * var sprites = new eg.view360.SpriteImage(el, {\n * \timageUrl: \"/img/bag360.jpg\", // required\n * \trowCount: 24\n * });\n */\n public constructor(element: HTMLElement, options: Partial<SpinViewerOptions> = {}) {\n super();\n const opt = options || {};\n\n this._el = element;\n this._rowCount = opt.rowCount || 1;\n this._colCount = opt.colCount || 1;\n this._totalCount = this._rowCount * this._colCount; // total frames\n this._width = opt.width || \"auto\";\n this._height = opt.height || \"auto\";\n this._autoHeight = opt.autoHeight != null ? opt.autoHeight : true; // If autoHeight is specified, _height will be overwritten.\n this._colRow = [0, 0];\n\n if (opt.colRow) {\n this._colRow = opt.colRow;\n } else if (opt.frameIndex) {\n this.setFrameIndex(opt.frameIndex);\n }\n\n this._el.style.width = SpriteImage._getSizeString(this._width);\n this._el.style.height = SpriteImage._getSizeString(this._height);\n\n const wrapperClass = opt.wrapperClass || DEFAULT_WRAPPER_CLASS;\n const imageClass = opt.imageClass || DEFAULT_IMAGE_CLASS;\n\n if (!opt.imageUrl) {\n setTimeout(() => {\n this.trigger(new ComponentEvent(\"imageError\", {\n imageUrl: opt.imageUrl\n }));\n }, 0);\n return;\n }\n\n const imageInContainer = element.querySelector<HTMLImageElement>(`.${imageClass}`);\n const wrapperInContainer = element.querySelector<HTMLDivElement>(`.${wrapperClass}`);\n\n if (wrapperInContainer && imageInContainer) {\n // Set it to invisible to prevent wrapper being resized\n imageInContainer.style.display = \"none\";\n }\n\n this._image = imageInContainer || new Image();\n /**\n * Event\n */\n\n const image = this._image;\n\n image.onload = () => {\n if (wrapperInContainer && imageInContainer) {\n imageInContainer.style.display = \"\";\n }\n\n this._bg = SpriteImage._createBgDiv(\n wrapperInContainer,\n image,\n this._rowCount,\n this._colCount,\n this._autoHeight\n );\n this._el.appendChild(this._bg);\n this.setColRow(this._colRow[0], this._colRow[1]);\n\n this.trigger(new ComponentEvent(\"load\", {\n target: this._el,\n bgElement: this._bg\n }));\n\n if (this._autoPlayReservedInfo) {\n this.play(this._autoPlayReservedInfo);\n this._autoPlayReservedInfo = null;\n }\n };\n\n image.onerror = () => {\n this.trigger(new ComponentEvent(\"imageError\", {\n imageUrl: opt.imageUrl\n }));\n };\n\n image.src = opt.imageUrl;\n }\n\n /**\n * Specifies the frameIndex of the frame to be shown in the sprite image.\n * @ko 스프라이트 이미지 중 보여질 프레임의 frameIndex 값을 지정\n * @method eg.view360.SpriteImage#setFrameIndex\n * @param {Number} frameIndex frame index of a frame<ko>프레임의 인덱스</ko>\n *\n * @example\n *\n * sprites.setFrameIndex(0, 1);// col = 0, row = 1\n */\n public setFrameIndex(index: number) {\n const colRow = this.toColRow(index);\n\n this.setColRow(colRow[0], colRow[1]);\n }\n\n /**\n * Returns the frameIndex of the frame to be shown in the sprite image.\n * @ko 스프라이트 이미지 중 보여지는 프레임의 index 값을 반환\n * @method eg.view360.SpriteImage#getFrameIndex\n * @return {Number} frame index <ko>frame 인덱스</ko>\n *\n * @example\n *\n * var frameIndex = sprites.getFrameIndex(); // eg. frameIndex = 1\n *\n */\n public getFrameIndex() {\n return this._colRow[1] * this._colCount + this._colRow[0];\n }\n\n /**\n * Specifies the col and row values of the frame to be shown in the sprite image.\n * @ko 스프라이트 이미지 중 보여질 프레임의 col, row 값을 지정\n * @method eg.view360.SpriteImage#setColRow\n * @param {Number} col Column number of a frame<ko>프레임의 행값</ko>\n * @param {Number} row Row number of a frame<ko>프레임의 열값</ko>\n *\n * @example\n *\n * sprites.setlColRow(1, 2); // col = 1, row = 2\n */\n public setColRow(col: number, row: number) {\n if (row > this._rowCount - 1 || col > this._colCount - 1) {\n return;\n }\n\n if (this._image && TRANSFORM) {\n // NOTE: Currently, do not apply translate3D for using layer hack. Do we need layer hack for old browser?\n this._image.style[TRANSFORM] = `translate(${-(col / this._colCount * 100)}%, ${-(row / this._rowCount * 100)}%)`;\n }\n\n this._colRow = [col, row];\n }\n\n /**\n * Returns the col and row values of the frame to be shown in the sprite image.\n * @ko 스프라이트 이미지 중 보여지는 프레임의 col, row 값을환반환\n * @method eg.view360.SpriteImage#gelColRow\n * @return {Number[]} Array containing col, row<ko>col, row 정보를 담는 배열</ko>\n *\n * @example\n *\n * var colRow = sprites.getlColRow();\n * // colRow = [1, 2] - index of col is 1, index of row is 2\n *\n */\n public getColRow() {\n return this._colRow;\n }\n\n /**\n * Stop playing\n * @ko play 되고 있던 프레임 재생을 중지합니다.\n * @method eg.view360.SpriteImage#stop\n *\n * @example\n *\n * viewer.stop();\n *\n */\n public stop() {\n if (this._autoPlayTimer) {\n clearInterval(this._autoPlayTimer);\n this._autoPlayTimer = -1;\n }\n }\n\n /**\n * Switches frames sequentially in the 'interval' starting from the currently displayed frame and plays all frames by 'playCount'.\n * @ko 현재 보여지고 있는 프레임을 시작으로 'interval' 간격으로 순차적으로 프레임을 전환하며 모든 프레임을 'playCount' 만큼 재생한다.\n * @method eg.view360.SpriteImage#play\n * @param {Object} param The parameter object<ko>파라미터 객체</ko>\n * @param {Number} [param.interval=1000 / totalFrameCount] Interframe Interval - in milliseconds<ko>프레임간 간격 - 밀리세컨드 단위</ko>\n * @param {Number} [param.playCount=0] PlayCount = 1 in which all frames are reproduced once, and playCount = n in which all frames are repeated n times. playCount = 0 in which all frames are repeated infinitely<ko>모든 프레임을 1회씩 재생한 것이 playCount = 1, 모든 프레임을 n 회 재상한 것이 playCount = n 이 된다. 0 dms 무한반복</ko>\n *\n * @example\n *\n * viewer.play({angle: 16, playCount: 1});\n *\n */\n public play({ interval, playCount } = { interval: 1000 / this._totalCount, playCount: 0 }) {\n if (!this._bg) {\n this._autoPlayReservedInfo = {interval, playCount};\n return;\n }\n\n if (this._autoPlayTimer) {\n clearInterval(this._autoPlayTimer);\n this._autoPlayTimer = -1;\n }\n\n let frameIndex = this.getFrameIndex();\n let count = 0;\n let frameCount = 0; // for checking 1 cycle\n\n this._autoPlayTimer = window.setInterval(() => {\n frameIndex %= this._totalCount;\n const colRow = this.toColRow(frameIndex);\n\n this.setColRow(colRow[0], colRow[1]);\n frameIndex++;\n\n // Done 1 Cycle?\n if (++frameCount === this._totalCount) {\n frameCount = 0;\n count++;\n }\n\n if (playCount > 0 && count === playCount) {\n clearInterval(this._autoPlayTimer);\n }\n }, interval);\n }\n\n public toColRow(frameIndex: number) {\n const colCount = this._colCount;\n const rowCount = this._rowCount;\n\n if (frameIndex < 0) {\n return [0, 0];\n } else if (frameIndex >= this._totalCount) {\n return [colCount - 1, rowCount - 1];\n }\n\n const col = frameIndex % colCount;\n const row = Math.floor(frameIndex / colCount);\n\n // console.log(frameIndex, col, row);\n return [col, row];\n }\n}\n\nexport default SpriteImage;\n","import Component, { ComponentEvent } from \"@egjs/component\";\nimport Axes, { PanInput } from \"@egjs/axes\";\n\nimport { VERSION } from \"../version\";\nimport { AnimationEndEvent, ChangeEvent, ImageErrorEvent, LoadEvent } from \"../types/event\";\n\nimport SpriteImage from \"./SpriteImage\";\n\nconst DEFAULT_PAN_SCALE = 0.21;\n\nexport interface SpinViewerEvent {\n load: LoadEvent;\n imageError: ImageErrorEvent;\n change: ChangeEvent;\n animationEnd: AnimationEndEvent<SpinViewer>;\n}\n\nexport interface SpinViewerOptions {\n imageUrl: string;\n rowCount: number;\n colCount: number;\n width: number | string;\n height: number | string;\n autoHeight: boolean;\n colRow: number[];\n scale: number;\n frameIndex: number;\n wrapperClass: string;\n imageClass: string;\n}\n\n/**\n * @memberof eg.view360\n * @extends eg.Component\n * SpinViewer\n */\nclass SpinViewer extends Component<SpinViewerEvent> {\n /**\n * Version info string\n * @ko 버전정보 문자열\n * @static\n * @example\n * eg.view360.SpinViewer.VERSION; // ex) 3.0.1\n * @memberof eg.view360.SpinViewer\n */\n public static VERSION = VERSION;\n\n private _el: HTMLElement;\n private _sprites: SpriteImage;\n private _axes: Axes;\n private _panInput: PanInput;\n\n private _scale: number;\n private _panScale: number;\n private _frameCount: number;\n\n /**\n * @classdesc A module used to displays each image sequentially according to the direction of the user's touch movement (left / right) of the sprite image that is collected by rotating the object.\n * @ko 물체 주위를 회전하여 촬영한 이미지들을 모은 스프라이트 이미지를 사용자의 터치 이동 방향(좌 / 우) 에 따라 각 이미지들을 순차적으로 보여주는 컴포넌트입니다.\n *\n * @param {HTMLElement} element The element to show the image <ko>이미지를 보여줄 대상 요소</ko>\n * @param {Object} options The option object<ko>파라미터 객체</ko>\n * @param {String} options.imageUrl The url of the sprite image <ko>스프라이트 이미지의 url</ko>\n * @param {Number} [options.rowCount=1] Number of horizontal frames in the sprite image <ko>스프라이트 이미지의 가로 프레임 갯수</ko>\n * @param {Number} [options.colCount=1] Number of vertical frames in the sprite image <ko>스프라이트 이미지의 세로 프레임 갯수</ko>\n * @param {Number|String} [options.width=\"auto\"] The width of the target element to show the image <ko>이미지를 보여줄 대상 요소의 너비</ko>\n * @param {Number|String} [options.height=\"auto\"] The height of the target element to show the image <ko>이미지를 보여줄 대상 요소의 높이</ko>\n * @param {Boolean} [options.autoHeight=true] Whether to automatically set the height of the image area to match the original image's proportion <ko>원본 이미지 비율에 맞게 이미지 영역의 높이를 자동으로 설정할지 여부</ko>\n * @param {Number[]} [options.colRow=[0, 0]] The column, row coordinates of the first frame of the sprite image (based on 0 index) <ko> 스프라이트 이미지 중 처음 보여줄 프레임의 (column, row) 좌표 (0 index 기반)</ko>\n * @param {Number} [options.scale=1] Spin scale (The larger the spin, the more).<ko>Spin 배율 (클 수록 더 많이 움직임)</ko>\n * @param {Number} [options.frameIndex] The frameIndex of the frame to be shown in the sprite image<ko>스프라이트 이미지 중 보여질 프레임의 frameIndex 값</ko>\n * @param {String} [options.wrapperClass=\"view360-wrapper\"] A class name for the parent element of the image element inside the container element. SpinViewer will use the element that has this class instead of creating one if it exists<ko>이미지 엘리먼트의 부모 엘리먼트의 클래스 이름. SpinViewer는 해당 클래스를 갖는 엘리먼트가 콘테이너 엘리먼트 내부에 존재할 경우, 새로 생성하는 대신 그 엘리먼트를 사용할 것입니다</ko>\n * @param {String} [options.imageClass=\"view360-image\"] A class name for the image element inside the container element. SpinViewer will use the image element that has this class instead of creating one if it exists<ko>콘테이너 엘리먼트 내부의 이미지 엘리먼트의 클래스 이름. SpinViewer는 해당 클래스를 갖는 이미지 엘리먼트가 콘테이너 엘리먼트 내부에 존재할 경우, 새로 생성하는 대신 그 엘리먼트를 사용할 것입니다</ko>\n * @support {\"ie\": \"9+\", \"ch\" : \"latest\", \"ff\" : \"latest\", \"sf\" : \"latest\", \"edge\" : \"latest\", \"ios\" : \"7+\", \"an\" : \"2.3+ (except 3.x)\"}\n * @example\n * ```\n * // Initialize SpinViewer\n * var el = document.getElementById(\"product-360\");\n * var viewer = new eg.view360.SpinViewer(el, {\n * \timageUrl: \"/img/bag360.jpg\", // required\n * \trowCount: 24 //required\n * });\n * ```\n */\n public constructor(element: HTMLElement, options: Partial<SpinViewerOptions> = {}) {\n super();\n\n this._el = element;\n\n const opt = {...options};\n const colCount = opt.colCount || 1;\n const rowCount = opt.rowCount || 1;\n\n this._scale = (opt.scale || 1);\n this._panScale = this._scale * DEFAULT_PAN_SCALE;\n\n this._frameCount = colCount * rowCount;\n\n // Init SpriteImage\n this._sprites = new SpriteImage(element, opt).on({\n \"load\": evt => {\n this.trigger(new ComponentEvent(\"load\", evt));\n },\n \"imageError\": evt => {\n this.trigger(new ComponentEvent(\"imageError\", {\n imageUrl: evt.imageUrl\n }));\n }\n });\n\n // Init Axes\n this._panInput = new PanInput(this._el, {\n scale: [this._panScale, this._panScale]\n });\n this._axes = new Axes({\n angle: {\n range: [0, 359],\n circular: true\n }\n }).on({\n \"change\": evt => {\n const curr = Math.floor(evt.pos.angle / (360 / this._frameCount));\n const frameIndex = this._frameCount - curr - 1;\n\n this._sprites.setFrameIndex(frameIndex);\n\n this.trigger(new ComponentEvent(\"change\", {\n frameIndex,\n colRow: this._sprites.getColRow(),\n angle: evt.pos.angle\n }));\n },\n \"animationEnd\": evt => {\n this.trigger(new ComponentEvent(\"animationEnd\", {\n isTrusted: evt.isTrusted\n }));\n }\n });\n\n this._axes.connect(\"angle\", this._panInput);\n }\n\n /**\n * Set spin scale\n * @ko scale 을 조정할 수 있는 함수\n * @param {Number} scale Rotation multiples at spin, the larger the rotation<ko>Spin 시 회전 배수값, 커질 수록 더 많이 회전</ko>\n *\n * @return {Object} Instance of SpinViewer <ko>SpinViewer 인스턴스</ko>\n *\n * @example\n * viewer.setScale(2);// It moves twice as much.\n */\n public setScale(scale: number) {\n if (isNaN(scale) || scale < 0) {\n return this;\n }\n\n this._scale = scale;\n this._panScale = scale * DEFAULT_PAN_SCALE;\n this._panInput.options.scale = [this._panScale, this._panScale];\n\n return this;\n }\n\n /**\n * Get spin scale\n * @ko scale 값을 반환한다.\n *\n * @return {Number} Rotation multiples at spin, the larger the rotation<ko>Spin 시 회전 배수값, 커질 수록 더 많이 회전</ko>\n *\n * @example\n * viewer.getScale();// It returns number\n */\n public getScale() {\n return this._scale;\n }\n\n /**\n * It gives the effect of rotating for a certain duration by the specified angle based on the current rotation angle.\n * @ko 현재 회전 각도를 기준으로 지정된 각도(angle)만큼 일정 시간동안(duration) 회전하는 효과를 준다.\n * @param {Number} [angle = 0] angle<ko>상대적 회전 각도</ko>\n * @param {Object} param The parameter object<ko>파라미터 객체</ko>\n * @param {Number} [param.duration = 0] duration<ko>회전할 시간 - 밀리세컨드 단위</ko>\n *\n * @return {Object} Instance of SpinViewer <ko>SpinViewer 인스턴스</ko>\n *\n * @example\n * viewer.spinBy(720, {duration: 500});\n */\n public spinBy(angle = 0, param = {duration: 0}) {\n this._axes.setBy({angle}, param.duration);\n return this;\n }\n\n /**\n * It gives the effect of rotating for a certain duration (duration) by the specified angle (angle).\n * @ko 지정된 각도(angle)만큼 일정 시간동안(duration) 회전하는 효과를 준다.\n * @param {Number} [angle = 0] angle<ko>회전 각도</ko>\n * @param {Object} param The parameter object<ko>파라미터 객체</ko>\n * @param {Number} [param.duration = 0] duration<ko>회전할 시간 - 밀리세컨드 단위</ko>\n *\n * @return {Object} Instance of SpinViewer <ko>SpinViewer 인스턴스</ko>\n *\n * @example\n * viewer.spinTo(30, {duration:100});\n */\n public spinTo(angle = 0, param = {duration: 0}) {\n this._axes.setTo({angle}, param.duration);\n return this;\n }\n\n /**\n * Returns current angles\n * @ko 현재 각도를 반환한다.\n *\n * @return {Number} Current angle <ko>현재 각도</ko>\n */\n public getAngle() {\n return this._axes.get().angle || 0;\n }\n}\n\nexport default SpinViewer;\n","import Component from \"@egjs/component\";\n\nconst withMethods = (component: any, prototype: any, vanillaInstance: string) => {\n [Component.prototype, component.prototype].forEach(proto => {\n Object.getOwnPropertyNames(proto).filter(name => !prototype[name] && !name.startsWith(\"_\") && name !== \"constructor\")\n .forEach((name: string) => {\n const descriptor = Object.getOwnPropertyDescriptor(proto, name)!;\n\n if (descriptor.value) {\n // Public Function\n Object.defineProperty(prototype, name, {\n value: function(...args) {\n return descriptor.value.call(this[vanillaInstance], ...args);\n }\n });\n } else {\n const getterDescriptor: { get?: () => any; set?: (val: any) => void } = {};\n if (descriptor.get) {\n getterDescriptor.get = function() {\n return descriptor.get?.call(this[vanillaInstance]);\n };\n }\n if (descriptor.set) {\n getterDescriptor.set = function(...args) {\n return descriptor.set?.call(this[vanillaInstance], ...args);\n };\n }\n\n Object.defineProperty(prototype, name, getterDescriptor);\n }\n });\n });\n};\n\nexport default withMethods;\n","import { PanoViewer } from \"../PanoViewer\";\n\nimport withMethods from \"./withMethods\";\n\nconst withPanoViewerMethods = (prototype: any, name: string) => {\n withMethods(PanoViewer, prototype, name);\n};\n\nexport default withPanoViewerMethods;\n","import { SpinViewer } from \"../SpinViewer\";\n\nimport withMethods from \"./withMethods\";\n\nconst withSpinViewerMethods = (prototype: any, name: string) => {\n withMethods(SpinViewer, prototype, name);\n};\n\nexport default withSpinViewerMethods;\n","import PanoViewer, { PanoViewerOptions } from \"../PanoViewer/PanoViewer\";\n\nexport default (panoViewer: PanoViewer, newProps: Partial<PanoViewerOptions>, prevProps: Partial<PanoViewerOptions>) => {\n if (isPropChanged(newProps.image, prevProps.image)) {\n panoViewer.setImage(newProps.image, {\n projectionType: newProps.projectionType,\n cubemapConfig: newProps.cubemapConfig,\n stereoFormat: newProps.stereoFormat,\n isVideo: false\n });\n } else if (isPropChanged(newProps.video, prevProps.video)) {\n panoViewer.setVideo(newProps.video, {\n projectionType: newProps.projectionType,\n cubemapConfig: newProps.cubemapConfig,\n stereoFormat: newProps.stereoFormat\n });\n }\n\n const singleUpdateOptions: Array<keyof PanoViewerOptions> = [\n \"fovRange\",\n \"gyroMode\",\n \"pitchRange\",\n \"showPolePoint\",\n \"touchDirection\",\n \"useKeyboard\",\n \"useZoom\",\n \"yawRange\"\n ];\n\n singleUpdateOptions.forEach(optionName => {\n updateOption(panoViewer, optionName, newProps, prevProps);\n });\n};\n\nconst isPropChanged = (val: any, prevVal: any): val is true => val != null && val !== prevVal;\nconst updateOption = (panoViewer: PanoViewer, optionName: string, newProps: Partial<PanoViewerOptions>, prevProps: Partial<PanoViewerOptions>) => {\n if (isPropChanged(newProps[optionName], prevProps[optionName])) {\n panoViewer[`set${optionName[0].toUpperCase()}${optionName.slice(1)}`](newProps[optionName]);\n }\n};\n","/*\n * Copyright (c) 2017 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n/* eslint-disable @typescript-eslint/naming-convention */\nimport * as PanoViewer from \"./PanoViewer\";\nimport * as SpinViewer from \"./SpinViewer\";\nimport * as CFC from \"./cfc\";\nimport { merge } from \"./utils/utils\";\n\nconst View360: any = {};\n\nmerge(View360, PanoViewer);\nmerge(View360, SpinViewer);\nmerge(View360, CFC);\n\nexport default View360;\n"],"names":["VERSION","win","window","Math","self","Function","doc","document","nav","navigator","agent","getAgent","osName","os","name","browserName","browser","IS_IOS","IS_SAFARI_ON_DESKTOP","Float32Array","Array","getComputedStyle","userAgent","SUPPORT_TOUCH","SUPPORT_DEVICEMOTION","DeviceMotionEvent","devicePixelRatio","TRANSFORM","docStyle","documentElement","style","target","i","len","length","SUPPORT_WILLCHANGE","CSS","supports","WEBXR_SUPPORTED","checkXRSupport","xr","isSessionSupported","then","res","catch","supportsSession","quatToVec3","quaternion","baseV","vec3","fromValues","transformQuat","toDegree","a","PI","util","isPowerOfTwo","n","extractPitchFromQuat","atan2","sqrt","pow","hypot","x","y","ROTATE_CONSTANT","PITCH_DELTA","YAW_DELTA_BY_ROLL","YAW_DELTA_BY_YAW","targetAxis","meshPoint","getRotationDelta","prevQ","curQ","rotateKind","prevQuaternion","quat","clone","curQuaternion","normalize","prevPoint","curPoint","rotateDistance","dot","cross","create","rotateDirection","meshPoint2","meshPoint3","vecU","vecV","vecN","coefficientA","coefficientB","coefficientC","distance","abs","projectedPrevPoint","subtract","scale","trigonometricRatio","theta","acos","crossVec","thetaDirection","deltaRadian","angleBetweenVec2","v1","v2","det","vec2","yawOffsetBetween","viewDir","targetDir","viewDirXZ","targetDirXZ","sign","Number","toAxis","source","offset","reduce","acc","v","version","branch","build","match","exec","parseInt","CHROME_VERSION","IS_CHROME_WITHOUT_DEVICE_MOTION","IS_ANDROID","test","CONTROL_MODE_VR","CONTROL_MODE_YAWPITCH","TOUCH_DIRECTION_NONE","TOUCH_DIRECTION_YAW","TOUCH_DIRECTION_PITCH","TOUCH_DIRECTION_ALL","MC_DECELERATION","MC_MAXIMUM_DURATION","MC_BIND_SCALE","MAX_FIELD_OF_VIEW","PAN_SCALE","YAW_RANGE_HALF","PITCH_RANGE_HALF","CIRCULAR_PITCH_RANGE_HALF","GYRO_MODE","NONE","YAWPITCH","VR","MathUtil","degToRad","radToDeg","Vector2","prototype","constructor","set","copy","subVectors","b","Vector3","z","scalar","invScalar","multiplyScalar","applyQuaternion","q","qx","qy","qz","qw","w","ix","iy","iz","iw","crossVectors","ax","ay","az","bx","by","bz","Quaternion","undefined","setFromEulerXYZ","c1","cos","c2","c3","s1","sin","s2","s3","setFromEulerYXZ","setFromAxisAngle","axis","angle","halfAngle","s","multiply","multiplyQuaternions","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","inverse","l","slerp","qb","t","cosHalfTheta","halfTheta","sinHalfTheta","ratioA","ratioB","setFromUnitVectors","r","EPS","vFrom","vTo","Util","MIN_TIMESTEP","MAX_TIMESTEP","base64","mimeType","clamp","value","min","max","lerp","isIOS","platform","isWebViewAndroid","indexOf","isSafari","isFirefoxAndroid","isR7","isLandscapeMode","rtn","orientation","isTimestampDeltaValid","timestampDeltaS","isNaN","getScreenWidth","screen","width","height","getScreenHeight","requestFullscreen","element","webkitRequestFullscreen","mozRequestFullScreen","msRequestFullscreen","exitFullscreen","webkitExitFullscreen","mozCancelFullScreen","msExitFullscreen","getFullscreenElement","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","linkProgram","gl","vertexSource","fragmentSource","attribLocationMap","vertexShader","createShader","VERTEX_SHADER","shaderSource","compileShader","fragmentShader","FRAGMENT_SHADER","program","createProgram","attachShader","attribName","bindAttribLocation","deleteShader","getProgramUniforms","uniforms","uniformCount","getProgramParameter","ACTIVE_UNIFORMS","uniformName","uniformInfo","getActiveUniform","replace","getUniformLocation","orthoMatrix","out","left","right","bottom","top","near","far","lr","bt","nf","copyArray","dest","isMobile","check","substr","vendor","opera","extend","src","key","hasOwnProperty","safariCssSizeWorkaround","canvas","width_1","height_1","setTimeout","isDebug","getQueryParameter","regex","RegExp","results","location","search","decodeURIComponent","frameDataFromPose","piOver180","rad45","mat4_perspectiveFromFieldOfView","fov","upTan","tan","upDegrees","downTan","downDegrees","leftTan","leftDegrees","rightTan","rightDegrees","xScale","yScale","mat4_fromRotationTranslation","x2","y2","z2","xx","xy","xz","yy","yz","zz","wx","wy","wz","mat4_translate","a00","a01","a02","a03","a10","a11","a12","a13","a20","a21","a22","a23","mat4_invert","a30","a31","a32","a33","b00","b01","b02","b03","b04","b05","b06","b07","b08","b09","b10","b11","defaultOrientation","defaultPosition","updateEyeMatrices","projection","view","pose","parameters","vrDisplay","fieldOfView","depthNear","depthFar","position","frameData","timestamp","leftProjectionMatrix","leftViewMatrix","getEyeParameters","rightProjectionMatrix","rightViewMatrix","isInsideCrossDomainIFrame","isFramed","refDomain","getDomainFromUrl","referrer","thisDomain","href","url","domain","split","predictionTimeS","previousQ","previousTimestampS","deltaQ","outQ","currentQ","gyro","timestampS","angularSpeed","console","log","toFixed","deltaT","predictAngle","STILLNESS_THRESHOLD","__extends","_super","_this","_onDeviceMotion","bind","_onDeviceOrientation","_onChromeWithoutDeviceMotion","isWithoutDeviceMotion","isAndroid","stillGyroVec","rawGyroVec","adjustedGyroVec","_timer","lastDevicemotionTimestamp","_isEnabled","enable","addEventListener","removeEventListener","e","alpha","beta","gamma","trigger","ComponentEvent","inputEvent","deviceorientation","clearTimeout","Date","getTime","isGyroSensorAvailable","rotationRate","isGravitySensorAvailable","accelerationIncludingGravity","interval","devicemotionEvent","__assign","timeStamp","type","acceleration","adjustedRotationRate","Component","sample","sensorSample","kFilter","vector","currentGyroMeasurement","previousGyroMeasurement","run_","currentAccelMeasurement","SensorSample","filterQ","previousFilterQ","accelQ","isOrientationInitialized","estimatedGravity","measuredGravity","gyroIntegralQ","accelToQuaternion_","gyroDeltaQ","gyroToQuaternionDelta_","invFilterQ","getQuaternionAngle","targetQ","accel","normAccel","dt","ComplementaryFilter","isFilterQuaternionInitialized","getOrientation","K_FILTER","PREDICTION_TIME_S","deviceMotion","DeviceMotion","accelerometer","gyroscope","_onDeviceMotionChange","_onScreenOrientationChange","filter","posePredictor","PosePredictor","filterToWorldQ","isChromeUsingDegrees","inverseWorldToScreenQ","worldToScreenQ","originalPoseAdjustQ","_setScreenTransform","resetQ","on","isEnabled","disable","_deviceOrientationQ","deviceOrientationFixQ","_alpha","outQuat","_convertFusionToPredicted","_prevOrientation","equals","predictedQ","getPrediction","_a","accGravity","rotRate","_triggerChange","addAccelMeasurement","addGyroMeasurement","getDeltaYaw","prvQ","yawDeltaByYaw","yawDeltaByRoll","getDeltaPitch","pitchDelta","el","options","_prevQuaternion","_quaternion","fusionPoseSensor","threshold","_onPoseChange","axes","observer","FusionPoseSensor","_attachEvent","_dettachEvent","destroy","disconnect","event","change","off","screenRotationAngleInst","refCount","_onOrientationChange","_spinR","_screenOrientationAngle","glMatrix","toRadian","betaR","gammaR","_useRotation","_screenRotationAngle","setUseRotation","useRotation","_userDirection","Axes","DIRECTION_ALL","unref","ScreenRotationAngle","_direction","DIRECTION_HORIZONTAL","connect","properties","useDirection","getOffset","newOffset","getRadian","cosTheta","sinTheta","DIRECTION_VERTICAL","PanInput","Y_AXIS_VECTOR","_fusionPoseSensor","isTrusted","yaw","yawQ","setAxisAngle","conj","conjugate","DEFAULT_YAW_RANGE","DEFAULT_PITCH_RANGE","CIRCULAR_PITCH_RANGE","opt","pitch","showPolePoint","useZoom","useKeyboard","gyroMode","touchDirection","yawRange","pitchRange","fovRange","aspectRatio","_element","_initialFov","_enabled","_isAnimating","_deviceQuaternion","_initAxes","option","param","_axes","get","areaHeight","_axesPanInput","deceleration","newValue","_getOptions","newOptions","changedKeyList","push","Object","keys","_setOptions","_getValidatedOptions","_applyOptions","updatePanScale","persistOrientation","_resetOrientation","duration","pos","p","f","maximumDuration","Infinity","setBy","yawPitch","getCombinedQuaternion","_axesWheelInput","_axesTiltMotionInput","_axesPinchInput","_axesMoveKeyInput","yRange","_updateYawRange","pRange","_updatePitchRange","RotationPanInput","WheelInput","PinchInput","MoveKeyInput","range","circular","_isCircular","bounce","hold","evt","delta","_updateControlScale","release","animationEnd","_getValidYawRange","_getValidPitchRange","arguments","isVR","isYawPitch","some","setTo","prevFov","nextFov","_initDeviceQuaternion","TiltMotionInput","_togglePinchInputByOption","_enableTouch","_inputs","direction","yawEnabled","pitchEnabled","DeviceQuaternion","newYawRange","newFov","newAspectRatio","ratio","_adjustAspectRatio","horizontalFov","isValid","newPitchRange","changeEvt","verticalAngle","halfFov","isPanorama","concat","horizontalAngle","halfHorizontalFov","mathUtil","targetElement","input","inputRange","outputRange","rangeIdx","inputA","inputB","outputA","outputB","_lerp","fraction","YawPitchControl","ERROR_TYPE","INVALID_DEVICE","NO_WEBGL","FAIL_IMAGE_LOAD","FAIL_BIND_TEXTURE","INVALID_RESOURCE","RENDERING_CONTEXT_LOST","PANOVIEWER_EVENTS","READY","VIEW_CHANGE","ANIMATION_END","ERROR","PROJECTION_TYPE","EQUIRECTANGULAR","CUBEMAP","CUBESTRIP","PANORAMA","STEREOSCOPIC_EQUI","STEREO_FORMAT","TOP_BOTTOM","LEFT_RIGHT","PANOVIEWER_OPTIONS","image","video","projectionType","cubemapConfig","stereoFormat","canvasClass","DEFAULT_CANVAS_CLASS","merge","_i","srcs","forEach","isArray","toImageElement","images","parsedImages","map","img","imgEl","Image","crossOrigin","toVideoElement","videoCandidate","HTMLVideoElement","video_1","createElement","setAttribute","appendSourceElement","sourceCount","querySelectorAll","readyState","load","videoUrl","videoSrc","videoType","sourceElement","appendChild","WEBGL_ERROR_CODE","webglAvailability","WebGLUtils","shader","success","getShaderParameter","COMPILE_STATUS","error","getShaderInfoLog","LINK_STATUS","deleteProgram","data","itemSize","attr","buffer","createBuffer","bindBuffer","bufferData","STATIC_DRAW","numItems","enableVertexAttribArray","vertexAttribPointer","FLOAT","userContextAttributes","webglIdentifiers","context","contextAttributes","preserveDrawingBuffer","antialias","onWebglcontextcreationerror","statusMessage","webglIdentifiers_1","__values","identifier","getContext","textureTarget","texture","createTexture","bindTexture","texParameteri","TEXTURE_MAG_FILTER","LINEAR","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","webglContext","getWebglContext","loseContextExtension","getExtension","loseContext","agentInfo","isStableWebgl","parseFloat","code","pixels","texImage2D","RGBA","UNSIGNED_BYTE","getParameter","MAX_TEXTURE_SIZE","isIE11","majorVersion","EVENTS","_forceDimension","_pixelCanvas","_pixelContext","shaderProgram","indexBuffer","mvMatrix","pMatrix","uniformMatrix4fv","pMatrixUniform","mvMatrixUniform","drawElements","TRIANGLES","UNSIGNED_SHORT","pixelSource","naturalWidth","videoWidth","naturalHeight","videoHeight","forceDimension","isIE11Video","getDimension","contentDimension","textureDimension","drawImage","imageConfig","tileConfig","config","flipHorizontal","rotation","message","Renderer","CubeRenderer","order","_VERTEX_POSITION_DATA","_INDEX_DATA","indexData","vertexPositionData","getVertexPositionData","vertexOrder","extractOrder","base","_extractTileConfig","elemSize","vertexPerTile","trim","texCoords","face","floor","ordermap","shift","unshift","pop","elemPerTile","tileVertex","slice","tileTemp","j","splice","coord","_shrinkCoord","faceCoords","val","coords","baseOrder","orderMap","surfaceIdx","tileIdx","TEXTURE_CUBE_MAP_POSITIVE_X","maxCubeMapTextureSize","getMaxCubeMapTextureSize","tile","extractTileFromImage","_triggerError","TEXTURE_CUBE_MAP","updateTexture","inputTextureSize","outputTextureSize","getSourceTileSize","tilePerRow","MAX_CUBE_MAP_TEXTURE_SIZE","imageWidth","coordData","SHRINK_MULTIPLIER","axisMultipliers","axisIndex","axisDir","notSameDir","_vertices","indices","cols","rows","textureSize","c","tileConfigs","_transformCoord","index","TEXTURE_2D","_getPixelSource","size","maxSize","getMaxTextureSize","_initPixelSource","activeTexture","TEXTURE0","pixelStorei","UNPACK_FLIP_Y_WEBGL","newCoord","_flipHorizontalCoord","_rotateCoord","SHRINK_Y","SHRINK_X","rotationAngle","SIZE","shiftCount","moved","rotatedCoord","latitudeBands","longitudeBands","radius","ANGLE_CORRECTION_FOR_CENTER_ALIGN","textureCoordData","latIdx","lngIdx","phi","sinPhi","cosPhi","u","format","_stereoFormat","ctx","leftEyeScaleOffset","rightEyeScaleOffset","uTexScaleOffset","uniform4fv","render","SphereRenderer","_TEXTURE_COORD_DATA","MIN_ASPECT_RATIO_FOR_FULL_PANORAMA","CylinderRenderer","resizeDimension","_b","imageAspectRatio","cylinderMaxRadian","halfCylinderY","rotated","CYLIDER_Y","startAngleForCenterAlign","yIdx","yLength","VR_DISPLAY_PRESENT_CHANGE","DEFAULT_LEFT_BOUNDS","DEFAULT_RIGHT_BOUNDS","EYES","LEFT","RIGHT","_vrDisplay","removeEndCallback","isPresenting","exitPresent","_clear","_frameData","VRFrameData","Boolean","bindFramebuffer","FRAMEBUFFER","submitFrame","display","halfWidth","drawingBufferWidth","drawingBufferHeight","getFrameData","leftMVMatrix","rightMVMatrix","mat4","rotateY","_yawOffset","viewport","callback","getVRDisplays","displays","Promise","reject","Error","capabilities","canPresent","requestPresent","leftEye","rightEye","renderWidth","renderHeight","_setDisplay","layers","getLayers","layer","_leftBounds","leftBounds","_rightBounds","rightBounds","addEndCallback","XR_REFERENCE_SPACE","xrSession","_xrSession","end","_options","frame","getViewerPose","_xrRefSpace","session","baseLayer","renderState","framebuffer","glLayer","views","getViewport","transform","matrix","rotateX","projectionMatrix","_presenting","requiredFeatures","attributes","getContextAttributes","xrCompatible","makeXRCompatible","requestSession","xrLayer","XRWebGLLayer","updateRenderState","requestReferenceSpace","refSpace","_setSession","_xrLayer","args","_callback","_rafId","_context","requestAnimationFrame","_onLoop","before","performance","now","diff","_rafTimer","_onLoopNextTick","cancelAnimationFrame","ImageType","DEVICE_PIXEL_RATIO","BIND_TEXTURE","IMAGE_LOADED","RENDERING_CONTEXT_RESTORE","RENDERER_ERROR","isVideo","container","sphericalConfig","renderingContextAttributes","vr","_vr","animator","_animator","exitVR","_restoreStyle","updateViewportDimensions","_updateViewport","_bindBuffers","_shouldForceDraw","stop","setContext","setCallback","_render","start","time","eyeParams","getEyeParams","beforeRender","eyeIndex","eyeParam","uniform1f","uEye","_draw","afterRender","canRender","minusZDir","mat3","fromMat4","mvInv","invert","pInv","transformMat3","yawOffset","setYawOffset","_renderStereo","_lastQuaternion","_lastYaw","_lastPitch","_lastFieldOfView","perspective","textureCoordBuffer","vertexBuffer","_initCanvas","_setDefaultCanvasStyle","_wrapper","_wrapperOrigStyle","_renderingContextAttributes","_image","_imageConfig","_imageIsReady","_keepUpdate","_onContentLoad","_onContentError","WebGLAnimator","setImage","imageType","yawPitchControl","_yawPitchControl","_isVideo","_setImageType","_contentLoader","ImReady","rej","contentLoader","isReady","_bindTexture","once","errorCount","parentElement","_hasExternalCanvas","detach","hasRenderingContext","removeChild","forceContextLoss","_onWebglcontextlost","_onWebglcontextrestored","isContextLost","viewPortChanged","h","doUpdate","isImageLoaded","exactEquals","updateFieldOfView","fromQuat","identity","_renderer","resolve","_requestPresent","_imageType","_isCubeMap","CubeStripRenderer","_initWebGL","canvasInContainer","querySelector","_createCanvas","className","margin","maxHeight","maxWidth","outline","content","_triggerContentLoad","renderer","vsSource","getVertexShaderSource","fsSource","getFragmentShaderSource","getErrorNameFromWebGLErrorCode","getError","useProgram","vertexPositionAttribute","getAttribLocation","samplerUniform","textureCoordAttribute","clear","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","uniform1i","preventDefault","_initRenderingContext","_initShaderProgram","clearColor","deleteTexture","CULL_FACE","WebGLRenderingContext","getIndexData","getTextureCoordData","initBuffer","ARRAY_BUFFER","ELEMENT_ARRAY_BUFFER","Uint16Array","isEAC","updateShaderData","_initBuffers","getFov","shouldRenderWithQuaternion","getQuaternion","renderWithQuaternion","getYawPitch","renderWithYawPitch","_updateTexture","XRManager","VRManager","_onFirstVRFrame","_setWrapperFullscreen","wrapper","getAttribute","wrapperStyle","zIndex","removeAttribute","PanoImageRenderer","isWebGLAvailable","isStableWebGL","_container","_projectionType","_cubemapConfig","_width","_height","_yaw","_pitch","_fov","_gyroMode","_aspectRatio","_canvasClass","PanoViewer","_isValidTouchDirection","yawPitchConfig","_isReady","_initYawPitchControl","_initRenderer","onDeviceMotionChange","checkGyro","timeout","race","fb","TOUCH_DIRECTION","YAW","PITCH","ALL","_photoSphereRenderer","getContent","warn","_deactivate","keepUpdate","requestPermission","permissionState","enableSensor","enterVR","containerSize","lookAt","verticalAngleOfImage","initialYaw","initialPitch","setYawPitchControl","_bindRendererHandler","_activate","ProjectionType","yawSize","maxFov","atan","minFov","attachTo","_updateYawPitchIfNeeded","startRender","getVideo","pause","stopRender","SPINVIEWER_OPTIONS","imageUrl","rowCount","colCount","autoHeight","colRow","frameIndex","wrapperClass","imageClass","SPINVIEWER_EVENTS","LOAD","IMAGE_ERROR","CHANGE","DEFAULT_WRAPPER_CLASS","DEFAULT_IMAGE_CLASS","_el","_rowCount","_colCount","_totalCount","_autoHeight","_colRow","setFrameIndex","SpriteImage","_getSizeString","imageInContainer","wrapperInContainer","onload","_bg","_createBgDiv","setColRow","bgElement","_autoPlayReservedInfo","play","onerror","overflow","ondragstart","willChange","unitWidth","unitHeight","paddingBottom","toColRow","col","row","_autoPlayTimer","clearInterval","playCount","getFrameIndex","count","frameCount","setInterval","DEFAULT_PAN_SCALE","_scale","_panScale","_frameCount","_sprites","_panInput","curr","getColRow","SpinViewer","withMethods","component","vanillaInstance","proto","getOwnPropertyNames","startsWith","descriptor","getOwnPropertyDescriptor","defineProperty","call","getterDescriptor","withPanoViewerMethods","withSpinViewerMethods","panoViewer","newProps","prevProps","isPropChanged","setVideo","singleUpdateOptions","optionName","updateOption","prevVal","toUpperCase","View360","CFC"],"mappings":"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"}
\No newline at end of file