view360-canex
Version:
360 integrated viewing solution from inside-out view to outside-in view. It provides user-friendly service by rotating 360 degrees through various user interaction such as motion sensor and touch.
9 lines • 86.8 kB
JavaScript
/*
Copyright (c) 2017 NAVER Corp.
name: view360-canex
license: MIT
author: Canex
repository: https://github.com/Can-ExploreInc/egjs-view360
version: 3.4.9
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("@egjs/component"),require("promise-polyfill"),require("@egjs/agent"),require("@egjs/axes"),require("gl-matrix"),require("@egjs/imready")):"function"==typeof define&&define.amd?define(["@egjs/component","promise-polyfill","@egjs/agent","@egjs/axes","gl-matrix","@egjs/imready"],e):((t="undefined"!=typeof globalThis?globalThis:t||self).eg=t.eg||{},t.eg.view360=e(t.eg.Component,t.Promise,t.eg.agent,t.eg.Axes,t.glMatrix,t.ImReady))}(this,function(t,s,a,h,_,r){"use strict";var n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)};function c(t,e){function i(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}var l=function(){return(l=Object.assign||function(t){for(var e,i=1,n=arguments.length;i<n;i++)for(var r in e=arguments[i])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}).apply(this,arguments)};function d(t){var e="function"==typeof Symbol&&Symbol.iterator,i=e&&t[e],n=0;if(i)return i.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function f(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(function(t,e){var i="function"==typeof Symbol&&t[Symbol.iterator];if(!i)return t;var n,r,o=i.call(t),a=[];try{for(;(void 0===e||0<e--)&&!(n=o.next()).done;)a.push(n.value)}catch(t){r={error:t}}finally{try{n&&!n.done&&(i=o.return)&&i.call(o)}finally{if(r)throw r.error}}return a}(arguments[e]));return t}var o="undefined"!=typeof window&&window.Math===Math?window:"undefined"!=typeof self&&self.Math===Math?self:Function("return this")(),u=o.document,e=a(),i=e.os.name,g=e.browser.name,p="ios"===i,m="mac"===i&&"safari"===g;o.Float32Array=void 0!==o.Float32Array?o.Float32Array:o.Array;o.Float32Array,o.getComputedStyle;var v=o.navigator.userAgent,y="ontouchstart"in o,x="ondevicemotion"in o,w=o.DeviceMotionEvent,R=o.devicePixelRatio,T=function(){for(var t=u.documentElement.style,e=["transform","webkitTransform","msTransform","mozTransform"],i=0,n=e.length;i<n;i++)if(e[i]in t)return e[i];return""}(),E=o.CSS&&o.CSS.supports&&o.CSS.supports("will-change","transform"),C=!1,I=function(){var t=window.navigator;t.xr&&(t.xr.isSessionSupported?t.xr.isSessionSupported("immersive-vr").then(function(t){C=t}).catch(function(){}):t.xr.supportsSession&&t.xr.supportsSession("immersive-vr").then(function(t){C=t}).catch(function(){}))};function b(t){return 180*t/Math.PI}var A={isPowerOfTwo:function(t){return t&&0==(t&t-1)}};A.extractPitchFromQuat=function(t){var e,t=(e=t,t=_.vec3.fromValues(0,0,1),_.vec3.transformQuat(t,t,e),t);return-1*Math.atan2(t[1],Math.sqrt(Math.pow(t[0],2)+Math.pow(t[2],2)))},A.hypot=Math.hypot||function(t,e){return Math.sqrt(t*t+e*e)};var P={PITCH_DELTA:1,YAW_DELTA_BY_ROLL:2,YAW_DELTA_BY_YAW:3};function S(t,e){var i=t[0]*e[1]-e[0]*t[1];return-Math.atan2(i,_.vec2.dot(t,e))}P[P.PITCH_DELTA]={targetAxis:[0,1,0],meshPoint:[0,0,1]},P[P.YAW_DELTA_BY_ROLL]={targetAxis:[0,1,0],meshPoint:[1,0,0]},P[P.YAW_DELTA_BY_YAW]={targetAxis:[1,0,0],meshPoint:[0,0,1]},A.yawOffsetBetween=function(t,e){t=_.vec2.fromValues(t[0],t[2]),e=_.vec2.fromValues(e[0],e[2]);return _.vec2.normalize(t,t),_.vec2.normalize(e,e),-S(t,e)},A.toDegree=b,A.getRotationDelta=function(t,e,i){var n=_.vec3.fromValues(P[i].targetAxis[0],P[i].targetAxis[1],P[i].targetAxis[2]),r=P[i].meshPoint,o=_.quat.clone(t),a=_.quat.clone(e);_.quat.normalize(o,o),_.quat.normalize(a,a);var s=_.vec3.fromValues(0,0,1),h=_.vec3.fromValues(0,0,1);_.vec3.transformQuat(s,s,o),_.vec3.transformQuat(h,h,a),_.vec3.transformQuat(n,n,a);var u=0<_.vec3.dot(n,_.vec3.cross(_.vec3.create(),s,h))?1:-1,c=_.vec3.fromValues(r[0],r[1],r[2]),t=i!==P.YAW_DELTA_BY_YAW?_.vec3.fromValues(0,u,0):_.vec3.fromValues(u,0,0);_.vec3.transformQuat(c,c,a),_.vec3.transformQuat(t,t,a),e=c,n=t,c=_.vec3.create(),_.vec3.cross(c,e,n),_.vec3.normalize(c,c),t=c[0],e=c[1],n=c[2],h=_.vec3.fromValues(r[0],r[1],r[2]),_.vec3.transformQuat(h,h,a),s=_.vec3.fromValues(r[0],r[1],r[2]),_.vec3.transformQuat(s,s,o),r=Math.abs(s[0]*t+s[1]*e+s[2]*n),o=_.vec3.create(),_.vec3.subtract(o,s,_.vec3.scale(_.vec3.create(),c,r)),1<(c=(o[0]*h[0]+o[1]*h[1]+o[2]*h[2])/(_.vec3.length(o)*_.vec3.length(h)))&&(c=1);var c=Math.acos(c),o=_.vec3.cross(_.vec3.create(),h,o),r=t*o[0]+e*o[1]+n*o[2],r=i!==P.YAW_DELTA_BY_YAW?0<r?1:-1:r<0?1:-1;return b(c*r*u)},A.angleBetweenVec2=S;var O,D,M=window.MathUtil||{};M.degToRad=Math.PI/180,M.radToDeg=180/Math.PI,M.Vector2=function(t,e){this.x=t||0,this.y=e||0},M.Vector2.prototype={constructor:M.Vector2,set:function(t,e){return this.x=t,this.y=e,this},copy:function(t){return this.x=t.x,this.y=t.y,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}},M.Vector3=function(t,e,i){this.x=t||0,this.y=e||0,this.z=i||0},M.Vector3.prototype={constructor:M.Vector3,set:function(t,e,i){return this.x=t,this.y=e,this.z=i,this},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},normalize:function(){var t=this.length();return 0!==t?(t=1/t,this.multiplyScalar(t)):(this.x=0,this.y=0,this.z=0),this},multiplyScalar:function(t){this.x*=t,this.y*=t,this.z*=t},applyQuaternion:function(t){var e=this.x,i=this.y,n=this.z,r=t.x,o=t.y,a=t.z,s=t.w,h=s*e+o*n-a*i,u=s*i+a*e-r*n,t=s*n+r*i-o*e,n=-r*e-o*i-a*n;return this.x=h*s+n*-r+u*-a-t*-o,this.y=u*s+n*-o+t*-r-h*-a,this.z=t*s+n*-a+h*-o-u*-r,this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z},crossVectors:function(t,e){var i=t.x,n=t.y,r=t.z,o=e.x,t=e.y,e=e.z;return this.x=n*e-r*t,this.y=r*o-i*e,this.z=i*t-n*o,this}},M.Quaternion=function(t,e,i,n){this.x=t||0,this.y=e||0,this.z=i||0,this.w=void 0!==n?n:1},M.Quaternion.prototype={constructor:M.Quaternion,set:function(t,e,i,n){return this.x=t,this.y=e,this.z=i,this.w=n,this},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w,this},setFromEulerXYZ:function(t,e,i){var n=Math.cos(t/2),r=Math.cos(e/2),o=Math.cos(i/2),t=Math.sin(t/2),e=Math.sin(e/2),i=Math.sin(i/2);return this.x=t*r*o+n*e*i,this.y=n*e*o-t*r*i,this.z=n*r*i+t*e*o,this.w=n*r*o-t*e*i,this},setFromEulerYXZ:function(t,e,i){var n=Math.cos(t/2),r=Math.cos(e/2),o=Math.cos(i/2),t=Math.sin(t/2),e=Math.sin(e/2),i=Math.sin(i/2);return this.x=t*r*o+n*e*i,this.y=n*e*o-t*r*i,this.z=n*r*i-t*e*o,this.w=n*r*o+t*e*i,this},setFromAxisAngle:function(t,e){var i=e/2,e=Math.sin(i);return this.x=t.x*e,this.y=t.y*e,this.z=t.z*e,this.w=Math.cos(i),this},multiply:function(t){return this.multiplyQuaternions(this,t)},multiplyQuaternions:function(t,e){var i=t.x,n=t.y,r=t.z,o=t.w,a=e.x,s=e.y,t=e.z,e=e.w;return this.x=i*e+o*a+n*t-r*s,this.y=n*e+o*s+r*a-i*t,this.z=r*e+o*t+i*s-n*a,this.w=o*e-i*a-n*s-r*t,this},inverse:function(){return this.x*=-1,this.y*=-1,this.z*=-1,this.normalize(),this},normalize:function(){var t=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);return 0===t?(this.x=0,this.y=0,this.z=0,this.w=1):(t=1/t,this.x=this.x*t,this.y=this.y*t,this.z=this.z*t,this.w=this.w*t),this},slerp:function(t,e){if(0===e)return this;if(1===e)return this.copy(t);var i=this.x,n=this.y,r=this.z,o=this.w,a=o*t.w+i*t.x+n*t.y+r*t.z;if(a<0?(this.w=-t.w,this.x=-t.x,this.y=-t.y,this.z=-t.z,a=-a):this.copy(t),1<=a)return this.w=o,this.x=i,this.y=n,this.z=r,this;var s=Math.acos(a),t=Math.sqrt(1-a*a);if(Math.abs(t)<.001)return this.w=.5*(o+this.w),this.x=.5*(i+this.x),this.y=.5*(n+this.y),this.z=.5*(r+this.z),this;a=Math.sin((1-e)*s)/t,t=Math.sin(e*s)/t;return this.w=o*a+this.w*t,this.x=i*a+this.x*t,this.y=n*a+this.y*t,this.z=r*a+this.z*t,this},setFromUnitVectors:function(t,e){return void 0===O&&(O=new M.Vector3),(D=t.dot(e)+1)<1e-6?(D=0,Math.abs(t.x)>Math.abs(t.z)?O.set(-t.y,t.x,0):O.set(0,-t.z,t.y)):O.crossVectors(t,e),this.x=O.x,this.y=O.y,this.z=O.z,this.w=D,this.normalize(),this}};var V,F,L,N,U,Q,z,B,G,W=M,X=window.Util||{};function k(t,e,i,n,r){c=t,a=n?n.fieldOfView:null,o=r.depthNear,u=r.depthFar,l=Math.tan(a?a.upDegrees*Q:z),h=Math.tan(a?a.downDegrees*Q:z),f=Math.tan(a?a.leftDegrees*Q:z),d=Math.tan(a?a.rightDegrees*Q:z),s=2/(f+d),a=2/(l+h),c[0]=s,c[1]=0,c[2]=0,c[3]=0,c[4]=0,c[5]=a,c[6]=0,c[7]=0,c[8]=-(f-d)*s*.5,c[9]=(l-h)*a*.5,c[10]=u/(o-u),c[11]=-1,c[12]=0,c[13]=0,c[14]=u*o/(o-u),c[15]=0;var o,a,s,h,u,c,l,d,f,_,g,p,m,v,y,x,w,R,T,E,C,I,b,A,P,S,t=i.orientation||B,r=i.position||G;f=e,d=r,l=(s=t)[0],h=s[1],a=s[2],o=s[3],c=l*(u=l+l),r=l*(i=h+h),s=l*(t=a+a),l=h*i,h*=t,a*=t,u*=o,i*=o,t*=o,f[0]=1-(l+a),f[1]=r+t,f[2]=s-i,f[3]=0,f[4]=r-t,f[5]=1-(c+a),f[6]=h+u,f[7]=0,f[8]=s+i,f[9]=h-u,f[10]=1-(c+l),f[11]=0,f[12]=d[0],f[13]=d[1],f[14]=d[2],f[15]=1,n&&(C=P=e,E=n.offset,A=E[0],b=E[1],I=E[2],C===P?(P[12]=C[0]*A+C[4]*b+C[8]*I+C[12],P[13]=C[1]*A+C[5]*b+C[9]*I+C[13],P[14]=C[2]*A+C[6]*b+C[10]*I+C[14],P[15]=C[3]*A+C[7]*b+C[11]*I+C[15]):(_=C[0],m=C[1],x=C[2],R=C[3],g=C[4],v=C[5],S=C[6],T=C[7],p=C[8],y=C[9],w=C[10],E=C[11],P[0]=_,P[1]=m,P[2]=x,P[3]=R,P[4]=g,P[5]=v,P[6]=S,P[7]=T,P[8]=p,P[9]=y,P[10]=w,P[11]=E,P[12]=_*A+g*b+p*I+C[12],P[13]=m*A+v*b+y*I+C[13],P[14]=x*A+S*b+w*I+C[14],P[15]=R*A+T*b+E*I+C[15])),a=(t=r=e)[0],s=t[1],i=t[2],h=t[3],u=t[4],c=t[5],l=t[6],d=t[7],f=t[8],n=t[9],_=t[10],g=t[11],p=t[12],m=t[13],v=t[14],y=t[15],(t=(x=a*c-s*u)*(S=_*y-g*v)-(w=a*l-i*u)*(P=n*y-g*m)+(R=a*d-h*u)*(A=n*v-_*m)+(T=s*l-i*c)*(b=f*y-g*p)-(E=s*d-h*c)*(I=f*v-_*p)+(C=i*d-h*l)*(e=f*m-n*p))&&(t=1/t,r[0]=(c*S-l*P+d*A)*t,r[1]=(i*P-s*S-h*A)*t,r[2]=(m*C-v*E+y*T)*t,r[3]=(_*E-n*C-g*T)*t,r[4]=(l*b-u*S-d*I)*t,r[5]=(a*S-i*b+h*I)*t,r[6]=(v*R-p*C-y*w)*t,r[7]=(f*C-_*R+g*w)*t,r[8]=(u*P-c*b+d*e)*t,r[9]=(s*b-a*P-h*e)*t,r[10]=(p*E-m*R+y*x)*t,r[11]=(n*R-f*E-g*x)*t,r[12]=(c*I-u*A-l*e)*t,r[13]=(a*A-s*I+i*e)*t,r[14]=(m*w-p*T-v*x)*t,r[15]=(f*T-n*w+_*x)*t)}X.MIN_TIMESTEP=.001,X.MAX_TIMESTEP=1,X.base64=function(t,e){return"data:"+t+";base64,"+e},X.clamp=function(t,e,i){return Math.min(Math.max(e,t),i)},X.lerp=function(t,e,i){return t+(e-t)*i},X.isIOS=(V=/iPad|iPhone|iPod/.test(navigator.platform),function(){return V}),X.isWebViewAndroid=(F=-1!==navigator.userAgent.indexOf("Version")&&-1!==navigator.userAgent.indexOf("Android")&&-1!==navigator.userAgent.indexOf("Chrome"),function(){return F}),X.isSafari=(L=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),function(){return L}),X.isFirefoxAndroid=(N=-1!==navigator.userAgent.indexOf("Firefox")&&-1!==navigator.userAgent.indexOf("Android"),function(){return N}),X.isR7=(U=-1!==navigator.userAgent.indexOf("R7 Build"),function(){return U}),X.isLandscapeMode=function(){var t=90==window.orientation||-90==window.orientation;return X.isR7()?!t:t},X.isTimestampDeltaValid=function(t){return!isNaN(t)&&(!(t<=X.MIN_TIMESTEP)&&!(t>X.MAX_TIMESTEP))},X.getScreenWidth=function(){return Math.max(window.screen.width,window.screen.height)*window.devicePixelRatio},X.getScreenHeight=function(){return Math.min(window.screen.width,window.screen.height)*window.devicePixelRatio},X.requestFullscreen=function(t){if(X.isWebViewAndroid())return!1;if(t.requestFullscreen)t.requestFullscreen();else if(t.webkitRequestFullscreen)t.webkitRequestFullscreen();else if(t.mozRequestFullScreen)t.mozRequestFullScreen();else{if(!t.msRequestFullscreen)return!1;t.msRequestFullscreen()}return!0},X.exitFullscreen=function(){if(document.exitFullscreen)document.exitFullscreen();else if(document.webkitExitFullscreen)document.webkitExitFullscreen();else if(document.mozCancelFullScreen)document.mozCancelFullScreen();else{if(!document.msExitFullscreen)return!1;document.msExitFullscreen()}return!0},X.getFullscreenElement=function(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement},X.linkProgram=function(t,e,i,n){var r=t.createShader(t.VERTEX_SHADER);t.shaderSource(r,e),t.compileShader(r);e=t.createShader(t.FRAGMENT_SHADER);t.shaderSource(e,i),t.compileShader(e);var o,a=t.createProgram();for(o in t.attachShader(a,r),t.attachShader(a,e),n)t.bindAttribLocation(a,n[o],o);return t.linkProgram(a),t.deleteShader(r),t.deleteShader(e),a},X.getProgramUniforms=function(t,e){for(var i={},n=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),r="",o=0;o<n;o++)i[r=t.getActiveUniform(e,o).name.replace("[0]","")]=t.getUniformLocation(e,r);return i},X.orthoMatrix=function(t,e,i,n,r,o,a){var s=1/(e-i),h=1/(n-r),u=1/(o-a);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*h,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*u,t[11]=0,t[12]=(e+i)*s,t[13]=(r+n)*h,t[14]=(a+o)*u,t[15]=1,t},X.copyArray=function(t,e){for(var i=0,n=t.length;i<n;i++)e[i]=t[i]},X.isMobile=function(){var t,e=!1;return t=navigator.userAgent||navigator.vendor||window.opera,(/(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(t)||/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(t.substr(0,4)))&&(e=!0),e},X.extend=function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t},X.safariCssSizeWorkaround=function(t){var e,i;X.isIOS()&&(e=t.style.width,i=t.style.height,t.style.width=parseInt(e)+1+"px",t.style.height=parseInt(i)+"px",setTimeout(function(){t.style.width=e,t.style.height=i},100)),window.Util=X,window.canvas=t},X.isDebug=function(){return X.getQueryParameter("debug")},X.getQueryParameter=function(t){t=t.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]"),t=new RegExp("[\\?&]"+t+"=([^&#]*)").exec(location.search);return null===t?"":decodeURIComponent(t[1].replace(/\+/g," "))},X.frameDataFromPose=(Q=Math.PI/180,z=.25*Math.PI,B=new Float32Array([0,0,0,1]),G=new Float32Array([0,0,0]),function(t,e,i){return!(!t||!e)&&(t.pose=e,t.timestamp=e.timestamp,k(t.leftProjectionMatrix,t.leftViewMatrix,e,i.getEyeParameters("left"),i),k(t.rightProjectionMatrix,t.rightViewMatrix,e,i.getEyeParameters("right"),i),!0)}),X.isInsideCrossDomainIFrame=function(){var t=window.self!==window.top,e=X.getDomainFromUrl(document.referrer),i=X.getDomainFromUrl(window.location.href);return t&&e!==i},X.getDomainFromUrl=function(t){t=-1<t.indexOf("://")?t.split("/")[2]:t.split("/")[0];return t=t.split(":")[0]};var Y=X;function q(t){this.predictionTimeS=t,this.previousQ=new W.Quaternion,this.previousTimestampS=null,this.deltaQ=new W.Quaternion,this.outQ=new W.Quaternion}q.prototype.getPrediction=function(t,e,i){if(!this.previousTimestampS)return this.previousQ.copy(t),this.previousTimestampS=i,t;var n=new W.Vector3;n.copy(e),n.normalize();e=e.length();if(e<20*W.degToRad)return Y.isDebug()&&console.log("Moving slowly, at %s deg/s: no prediction",(W.radToDeg*e).toFixed(1)),this.outQ.copy(t),this.previousQ.copy(t),this.outQ;this.previousTimestampS;e*=this.predictionTimeS;return this.deltaQ.setFromAxisAngle(n,e),this.outQ.copy(this.previousQ),this.outQ.multiply(this.deltaQ),this.previousQ.copy(t),this.previousTimestampS=i,this.outQ};var j=q,H=-1,e=null,i=null,g=/Chrome\/([0-9]+)\.(?:[0-9]*)\.([0-9]*)\.([0-9]*)/i.exec(v);g&&(H=parseInt(g[1],10),e=g[2],i=g[3]);var K=H,Z=65===H&&"3325"===e&&parseInt(i,10)<148,J=/Android/i.test(v),$=[.2,.2],tt={NONE:"none",YAWPITCH:"yawPitch",VR:"VR"},et=function(e){function t(){var t=e.call(this)||this;return t._onDeviceMotion=t._onDeviceMotion.bind(t),t._onDeviceOrientation=t._onDeviceOrientation.bind(t),t._onChromeWithoutDeviceMotion=t._onChromeWithoutDeviceMotion.bind(t),t.isWithoutDeviceMotion=Z,t.isAndroid=J,t.stillGyroVec=_.vec3.create(),t.rawGyroVec=_.vec3.create(),t.adjustedGyroVec=_.vec3.create(),t._timer=-1,t.lastDevicemotionTimestamp=0,t._isEnabled=!1,t.enable(),t}c(t,e);var i=t.prototype;return i.enable=function(){this.isAndroid&&o.addEventListener("deviceorientation",this._onDeviceOrientation),this.isWithoutDeviceMotion?o.addEventListener("deviceorientation",this._onChromeWithoutDeviceMotion):o.addEventListener("devicemotion",this._onDeviceMotion),this._isEnabled=!0},i.disable=function(){o.removeEventListener("deviceorientation",this._onDeviceOrientation),o.removeEventListener("deviceorientation",this._onChromeWithoutDeviceMotion),o.removeEventListener("devicemotion",this._onDeviceMotion),this._isEnabled=!1},i._onChromeWithoutDeviceMotion=function(t){var e=t.alpha,i=t.beta,t=t.gamma;null!==e&&(e=(e||0)*Math.PI/180,i=(i||0)*Math.PI/180,t=(t||0)*Math.PI/180,this.trigger("devicemotion",{inputEvent:{deviceorientation:{alpha:e,beta:i,gamma:-t}}}))},i._onDeviceOrientation=function(){var t=this;this._timer&&clearTimeout(this._timer),this._timer=o.setTimeout(function(){(new Date).getTime()-t.lastDevicemotionTimestamp<200&&_.vec3.copy(t.stillGyroVec,t.rawGyroVec)},200)},i._onDeviceMotion=function(t){var e=!(null==t.rotationRate.alpha),i=!(null==t.accelerationIncludingGravity.x);0!==t.interval&&e&&i&&((i=l({},t)).interval=t.interval,i.timeStamp=t.timeStamp,i.type=t.type,i.rotationRate={alpha:t.rotationRate.alpha,beta:t.rotationRate.beta,gamma:t.rotationRate.gamma},i.accelerationIncludingGravity={x:t.accelerationIncludingGravity.x,y:t.accelerationIncludingGravity.y,z:t.accelerationIncludingGravity.z},i.acceleration={x:t.acceleration.x,y:t.acceleration.y,z:t.acceleration.z},this.isAndroid&&(_.vec3.set(this.rawGyroVec,t.rotationRate.alpha||0,t.rotationRate.beta||0,t.rotationRate.gamma||0),_.vec3.subtract(this.adjustedGyroVec,this.rawGyroVec,this.stillGyroVec),this.lastDevicemotionTimestamp=(new Date).getTime(),i.adjustedRotationRate={alpha:this.adjustedGyroVec[0],beta:this.adjustedGyroVec[1],gamma:this.adjustedGyroVec[2]}),this.trigger("devicemotion",{inputEvent:i}))},t}(t);function it(t,e){this.set(t,e)}v=it.prototype;v.set=function(t,e){this.sample=t,this.timestampS=e},v.copy=function(t){this.set(t.sample,t.timestampS)};var nt=it;function rt(t){this.kFilter=t,this.currentAccelMeasurement=new nt,this.currentGyroMeasurement=new nt,this.previousGyroMeasurement=new nt,Y.isIOS()?this.filterQ=new W.Quaternion(-1,0,0,1):this.filterQ=new W.Quaternion(1,0,0,1),this.previousFilterQ=new W.Quaternion,this.previousFilterQ.copy(this.filterQ),this.accelQ=new W.Quaternion,this.isOrientationInitialized=!1,this.estimatedGravity=new W.Vector3,this.measuredGravity=new W.Vector3,this.gyroIntegralQ=new W.Quaternion}v=rt.prototype;v.addAccelMeasurement=function(t,e){this.currentAccelMeasurement.set(t,e)},v.addGyroMeasurement=function(t,e){this.currentGyroMeasurement.set(t,e);e-=this.previousGyroMeasurement.timestampS;Y.isTimestampDeltaValid(e)&&this.run_(),this.previousGyroMeasurement.copy(this.currentGyroMeasurement)},v.run_=function(){if(!this.isOrientationInitialized)return this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample),this.previousFilterQ.copy(this.accelQ),void(this.isOrientationInitialized=!0);var t=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS,e=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,t);this.gyroIntegralQ.multiply(e),this.filterQ.copy(this.previousFilterQ),this.filterQ.multiply(e);t=new W.Quaternion;t.copy(this.filterQ),t.inverse(),this.estimatedGravity.set(0,0,-1),this.estimatedGravity.applyQuaternion(t),this.estimatedGravity.normalize(),this.measuredGravity.copy(this.currentAccelMeasurement.sample),this.measuredGravity.normalize();e=new W.Quaternion;e.setFromUnitVectors(this.estimatedGravity,this.measuredGravity),e.inverse(),Y.isDebug()&&console.log("Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)",W.radToDeg*Y.getQuaternionAngle(e),this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1));t=new W.Quaternion;t.copy(this.filterQ),t.multiply(e),this.filterQ.slerp(t,1-this.kFilter),this.previousFilterQ.copy(this.filterQ)},v.getOrientation=function(){return this.filterQ},v.accelToQuaternion_=function(t){var e=new W.Vector3;e.copy(t),e.normalize();t=new W.Quaternion;return t.setFromUnitVectors(new W.Vector3(0,0,-1),e),t.inverse(),t},v.gyroToQuaternionDelta_=function(t,e){var i=new W.Quaternion,n=new W.Vector3;return n.copy(t),n.normalize(),i.setFromAxisAngle(n,t.length()*e),i};var ot=rt;ot.prototype.run_=function(){if(!this.isOrientationInitialized)return this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample),this.previousFilterQ.copy(this.accelQ),void(this.isOrientationInitialized=!0);var t=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS,e=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,t);this.gyroIntegralQ.multiply(e),this.filterQ.copy(this.previousFilterQ),this.filterQ.multiply(e);t=new W.Quaternion;t.copy(this.filterQ),t.inverse(),this.estimatedGravity.set(0,0,-1),this.estimatedGravity.applyQuaternion(t),this.estimatedGravity.normalize(),this.measuredGravity.copy(this.currentAccelMeasurement.sample),this.measuredGravity.normalize();e=new W.Quaternion;e.setFromUnitVectors(this.estimatedGravity,this.measuredGravity),e.inverse();t=new W.Quaternion;t.copy(this.filterQ),t.multiply(e),this.filterQ.slerp(t,1-this.kFilter),this.previousFilterQ.copy(this.filterQ),this.isFilterQuaternionInitialized||(this.isFilterQuaternionInitialized=!0)},ot.prototype.getOrientation=function(){return this.isFilterQuaternionInitialized?this.filterQ:null};var at=function(e){function t(){var t=e.call(this)||this;return t.deviceMotion=new et,t.accelerometer=new W.Vector3,t.gyroscope=new W.Vector3,t._onDeviceMotionChange=t._onDeviceMotionChange.bind(t),t._onScreenOrientationChange=t._onScreenOrientationChange.bind(t),t.filter=new ot(.98),t.posePredictor=new j(.04),t.filterToWorldQ=new W.Quaternion,t.isFirefoxAndroid=Y.isFirefoxAndroid(),t.isIOS=p||m,t.isChromeUsingDegrees=66<=K,t._isEnabled=!1,t.isIOS?t.filterToWorldQ.setFromAxisAngle(new W.Vector3(1,0,0),Math.PI/2):t.filterToWorldQ.setFromAxisAngle(new W.Vector3(1,0,0),-Math.PI/2),t.inverseWorldToScreenQ=new W.Quaternion,t.worldToScreenQ=new W.Quaternion,t.originalPoseAdjustQ=new W.Quaternion,t.originalPoseAdjustQ.setFromAxisAngle(new W.Vector3(0,0,1),-o.orientation*Math.PI/180),t._setScreenTransform(),Y.isLandscapeMode()&&t.filterToWorldQ.multiply(t.inverseWorldToScreenQ),t.resetQ=new W.Quaternion,t.deviceMotion.on("devicemotion",t._onDeviceMotionChange),t.enable(),t}c(t,e);var i=t.prototype;return i.enable=function(){this.isEnabled()||(this.deviceMotion.enable(),this._isEnabled=!0,o.addEventListener("orientationchange",this._onScreenOrientationChange))},i.disable=function(){this.isEnabled()&&(this.deviceMotion.disable(),this._isEnabled=!1,o.removeEventListener("orientationchange",this._onScreenOrientationChange))},i.isEnabled=function(){return this._isEnabled},i.destroy=function(){this.disable(),this.deviceMotion=null},i.getOrientation=function(){var t,e=this;if(this.deviceMotion.isWithoutDeviceMotion&&this._deviceOrientationQ){this.deviceOrientationFixQ=this.deviceOrientationFixQ||(new W.Quaternion).setFromAxisAngle(new W.Vector3(0,1,0),-e._alpha),t=this._deviceOrientationQ,(n=new W.Quaternion).copy(t),n.multiply(this.filterToWorldQ),n.multiply(this.resetQ),n.multiply(this.worldToScreenQ),n.multiplyQuaternions(this.deviceOrientationFixQ,n);var i=_.quat.fromValues(n.x,n.y,n.z,n.w);return _.quat.normalize(i,i)}if(!(t=this.filter.getOrientation()))return null;var n=this._convertFusionToPredicted(t),i=_.quat.fromValues(n.x,n.y,n.z,n.w);return _.quat.normalize(i,i)},i._triggerChange=function(){var t=this.getOrientation();t&&(this._prevOrientation?_.quat.equals(this._prevOrientation,t)||this.trigger("change",{quaternion:t}):this._prevOrientation=t)},i._convertFusionToPredicted=function(t){this.predictedQ=this.posePredictor.getPrediction(t,this.gyroscope,this.previousTimestampS);t=new W.Quaternion;return t.copy(this.filterToWorldQ),t.multiply(this.resetQ),t.multiply(this.predictedQ),t.multiply(this.worldToScreenQ),t},i._onDeviceMotionChange=function(t){var e=t.inputEvent,i=e.deviceorientation,n=e.accelerationIncludingGravity,t=e.adjustedRotationRate||e.rotationRate,e=e.timeStamp/1e3;i?(this._alpha||(this._alpha=i.alpha),this._deviceOrientationQ=this._deviceOrientationQ||new W.Quaternion,this._deviceOrientationQ.setFromEulerYXZ(i.beta,i.alpha,i.gamma),this._triggerChange()):(this.isFirefoxAndroid&&(e/=1e3),this.accelerometer.set(-n.x,-n.y,-n.z),this.gyroscope.set(t.alpha,t.beta,t.gamma),(this.isIOS||this.isFirefoxAndroid||this.isChromeUsingDegrees)&&this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addAccelMeasurement(this.accelerometer,e),this.filter.addGyroMeasurement(this.gyroscope,e),this._triggerChange(),this.previousTimestampS=e)},i._onScreenOrientationChange=function(){this._setScreenTransform()},i._setScreenTransform=function(){this.worldToScreenQ.set(0,0,0,1);var t=o.orientation;switch(t){case 0:break;case 90:case-90:case 180:this.worldToScreenQ.setFromAxisAngle(new W.Vector3(0,0,1),t/-180*Math.PI)}this.inverseWorldToScreenQ.copy(this.worldToScreenQ),this.inverseWorldToScreenQ.inverse()},t}(t);for(var st=function(n){function t(t,e){void 0===e&&(e={});var i=n.call(this)||this;return i.element=t,i._prevQuaternion=null,i._quaternion=null,i.fusionPoseSensor=null,i.options=l({scale:1,threshold:0},e),i._onPoseChange=i._onPoseChange.bind(i),i}c(t,n);var e=t.prototype;return e.mapAxes=function(t){this.axes=t},e.connect=function(t){return this.observer||(this.observer=t,this.fusionPoseSensor=new at,this.fusionPoseSensor.enable(),this._attachEvent()),this},e.disconnect=function(){return this.observer&&(this._dettachEvent(),this.fusionPoseSensor.disable(),this.fusionPoseSensor.destroy(),this.fusionPoseSensor=null,this.observer=null),this},e.destroy=function(){this.disconnect(),this.element=null,this.options=null,this.axes=null,this._prevQuaternion=null,this._quaternion=null},e._onPoseChange=function(t){if(!this._prevQuaternion)return this._prevQuaternion=_.quat.clone(t.quaternion),void(this._quaternion=_.quat.clone(t.quaternion));var n,e,i;_.quat.copy(this._prevQuaternion,this._quaternion),_.quat.copy(this._quaternion,t.quaternion),this.observer.change(this,t,(n=this.axes,[(e=this._prevQuaternion,i=this._quaternion,t=A.getRotationDelta(e,i,P.YAW_DELTA_BY_YAW),A.getRotationDelta(e,i,P.YAW_DELTA_BY_ROLL)*Math.sin(A.extractPitchFromQuat(i))+t),(i=this._prevQuaternion,t=this._quaternion,A.getRotationDelta(i,t,P.PITCH_DELTA))].reduce(function(t,e,i){return n[i]&&(t[n[i]]=e),t},{})))},e._attachEvent=function(){this.fusionPoseSensor.on("change",this._onPoseChange)},e._dettachEvent=function(){this.fusionPoseSensor.off("change",this._onPoseChange)},t}(t),ht=null,ut=0,ct=function(){function t(){if(ut++,ht)return ht;(ht=this)._onDeviceOrientation=this._onDeviceOrientation.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._spinR=0,this._screenOrientationAngle=0,o.addEventListener("deviceorientation",this._onDeviceOrientation),o.addEventListener("orientationchange",this._onOrientationChange)}var e=t.prototype;return e.getRadian=function(){return this._spinR+_.glMatrix.toRadian(this._screenOrientationAngle)},e.unref=function(){0<--ut||(o.removeEventListener("deviceorientation",this._onDeviceOrientation),o.removeEventListener("orientationchange",this._onOrientationChange),this._spinR=0,this._screenOrientationAngle=0,ht=null,ut=0)},e._onDeviceOrientation=function(t){var e;null!==t.beta&&null!==t.gamma&&(e=_.glMatrix.toRadian(t.beta),t=_.glMatrix.toRadian(t.gamma),this._spinR=Math.atan2(Math.cos(e)*Math.sin(t),Math.sin(e)))},e._onOrientationChange=function(t){o.screen&&o.screen.orientation&&void 0!==o.screen.orientation.angle?this._screenOrientationAngle=screen.orientation.angle:void 0!==o.orientation&&(this._screenOrientationAngle=0<=o.orientation?o.orientation:360+o.orientation)},t}(),lt=function(r){function t(t,e){void 0===e&&(e={});t=r.call(this,t,e)||this;return t._useRotation=!1,t._screenRotationAngle=null,t.setUseRotation(!(!e||!e.useRotation)),t._userDirection=h.DIRECTION_ALL,t}c(t,r);var e=t.prototype;return e.setUseRotation=function(t){this._useRotation=t,this._screenRotationAngle&&(this._screenRotationAngle.unref(),this._screenRotationAngle=null),this._useRotation&&(this._screenRotationAngle=new ct)},e.connect=function(t){return this._userDirection=this._direction,this._useRotation&&this._direction&h.DIRECTION_ALL&&(this._direction=h.DIRECTION_HORIZONTAL),r.prototype.connect.call(this,t)},e.destroy=function(){this._useRotation&&this._screenRotationAngle&&this._screenRotationAngle.unref(),r.prototype.destroy.call(this)},e.getOffset=function(t,e){if(!1===this._useRotation)return r.prototype.getOffset.call(this,t,e);var i=r.prototype.getOffset.call(this,t,[!0,!0]),n=[0,0],e=this._screenRotationAngle.getRadian(),t=Math.cos(e),e=Math.sin(e);return n[0]=i[0]*t-i[1]*e,n[1]=i[1]*t+i[0]*e,this._userDirection&h.DIRECTION_HORIZONTAL?this._userDirection&h.DIRECTION_VERTICAL||(n[1]=0):n[0]=0,n},t}(h.PanInput),dt=_.vec3.fromValues(0,1,0),ft=function(t){function e(){var e=t.call(this)||this;return e._fusionPoseSensor=new at,e._quaternion=_.quat.create(),e._fusionPoseSensor.enable(),e._fusionPoseSensor.on("change",function(t){e._quaternion=t.quaternion,e.trigger("change",{isTrusted:!0})}),e}c(e,t);var i=e.prototype;return i.getCombinedQuaternion=function(t){var e=_.quat.setAxisAngle(_.quat.create(),dt,_.glMatrix.toRadian(-t)),t=_.quat.conjugate(_.quat.create(),this._quaternion);return _.quat.multiply(_.quat.create(),t,e)},i.destroy=function(){this.off(),this._fusionPoseSensor&&(this._fusionPoseSensor.off(),this._fusionPoseSensor.destroy(),this._fusionPoseSensor=null)},e}(t),_t="3.4.9",gt=[-180,180],pt=[-90,90],mt=[-180,180],vt=function(i){function t(t){var e=i.call(this)||this,t=l({element:null,yaw:0,pitch:0,fov:65,showPolePoint:!1,useZoom:!0,useKeyboard:!0,gyroMode:tt.YAWPITCH,touchDirection:6,yawRange:gt,pitchRange:pt,fovRange:[30,110],aspectRatio:1},t);return e._element=t.element,e._initialFov=t.fov,e._enabled=!1,e._isAnimating=!1,e._deviceQuaternion=null,e._initAxes(t),e.option(t),e}c(t,i);var e=t.prototype;return e.updatePanScale=function(t){void 0===t&&(t={});var e=this.axes.get().fov,t=t.height||parseInt(window.getComputedStyle(this._element).height,10),t=$[0]*e/this._initialFov*320/t;return this.axesPanInput.options.scale=[t,t],this.axes.options.deceleration=.0014*e/110,this},e.option=function(t,e){if(!t)return this._getOptions();if(t&&"string"==typeof t&&void 0===e)return this._getOptions(t);var i={},n=[];return"string"==typeof t?(n.push(t),i[t]=e):(t=t,n=Object.keys(t),i=l({},t)),this._setOptions(this._getValidatedOptions(i)),this._applyOptions(n),this},e.enable=function(){return this._enabled||(this._enabled=!0,this._applyOptions(Object.keys(this.options)),this.updatePanScale()),this},e.disable=function(t){return void 0===t&&(t=!1),this._enabled&&(t||this._resetOrientation(),this.axes.disconnect(),this._enabled=!1),this},e.lookAt=function(t,e){var i=t.yaw,n=t.pitch,r=t.fov,t=this.axes.get(),i=void 0===i?0:i-t.yaw,n=void 0===n?0:n-t.pitch,t=void 0===r?0:r-t.fov;this.axes.options.maximumDuration=1/0,this.axes.setBy({yaw:i,pitch:n,fov:t},e)},e.getYawPitch=function(){var t=this.axes.get();return{yaw:t.yaw,pitch:t.pitch}},e.getFov=function(){return this.axes.get().fov},e.getQuaternion=function(){var t=this.axes.get();return this._deviceQuaternion.getCombinedQuaternion(t.yaw)},e.shouldRenderWithQuaternion=function(){return this.options.gyroMode===tt.VR},e.destroy=function(){this.axes&&this.axes.destroy(),this.axesPanInput&&this.axesPanInput.destroy(),this.axesWheelInput&&this.axesWheelInput.destroy(),this.axesTiltMotionInput&&this.axesTiltMotionInput.destroy(),this.axesPinchInput&&this.axesPinchInput.destroy(),this.axesMoveKeyInput&&this.axesMoveKeyInput.destroy(),this._deviceQuaternion&&this._deviceQuaternion.destroy()},e._initAxes=function(t){var e=this,i=this._updateYawRange(t.yawRange,t.fov,t.aspectRatio),n=this._updatePitchRange(t.pitchRange,t.fov,t.showPolePoint),r=t.gyroMode===tt.VR;this.axesPanInput=new lt(this._element,{useRotation:r}),this.axesWheelInput=new h.WheelInput(this._element,{scale:-4}),this.axesTiltMotionInput=null,this.axesPinchInput=y?new h.PinchInput(this._element,{scale:-1}):null,this.axesMoveKeyInput=new h.MoveKeyInput(this._element,{scale:[-6,6]}),this.axes=new h({yaw:{range:i,circular:this._isCircular(i),bounce:[0,0]},pitch:{range:n,circular:this._isCircular(n),bounce:[0,0]},fov:{range:t.fovRange,circular:[!1,!1],bounce:[0,0]}},{deceleration:.0014,maximumDuration:1e3},{yaw:t.yaw,pitch:t.pitch,fov:t.fov}).on({hold:function(t){e.axes.options.maximumDuration=1e3,e.trigger("hold",{isTrusted:t.isTrusted})},change:function(t){0!==t.delta.fov&&(e._updateControlScale(t),e.updatePanScale()),e._triggerChange(t)},release:function(t){e._triggerChange(t)},animationEnd:function(t){e.trigger("animationEnd",{isTrusted:t.isTrusted})}})},e._getValidatedOptions=function(t){return t.yawRange&&(t.yawRange=this._getValidYawRange(t.yawRange,t.fov,t.aspectRatio)),t.pitchRange&&(t.pitchRange=this._getValidPitchRange(t.pitchRange,t.fov)),t},e._getOptions=function(t){var e;return"string"==typeof t?e=this.options[t]:0===arguments.length&&(e=this.options),e},e._setOptions=function(t){for(var e in t)this.options[e]=t[e]},e._applyOptions=function(t){var e,i,n,r=this.options,o=this.axes,a=r.gyroMode===tt.VR,s=r.gyroMode===tt.YAWPITCH,h=a?2&r.touchDirection:r.touchDirection;t.some(function(t){return"showPolePoint"===t||"fov"===t||"aspectRatio"===t||"yawRange"===t||"pitchRange"===t})&&(0<=t.indexOf("fov")&&(o.setTo({fov:r.fov}),this.updatePanScale()),this._updateControlScale()),t.some(function(t){return"fovRange"===t})&&(e=r.fovRange,i=o.get().fov,n=o.get().fov,_.vec2.copy(o.axis.fov.range,e),n<e[0]?n=e[0]:i>e[1]&&(n=e[1]),i!==n&&(o.setTo({fov:n},0),this._updateControlScale(),this.updatePanScale())),t.some(function(t){return"gyroMode"===t})&&x&&(this.axesTiltMotionInput&&(this.axes.disconnect(this.axesTiltMotionInput),this.axesTiltMotionInput.destroy(),this.axesTiltMotionInput=null),this._deviceQuaternion&&(this._deviceQuaternion.destroy(),this._deviceQuaternion=null),a?this._initDeviceQuaternion():s&&(this.axesTiltMotionInput=new st(this._element),this.axes.connect(["yaw","pitch"],this.axesTiltMotionInput)),this.axesPanInput.setUseRotation(a)),t.some(function(t){return"useKeyboard"===t})&&(r.useKeyboard?o.connect(["yaw","pitch"],this.axesMoveKeyInput):o.disconnect(this.axesMoveKeyInput)),t.some(function(t){return"useZoom"===t})&&(a=r.useZoom,o.disconnect(this.axesWheelInput),a&&o.connect(["fov"],this.axesWheelInput)),this._togglePinchInputByOption(r.touchDirection,r.useZoom),t.some(function(t){return"touchDirection"===t})&&this._enabled&&this._enableTouch(h)},e._togglePinchInputByOption=function(t,e){this.axesPinchInput&&(this.axes.disconnect(this.axesPinchInput),e&&6===t&&-1===this.axes._inputs.indexOf(this.axesPinchInput)&&this.axes.connect(["fov"],this.axesPinchInput))},e._enableTouch=function(t){this.axesPanInput&&this.axes.disconnect(this.axesPanInput);var e=2&t?"yaw":null,t=4&t?"pitch":null;this.axes.connect([e,t],this.axesPanInput)},e._initDeviceQuaternion=function(){var e=this;this._deviceQuaternion=new ft,this._deviceQuaternion.on("change",function(t){e._triggerChange(t)})},e._getValidYawRange=function(t,e,i){i=this._adjustAspectRatio(i||this.options.aspectRatio||1),i=(e||this.axes.get().fov)*i;return t[1]-t[0]>=i?t:this.options.yawRange||gt},e._getValidPitchRange=function(t,e){e=e||this.axes.get().fov;return t[1]-t[0]>=e?t:this.options.pitchRange||pt},e._isCircular=function(t){return t[1]-t[0]<360?[!1,!1]:[!0,!0]},e._updateControlScale=function(t){var e=this.options,i=this.axes.get().fov,n=this._updatePitchRange(e.pitchRange,i,e.showPolePoint),r=this._updateYawRange(e.yawRange,i,e.aspectRatio),i=this.axes.get(),e=i.yaw,i=i.pitch;return _.vec2.copy(this.axes.axis.yaw.range,r),_.vec2.copy(this.axes.axis.pitch.range,n),this.axes.axis.yaw.circular=this._isCircular(r),this.axes.axis.pitch.circular=this._isCircular(n),e<r[0]?e=r[0]:e>r[1]&&(e=r[1]),i<n[0]?i=n[0]:i>n[1]&&(i=n[1]),t&&t.set({yaw:e,pitch:i}),this.axes.setTo({yaw:e,pitch:i},0),this},e._updatePitchRange=function(t,e,i){if(this.options.gyroMode===tt.VR)return mt;var n=t[1]-t[0],e=e/2;return!i||n<180?[t[0]+e,t[1]-e]:t.concat()},e._updateYawRange=function(t,e,i){if(this.options.gyroMode===tt.VR)return gt;if(360<=t[1]-t[0])return t.concat();e=A.toDegree(Math.atan2(i,1/Math.tan(_.glMatrix.toRadian(e/2))));return[t[0]+e,t[1]-e]},e._triggerChange=function(t){var e=this.axes.get(),i=this.options,t={targetElement:i.element,isTrusted:t.isTrusted,yaw:e.yaw,pitch:e.pitch,fov:e.fov,quaternion:null};i.gyroMode===tt.VR&&this._deviceQuaternion&&(t.quaternion=this._deviceQuaternion.getCombinedQuaternion(e.yaw)),this.trigger("change",t)},e._adjustAspectRatio=function(t){for(var e=[.52,.54,.563,.57,.584,.59,.609,.67,.702,.72,.76,.78,.82,.92,.97,1,1.07,1.14,1.19,1.25,1.32,1.38,1.4,1.43,1.53,1.62,1.76,1.77,1.86,1.96,2.26,2.3,2.6,3,5,6],i=[.51,.54,.606,.56,.628,.63,.647,.71,.736,.757,.78,.77,.8,.89,.975,1,1.07,1.1,1.15,1.18,1.22,1.27,1.3,1.33,1.39,1.45,1.54,1.55,1.58,1.62,1.72,1.82,1.92,2,2.24,2.3],n=-1,r=0;r<e.length-1;r++)if(e[r]<=t&&t<=e[r+1]){n=r;break}if(-1===n)return t<e[0]?i[0]:i[i[0].length-1];var o=e[n],a=e[n+1],s=i[n],i=i[n+1];return this._lerp(s,i,(t-o)/(a-o))},e._lerp=function(t,e,i){return t+i*(e-t)},e._resetOrientation=function(){var t=this.options;return this.axes.setTo({yaw:t.yaw,pitch:t.pitch,fov:t.fov},0),this},t.VERSION=_t,t.CONTROL_MODE_VR=1,t.CONTROL_MODE_YAWPITCH=2,t.TOUCH_DIRECTION_ALL=6,t.TOUCH_DIRECTION_YAW=2,t.TOUCH_DIRECTION_PITCH=4,t.TOUCH_DIRECTION_NONE=1,t}(t),yt={0:"NO_ERROR",1280:"INVALID_ENUM",1281:"INVALID_VALUE",1282:"INVALID_OPERATION",1285:"OUT_OF_MEMORY",1286:"INVALID_FRAMEBUFFER_OPERATION",37442:"CONTEXT_LOST_WEBGL"},xt=null,wt=function(){function e(){}return e.createShader=function(t,e,i){e=t.createShader(e);return t.shaderSource(e,i),t.compileShader(e),t.getShaderParameter(e,t.COMPILE_STATUS)?e:(console.error(t.getShaderInfoLog(e)),null)},e.createProgram=function(t,e,i){var n=t.createProgram();return t.attachShader(n,e),t.attachShader(n,i),t.linkProgram(n),t.deleteShader(e),t.deleteShader(i),t.getProgramParameter(n,t.LINK_STATUS)?n:(t.deleteProgram(n),null)},e.initBuffer=function(t,e,i,n,r){var o=t.createBuffer();return t.bindBuffer(e,o),t.bufferData(e,i,t.STATIC_DRAW),o&&(o.itemSize=n,o.numItems=i.length/n),void 0!==r&&(t.enableVertexAttribArray(r),t.vertexAttribPointer(r,o.itemSize,t.FLOAT,!1,0,0)),o},e.getWebglContext=function(t,e){var i,n,r=null,o=l({preserveDrawingBuffer:!0,antialias:!1,xrCompatible:!0},e);function a(t){return t.statusMessage}t.addEventListener("webglcontextcreationerror",a);try{for(var s=d(["webgl","experimental-webgl","webkit-3d","moz-webgl"]),h=s.next();!h.done;h=s.next()){var u=h.value;try{r=t.getContext(u,o)}catch(t){}if(r)break}}catch(t){i={error:t}}finally{try{h&&!h.done&&(n=s.return)&&n.call(s)}finally{if(i)throw i.error}}return t.removeEventListener("webglcontextcreationerror",a),r},e.createTexture=function(t,e){var i=t.createTexture();return t.bindTexture(e,i),t.texParameteri(e,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(e,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(e,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(e,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.bindTexture(e,null),i},e.isWebGLAvailable=function(){var t;return null===xt&&(t=document.createElement("canvas"),t=e.getWebglContext(t),xt=!!t,!t||(t=t.getExtension("WEBGL_lose_context"))&&t.loseContext()),!!xt},e.isStableWebGL=function(){var t,e=a(),i=!0;return"android"!==e.os.name||((t=parseFloat(e.os.version))<=4.3&&1<=t||4.4===t&&"chrome"!==e.browser.name)&&(i=!1),i},e.getErrorNameFromWebGLErrorCode=function(t){return t in yt?yt[t]:"UNKNOWN_ERROR"},e.texImage2D=function(t,e,i){try{t.texImage2D(e,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,i)}catch(t){console.error("WebGLUtils.texImage2D error:",t)}},e.getMaxTextureSize=function(t){return t.getParameter(t.MAX_TEXTURE_SIZE)},e}(),v=a(),Rt="ie"===v.browser.name&&11===v.browser.majorVersion,Tt={ERROR:"error"},Et=function(e){function t(){var t=e.call(this)||this;return t._forceDimension=null,t._pixelCanvas=null,t._pixelContext=null,t}c(t,e);var i=t.prototype;return i.render=function(t){var e=t.gl,i=t.shaderProgram,n=t.indexBuffer,r=t.mvMatrix,t=t.pMatrix;e.uniformMatrix4fv(i.pMatrixUniform,!1,t),e.uniformMatrix4fv(i.mvMatrixUniform,!1,r),n&&e.drawElements(e.TRIANGLES,n.numItems,e.UNSIGNED_SHORT,0)},i.getDimension=function(t){return{width:t.naturalWidth||t.videoWidth,height:t.naturalHeight||t.videoHeight}},i.updateShaderData=function(t){},i._initPixelSource=function(t,e){var i;void 0===e&&(e=null),(Rt&&t instanceof HTMLVideoElement||e)&&(t=(i=e||this.getDimension(t)).width,i=i.height,this._pixelCanvas=document.createElement("canvas"),this._pixelCanvas.width=t,this._pixelCanvas.height=i,this._pixelContext=this._pixelCanvas.getContext("2d")),this._forceDimension=e},i._getPixelSource=function(t){if(!this._pixelCanvas)return t;var e=this.getDimension(t),i=this._forceDimension||e;return this._pixelCanvas.width!==i.width&&(this._pixelCanvas.width=i.width),this._pixelCanvas.height!==i.height&&(this._pixelCanvas.height=i.height),this._forceDimension?this._pixelContext.drawImage(t,0,0,e.width,e.height,0,0,i.width,i.height):this._pixelContext.drawImage(t,0,0),this._pixelCanvas},i._extractTileConfig=function(t){return(Array.isArray(t.tileConfig)?t.tileConfig:Array.apply(void 0,f(Array(6))).map(function(){return t.tileConfig})).map(function(t){return l({flipHorizontal:!1,rotation:0},t)})},i._triggerError=function(t){console.error("Renderer Error:",t),this.trigger(Tt.ERROR,{message:"string"==typeof t?t:t.message})},t.EVENTS=Tt,t}(t),Ct=function(t){function u(){return null!==t&&t.apply(this,arguments)||this}c(u,t);var e=u.prototype;return u.extractOrder=function(t){return t.order||"RLUDBF"},e.getVertexPositionData=function(){return u._VERTEX_POSITION_DATA=null!==u._VERTEX_POSITION_DATA?u._VERTEX_POSITION_DATA:[1,-1,1,-1,-1,1,-1,1,1,1,1,1,-1,-1,-1,1,-1,-1,1,1,-1,-1,1,-1,-1,1,-1,1,1,-1,1,1,1,-1,1,1,1,-1,-1,-1,-1,-1,-1,-1,1,1,-1,1,1,-1,-1,1,-1,1,1,1,1,1,1,-1,-1,-1,1,-1,-1,-1,-1,1,-1,-1,1,1]},e.getIndexData=function(){if(u._INDEX_DATA)return u._INDEX_DATA;for(var t=[],e=this.getVertexPositionData(),i=0;i<e.length/3;i+=4)t.push(i,i+2,i+1,i,i+3,i+2);return u._INDEX_DATA=t},e.getTextureCoordData=function(t){var e=u.extractOrder(t),h=this.getVertexPositionData(),i=this._extractTileConfig(t);return"BFUDRL".split("").map(function(t){return i[e.indexOf(t)]}).map(function(t,e){for(var i=Math.floor(t.rotation/90),n=t.flipHorizontal?[0,1,2,3]:[1,0,3,2],r=0;r<Math.abs(i);r++)t.flipHorizontal&&0<i||!t.flipHorizontal&&i<0?n.push(n.shift()):n.unshift(n.pop());for(var o=h.slice(12*e,12*e+12),a=[],s=0;s<4;s++)a[n[s]]=o.splice(0,3);return a}).join().split(",").map(function(t){return parseInt(t,10)})},e.getVertexShaderSource=function(){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}"},e.getFragmentShaderSource=function(){return"\nprecision highp float;\nuniform samplerCube uSampler;\nvarying highp vec3 vVertexDirectionVector;\nvoid main(void) {\n gl_FragColor = textureCube(uSampler, vVertexDirectionVector);\n}"},e.updateTexture=function(t,e,i){var i=u.extractOrder(i),n={};i.split("").forEach(function(t,e){n[t]=e});try{if(e instanceof Array)for(var r=0;r<6;r++){var o=n["RLUDBF"[r]];wt.texImage2D(t,t.TEXTURE_CUBE_MAP_POSITIVE_X+r,e[o])}else for(var a=this.getMaxCubeMapTextureSize(t,e),r=0;r<6;r++){var o=n["RLUDBF"[r]],s=this.extractTileFromImage(e,o,a);wt.texImage2D(t,t.TEXTURE_CUBE_MAP_POSITIVE_X+r,s)}}catch(t){this._triggerError(t)}},e.bindTexture=function(t,e,i,n){t.bindTexture(t.TEXTURE_CUBE_MAP,e),this.updateTexture(t,i,n)},e.getSourceTileSize=function(t){var e=this.getDimension(t),i=e.width,t=e.height,e=i/t,i=e==1/6?i:6==e?t:e==2/3?i/2:i/3;return i},e.extractTileFromImage=function(t,e,i){var n=this.getDimension(t).width,r=this.getSourceTileSize(t),o=document.createElement("canvas");o.width=i,o.height=i;var a=o.getContext("2d"),s=n/r,n=r*e%(r*s),s=Math.floor(e/s)*r;return a.drawImage(t,n,s,r,r,0,0,i,i),o},e.getMaxCubeMapTextureSize=function(t,e){var i=a(),n=t.getParameter(t.MAX_CUBE_MAP_TEXTURE_SIZE),r=this.getSourceTileSize(e);if("ie"===i.browser.name&&11===i.browser.majorVersion&&!A.isPowerOfTwo(r))for(var o=1;o<n;o*=2)if(!(o<r)){r=o;break}return"ios"===i.os.name&&(9===(i=i.os.majorVersion)&&(r=1024),8===i&&(r=512)),Math.min(n,r)},u._VERTEX_POSITION_DATA=null,u._INDEX_DATA=null,u}(Et),It=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}c(e,t);var i=e.prototype;return i.getVertexShaderSource=function(){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}"},i.getFragmentShaderSource=function(){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}"},i.getVertexPositionData=function(){return this._vertices||(this._vertices=[1,-1,1,-1,-1,1,-1,1,1,1,1,1,-1,-1,-1,1,-1,-1,1,1,-1,-1,1,-1,-1,1,-1,1,1,-1,1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,1,1,1,1,1,1,-1,-1,-1,1,-1,-1,-1,-1,1,-1,-1,1,1]),this._vertices},i.getIndexData=function(){var i=this;return function(){for(var t=[],e=0;e<i._vertices.length/3;e+=4)t.push(e,e+1,e+2,e,e+2,e+3);return t}()},i.getTextureCoordData=function(t){for(var i=this,e=t.order||"RLUDFB",n=[],r=1;0<=r;r--)for(var o=0;o<3;o++){var a=[o/3,r/2,(o+1)/3,r/2,(o+1)/3,(r+1)/2,o/3,(r+1)/2];n.push(a)}var s=this._extractTileConfig(t),n=n.map(function(t){return i._shrinkCoord(t)}).map(function(t,e){return i._transformCoord(t,s[e])});return"