@realsee/five 6.8.0-alpha.21 → 6.8.0-alpha.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/classes/five.WorkResolvedObserver.html +1 -1
- package/docs/functions/vue.useFiveWorks.html +2 -2
- package/docs/interfaces/five.LooseWorkObserver.html +2 -2
- package/docs/interfaces/five.LooseWorkPanorama.html +2 -2
- package/docs/interfaces/five.WorkObserver.html +2 -2
- package/docs/interfaces/five.WorkObserverJson.html +2 -2
- package/docs/interfaces/five.WorkPanoramaJson.html +2 -2
- package/five/index.js +3 -3
- package/five/index.mjs +3 -3
- package/five/work/looseWorkType.d.ts +2 -2
- package/five/work/work.d.ts +1 -1
- package/five/work/workJsonType.d.ts +2 -2
- package/gltf-loader/index.js +2 -2
- package/gltf-loader/index.mjs +2 -2
- package/line/index.js +2 -2
- package/line/index.mjs +2 -2
- package/package.json +1 -1
- package/plugins/index.js +1 -1
- package/plugins/index.mjs +1 -1
- package/react/index.js +1 -1
- package/react/index.mjs +1 -1
- package/shader-lib/index.js +1 -1
- package/shader-lib/index.mjs +1 -1
- package/sticker/index.js +2 -2
- package/sticker/index.mjs +2 -2
- package/umd/five-gltf-loader.js +2 -2
- package/umd/five-line.js +2 -2
- package/umd/five-plugins.js +1 -1
- package/umd/five-react.js +1 -1
- package/umd/five-shader-lib.js +1 -1
- package/umd/five-sticker.js +2 -2
- package/umd/five-vfx.js +1 -1
- package/umd/five-vue.js +1 -1
- package/umd/five.js +3 -3
- package/vfx/index.js +1 -1
- package/vfx/index.mjs +1 -1
- package/vue/index.js +1 -1
- package/vue/index.mjs +1 -1
- package/work-downloader/index.js +1 -1
- package/work-downloader/index.mjs +1 -1
package/umd/five.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @license
|
|
3
3
|
* @realsee/five
|
|
4
4
|
* Generated: 3/19/2026
|
|
5
|
-
* Version: 6.8.0-alpha.
|
|
5
|
+
* Version: 6.8.0-alpha.22
|
|
6
6
|
* Terms:
|
|
7
7
|
* Realsee SDK License Agreement
|
|
8
8
|
* Update: July 28, 2021
|
|
@@ -2236,7 +2236,7 @@ void main() {
|
|
|
2236
2236
|
#include <premultiplied_alpha_fragment>
|
|
2237
2237
|
|
|
2238
2238
|
}
|
|
2239
|
-
`},LineMaterial=class extends three.ShaderMaterial{constructor(e){super({uniforms:three.UniformsUtils.clone(lineShader.uniforms),vertexShader:lineShader.vertexShader,fragmentShader:lineShader.fragmentShader,clipping:!0}),this.type=`LineMaterial`,this.dashed=!1,Object.defineProperties(this,{color:{enumerable:!0,get(){return this.uniforms.diffuse.value},set(e){this.uniforms.diffuse.value=e}},linewidth:{enumerable:!0,get(){return this.uniforms.linewidth.value},set(e){this.uniforms.linewidth.value=e}},dashScale:{enumerable:!0,get(){return this.uniforms.dashScale.value},set(e){this.uniforms.dashScale.value=e}},dashSize:{enumerable:!0,get(){return this.uniforms.dashSize.value},set(e){this.uniforms.dashSize.value=e}},gapSize:{enumerable:!0,get(){return this.uniforms.gapSize.value},set(e){this.uniforms.gapSize.value=e}},opacity:{enumerable:!0,get(){return this.uniforms.opacity.value},set(e){this.uniforms.opacity.value=e}},resolution:{enumerable:!0,get(){return this.uniforms.resolution.value},set(e){this.uniforms.resolution.value.copy(e)}}}),this.setValues(e)}};Object.assign(LineMaterial.prototype,{isLineMaterial:!0});var LineSegments2=class extends three.Mesh{constructor(e,t){super(),this.type=`LineSegments2`,this.geometry=e===void 0?new LineSegmentsGeometry:e,this.material=t===void 0?new LineMaterial({color:Math.random()*16777215}):t}computeLineDistances(){let e=this.geometry,t=e.attributes.instanceStart,n=e.attributes.instanceEnd,r=new Float32Array(2*t.count),o=new three.Vector3,s=new three.Vector3;for(var c=0,l=0,u=t.count;c<u;c++,l+=2)o.fromBufferAttribute(t,c),s.fromBufferAttribute(n,c),r[l]=l===0?0:r[l-1],r[l+1]=r[l]+o.distanceTo(s);let d=new three.InstancedInterleavedBuffer(r,2,1);return e.setAttribute(`instanceDistanceStart`,new three.InterleavedBufferAttribute(d,1,0)),e.setAttribute(`instanceDistanceEnd`,new three.InterleavedBufferAttribute(d,1,1)),this}raycast(e,t){e.camera===null&&console.error(`LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2.`);let n=e.ray,r=e.camera,o=r.projectionMatrix,s=this.geometry,c=this.material,l=c.resolution,u=c.linewidth,d=s.attributes.instanceStart,f=s.attributes.instanceEnd,p=new three.Vector4,m=new three.Vector4,h=new three.Vector4,g=new three.Vector3,_=new three.Matrix4,v=new three.Line3,y=new three.Vector3;n.at(1,h),h.w=1,h.applyMatrix4(r.matrixWorldInverse),h.applyMatrix4(o),h.multiplyScalar(1/h.w),h.x*=l.x/2,h.y*=l.y/2,h.z=0,g.copy(h);let b=this.matrixWorld;_.multiplyMatrices(r.matrixWorldInverse,b);for(var S=0,C=d.count;S<C;S++){p.fromBufferAttribute(d,S),m.fromBufferAttribute(f,S),p.w=1,m.w=1,p.applyMatrix4(_),m.applyMatrix4(_),p.applyMatrix4(o),m.applyMatrix4(o),p.multiplyScalar(1/p.w),m.multiplyScalar(1/m.w);var w=p.z<-1&&m.z<-1,T=p.z>1&&m.z>1;if(w||T)continue;p.x*=l.x/2,p.y*=l.y/2,m.x*=l.x/2,m.y*=l.y/2,v.start.copy(p),v.start.z=0,v.end.copy(m),v.end.z=0;let e=v.closestPointToPointParameter(g,!0);v.at(e,y);let r=three.MathUtils.lerp(p.z,m.z,e),s=r>=-1&&r<=1;var E=g.distanceTo(y)<u*.5;if(s&&E){v.start.fromBufferAttribute(d,S),v.end.fromBufferAttribute(f,S),v.start.applyMatrix4(b),v.end.applyMatrix4(b);var D=new three.Vector3,O=new three.Vector3;n.distanceSqToSegment(v.start,v.end,O,D),t.push({point:O,pointOnLine:D,distance:n.origin.distanceTo(O),object:this,faceIndex:S})}}}};Object.assign(LineSegments2.prototype,{isLineSegments2:!0});var Line2=class extends LineSegments2{constructor(e,t){super(e,t),this.type=`Line2`}};Object.assign(Line2.prototype,{isLine2:!0});var LineGeometry=class extends LineSegmentsGeometry{constructor(){super(),this.type=`LineGeometry`}setPositions(e){let t=e.length-3,n=new Float32Array(2*t);for(let r=0;r<t;r+=3)n[2*r]=e[r],n[2*r+1]=e[r+1],n[2*r+2]=e[r+2],n[2*r+3]=e[r+3],n[2*r+4]=e[r+4],n[2*r+5]=e[r+5];return super.setPositions(n),this}setColors(e){let t=e.length-3,n=new Float32Array(2*t);for(let r=0;r<t;r+=3)n[2*r]=e[r],n[2*r+1]=e[r+1],n[2*r+2]=e[r+2],n[2*r+3]=e[r+3],n[2*r+4]=e[r+4],n[2*r+5]=e[r+5];return super.setColors(n),this}fromLine(e){let t=e.geometry;if(t instanceof three.Geometry){let e=new three.BufferGeometry().fromGeometry(t);this.setPositions(e.attributes.position.array)}else t instanceof three.BufferGeometry&&this.setPositions(t.attributes.position.array);return this}copy(){return this}};Object.assign(LineGeometry.prototype,{isLineGeometry:!0});var circleImageURL=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sHDgwCEMBJZu0AAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAABM5JREFUWMO1V0tPG2cUPZ4Hxh6DazIOrjFNqJs0FIMqWFgWQkatsmvVbtggKlSVRVf5AWz4AWz4AUSKEChll19QJYSXkECuhFxsHjEhxCYm+DWGMZ5HF72DJq4bAzFXurI0M/I5997v3u9cC65vTJVn2lX/xHINQOYSBLTLEuIuCWw4Z3IGAEvf6ASmVHjNzHCXBG4A0AjACsAOwEbO0nsFQBnAGYASAIl+ZRMR7SolMEdsByD09fV5R0ZGgg8ePPjW5/N1iqLYpuu6RZblciKR2I9Go69evnwZnZ+fjwI4IS8AKBIRzeQfJWCANwKwh0KhtrGxsYehUOin1tbW+zzP23ietzY2NnIAoGmaLsuyUiqVyvl8XtrY2NiamZn589mzZxsAUgCOAeQAnFI2tI+VxIjaAeDzoaGh7xYWFuZOTk6OZVk+12uYqqq6JEnn0Wg0OT4+/geAXwGEAdwDIFJQXC1wO4DWR48e/RCPxxclSSroVzRFUbSDg4P848ePFwH8DuAhkWih83TRQWxFOXgAwvDwcOfo6OhvXV1d39tsNtuVBwTDWBwOh1UUxVsMw1hXVlbSdCgNV43uYSvrHg6H24aHh38eHBz85TrgF9FYLHA4HLzH43FvbW2d7u/vG+dANp8FpqIlbd3d3V8Fg8EfBUFw4BONZVmL3+9vHhkZCQL4AoAHgJPK8G+yzC0XDofdoVAo5PP5vkadTBAEtr+/39ff3x8gAp/RPOEqx2qjx+NpvXv3bk9DQ0NDvQgwDIOWlhZrMBj8kgi0UJdxRgYMArzL5XJ7vd57qLPZ7Xamp6fnNgBXtQxcjFuHw+Hyer3t9SYgCAITCAScAJoBNNEY/08GOFVVrfVMv7kMNDntFD1vjIAPrlRN0xjckOm6biFQ3jwNPwDMZrOnqVTqfb3Bi8Wivru7W/VCYkwPlKOjo0IikXh7EwQikYgE4Nw0CfXKDCipVCoTj8df3QABbW1tLUc6oUgkFPMkVACUNjc337148eKvw8PDbJ2jP1taWkoCyNDVXDSECmNSK4qiKNLq6urW8+fPI/UicHx8rD59+jSVy+WOAKSJhKENwFItLtoxk8mwsixzHR0dHe3t7c5PAU+n09rs7OzJkydPYqVSaQfANoDXALIk31S2smU1TWMPDg7K5XKZ7+3t9TudTut1U7+wsFCcmJiIpdPpbQBxADsAknQWymYCOukBHYCuKApisdhpMpnURFEU79y503TVyKenpzOTk5M7e3t7MQKPV0Zv1gNm+awB0MvlshqLxfLb29uyJElWURSbXC4XXyvqxcXFs6mpqeTc3Nzu3t7e3wQcA7BPZ8Cov1pNlJplmQtAG8MwHV6v95tAINA5MDBwPxAIuLu6upr8fr/VAN3c3JQjkcjZ+vp6fnl5+d2bN29SuVzuNYAEpf01CdRChUL+X1VskHACuA3Ay3Fcu9vt7nA6nZ7m5uYWQRCaNE3jVVW15PP580KhIGUymWw2m00DOAJwSP4WwPtq4LX2Ao6USxNlQyS/RcQcdLGwlNIz6vEMAaZpNzCk2Pll94LK/cDYimxERiBwG10sxjgvEZBE0UpE6vxj+0Ct5bTaXthgEhRmja8QWNkkPGsuIpfdjpkK+cZUWTC0KredVmtD/gdlSl6EG4AMvQAAAABJRU5ErkJggg==`,DEFAULT_COLOR=14467195,POINT_SIZE=8,DEFAULT_LINEWIDTH=2,DEFAULT_DASHSCALE=20,sharedCircleTexture=null,FiveLine=class extends three.Object3D{static get version(){return`6.8.0-alpha.21`}constructor(e=new three.Vector3,t=new three.Vector3){super(),this.type=`FiveLine`,this.needsRender=!0,this.line=new Line2(new LineGeometry,new LineMaterial({color:DEFAULT_COLOR,linewidth:DEFAULT_LINEWIDTH,dashScale:DEFAULT_DASHSCALE,dashed:!1}));let n=new three.BufferGeometry,r=new three.PointsMaterial({color:DEFAULT_COLOR,size:POINT_SIZE,map:sharedCircleTexture||(sharedCircleTexture=new three.TextureLoader().load(`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sHDgwCEMBJZu0AAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAABM5JREFUWMO1V0tPG2cUPZ4Hxh6DazIOrjFNqJs0FIMqWFgWQkatsmvVbtggKlSVRVf5AWz4AWz4AUSKEChll19QJYSXkECuhFxsHjEhxCYm+DWGMZ5HF72DJq4bAzFXurI0M/I5997v3u9cC65vTJVn2lX/xHINQOYSBLTLEuIuCWw4Z3IGAEvf6ASmVHjNzHCXBG4A0AjACsAOwEbO0nsFQBnAGYASAIl+ZRMR7SolMEdsByD09fV5R0ZGgg8ePPjW5/N1iqLYpuu6RZblciKR2I9Go69evnwZnZ+fjwI4IS8AKBIRzeQfJWCANwKwh0KhtrGxsYehUOin1tbW+zzP23ietzY2NnIAoGmaLsuyUiqVyvl8XtrY2NiamZn589mzZxsAUgCOAeQAnFI2tI+VxIjaAeDzoaGh7xYWFuZOTk6OZVk+12uYqqq6JEnn0Wg0OT4+/geAXwGEAdwDIFJQXC1wO4DWR48e/RCPxxclSSroVzRFUbSDg4P848ePFwH8DuAhkWih83TRQWxFOXgAwvDwcOfo6OhvXV1d39tsNtuVBwTDWBwOh1UUxVsMw1hXVlbSdCgNV43uYSvrHg6H24aHh38eHBz85TrgF9FYLHA4HLzH43FvbW2d7u/vG+dANp8FpqIlbd3d3V8Fg8EfBUFw4BONZVmL3+9vHhkZCQL4AoAHgJPK8G+yzC0XDofdoVAo5PP5vkadTBAEtr+/39ff3x8gAp/RPOEqx2qjx+NpvXv3bk9DQ0NDvQgwDIOWlhZrMBj8kgi0UJdxRgYMArzL5XJ7vd57qLPZ7Xamp6fnNgBXtQxcjFuHw+Hyer3t9SYgCAITCAScAJoBNNEY/08GOFVVrfVMv7kMNDntFD1vjIAPrlRN0xjckOm6biFQ3jwNPwDMZrOnqVTqfb3Bi8Wivru7W/VCYkwPlKOjo0IikXh7EwQikYgE4Nw0CfXKDCipVCoTj8df3QABbW1tLUc6oUgkFPMkVACUNjc337148eKvw8PDbJ2jP1taWkoCyNDVXDSECmNSK4qiKNLq6urW8+fPI/UicHx8rD59+jSVy+WOAKSJhKENwFItLtoxk8mwsixzHR0dHe3t7c5PAU+n09rs7OzJkydPYqVSaQfANoDXALIk31S2smU1TWMPDg7K5XKZ7+3t9TudTut1U7+wsFCcmJiIpdPpbQBxADsAknQWymYCOukBHYCuKApisdhpMpnURFEU79y503TVyKenpzOTk5M7e3t7MQKPV0Zv1gNm+awB0MvlshqLxfLb29uyJElWURSbXC4XXyvqxcXFs6mpqeTc3Nzu3t7e3wQcA7BPZ8Cov1pNlJplmQtAG8MwHV6v95tAINA5MDBwPxAIuLu6upr8fr/VAN3c3JQjkcjZ+vp6fnl5+d2bN29SuVzuNYAEpf01CdRChUL+X1VskHACuA3Ay3Fcu9vt7nA6nZ7m5uYWQRCaNE3jVVW15PP580KhIGUymWw2m00DOAJwSP4WwPtq4LX2Ao6USxNlQyS/RcQcdLGwlNIz6vEMAaZpNzCk2Pll94LK/cDYimxERiBwG10sxjgvEZBE0UpE6vxj+0Ct5bTaXthgEhRmja8QWNkkPGsuIpfdjpkK+cZUWTC0KredVmtD/gdlSl6EG4AMvQAAAABJRU5ErkJggg==`)),sizeAttenuation:!1,transparent:!0});this.points=new three.Points(n,r),this.points.renderOrder=11,this.points.frustumCulled=!1,this.setPoints(e,t),this.add(this.line,this.points)}setPoints(e,t){let n=[].concat(e.toArray(),t.toArray());this.points.geometry.setAttribute(`position`,new three.BufferAttribute(new Float32Array(n),3)),this.line.geometry.setPositions(n),this.line.computeLineDistances(),this.needsRender=!0}getPoints(){let e=this.points.geometry.attributes.position.array;return[new three.Vector3(e[0],e[1],e[2]),new three.Vector3(e[3],e[4],e[5])]}setMaterial(e){let t=this.line.material;for(let n in e){if(!e.hasOwnProperty(n))continue;let r=e[n];n===`dashed`?(t.dashed=r,r?t.defines.USE_DASH=``:delete t.defines.USE_DASH,t.needsUpdate=!0):t[n]=e[n]}this.needsRender=!0}setResolution(e,t){let n=this.line.material.resolution;(n.x!==e||n.y!==t)&&(n.set(e,t),this.needsRender=!0)}};Object.assign(FiveLine.prototype,{isFiveLine:!0});var Constants={Handedness:Object.freeze({NONE:`none`,LEFT:`left`,RIGHT:`right`}),ComponentState:Object.freeze({DEFAULT:`default`,TOUCHED:`touched`,PRESSED:`pressed`}),ComponentProperty:Object.freeze({BUTTON:`button`,X_AXIS:`xAxis`,Y_AXIS:`yAxis`,STATE:`state`}),ComponentType:Object.freeze({TRIGGER:`trigger`,SQUEEZE:`squeeze`,TOUCHPAD:`touchpad`,THUMBSTICK:`thumbstick`,BUTTON:`button`}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:`transform`,VISIBILITY:`visibility`})};function fetchJsonFile(e){return __awaiter(this,void 0,void 0,function*(){let t=yield fetch(e);if(t.ok)return t.json();throw Error(t.statusText)})}function fetchProfilesList(e){return __awaiter(this,void 0,void 0,function*(){if(!e)throw Error(`No basePath supplied`);return yield fetchJsonFile(`${e}/profilesList.json`)})}function fetchProfile(e,t){return __awaiter(this,arguments,void 0,function*(e,t,n=null,r=!0){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No basePath supplied`);let o=yield fetchProfilesList(t),s;if(e.profiles.some(e=>{let n=o[e];return n&&(s={profileId:e,profilePath:`${t}/${n.path}`,deprecated:!!n.deprecated}),!!s}),!s){if(!n)throw Error(`No matching profile name found`);let e=o[n];if(!e)throw Error(`No matching profile name found and default profile "${n}" missing.`);s={profileId:n,profilePath:`${t}/${e.path}`,deprecated:!!e.deprecated}}let c=yield fetchJsonFile(s.profilePath),l;if(r){let t;if(t=c.layouts[e.handedness],!t)throw Error(`No matching handedness, ${e.handedness}, in profile ${s.profileId}`);t.assetPath&&(l=s.profilePath.replace(`profile.json`,t.assetPath))}return{profile:c,assetPath:l}})}var defaultComponentValues={xAxis:0,yAxis:0,button:0,state:Constants.ComponentState.DEFAULT};function normalizeAxes(e=0,t=0){let n=e,r=t;if(Math.sqrt(e*e+t*t)>1){let o=Math.atan2(t,e);n=Math.cos(o),r=Math.sin(o)}return{normalizedXAxis:n*.5+.5,normalizedYAxis:r*.5+.5}}var VisualResponse=class{constructor(e){this.componentProperty=e.componentProperty,this.states=e.states,this.valueNodeName=e.valueNodeName,this.valueNodeProperty=e.valueNodeProperty,this.valueNodeProperty===Constants.VisualResponseProperty.TRANSFORM&&(this.minNodeName=e.minNodeName,this.maxNodeName=e.maxNodeName),this.value=0,this.updateFromComponent(defaultComponentValues)}updateFromComponent({xAxis:e,yAxis:t,button:n,state:r}){let{normalizedXAxis:o,normalizedYAxis:s}=normalizeAxes(e,t);switch(this.componentProperty){case Constants.ComponentProperty.X_AXIS:this.value=this.states.includes(r)?o:.5;break;case Constants.ComponentProperty.Y_AXIS:this.value=this.states.includes(r)?s:.5;break;case Constants.ComponentProperty.BUTTON:this.value=this.states.includes(r)?n:0;break;case Constants.ComponentProperty.STATE:this.valueNodeProperty===Constants.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(r):this.value=this.states.includes(r)?1:0;break;default:throw Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}},Component=class{constructor(e,t){if(!e||!t||!t.visualResponses||!t.gamepadIndices||Object.keys(t.gamepadIndices).length===0)throw Error(`Invalid arguments supplied`);this.id=e,this.type=t.type,this.rootNodeName=t.rootNodeName,this.touchPointNodeName=t.touchPointNodeName,this.visualResponses={},Object.keys(t.visualResponses).forEach(e=>{let n=new VisualResponse(t.visualResponses[e]);this.visualResponses[e]=n}),this.gamepadIndices=Object.assign({},t.gamepadIndices),this.values={state:Constants.ComponentState.DEFAULT,button:this.gamepadIndices.button===void 0?void 0:0,xAxis:this.gamepadIndices.xAxis===void 0?void 0:0,yAxis:this.gamepadIndices.yAxis===void 0?void 0:0}}get data(){return Object.assign({id:this.id},this.values)}updateFromGamepad(e){if(this.values.state=Constants.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&e.buttons.length>this.gamepadIndices.button){let t=e.buttons[this.gamepadIndices.button];this.values.button=t.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,t.pressed||this.values.button===1?this.values.state=Constants.ComponentState.PRESSED:(t.touched||this.values.button>Constants.ButtonTouchThreshold)&&(this.values.state=Constants.ComponentState.TOUCHED)}this.gamepadIndices.xAxis!==void 0&&e.axes.length>this.gamepadIndices.xAxis&&(this.values.xAxis=e.axes[this.gamepadIndices.xAxis],this.values.xAxis=this.values.xAxis<-1?-1:this.values.xAxis,this.values.xAxis=this.values.xAxis>1?1:this.values.xAxis,this.values.state===Constants.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>Constants.AxisTouchThreshold&&(this.values.state=Constants.ComponentState.TOUCHED)),this.gamepadIndices.yAxis!==void 0&&e.axes.length>this.gamepadIndices.yAxis&&(this.values.yAxis=e.axes[this.gamepadIndices.yAxis],this.values.yAxis=this.values.yAxis<-1?-1:this.values.yAxis,this.values.yAxis=this.values.yAxis>1?1:this.values.yAxis,this.values.state===Constants.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>Constants.AxisTouchThreshold&&(this.values.state=Constants.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(e=>{e.updateFromComponent(this.values)})}},MotionController=class{constructor(e,t,n){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No profile supplied`);this.xrInputSource=e,this.assetUrl=n,this.id=t.profileId,this.layoutDescription=t.layouts[e.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(e=>{let t=this.layoutDescription.components[e];this.components[e]=new Component(e,t)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){let e=[];return Object.values(this.components).forEach(t=>{e.push(t.data)}),e}updateFromGamepad(){Object.values(this.components).forEach(e=>{e.updateFromGamepad(this.xrInputSource.gamepad)})}},DEFAULT_PROFILES_PATH=`https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles`,DEFAULT_PROFILE=`generic-trigger`,XRControllerModel=class extends three.Object3D{constructor(){super(),this.motionController=null,this.envMap=null}setEnvironmentMap(e){return this.envMap==e?this:(this.envMap=e,this.traverse(e=>{e instanceof three.Mesh&&e.isMesh&&(e.material.envMap=this.envMap,e.material.needsUpdate=!0)}),this)}updateMatrixWorld(e){super.updateMatrixWorld(e),this.motionController&&(this.motionController.updateFromGamepad(),Object.values(this.motionController.components).forEach(e=>{Object.values(e.visualResponses).forEach(e=>{let{valueNode:t,minNode:n,maxNode:r,value:o,valueNodeProperty:s}=e;t&&(s===Constants.VisualResponseProperty.VISIBILITY?t.visible=o:s===Constants.VisualResponseProperty.TRANSFORM&&(t.quaternion.copy(n.quaternion).slerp(r.quaternion,o),t.position.lerpVectors(n.position,r.position,o)))})}))}};function findNodes(e,t){Object.values(e.components).forEach(e=>{let{type:n,touchPointNodeName:r,visualResponses:o}=e;if(n===Constants.ComponentType.TOUCHPAD)if(e.touchPointNode=t.getObjectByName(r),e.touchPointNode){let t=new three.Mesh(new three.SphereGeometry(.001),new three.MeshBasicMaterial({color:255}));e.touchPointNode.add(t)}else console.warn(`Could not find touch dot, ${e.touchPointNodeName}, in touchpad component ${e.id}`);Object.values(o).forEach(e=>{let{valueNodeName:n,minNodeName:r,maxNodeName:o,valueNodeProperty:s}=e;if(s===Constants.VisualResponseProperty.TRANSFORM){if(e.minNode=t.getObjectByName(r),e.maxNode=t.getObjectByName(o),!e.minNode){console.warn(`Could not find ${r} in the model`);return}if(!e.maxNode){console.warn(`Could not find ${o} in the model`);return}}e.valueNode=t.getObjectByName(n),e.valueNode||console.warn(`Could not find ${n} in the model`)})})}function addAssetSceneToControllerModel(e,t){findNodes(e.motionController,t),e.envMap&&t.traverse(t=>{t instanceof three.Mesh&&t.isMesh&&(t.material.envMap=e.envMap,t.material.needsUpdate=!0)}),e.add(t)}var XRControllerModelFactory=class{constructor(e=null){this.gltfLoader=e,this.path=DEFAULT_PROFILES_PATH,this._assetCache={}}createControllerModel(e){let t=new XRControllerModel,n=null;return e.addEventListener(`connected`,e=>{let r=e.data;r.targetRayMode!==`tracked-pointer`||!r.gamepad||fetchProfile(r,this.path,DEFAULT_PROFILE).then(({profile:e,assetPath:o})=>{t.motionController=new MotionController(r,e,o);let s=this._assetCache[t.motionController.assetUrl];if(s)n=s.scene.clone(),addAssetSceneToControllerModel(t,n);else{if(!this.gltfLoader)throw Error(`GLTFLoader not set.`);this.gltfLoader.load(t.motionController.assetUrl,e=>{this._assetCache[t.motionController.assetUrl]=e,n=e.scene.clone(),addAssetSceneToControllerModel(t,n)})}}).catch(e=>{console.warn(e)})}),e.addEventListener(`disconnected`,()=>{t.motionController=null,t.remove(n),n=null}),t}},defaultXRPanoramaControllerInitArgs=Object.assign({},omit(defaultPanoramaControllerCustomInitArgs,[`maxLatitude`,`minLatitude`]));function mapPanoResource(e,t){if(!t)return e;let n=e.match(/\d+_[a-z].png/);return e.substring(0,n.index)+t+`/`+e.substring(n.index)}var CONTROLLER_EVNET_DELTA_TIME=300,scratchRaycaster=new three.Raycaster,scratchVector3=new three.Vector3,XRPanoramaController=class e extends PanoramaController{static parseArgs(t){if(t instanceof e)return t;let n=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2});return super.parseArgs(n)}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`XRPanorama`})}constructor(e){super(e),this.xrManager=new XRManager(this.renderer,this.renderer.getContext(),{onSessionStart:e=>{this.emit(`xr.session.start`,createEvent(`xr.session.start`,{session:e,machineType:this.xrManager.machineType}))},onSessionEnd:()=>{this.emit(`xr.session.end`,createEvent(`xr.session.end`,{session:null,machineType:this.xrManager.machineType}))}}),this.xrControllerRay={left:new three.Raycaster,right:new three.Raycaster},this.xrControllerRay.left.params.Points={threshold:.1},this.xrControllerRay.left.firstHitOnly=!0,this.xrControllerRay.left.floorIndex=-1,this.xrControllerRay.right.params.Points={threshold:.1},this.xrControllerRay.right.firstHitOnly=!0,this.xrControllerRay.right.floorIndex=-1,this.gazeRay=null,this.pointerLines={left:new FiveLine,right:new FiveLine},this.pointerLines.left.visible=!1,this.pointerLines.right.visible=!0,this.pointerLines.left.setMaterial({color:new three.Vector3(1,1,1)}),this.pointerLines.left.points.material.depthTest=!1,this.pointerLines.right.setMaterial({color:new three.Vector3(1,1,1)}),this.pointerLines.right.points.material.depthTest=!1,this.controllerWrappers=[new three.Group,new three.Group];let t=this.xrManager.getController(0);this.controllerWrappers[0].add(t);let n=this.xrManager.getController(1);this.controllerWrappers[1].add(n);let r=new XRControllerModelFactory;r.gltfLoader={load(e,t){internalFetcher.ajax(e,{responseType:`arraybuffer`}).then(t=>{var n;return parseGltf(t.body,{resourcePath:e.slice(0,e.lastIndexOf(`/`)+1),search:(n=e.split(`?`)[1])==null?``:n,fetcher:internalFetcher})}).then(e=>t(e))}},(this.xrManager.machineType===`Oculus`||this.xrManager.machineType===`Pico`)&&this.scene.add(this.pointerLines.left,this.pointerLines.right,this.controllerWrappers[0],this.controllerWrappers[1]),this.panoResources={},this.panoResources[this.locationMotion.keyframes[0].key=this.locationMotion.keyframes[1].key=createUuid()]={panoId:panoStringify(this.currentPano),leftPanoPicture:null,position:this.camera.pose.offset.clone(),effect:`fade`,effectEasing:defaultEffectEase,fixCameraTransform:new three.Matrix4},this.parallaxCameraMatrixs=[];let o=AnimationFrameLoop.shared.getContext();if(!o){console.error(`获取session失败,请退出重试`);return}this.on(`xr.session.end`,()=>{this.scene.remove(this.pointerLines.left,this.pointerLines.right)}),this.xrManager.setSession(o),this.on(`xr.session.start`,()=>{let e=this.xrManager.getControllerGrip(0);e.add(r.createControllerModel(e)),this.controllerWrappers[0].add(e);let t=this.xrManager.getControllerGrip(1);t.add(r.createControllerModel(t)),this.controllerWrappers[1].add(t)}),this.xrHandleState={LeftAxesUp:{touchStartTime:0,touchStart:!1},LeftAxesDown:{touchStartTime:0,touchStart:!1},LeftAxesLeft:{touchStartTime:0,touchStart:!1},LeftAxesRight:{touchStartTime:0,touchStart:!1},LeftTrigger:{touchStartTime:0,touchStart:!1},LeftPinch:{touchStartTime:0,touchStart:!1},RightAxesUp:{touchStartTime:0,touchStart:!1},RightAxesDown:{touchStartTime:0,touchStart:!1},RightAxesLeft:{touchStartTime:0,touchStart:!1},RightAxesRight:{touchStartTime:0,touchStart:!1},RightTrigger:{touchStartTime:0,touchStart:!1},RightPinch:{touchStartTime:0,touchStart:!1},Y:{touchStartTime:0,touchStart:!1},X:{touchStartTime:0,touchStart:!1},A:{touchStartTime:0,touchStart:!1},B:{touchStartTime:0,touchStart:!1}},this.xrManager.machineType===`VP`&&this.initHandEvent()}updateConfiguration(e){return super.updateConfiguration(Object.assign(Object.assign({},e),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2}))}moveToPano(e,t,n){var r,o,s;let c=(r=t.effect)==null?`fade`:r;this.userAction=n,this.stopMomentumMovement();let l=panoStringify(e),u=this.works.getObserver(e);if(!u)throw Error(`Invalid PanoIndex`);let d=getImageSizeFromURL(u.images.up),f=this.imageOptions.size;f===void 0&&u&&d&&(f=Number(d)),f===void 0&&(f=2048);let p=this.imageOptions.transform,m=(e,t)=>mapPanoResource(applyImageURLOptions(e,p,t)),h=Object.assign({key:`pano.${l}`},pick(this.imageOptions,[`format`,`size`,`quality`])),g={right:u.images.work.getURL(u.images.right),left:u.images.work.getURL(u.images.left),up:u.images.work.getURL(u.images.up),down:u.images.work.getURL(u.images.down),front:u.images.work.getURL(u.images.front),back:u.images.work.getURL(u.images.back)},_=`pano:`+jsonHash([g,h,p]);if(this.pendingTextureTask){if(this.pendingTextureTask.hash===_)return;{let t=this.pendingTextureTask.panoId;(o=this.panoMeshes.get(t))==null||o.setProgress(0),this.emit(`pano.texture.abort`,createEvent(`pano.texture.abort`,{error:null,progress:0,meta:null,pano:e}))}}let{pano0:v,pano1:y}=this.modelScene.parameter.resolveValue(),b;if((v==null?void 0:v.map.name)===_?b=v:(y==null?void 0:y.map.name)===_&&(b=y),b){let n={panoId:l,effect:c,effectEasing:(s=t.effectEasing)==null?defaultEffectEase:s,leftPanoPicture:{panoId:b.panoId,map:b.map,mapHistogram:b.mapHistogram,mapSize:b.mapSize,matrix:u.matrix.clone().premultiply(u.work.transform),zoom:1},position:u.position.clone().applyMatrix4(u.work.transform),fixCameraTransform:new three.Matrix4};this.doMoveToPano(e,n,t);return}let S=`move-to-pano-`+l;this.pending.add(S),this.pendingTextureTask={panoId:l,hash:_,onLoad:n=>{var r,o;let s=n.body;if(this.destroyed)s.dispose();else{s.name=_;let n=Array.isArray(s.image)?s.image[0]:s.image,d=(r=n==null?void 0:n.width)==null?2048:r,f=new Histogram().formPixels(getRgbaDataFromCubeTexture(this.renderer,s,!0,sharedHistogramRgbaData).data),p={panoId:l,effect:c,effectEasing:(o=t.effectEasing)==null?defaultEffectEase:o,leftPanoPicture:{panoId:l,map:s,mapSize:d,mapHistogram:new three.Vector4().fromArray(f.toArray()),matrix:u.matrix.clone(),zoom:1},position:u.position.clone(),fixCameraTransform:new three.Matrix4};this.doMoveToPano(e,p,t)}},onError:n=>{let r=Object.assign(Object.assign(Object.assign({},e),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`pano.error`,createEvent(`pano.error`,{error:n,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),this.emit(`pano.cancel`,createEvent(`pano.cancel`,{error:null,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),t.moveCancelCallback&&t.moveCancelCallback()}};let C=this.panoMeshes.get(l);C&&C.tap&&C.tap(),this.textureLoader.loadCubeTexture(g,{imageURL:{transform:m,options:h},format:three.RGBFormat,fetcher:getFetcher(this.fiveId,u.work)},void 0,void 0,t=>{var n,r;((n=this.pendingTextureTask)==null?void 0:n.hash)===_&&((r=this.panoMeshes.get(l))==null||r.setProgress(t)),this.emit(`pano.texture.progress`,createEvent(`pano.texture.progress`,{error:null,progress:t,meta:null,pano:e}))},this.renderer).then(t=>{var n,r;this.pending.delete(S),((n=this.pendingTextureTask)==null?void 0:n.hash)===_?(this.pendingTextureTask.onLoad(t),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(l))==null||r.setProgress(0)):t.body.dispose(),this.emit(`pano.texture.success`,createEvent(`pano.texture.success`,{error:null,progress:1,meta:t.meta,pano:e}))}).then(()=>new Promise(e=>{AnimationFrameLoop.shared.add(()=>e(),!0)})).catch(t=>{var n,r;this.pending.delete(S),((n=this.pendingTextureTask)==null?void 0:n.hash)===_&&(this.pendingTextureTask.onError(t),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(l))==null||r.setProgress(0)),this.emit(`pano.texture.error`,createEvent(`pano.texture.error`,{error:t,progress:0,meta:null,pano:e})),this.emit(`error`,t)}),this.emit(`pano.texture.load`,createEvent(`pano.texture.load`,{error:null,progress:0,meta:null,pano:e}))}doMoveToPano(e,t,n={}){var r,o,s,c,l,u,d,f,p,m;let h=now(),g=createUuid();this.panoResources[g]=t;let _=1,v,y,b;if(this.locationMotion.ended){let[e,n]=this.locationMotion.getKeyFrameSegment(h),r=this.locationMotion.value,o=this.panoResourceFromLocationMotionKeyframe(n).position,s=t.position;v=Math.max(o.distanceTo(s),1),y=[{key:n.key,progress:0,value:Object.assign(Object.assign({},r),{count:0})},{key:g,progress:1,value:{distance:0,count:1}}],b=0}else{let[e,n]=this.locationMotion.getKeyFrameSegment(h),r=this.locationMotion.value,o=this.panoResourceFromLocationMotionKeyframe(e).position,s=this.panoResourceFromLocationMotionKeyframe(n).position,c=t.position,l=n.value.count-r.count,u=Math.max(o.distanceTo(s),1)*l;v=u+Math.max(s.distanceTo(c),1),y=[{key:e.key,progress:0,value:Object.assign({},r)},{key:n.key,progress:u/v,value:n.value},{key:g,progress:1,value:{count:n.value.count+1,distance:0}}];let d=this.locationMotionKeyframesLength(this.locationMotion.keyframes),f=this.locationMotionKeyframesLength(y);b=this.locationMotion.getProgressVelocity(h)*d/f}let S=t.effect===`instant`?0:this.calculateMovingDuration(n.duration,t.effect===`fly`||t.effect===`model`?v:0),C={longitude:n.longitude,latitude:n.latitude,fov:n.fov},w=Object.assign(Object.assign({},e),{mode:this.mode,longitude:(r=C.longitude)==null?this.camera.pose.longitude:r,latitude:(o=C.latitude)==null?this.camera.pose.latitude:o,fov:(s=C.fov)==null?this.camera.pose.fov:s,offset:t.position.clone(),distance:0}),T=this.currentPano;if(this.emit(`pano.moveTo`,createEvent(`pano.moveTo`,{options:n,prevPano:T,progress:0,state:w,userAction:this.userAction,error:null})),n.moveStartCallback&&n.moveStartCallback(w),this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement&&this.videoTexture.image.getAttribute(`src`)&&(this.videoTexture.image.pause(),this.videoTexture.image.removeAttribute(`uuid`),this.videoTexture.image.removeAttribute(`src`),this.videoTexture.image.oncanplay=noop,this.videoTexture.needsUpdate=!0),this.panoVideo.setMaterial(null),t.effect===`fly`||t.effect===`model`)this.cameraMotion.set(C,S).catch(noop);else{let e=coordinatesToVector({longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude}),n=coordinatesToVector({longitude:(c=C.longitude)==null?this.cameraMotion.value.longitude:c,latitude:(l=C.latitude)==null?this.cameraMotion.value.latitude:l}),r=new three.Object3D;r.lookAt(e);let o=new three.Matrix4().makeRotationFromQuaternion(r.quaternion);r.lookAt(n);let s=new three.Matrix4().makeRotationFromQuaternion(r.quaternion),h=new three.Matrix4().getInverse(o).premultiply(s),g=this.cameraMotion.value.fov,_=(u=C.fov)==null?this.cameraMotion.value.fov:u,v=1;t.effect===`zoomin`?v=1.5:t.effect===`zoomout`&&(v=.4);let b=_*v;for(let e=0;e<y.length-1;e++){let t=y[e].key;if(t){let e=this.panoResources[t];e&&(e.fixCameraTransform.copy(h),e.leftPanoPicture&&(e.leftPanoPicture.zoom=Math.tan(b/2/180*Math.PI)/Math.tan(g/2/180*Math.PI)))}}this.cameraMotion.setKeyframes([{progress:0,value:{longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov}},{progress:0,value:{longitude:(d=C.longitude)==null?this.cameraMotion.value.longitude:d,latitude:(f=C.latitude)==null?this.cameraMotion.value.latitude:f,fov:b}},{progress:1,value:{longitude:(p=C.longitude)==null?this.cameraMotion.value.longitude:p,latitude:(m=C.latitude)==null?this.cameraMotion.value.latitude:m,fov:_}}],S).catch(noop)}this.locationMotion.setKeyframes(y,S,b).then(()=>{for(let e of this.modelScene.children)e instanceof Model&&e.show();let t=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:0});this.emit(`pano.arrived`,createEvent(`pano.arrived`,{options:n,prevPano:T,progress:1,state:t,userAction:this.userAction,error:null})),n.moveEndCallback&&n.moveEndCallback(t);let r=this.works.getObserver(this.currentPano);if(r&&r.images.video&&this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement){let e={map:this.videoTexture,size:r.images.video.size.clone(),matrix:r.images.video.matrix.clone(),panoMatrix:r.matrix.clone().premultiply(r.work.transform),alpha:1},t=createUuid(),n=this.videoTexture.image;n.setAttribute(`uuid`,t),canplayVideo().then(o=>{o&&r.images.video&&n.getAttribute(`uuid`)===t&&(n.oncanplay=()=>{n.oncanplay=noop,n.play()},n.ontimeupdate=()=>{n.currentTime>.5&&(n.ontimeupdate=noop,this.panoVideo.setMaterial(e))},n.src=r.images.video.source)}).catch((()=>{n.removeAttribute(`uuid`)}))}},()=>{this.emit(`pano.cancel`,createEvent(`pano.cancel`,{options:n,prevPano:T,progress:0,state:w,userAction:this.userAction,error:null})),n.moveCancelCallback&&n.moveCancelCallback()})}checkSelectedPano(e){var t;this.stopMomentumMovement(),this.camera.getDirection(new three.Vector3).setY(0);let n=null,r=this.works.getObserver(this.currentPano);if(!r)return null;let o=r.work.observers,s=r.accessibleNodes.filter(e=>{if(e===this.currentPano.panoIndex&&r.work.workCode===this.currentPano.workCode)return!1;let t=o[e];return!t||scratchVector3.copy(t.position).applyMatrix4(t.work.transform).distanceTo(this.camera.position)>this.maxAccessibleDistance?!1:t.loadable||t.active}),[c]=this.modelScene.intersectRaycaster(e);if(c){let[e,r]=arrayMin(s,e=>{let t=o[e];return t?scratchVector3.copy(t.standingPosition).applyMatrix4(t.work.transform).distanceTo(c.point):1/0},!0);typeof e==`number`&&r<this.panoTapTriggerRadius&&(n=(t=o[e])==null?null:t)}if(isNil(n)){let t=this.getForwardObserverOrNot(this.xrManager.cameraVR,e);t&&(n=t)}for(let e of this.locationMotion.keyframes){let t=this.panoResourceFromLocationMotionKeyframe(e);if(!(e.progress<this.locationMotion.progress)&&n){let e=panoStringify({panoIndex:n.panoIndex,workCode:n.work.workCode});if(t.panoId===e){n=null;break}}}if(isNil(n))return this.locationMotion.ended===!0&&this.cameraBounce(),null;if(!n.active){let e=panoStringify({panoIndex:n.panoIndex,workCode:n.work.workCode}),t=this.panoMeshes.get(e);t&&(t.setDisabled(!1),t.setLoading(!0))}let l={workCode:n.work.workCode,panoIndex:n.panoIndex,mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,distance:0,offset:n?n.position.clone():new three.Vector3};return this.emit(`pano.select`,createEvent(`pano.select`,{prevPano:this.currentPano,state:l,userAction:!0,options:{},progress:0,error:null})),n&&n.active?(this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:l,options:{},error:null})),{workCode:n.work.workCode,panoIndex:n.panoIndex}):null}destroy(){super.destroy()}isReady(){return!1}updateCamera(e,t,n){return Promise.resolve()}updateCameraWithKeyframes(e,t,n){return Promise.resolve()}updateTime(e,t,...n){var r,o,s,c,l,u,d,f,p;this.userAction=!0;let m={},h={},g=this.camera.getDirection(new three.Vector3),_=this.locationMotion.keyframes[0],v=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[y,b]=this.locationMotion.getKeyFrameSegment(e),S=this.panoResourceFromLocationMotionKeyframe(y),C=this.panoResourceFromLocationMotionKeyframe(b),w=this.panoResourceFromLocationMotionKeyframe(_),T=this.panoResourceFromLocationMotionKeyframe(v),E=!1;if(this.cameraMotion.ended===!1&&(this.cameraMotion.update(e),h.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),m.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-b.value.count+1,n=new three.Vector3().copy(S.position),s=new three.Vector3().copy(C.position);if(m.progress=t,t>=.01&&t<=.99&&(m.progress=clamp$1(C.effectEasing(t),.01,.99)),C.leftPanoPicture&&(t<1?S.leftPanoPicture&&(m.pano0=S.leftPanoPicture):m.pano0=C.leftPanoPicture,m.pano1=C.leftPanoPicture),C.effect===`montage`?m.transition=`BLACK`:C.effect===`spread`?m.transition=`SPREAD`:m.transition=`FADE`,C.effect===`zoomin`||C.effect===`zoomout`?m.progress=Math.pow(t,3):C.effect===`model`&&this.camera.pose.distance<.01&&(m.modelAlpha=1-Math.pow(clamp$1(Math.abs(t-.5)*2,0,1),4)),t<1&&C.effect!==`fly`){if(m.pano0&&S.leftPanoPicture){let e={panoId:m.pano0.panoId,map:m.pano0.map,mapHistogram:m.pano0.mapHistogram,mapSize:m.pano0.mapSize,zoom:m.pano0.zoom,matrix:S.leftPanoPicture.matrix.clone().setPosition(C.position)},t=this.panoPictureObserverMap.get(m.pano0);t&&this.panoPictureObserverMap.set(e,t),m.pano0=e}n.copy(s),E=!0}h.distance=this.locationMotion.value.distance,h.offset=new three.Vector3(n.x+(s.x-n.x)*t,n.y+(s.y-n.y)*t,n.z+(s.z-n.z)*t);let c=[],l=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(c.push(t),n>this.locationMotion.progress&&l.push(t))}for(let e of Object.keys(this.panoResources)){if(l.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.leftPanoPicture){let e=t.leftPanoPicture.map;if(e){if(e===((r=m.pano0)==null?void 0:r.map)||e===((o=m.pano1)==null?void 0:o.map))continue;e.dispose(),t.leftPanoPicture=null}}c.indexOf(e)>=0||delete this.panoResources[e]}let u=panoParse(C.panoId);u!==this.currentPano&&(this.currentPano=u,this.accessibleObserverFloorCheckCount=0),this.emit(`pano.moving`,createEvent(`pano.moving`,{userAction:this.userAction,prevPano:panoParse(w.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},panoParse(T.panoId)),{mode:this.mode}),clonePose(this.camera.pose)),h),options:{},progress:this.locationMotion.progress,error:null}))}this.camera.setFromPose(h),this.xrManager.cameraVR.projectionMatrix.copy(this.camera.projectionMatrix),this.xrManager.cameraVR.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),this.xrManager.cameraVR.matrix.copy(this.camera.matrix),this.xrManager.cameraVR.position.copy(this.camera.position),this.xrManager.cameraVR.quaternion.copy(this.camera.quaternion),this.xrManager.cameraVR.scale.copy(this.camera.scale),this.xrManager.cameraVR.matrixAutoUpdate=!1,this.xrManager.cameraVR.matrixWorld.copy(this.camera.matrixWorld);let[D,O]=n,k=new three.Vector3(0,0,0),A=new three.Vector2().copy(this.camera.resolution);if(O&&this.xrManager.session&&this.xrManager.referenceSpace&&this.xrManager.session.renderState.baseLayer){let n=this.xrManager.cameraVR,r=this.xrManager.referenceSpace,o=this.xrManager.session.renderState.baseLayer,u=O.getViewerPose(r),d=(s=u==null?void 0:u.views)==null?[]:s;for(let e=0;e<d.length;e++){let t=d[e],r=n.cameras[e],s=o.getViewport(t);s&&(r.projectionMatrix.fromArray(t.projectionMatrix),r.projectionMatrixInverse.getInverse(r.projectionMatrix),r.matrix.fromArray(t.transform.matrix),r.matrix.setPosition(this.camera.position),r.matrix.decompose(r.position,r.quaternion,r.scale),r.matrixWorld.copy(r.matrix),r.matrixWorldInverse.getInverse(r.matrixWorld),r.matrixAutoUpdate=!1,k.copy(r.position),r.viewport.set(s.x,s.y,s.width,s.height),A.set(s.width,s.height))}if(this.xrManager.setProjectionFromUnion(this.xrManager.cameraVR,this.xrManager.cameraL,this.xrManager.cameraR),this.camera.quaternion.copy(this.xrManager.cameraVR.quaternion),this.camera.scale.copy(this.xrManager.cameraVR.scale),this.camera.matrix.compose(this.camera.position,this.camera.quaternion,this.camera.scale),this.camera.computePose((c=h.distance)==null?this.camera.pose.distance:c),this.xrManager.session.inputSources){for(let e=0;e<this.xrManager.session.inputSources.length;e++)if(this.xrManager.session.inputSources[e]&&this.xrManager.session.inputSources[e].targetRayMode===`transient-pointer`){let t=O.getPose(this.xrManager.session.inputSources[e].targetRaySpace,r);if(t){let e=t.transform.orientation,n=new three.Quaternion(e.x,e.y,e.z,e.w),r=new three.Vector3(0,0,-1).applyQuaternion(n);this.gazeRay=new three.Raycaster(this.camera.position,r)}}}if(this.xrManager.machineType===`Oculus`||this.xrManager.machineType===`Pico`){let n=this.xrManager.session.inputSources;for(let e=0;e<n.length;e++){let t=this.xrManager.controllers[e],o=n[e];if(!o)continue;t&&t.update(o,O,r);let s=this.xrManager.getController(e),c=new three.Vector3(0,1.2,0),u=s.position.clone().add(k).sub(c);o.handedness===`left`?this.xrControllerRay.left.set(u,new three.Vector3(0,0,-1).applyEuler(s.rotation)):o.handedness===`right`&&this.xrControllerRay.right.set(u,new three.Vector3(0,0,-1).applyEuler(s.rotation)),this.controllerWrappers[e].position.copy(new three.Vector3(0,0,0).add(k).sub(c));let d=this.modelScene.intersectRaycaster(this.xrControllerRay.right);if(d.length===0){let e=this.works.getResolvedObserver(this.currentPano);d=this.xrControllerRay.right.intersectObject(this.modelScene.boundingMesh,!0).map(t=>{var n;let r=(n=e==null?void 0:e.floorIndex)==null?0:n;return Object.assign({floorIndex:r,floor:r},t)})}if(d.length>=1&&d[0].face)if(o.handedness===`right`){let e=this.xrControllerRay.right.intersectObject(this.xrCustomObjectsScene,!0),t=d[0].face.normal,n=t.clone(),r=d[0].point.clone();this.intersectMesh.position.copy(r);let o=r.clone().add(n);if(this.intersectMesh.lookAt(o),Math.abs(t.y)>.99){let e=this.camera.position.clone().sub(r);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0,e.length>0?(this.pointerLines.right.setPoints(u,e[0].point),this.pointerLines.right.points.visible=!0,this.intersectMesh.visible=!1):(this.pointerLines.right.points.visible=!1,this.pointerLines.right.setPoints(u,d[0].point));let s=d[0],c=createEvent(`intersect.update`,{raycaster:(l=this.xrControllerRay.right)==null?null:l,intersection:s==null?null:s,object:this.intersectMesh});if(this.emit(`intersect.update`,c),c.defaultPrevented){this.hideIntersectMesh();return}}else this.pointerLines.left.setPoints(u,d[0].point)}this.updateControllerHelper(n,e,t)}}else O||console.error(`xrFrame丢失,请重试`),this.xrManager.session||console.error(`session丢失,请重试`),this.xrManager.session&&!this.xrManager.session.renderState.baseLayer&&console.error(`no layer found`);isEmptyObject(m)===!1&&this.modelScene.parameter.set(m),this.emit(`camera.update`,createEvent(`camera.update`,{userAction:this.userAction,state:Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose))}));let j=this.works.getResolvedObserver(this.currentPano),M=this.locationMotion.ended?this.getForwardObserverOrNot(this.xrManager.cameraVR):null,N=this.works.getObserver(S.panoId),P=this.works.getObserver(C.panoId);if(this.adjustPanoCircleMeshPositionBasedOnModel&&this.helper.visible&&j){let e=[],t=j.work.observers;for(let n of j.accessibleNodes){let r=t[n];r&&e.push(r)}let n=new Map;if(e.sort((e,t)=>{let r=n.get(e);r===void 0&&(r=e.standingPosition.distanceTo(j.standingPosition),n.set(e,r));let o=n.get(e);return o===void 0&&(o=t.standingPosition.distanceTo(j.standingPosition),n.set(t,o)),r-o}),e.length){this.accessibleObserverFloorCheckCount%=e.length;let t=e[this.accessibleObserverFloorCheckCount],n=this.modelScene.models.find(e=>e.work===(t==null?void 0:t.work));if(t&&n&&n.visible){let e=.3,r=.05,o=.005,s=t.standingPosition.clone().applyMatrix4(t.work.transform),c=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode}),l=adjustPanoCircleMeshVectors.map(t=>{scratchRaycaster.ray.origin.copy(s),scratchRaycaster.ray.origin.add(scratchVector3.copy(t).setY(e)),scratchRaycaster.ray.direction.set(0,-1,0),scratchRaycaster.firstHitOnly=!0,scratchRaycaster.floorIndex=-1;let[r]=n.intersectRaycaster(scratchRaycaster);return r&&r.distance-o<=e?new three.Vector3().copy(s).setY(r.point.y+o):s});l.sort((e,t)=>t.y-e.y);let u=l[Math.floor(l.length/2)],[d]=l.filter(e=>e.distanceTo(u)<=.05);if(d){let e=new three.Vector4(s.x,s.y,s.z,d.y-s.y),t=this.adjustPanoCircleMeshPositionFix.get(c);t&&!e.equals(t)&&(this.needsRender=!0),this.adjustPanoCircleMeshPositionFix.set(c,e)}}this.accessibleObserverFloorCheckCount++}}let F=new Map;if(N)for(let e of N.accessibleNodes){let t=N.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});F.set(e,t)}}if(P)for(let e of P.accessibleNodes){let t=P.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});F.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{F.get(t)?F.delete(t):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),F.forEach((e,t)=>{let n=this.panoCircleMeshCreator(e,{aerialObserverMinHeight:this.aerialObserverMinHeight});this.panoMeshes.set(t,n),this.helper.add(n),F.delete(t)}),this.panoMeshes.forEach((e,t)=>{let n=this.works.getObserver(t);if(n){let r=n.position.distanceTo(n.standingPosition)>this.aerialObserverMinHeight;if(r)e.position.copy(n.position).applyMatrix4(n.work.transform),e.scale.setScalar(18);else{e.position.copy(n.standingPosition).applyMatrix4(n.work.transform);let t=this.adjustPanoCircleMeshPositionFix.get(n.panoId);t&&(scratchVector3.set(t.x,t.y,t.z),scratchVector3.equals(e.position)&&(e.position.y+=t.w)),e.scale.setScalar(1.2)}let o=this.camera.position.clone().setY(e.position.y),s=new three.Vector3().copy(e.position).sub(o).normalize();if(t===panoStringify(this.currentPano)){let t=clamp$1((.5-o.distanceTo(e.position))/.5,0,1);s.multiplyScalar(1-t).add(g.clone().multiplyScalar(t))}if(s.length()>0){let t=r?-Math.PI/2:0,n=Math.atan2(s.x,s.z);e.quaternion.setFromEuler(new three.Euler(t,n,0,`YXZ`))}}else e.visible=!1}),this.camera.pose.distance>.1||E)this.panoMeshes.forEach(n=>{n.setOpacity(0),n.setCurrent(!1),n.updateTime&&n.updateTime(e,t),n.visible=!1});else if(j){let n=j.work.observers,[,r]=arrayMin(j.accessibleNodes,e=>{let t=n[e];return!t||!t.active?1/0:j.standingPosition.distanceTo(t.standingPosition)},!0);r=clamp$1(r,2.5,1/0);let o=j.accessibleNodes.concat(j.panoIndex).map(e=>panoStringify({panoIndex:e,workCode:j.work.workCode}));this.panoMeshes.forEach((n,s)=>{let c=this.works.getObserver(s),l=!1,u=1;if(o.indexOf(s)===-1)l=!1,u=0;else if(!c)l=!1,u=0;else if(!c.loadable&&!c.active)l=!1,u=0;else{let e=n.position.clone().project(this.camera);l=Math.abs(e.x)<1&&Math.abs(e.y)<1&&Math.abs(e.z)<1&&!n.loading&&n.progress===0&&M!==null&&panoStringify({panoIndex:M.panoIndex,workCode:M.work.workCode})===s;let t=n.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);u=t<.01?0:clamp$1(r/t,.1,.85)}c&&c===P&&c.position.distanceTo(c.standingPosition)>this.aerialObserverMinHeight&&n.position.distanceTo(this.camera.position)<35&&(u=0),this.modelScene.parameter.resolveValue().modelAlpha>0&&(u=0),n.setCurrent(l),n.setOpacity(u),n.updateTime&&n.updateTime(e,t)})}{let e=(u=this.modelScene.parameter.progress)==null?1:u,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,o=t===0?n:r,s;if(o&&(s=this.works.getObserver(o.panoId),s||(s=this.panoPictureObserverMap.get(o))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(canUseNativeImageBitmap()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!s||!o||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:A,pixelRatio:1,time:this.camera.time,cameraMatrix:this.xrManager.cameraVR.matrixWorld,cameraProjectionMatrix:this.xrManager.cameraVR.projectionMatrix,panoMap:null,panoMatrix:new three.Matrix4,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=getImageSizeLevel(o.mapSize)+1,c=4;this.tiling.setObserver(s);let l={renderer:this.renderer,resolution:A,pixelRatio:1,time:this.camera.time,cameraMatrix:this.xrManager.cameraVR.matrixWorld,cameraProjectionMatrix:this.xrManager.cameraVR.projectionMatrix,panoMap:o.map,panoMatrix:o.matrix,panoZoom:o.zoom,minLevel:e,level:4},u=this.tiling.update(l),f={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:easeInQuart(Math.abs(((d=this.modelScene.parameter.progress)==null?0:d)-.5)*2)},p=this.modelScene.parameter.refinedScreen;(u||f.pano!==(p==null?void 0:p.pano)||f.opacity!==(p==null?void 0:p.opacity))&&this.modelScene.parameter.set(`refinedScreen`,f)}}if(this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e),this.intersectMesh&&this.intersectMesh.parent&&j&&j.position.y-j.standingPosition.y>10){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1);{let e=C.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((f=this.modelScene.parameter.pano0Depth)==null?void 0:f.panoId)!==t.panoId||((p=this.modelScene.parameter.pano1Depth)==null?void 0:p.panoId)!==n.panoId){let e=500,r=512;this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1});let o=new three.CubeCamera(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);o.matrix.copy(t.matrix),o.matrixWorld.copy(o.matrix),o.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,o,500);let s=new three.CubeCamera(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);s.matrix.copy(n.matrix),s.matrixWorld.copy(s.matrix),s.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,s,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}render(){if(this.xrManager.session&&this.xrManager.session.renderState.baseLayer){let e=this.xrManager.session.renderState.baseLayer;return this.renderer.setRenderTarget(null),this.renderer.setScissorTest(!1),this.renderer.setFramebuffer(e.framebuffer),this.renderer.render(this.scene,this.xrManager.cameraVR),this.renderer.setFramebuffer(null),!0}return!1}onPanGesture(){}onTapGesture(){}onPinchGesture(){}onMouseMove(){}onMouseOut(){}panoResourceFromLocationMotionKeyframe(e){return this.panoResources[e.key]}updateControllerHelper(e,t,n){let r=this.xrControllerRay.left,o=this.xrControllerRay.right;if(!e||e.length===0)return;let s={buttons:{X:!1,Y:!1,LeftTrigger:!1,LeftPinch:!1,A:!1,B:!1,RightTrigger:!1,RightPinch:!1}};for(let c=0;c<e.length;c++){let l=e[c].handedness,u=e[c].gamepad;switch(l){case`left`:u.axes&&(this.emitHandleEvent(u.axes[2]===-1,`LeftAxesLeft`,t),this.emitHandleEvent(u.axes[2]===1,`LeftAxesRight`,t),this.emitHandleEvent(u.axes[3]===-1,`LeftAxesUp`,t),this.emitHandleEvent(u.axes[3]===1,`LeftAxesDown`,t)),u!=null&&u.buttons&&(u.buttons[4]&&this.emitHandleEvent(u.buttons[4].pressed,`X`,t),u.buttons[5]&&this.emitHandleEvent(u.buttons[5].pressed,`Y`,t),u.buttons[0]&&this.emitHandleEvent(u.buttons[0].pressed,`LeftTrigger`,t),u.buttons[1]&&this.emitHandleEvent(u.buttons[1].pressed,`LeftPinch`,t));let e={raycaster:r,axes:{up:u.axes&&u.axes[3]<0?Math.abs(u.axes[3]):0,down:u.axes&&u.axes[3]<0?0:Math.abs(u.axes[3]),left:u.axes&&u.axes[2]<0?Math.abs(u.axes[2]):0,right:u.axes&&u.axes[2]<0?0:Math.abs(u.axes[2])},deltaTime:n};s.buttons.X=u.buttons&&u.buttons[4]?u.buttons[4].pressed:!1,s.buttons.Y=u.buttons&&u.buttons[5]?u==null?void 0:u.buttons[5].pressed:!1,s.buttons.LeftTrigger=u.buttons&&u.buttons[0]?u==null?void 0:u.buttons[0].pressed:!1,s.buttons.LeftPinch=u.buttons&&u.buttons[1]?u==null?void 0:u.buttons[1].pressed:!1,s.left=e;break;case`right`:u.axes&&(this.emitHandleEvent(u.axes[2]===-1,`RightAxesLeft`,t),this.emitHandleEvent(u.axes[2]===1,`RightAxesRight`,t),this.emitHandleEvent(u.axes[3]===-1,`RightAxesUp`,t),this.emitHandleEvent(u.axes[3]===1,`RightAxesDown`,t)),u.buttons&&(u.buttons[4]&&this.emitHandleEvent(u.buttons[4].pressed,`A`,t),u.buttons[5]&&this.emitHandleEvent(u.buttons[5].pressed,`B`,t),u.buttons[0]&&this.emitHandleEvent(u.buttons[0].pressed,`RightTrigger`,t),u.buttons[1]&&this.emitHandleEvent(u.buttons[1].pressed,`RightPinch`,t)),s.right={raycaster:o,axes:{up:u.axes&&u.axes[3]<0?Math.abs(u.axes[3]):0,down:u.axes&&u.axes[3]<0?0:Math.abs(u.axes[3]),left:u.axes&&u.axes[2]<0?Math.abs(u.axes[2]):0,right:u.axes&&u.axes[2]<0?0:Math.abs(u.axes[2])},deltaTime:n},s.buttons.A=u.buttons&&u.buttons[4]?u==null?void 0:u.buttons[4].pressed:!1,s.buttons.B=u.buttons&&u.buttons[5]?u==null?void 0:u.buttons[5].pressed:!1,s.buttons.RightTrigger=u.buttons&&u.buttons[0]?u==null?void 0:u.buttons[0].pressed:!1,s.buttons.RightPinch=u.buttons&&u.buttons[1]?u==null?void 0:u.buttons[1].pressed:!1;break;default:break}}this.emit(`xr.controller.update`,createEvent(`xr.controller.update`,s))}emitHandleEvent(e,t,n){let r=this.xrControllerRay.left,o=this.xrControllerRay.right;if(e)this.xrHandleState[t].touchStart===!1?(this.xrHandleState[t].touchStartTime=n,this.xrHandleState[t].touchStart=!0,this.emit(`xr.gesture.buttonDown`,createEvent(`xr.gesture.buttonDown`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!1,isFirst:!0,controllers:{raycaster:{leftRay:r,rightRay:o}}}))):n-this.xrHandleState[t].touchStartTime>CONTROLLER_EVNET_DELTA_TIME&&this.emit(`xr.gesture.press`,createEvent(`xr.gesture.tap`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!0,isFirst:!0,controllers:{raycaster:{leftRay:r,rightRay:o}}}));else if(this.xrHandleState[t].touchStart===!0){if(this.emit(`xr.gesture.buttonUp`,createEvent(`xr.gesture.buttonUp`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!0,isFirst:!1,controllers:{raycaster:{leftRay:r,rightRay:o}}})),n-this.xrHandleState[t].touchStartTime<=CONTROLLER_EVNET_DELTA_TIME){let e=createEvent(`xr.gesture.tap`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!0,isFirst:!1,controllers:{raycaster:{leftRay:r,rightRay:o}}});!this.emit(`xr.gesture.tap`,e)&&!e.defaultPrevented&&t===`RightTrigger`&&this.checkSelectedPano(this.xrControllerRay.right)}this.xrHandleState[t].touchStart=!1,this.xrHandleState[t].touchStartTime=0}}initHandEvent(){if(!this.xrManager.session)throw Error(`初始化失败`);this.xrManager.session.addEventListener(`select`,e=>{this.gazeRay&&this.checkSelectedPano(this.gazeRay)})}},Controllers={Floorplan:FloorplanController,Topview:TopviewController,Panorama:PanoramaController,VRPanorama:VRPanoramaController,Model:ModelController,Mapview:MapviewController,XRPanorama:XRPanoramaController},controllersDefaultInitArgs={Floorplan:defaultFloorplanControllerCustomInitArgs,Topview:defaultTopviewControllerCustomInitArgs,Panorama:defaultPanoramaControllerCustomInitArgs,VRPanorama:defaultVRPanoramaControllerCustomInitArgs,Model:defaultModelControllerCustomInitArgs,Mapview:defaultMapviewControllerCustomInitArgs,XRPanorama:defaultXRPanoramaControllerInitArgs},PROXY_CONTROLLER_EVENT_NAMES=`gesture.pan,gesture.tap,gesture.dbltap,gesture.press,gesture.pinch,gesture.mousewheel,gesture.mousemove,gesture.momentum,gesture.create,initAnimation.start,initAnimation.end,camera.update,intersect.update,pano.select,pano.moveTo,pano.moving,pano.arrived,pano.cancel,pano.error,pano.texture.load,pano.texture.progress,pano.texture.success,pano.texture.error,pano.texture.abort,xr.session.start,xr.session.end,xr.gesture.tap,xr.gesture.press,xr.gesture.buttonUp,xr.gesture.buttonDown,xr.controller.update`.split(`,`);function initLegacyEvent(e){e.on(`initAnimation.start`,t=>{e.emit(`initAnimationWillStart`,t.state.panoIndex,t.state,t.userAction)}),e.on(`initAnimation.end`,t=>{e.emit(`initAnimationEnded`,t.state.panoIndex,t.state,t.userAction)}),e.on(`gesture.pan`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pan`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPanGesture`,t.state,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pan`,t.pointers,t.isFinal),e.emit(`panGesture`,t.state,t.isFinal))}),e.on(`gesture.tap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`tap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`tap`,t.pointers,t.isFinal),e.emit(`tapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.dbltap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`dbltap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsDblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`dbltap`,t.pointers,t.isFinal),e.emit(`dblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.press`,t=>{let n=!1;n=e.emit(`wantsGesture`,`press`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`press`,t.pointers,t.isFinal),e.emit(`pressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal))}),e.on(`gesture.pinch`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pinch`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPinchGesture`,t.scale,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pinch`,t.pointers,t.isFinal),e.emit(`pinchGesture`,t.scale,t.state.fov,t.isFinal))}),e.on(`gesture.mousewheel`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseWheel`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsMouseWheel`,t.center.delta,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseWheel`,t.pointers,t.isFinal),e.emit(`mouseWheel`,t.center.delta,t.state.fov,t.isFinal))}),e.on(`gesture.mousemove`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseMove`,t.pointers,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseMove`,t.pointers,t.isFinal),n=e.emit(`wantsChangeCameraFov`,t.state.fov),n&&t.preventDefault())}),e.on(`gesture.momentum`,t=>{let n=!1;n=e.emit(`wantsInteriaPan`,t.state),n&&t.preventDefault(),t.defaultPrevented||e.emit(`interiaPan`,t.state,t.isFinal)}),e.on(`camera.update`,t=>{e.emit(`cameraFovUpdate`,t.state.fov,t.userAction),e.emit(`cameraDirectionUpdate`,t.state,t.userAction);let n=coordinatesToVector(t.state);n.setLength(t.state.distance);let r=t.state.offset.clone().sub(n);e.emit(`cameraPositionUpdate`,r,t.userAction),e.emit(`cameraUpdate`,t.state,t.userAction)}),e.on(`intersect.update`,t=>{if(t.intersection){let n=!1;n=e.emit(`wantsShowIntersectionOnModel`,t.raycaster),n&&t.preventDefault(),t.defaultPrevented||e.emit(`intersectionOnModelUpdate`,t.intersection,t.object)}else e.emit(`intersectionHidden`)}),e.on(`pano.request`,t=>{let n=e.emit(`wantsMoveToPano`,t.state.panoIndex,t.options,t.userAction);n||(n=e.emit(`wantsToMoveToPano`,t.state.panoIndex,t.options,t.userAction)),n&&t.preventDefault(),t.defaultPrevented||e.emit(`panoWillLoad`,t.state.panoIndex)}),e.on(`pano.select`,t=>{e.emit(`panoSelected`,t.state.panoIndex)}),e.on(`pano.moveTo`,t=>{e.emit(`panoLoaded`,t.state.panoIndex),e.emit(`moveToPano`,t.state.panoIndex,t.userAction),e.emit(`panoWillArrive`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.moving`,t=>{e.emit(`movingToPano`,t.state.panoIndex,t.prevPano.panoIndex,t.progress)}),e.on(`pano.arrived`,t=>{e.emit(`panoArrived`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.cancel`,t=>{e.emit(`moveToPanoCanceled`,t.state.panoIndex)}),e.on(`pano.error`,t=>{e.emit(`panoLoadError`,t.error,t.state.panoIndex)}),e.on(`pano.texture.load`,t=>{e.emit(`textureStartLoad`,t.pano.panoIndex)}),e.on(`pano.texture.success`,t=>{e.emit(`textureLoaded`,t.pano.panoIndex,t.meta)}),e.on(`pano.texture.error`,t=>{e.emit(`textureError`,t.error,t.pano.panoIndex)}),e.on(`pano.texture.abort`,t=>{e.emit(`textureAbort`,t.pano.panoIndex)}),e.on(`pano.texture.progress`,t=>{e.emit(`textureLoading`,t.progress,t.pano.panoIndex)}),e.on(`xr.session.start`,t=>{e.emit(`webXRSessionStart`)}),e.on(`xr.session.end`,t=>{e.emit(`webXRSessionEnd`)}),e.on(`xr.gesture.tap`,t=>{e.emit(`webXRControllerEvent`,`tap`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.press`,t=>{e.emit(`webXRControllerEvent`,`press`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonUp`,t=>{e.emit(`webXRControllerEvent`,`buttonUp`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonDown`,t=>{e.emit(`webXRControllerEvent`,`buttonDown`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.controller.update`,t=>{e.emit(`webXRControllerRayUpdate`,{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0}),t.left&&e.emit(`webXRAxesUpdate`,`left`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.left.axes.up,down:t.left.axes.down,left:t.left.axes.left,right:t.left.axes.right},deltaTime:t.left.deltaTime}),t.right&&e.emit(`webXRAxesUpdate`,`right`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.right.axes.up,down:t.right.axes.down,left:t.right.axes.left,right:t.right.axes.right},deltaTime:t.right.deltaTime})}),e.on(`works.request`,t=>{e.emit(`willLoad`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.load`,t=>{e.emit(`load`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.ready`,t=>{e.emit(`loaded`,t.input,t.works[0])}),e.on(`state.change`,t=>{e.emit(`stateChange`,t.state,t.userAction)}),e.on(`currentState.change`,t=>{e.emit(`currentStateChange`,t.state,t.userAction)}),e.on(`state.set`,t=>{e.emit(`setState`,t.state)}),e.on(`state.synced`,t=>{e.emit(`stateSynced`,t.state)}),e.on(`model.request`,t=>{e.emit(`modelWillLoad`,t.work.model)}),e.on(`model.error`,t=>{e.emit(`modelLoadError`,t.error,t.model)}),e.on(`model.load`,t=>{e.emit(`modelLoaded`,t.model)}),e.on(`model.changeShownFloor`,t=>{e.emit(`modelShownFloorChange`,t.model.shownFloor,t.model.floorLength)}),e.on(`render`,t=>{e.emit(`renderFrame`,t.needsRender)}),e.on(`mode.change.request`,t=>{e.emit(`wantsChangeMode`,t.mode,t.prevMode)}),e.on(`mode.change`,t=>{e.emit(`modeChange`,t.mode,t.prevMode,t.state.panoIndex,t.state,t.userAction)}),e.on(`helpers.visible`,t=>{e.emit(`helpersVisibleChange`,t.object.visible)}),e.on(`network.resource`,t=>{e.emit(`network`,t.source,t.requestType,t.requestState,t.detail)})}function generateDefaultVideoElement(){if(typeof window<`u`){let e=document.createElement(`video`);e.loop=!0,e.autoplay=!0,e.playsInline=!0,e.muted=!0,e.crossOrigin=``;let t=()=>{document.removeEventListener(`touchstart`,t,!1),document.removeEventListener(`mousedown`,t,!1),e.muted=!1};return document.addEventListener(`touchstart`,t,!1),document.addEventListener(`mousedown`,t,!1),e}else return{}}function initLights(){let e=new three.Group;e.name=`internalLights`;{let t=new three.DirectionalLight(16777215,.1);t.name=`direction0`,t.position.copy(new three.Vector3(0,1,0)),e.add(t)}{let t=new three.DirectionalLight(16777215,.1);t.name=`direction1`,t.position.copy(new three.Vector3(-1,-1,-1)),e.add(t)}{let t=new three.DirectionalLight(16777215,.3);t.name=`direction2`,t.position.copy(new three.Vector3(1,1,1)),e.add(t)}{let t=new three.AmbientLight(16777215,.6);t.name=`ambient0`,e.add(t)}return e}function parseKeyValue(e){var t,n;let r={},o=e.split(/(\;|\,)/);for(let e of o){let o=e.split(`=`),s=(t=o[0])==null?void 0:t.trim(),c=(n=o[1])==null?void 0:n.trim();s&&c&&(r[s]=c)}return r}function getViewportScale(){var e;if(typeof document<`u`){let t=document.getElementsByTagName(`meta`);for(let n=0;n<t.length;n++){let r=t[n];if(r.getAttribute(`name`)===`viewport`){let t=parseKeyValue((e=r.getAttribute(`content`))==null?``:e),n=Number(t[`initial-scale`]);if(!isNaN(n))return n}}}return 1}var realsee_png_data_url_default=`data:image/png;base64,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`,imageSize=[351,63],imageOffset=[20,20],vertices=new Float32Array([-.5,-.5,0,.5,-.5,0,-.5,.5,0,.5,.5,0]),uvs=new Float32Array([0,0,1,0,0,1,1,1]),index=new Uint8Array([0,1,2,1,3,2]),geometry=new three.BufferGeometry;geometry.setAttribute(`position`,new three.BufferAttribute(vertices,3)),geometry.setAttribute(`uv`,new three.BufferAttribute(uvs,2)),geometry.setIndex(new three.BufferAttribute(index,1));var material=new three.MeshBasicMaterial({transparent:!0,depthTest:!1,depthWrite:!1,stencilWrite:!1,fog:!1}),mesh=new three.Mesh(geometry,material);mesh.matrixAutoUpdate=!1;var scene=new three.Scene;scene.add(mesh),scene.matrixAutoUpdate=!1;var camera=new three.OrthographicCamera(-.5,.5,.5,-.5,.1,1);camera.position.set(0,0,.5),camera.lookAt(0,0,0),camera.updateMatrixWorld(!0),camera.matrixAutoUpdate=!1;var prevViewport=new three.Vector4,prevScissor=new three.Vector4;function renderPoweredByRealsee(e){if(material.map){let t=e.getViewport(prevViewport),n=e.getScissor(prevScissor),r=e.getScissorTest(),o=e.autoClear,s=n.x+imageOffset[0]/3,c=n.y+imageOffset[1]/3,l=imageSize[0]/3,u=imageSize[1]/3;e.setViewport(s,c,l,u),e.setScissor(s,c,l,u),e.setScissorTest(!0),e.autoClear=!1,e.render(scene,camera),e.setViewport(t),e.setScissor(n),e.setScissorTest(r),e.autoClear=o}else{let e=new three.Texture,t=new Image;t.onload=()=>{e.image=t,e.wrapS=three.ClampToEdgeWrapping,e.wrapT=three.ClampToEdgeWrapping,e.minFilter=three.LinearFilter,e.needsUpdate=!0,e.generateMipmaps=!1,material.needsUpdate=!0,t.onload=noop},t.src=realsee_png_data_url_default,material.map=e}}var jsContent$1=`(function(){function e(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})}async function t(e={}){var t,n=e,r=!1,i=!0,a=self.location.href;if(r||i)try{new URL(\`.\`,a).href}catch{}console.log.bind(console),console.error.bind(console);var o=!1;function s(e){for(var t=0,n=e.length,r=new Uint8Array(n),i;t<n;++t)i=e.charCodeAt(t),r[t]=~i>>8&i;return r}var c,l,u=!1;function d(){var e=M.buffer;new Int8Array(e),new Int16Array(e),n.HEAPU8=l=new Uint8Array(e),new Uint16Array(e),new Int32Array(e),n.HEAPU32=new Uint32Array(e),n.HEAPF32=new Float32Array(e),new Float64Array(e),new BigInt64Array(e),new BigUint64Array(e)}function f(){if(n.preRun)for(typeof n.preRun==\`function\`&&(n.preRun=[n.preRun]);n.preRun.length;)T(n.preRun.shift());x(w)}function p(){u=!0,I.c()}function m(){if(n.postRun)for(typeof n.postRun==\`function\`&&(n.postRun=[n.postRun]);n.postRun.length;)C(n.postRun.shift());x(S)}var h;function g(){return s(\`\\0asm\\0\\0\\0&\\\`\\\`}}\\\`}\\\`\\0\\\`\\v\\0\\\`\\0\\0\\x07aa\\0\\0\\b\\x07\\0\\0\\x07\\bA\\v\\x07b\\0c\\0\\x07d\\0e\\0f\\0\\f
|
|
2239
|
+
`},LineMaterial=class extends three.ShaderMaterial{constructor(e){super({uniforms:three.UniformsUtils.clone(lineShader.uniforms),vertexShader:lineShader.vertexShader,fragmentShader:lineShader.fragmentShader,clipping:!0}),this.type=`LineMaterial`,this.dashed=!1,Object.defineProperties(this,{color:{enumerable:!0,get(){return this.uniforms.diffuse.value},set(e){this.uniforms.diffuse.value=e}},linewidth:{enumerable:!0,get(){return this.uniforms.linewidth.value},set(e){this.uniforms.linewidth.value=e}},dashScale:{enumerable:!0,get(){return this.uniforms.dashScale.value},set(e){this.uniforms.dashScale.value=e}},dashSize:{enumerable:!0,get(){return this.uniforms.dashSize.value},set(e){this.uniforms.dashSize.value=e}},gapSize:{enumerable:!0,get(){return this.uniforms.gapSize.value},set(e){this.uniforms.gapSize.value=e}},opacity:{enumerable:!0,get(){return this.uniforms.opacity.value},set(e){this.uniforms.opacity.value=e}},resolution:{enumerable:!0,get(){return this.uniforms.resolution.value},set(e){this.uniforms.resolution.value.copy(e)}}}),this.setValues(e)}};Object.assign(LineMaterial.prototype,{isLineMaterial:!0});var LineSegments2=class extends three.Mesh{constructor(e,t){super(),this.type=`LineSegments2`,this.geometry=e===void 0?new LineSegmentsGeometry:e,this.material=t===void 0?new LineMaterial({color:Math.random()*16777215}):t}computeLineDistances(){let e=this.geometry,t=e.attributes.instanceStart,n=e.attributes.instanceEnd,r=new Float32Array(2*t.count),o=new three.Vector3,s=new three.Vector3;for(var c=0,l=0,u=t.count;c<u;c++,l+=2)o.fromBufferAttribute(t,c),s.fromBufferAttribute(n,c),r[l]=l===0?0:r[l-1],r[l+1]=r[l]+o.distanceTo(s);let d=new three.InstancedInterleavedBuffer(r,2,1);return e.setAttribute(`instanceDistanceStart`,new three.InterleavedBufferAttribute(d,1,0)),e.setAttribute(`instanceDistanceEnd`,new three.InterleavedBufferAttribute(d,1,1)),this}raycast(e,t){e.camera===null&&console.error(`LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2.`);let n=e.ray,r=e.camera,o=r.projectionMatrix,s=this.geometry,c=this.material,l=c.resolution,u=c.linewidth,d=s.attributes.instanceStart,f=s.attributes.instanceEnd,p=new three.Vector4,m=new three.Vector4,h=new three.Vector4,g=new three.Vector3,_=new three.Matrix4,v=new three.Line3,y=new three.Vector3;n.at(1,h),h.w=1,h.applyMatrix4(r.matrixWorldInverse),h.applyMatrix4(o),h.multiplyScalar(1/h.w),h.x*=l.x/2,h.y*=l.y/2,h.z=0,g.copy(h);let b=this.matrixWorld;_.multiplyMatrices(r.matrixWorldInverse,b);for(var S=0,C=d.count;S<C;S++){p.fromBufferAttribute(d,S),m.fromBufferAttribute(f,S),p.w=1,m.w=1,p.applyMatrix4(_),m.applyMatrix4(_),p.applyMatrix4(o),m.applyMatrix4(o),p.multiplyScalar(1/p.w),m.multiplyScalar(1/m.w);var w=p.z<-1&&m.z<-1,T=p.z>1&&m.z>1;if(w||T)continue;p.x*=l.x/2,p.y*=l.y/2,m.x*=l.x/2,m.y*=l.y/2,v.start.copy(p),v.start.z=0,v.end.copy(m),v.end.z=0;let e=v.closestPointToPointParameter(g,!0);v.at(e,y);let r=three.MathUtils.lerp(p.z,m.z,e),s=r>=-1&&r<=1;var E=g.distanceTo(y)<u*.5;if(s&&E){v.start.fromBufferAttribute(d,S),v.end.fromBufferAttribute(f,S),v.start.applyMatrix4(b),v.end.applyMatrix4(b);var D=new three.Vector3,O=new three.Vector3;n.distanceSqToSegment(v.start,v.end,O,D),t.push({point:O,pointOnLine:D,distance:n.origin.distanceTo(O),object:this,faceIndex:S})}}}};Object.assign(LineSegments2.prototype,{isLineSegments2:!0});var Line2=class extends LineSegments2{constructor(e,t){super(e,t),this.type=`Line2`}};Object.assign(Line2.prototype,{isLine2:!0});var LineGeometry=class extends LineSegmentsGeometry{constructor(){super(),this.type=`LineGeometry`}setPositions(e){let t=e.length-3,n=new Float32Array(2*t);for(let r=0;r<t;r+=3)n[2*r]=e[r],n[2*r+1]=e[r+1],n[2*r+2]=e[r+2],n[2*r+3]=e[r+3],n[2*r+4]=e[r+4],n[2*r+5]=e[r+5];return super.setPositions(n),this}setColors(e){let t=e.length-3,n=new Float32Array(2*t);for(let r=0;r<t;r+=3)n[2*r]=e[r],n[2*r+1]=e[r+1],n[2*r+2]=e[r+2],n[2*r+3]=e[r+3],n[2*r+4]=e[r+4],n[2*r+5]=e[r+5];return super.setColors(n),this}fromLine(e){let t=e.geometry;if(t instanceof three.Geometry){let e=new three.BufferGeometry().fromGeometry(t);this.setPositions(e.attributes.position.array)}else t instanceof three.BufferGeometry&&this.setPositions(t.attributes.position.array);return this}copy(){return this}};Object.assign(LineGeometry.prototype,{isLineGeometry:!0});var circleImageURL=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sHDgwCEMBJZu0AAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAABM5JREFUWMO1V0tPG2cUPZ4Hxh6DazIOrjFNqJs0FIMqWFgWQkatsmvVbtggKlSVRVf5AWz4AWz4AUSKEChll19QJYSXkECuhFxsHjEhxCYm+DWGMZ5HF72DJq4bAzFXurI0M/I5997v3u9cC65vTJVn2lX/xHINQOYSBLTLEuIuCWw4Z3IGAEvf6ASmVHjNzHCXBG4A0AjACsAOwEbO0nsFQBnAGYASAIl+ZRMR7SolMEdsByD09fV5R0ZGgg8ePPjW5/N1iqLYpuu6RZblciKR2I9Go69evnwZnZ+fjwI4IS8AKBIRzeQfJWCANwKwh0KhtrGxsYehUOin1tbW+zzP23ietzY2NnIAoGmaLsuyUiqVyvl8XtrY2NiamZn589mzZxsAUgCOAeQAnFI2tI+VxIjaAeDzoaGh7xYWFuZOTk6OZVk+12uYqqq6JEnn0Wg0OT4+/geAXwGEAdwDIFJQXC1wO4DWR48e/RCPxxclSSroVzRFUbSDg4P848ePFwH8DuAhkWih83TRQWxFOXgAwvDwcOfo6OhvXV1d39tsNtuVBwTDWBwOh1UUxVsMw1hXVlbSdCgNV43uYSvrHg6H24aHh38eHBz85TrgF9FYLHA4HLzH43FvbW2d7u/vG+dANp8FpqIlbd3d3V8Fg8EfBUFw4BONZVmL3+9vHhkZCQL4AoAHgJPK8G+yzC0XDofdoVAo5PP5vkadTBAEtr+/39ff3x8gAp/RPOEqx2qjx+NpvXv3bk9DQ0NDvQgwDIOWlhZrMBj8kgi0UJdxRgYMArzL5XJ7vd57qLPZ7Xamp6fnNgBXtQxcjFuHw+Hyer3t9SYgCAITCAScAJoBNNEY/08GOFVVrfVMv7kMNDntFD1vjIAPrlRN0xjckOm6biFQ3jwNPwDMZrOnqVTqfb3Bi8Wivru7W/VCYkwPlKOjo0IikXh7EwQikYgE4Nw0CfXKDCipVCoTj8df3QABbW1tLUc6oUgkFPMkVACUNjc337148eKvw8PDbJ2jP1taWkoCyNDVXDSECmNSK4qiKNLq6urW8+fPI/UicHx8rD59+jSVy+WOAKSJhKENwFItLtoxk8mwsixzHR0dHe3t7c5PAU+n09rs7OzJkydPYqVSaQfANoDXALIk31S2smU1TWMPDg7K5XKZ7+3t9TudTut1U7+wsFCcmJiIpdPpbQBxADsAknQWymYCOukBHYCuKApisdhpMpnURFEU79y503TVyKenpzOTk5M7e3t7MQKPV0Zv1gNm+awB0MvlshqLxfLb29uyJElWURSbXC4XXyvqxcXFs6mpqeTc3Nzu3t7e3wQcA7BPZ8Cov1pNlJplmQtAG8MwHV6v95tAINA5MDBwPxAIuLu6upr8fr/VAN3c3JQjkcjZ+vp6fnl5+d2bN29SuVzuNYAEpf01CdRChUL+X1VskHACuA3Ay3Fcu9vt7nA6nZ7m5uYWQRCaNE3jVVW15PP580KhIGUymWw2m00DOAJwSP4WwPtq4LX2Ao6USxNlQyS/RcQcdLGwlNIz6vEMAaZpNzCk2Pll94LK/cDYimxERiBwG10sxjgvEZBE0UpE6vxj+0Ct5bTaXthgEhRmja8QWNkkPGsuIpfdjpkK+cZUWTC0KredVmtD/gdlSl6EG4AMvQAAAABJRU5ErkJggg==`,DEFAULT_COLOR=14467195,POINT_SIZE=8,DEFAULT_LINEWIDTH=2,DEFAULT_DASHSCALE=20,sharedCircleTexture=null,FiveLine=class extends three.Object3D{static get version(){return`6.8.0-alpha.22`}constructor(e=new three.Vector3,t=new three.Vector3){super(),this.type=`FiveLine`,this.needsRender=!0,this.line=new Line2(new LineGeometry,new LineMaterial({color:DEFAULT_COLOR,linewidth:DEFAULT_LINEWIDTH,dashScale:DEFAULT_DASHSCALE,dashed:!1}));let n=new three.BufferGeometry,r=new three.PointsMaterial({color:DEFAULT_COLOR,size:POINT_SIZE,map:sharedCircleTexture||(sharedCircleTexture=new three.TextureLoader().load(`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sHDgwCEMBJZu0AAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAABM5JREFUWMO1V0tPG2cUPZ4Hxh6DazIOrjFNqJs0FIMqWFgWQkatsmvVbtggKlSVRVf5AWz4AWz4AUSKEChll19QJYSXkECuhFxsHjEhxCYm+DWGMZ5HF72DJq4bAzFXurI0M/I5997v3u9cC65vTJVn2lX/xHINQOYSBLTLEuIuCWw4Z3IGAEvf6ASmVHjNzHCXBG4A0AjACsAOwEbO0nsFQBnAGYASAIl+ZRMR7SolMEdsByD09fV5R0ZGgg8ePPjW5/N1iqLYpuu6RZblciKR2I9Go69evnwZnZ+fjwI4IS8AKBIRzeQfJWCANwKwh0KhtrGxsYehUOin1tbW+zzP23ietzY2NnIAoGmaLsuyUiqVyvl8XtrY2NiamZn589mzZxsAUgCOAeQAnFI2tI+VxIjaAeDzoaGh7xYWFuZOTk6OZVk+12uYqqq6JEnn0Wg0OT4+/geAXwGEAdwDIFJQXC1wO4DWR48e/RCPxxclSSroVzRFUbSDg4P848ePFwH8DuAhkWih83TRQWxFOXgAwvDwcOfo6OhvXV1d39tsNtuVBwTDWBwOh1UUxVsMw1hXVlbSdCgNV43uYSvrHg6H24aHh38eHBz85TrgF9FYLHA4HLzH43FvbW2d7u/vG+dANp8FpqIlbd3d3V8Fg8EfBUFw4BONZVmL3+9vHhkZCQL4AoAHgJPK8G+yzC0XDofdoVAo5PP5vkadTBAEtr+/39ff3x8gAp/RPOEqx2qjx+NpvXv3bk9DQ0NDvQgwDIOWlhZrMBj8kgi0UJdxRgYMArzL5XJ7vd57qLPZ7Xamp6fnNgBXtQxcjFuHw+Hyer3t9SYgCAITCAScAJoBNNEY/08GOFVVrfVMv7kMNDntFD1vjIAPrlRN0xjckOm6biFQ3jwNPwDMZrOnqVTqfb3Bi8Wivru7W/VCYkwPlKOjo0IikXh7EwQikYgE4Nw0CfXKDCipVCoTj8df3QABbW1tLUc6oUgkFPMkVACUNjc337148eKvw8PDbJ2jP1taWkoCyNDVXDSECmNSK4qiKNLq6urW8+fPI/UicHx8rD59+jSVy+WOAKSJhKENwFItLtoxk8mwsixzHR0dHe3t7c5PAU+n09rs7OzJkydPYqVSaQfANoDXALIk31S2smU1TWMPDg7K5XKZ7+3t9TudTut1U7+wsFCcmJiIpdPpbQBxADsAknQWymYCOukBHYCuKApisdhpMpnURFEU79y503TVyKenpzOTk5M7e3t7MQKPV0Zv1gNm+awB0MvlshqLxfLb29uyJElWURSbXC4XXyvqxcXFs6mpqeTc3Nzu3t7e3wQcA7BPZ8Cov1pNlJplmQtAG8MwHV6v95tAINA5MDBwPxAIuLu6upr8fr/VAN3c3JQjkcjZ+vp6fnl5+d2bN29SuVzuNYAEpf01CdRChUL+X1VskHACuA3Ay3Fcu9vt7nA6nZ7m5uYWQRCaNE3jVVW15PP580KhIGUymWw2m00DOAJwSP4WwPtq4LX2Ao6USxNlQyS/RcQcdLGwlNIz6vEMAaZpNzCk2Pll94LK/cDYimxERiBwG10sxjgvEZBE0UpE6vxj+0Ct5bTaXthgEhRmja8QWNkkPGsuIpfdjpkK+cZUWTC0KredVmtD/gdlSl6EG4AMvQAAAABJRU5ErkJggg==`)),sizeAttenuation:!1,transparent:!0});this.points=new three.Points(n,r),this.points.renderOrder=11,this.points.frustumCulled=!1,this.setPoints(e,t),this.add(this.line,this.points)}setPoints(e,t){let n=[].concat(e.toArray(),t.toArray());this.points.geometry.setAttribute(`position`,new three.BufferAttribute(new Float32Array(n),3)),this.line.geometry.setPositions(n),this.line.computeLineDistances(),this.needsRender=!0}getPoints(){let e=this.points.geometry.attributes.position.array;return[new three.Vector3(e[0],e[1],e[2]),new three.Vector3(e[3],e[4],e[5])]}setMaterial(e){let t=this.line.material;for(let n in e){if(!e.hasOwnProperty(n))continue;let r=e[n];n===`dashed`?(t.dashed=r,r?t.defines.USE_DASH=``:delete t.defines.USE_DASH,t.needsUpdate=!0):t[n]=e[n]}this.needsRender=!0}setResolution(e,t){let n=this.line.material.resolution;(n.x!==e||n.y!==t)&&(n.set(e,t),this.needsRender=!0)}};Object.assign(FiveLine.prototype,{isFiveLine:!0});var Constants={Handedness:Object.freeze({NONE:`none`,LEFT:`left`,RIGHT:`right`}),ComponentState:Object.freeze({DEFAULT:`default`,TOUCHED:`touched`,PRESSED:`pressed`}),ComponentProperty:Object.freeze({BUTTON:`button`,X_AXIS:`xAxis`,Y_AXIS:`yAxis`,STATE:`state`}),ComponentType:Object.freeze({TRIGGER:`trigger`,SQUEEZE:`squeeze`,TOUCHPAD:`touchpad`,THUMBSTICK:`thumbstick`,BUTTON:`button`}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:`transform`,VISIBILITY:`visibility`})};function fetchJsonFile(e){return __awaiter(this,void 0,void 0,function*(){let t=yield fetch(e);if(t.ok)return t.json();throw Error(t.statusText)})}function fetchProfilesList(e){return __awaiter(this,void 0,void 0,function*(){if(!e)throw Error(`No basePath supplied`);return yield fetchJsonFile(`${e}/profilesList.json`)})}function fetchProfile(e,t){return __awaiter(this,arguments,void 0,function*(e,t,n=null,r=!0){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No basePath supplied`);let o=yield fetchProfilesList(t),s;if(e.profiles.some(e=>{let n=o[e];return n&&(s={profileId:e,profilePath:`${t}/${n.path}`,deprecated:!!n.deprecated}),!!s}),!s){if(!n)throw Error(`No matching profile name found`);let e=o[n];if(!e)throw Error(`No matching profile name found and default profile "${n}" missing.`);s={profileId:n,profilePath:`${t}/${e.path}`,deprecated:!!e.deprecated}}let c=yield fetchJsonFile(s.profilePath),l;if(r){let t;if(t=c.layouts[e.handedness],!t)throw Error(`No matching handedness, ${e.handedness}, in profile ${s.profileId}`);t.assetPath&&(l=s.profilePath.replace(`profile.json`,t.assetPath))}return{profile:c,assetPath:l}})}var defaultComponentValues={xAxis:0,yAxis:0,button:0,state:Constants.ComponentState.DEFAULT};function normalizeAxes(e=0,t=0){let n=e,r=t;if(Math.sqrt(e*e+t*t)>1){let o=Math.atan2(t,e);n=Math.cos(o),r=Math.sin(o)}return{normalizedXAxis:n*.5+.5,normalizedYAxis:r*.5+.5}}var VisualResponse=class{constructor(e){this.componentProperty=e.componentProperty,this.states=e.states,this.valueNodeName=e.valueNodeName,this.valueNodeProperty=e.valueNodeProperty,this.valueNodeProperty===Constants.VisualResponseProperty.TRANSFORM&&(this.minNodeName=e.minNodeName,this.maxNodeName=e.maxNodeName),this.value=0,this.updateFromComponent(defaultComponentValues)}updateFromComponent({xAxis:e,yAxis:t,button:n,state:r}){let{normalizedXAxis:o,normalizedYAxis:s}=normalizeAxes(e,t);switch(this.componentProperty){case Constants.ComponentProperty.X_AXIS:this.value=this.states.includes(r)?o:.5;break;case Constants.ComponentProperty.Y_AXIS:this.value=this.states.includes(r)?s:.5;break;case Constants.ComponentProperty.BUTTON:this.value=this.states.includes(r)?n:0;break;case Constants.ComponentProperty.STATE:this.valueNodeProperty===Constants.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(r):this.value=this.states.includes(r)?1:0;break;default:throw Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}},Component=class{constructor(e,t){if(!e||!t||!t.visualResponses||!t.gamepadIndices||Object.keys(t.gamepadIndices).length===0)throw Error(`Invalid arguments supplied`);this.id=e,this.type=t.type,this.rootNodeName=t.rootNodeName,this.touchPointNodeName=t.touchPointNodeName,this.visualResponses={},Object.keys(t.visualResponses).forEach(e=>{let n=new VisualResponse(t.visualResponses[e]);this.visualResponses[e]=n}),this.gamepadIndices=Object.assign({},t.gamepadIndices),this.values={state:Constants.ComponentState.DEFAULT,button:this.gamepadIndices.button===void 0?void 0:0,xAxis:this.gamepadIndices.xAxis===void 0?void 0:0,yAxis:this.gamepadIndices.yAxis===void 0?void 0:0}}get data(){return Object.assign({id:this.id},this.values)}updateFromGamepad(e){if(this.values.state=Constants.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&e.buttons.length>this.gamepadIndices.button){let t=e.buttons[this.gamepadIndices.button];this.values.button=t.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,t.pressed||this.values.button===1?this.values.state=Constants.ComponentState.PRESSED:(t.touched||this.values.button>Constants.ButtonTouchThreshold)&&(this.values.state=Constants.ComponentState.TOUCHED)}this.gamepadIndices.xAxis!==void 0&&e.axes.length>this.gamepadIndices.xAxis&&(this.values.xAxis=e.axes[this.gamepadIndices.xAxis],this.values.xAxis=this.values.xAxis<-1?-1:this.values.xAxis,this.values.xAxis=this.values.xAxis>1?1:this.values.xAxis,this.values.state===Constants.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>Constants.AxisTouchThreshold&&(this.values.state=Constants.ComponentState.TOUCHED)),this.gamepadIndices.yAxis!==void 0&&e.axes.length>this.gamepadIndices.yAxis&&(this.values.yAxis=e.axes[this.gamepadIndices.yAxis],this.values.yAxis=this.values.yAxis<-1?-1:this.values.yAxis,this.values.yAxis=this.values.yAxis>1?1:this.values.yAxis,this.values.state===Constants.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>Constants.AxisTouchThreshold&&(this.values.state=Constants.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(e=>{e.updateFromComponent(this.values)})}},MotionController=class{constructor(e,t,n){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No profile supplied`);this.xrInputSource=e,this.assetUrl=n,this.id=t.profileId,this.layoutDescription=t.layouts[e.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(e=>{let t=this.layoutDescription.components[e];this.components[e]=new Component(e,t)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){let e=[];return Object.values(this.components).forEach(t=>{e.push(t.data)}),e}updateFromGamepad(){Object.values(this.components).forEach(e=>{e.updateFromGamepad(this.xrInputSource.gamepad)})}},DEFAULT_PROFILES_PATH=`https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles`,DEFAULT_PROFILE=`generic-trigger`,XRControllerModel=class extends three.Object3D{constructor(){super(),this.motionController=null,this.envMap=null}setEnvironmentMap(e){return this.envMap==e?this:(this.envMap=e,this.traverse(e=>{e instanceof three.Mesh&&e.isMesh&&(e.material.envMap=this.envMap,e.material.needsUpdate=!0)}),this)}updateMatrixWorld(e){super.updateMatrixWorld(e),this.motionController&&(this.motionController.updateFromGamepad(),Object.values(this.motionController.components).forEach(e=>{Object.values(e.visualResponses).forEach(e=>{let{valueNode:t,minNode:n,maxNode:r,value:o,valueNodeProperty:s}=e;t&&(s===Constants.VisualResponseProperty.VISIBILITY?t.visible=o:s===Constants.VisualResponseProperty.TRANSFORM&&(t.quaternion.copy(n.quaternion).slerp(r.quaternion,o),t.position.lerpVectors(n.position,r.position,o)))})}))}};function findNodes(e,t){Object.values(e.components).forEach(e=>{let{type:n,touchPointNodeName:r,visualResponses:o}=e;if(n===Constants.ComponentType.TOUCHPAD)if(e.touchPointNode=t.getObjectByName(r),e.touchPointNode){let t=new three.Mesh(new three.SphereGeometry(.001),new three.MeshBasicMaterial({color:255}));e.touchPointNode.add(t)}else console.warn(`Could not find touch dot, ${e.touchPointNodeName}, in touchpad component ${e.id}`);Object.values(o).forEach(e=>{let{valueNodeName:n,minNodeName:r,maxNodeName:o,valueNodeProperty:s}=e;if(s===Constants.VisualResponseProperty.TRANSFORM){if(e.minNode=t.getObjectByName(r),e.maxNode=t.getObjectByName(o),!e.minNode){console.warn(`Could not find ${r} in the model`);return}if(!e.maxNode){console.warn(`Could not find ${o} in the model`);return}}e.valueNode=t.getObjectByName(n),e.valueNode||console.warn(`Could not find ${n} in the model`)})})}function addAssetSceneToControllerModel(e,t){findNodes(e.motionController,t),e.envMap&&t.traverse(t=>{t instanceof three.Mesh&&t.isMesh&&(t.material.envMap=e.envMap,t.material.needsUpdate=!0)}),e.add(t)}var XRControllerModelFactory=class{constructor(e=null){this.gltfLoader=e,this.path=DEFAULT_PROFILES_PATH,this._assetCache={}}createControllerModel(e){let t=new XRControllerModel,n=null;return e.addEventListener(`connected`,e=>{let r=e.data;r.targetRayMode!==`tracked-pointer`||!r.gamepad||fetchProfile(r,this.path,DEFAULT_PROFILE).then(({profile:e,assetPath:o})=>{t.motionController=new MotionController(r,e,o);let s=this._assetCache[t.motionController.assetUrl];if(s)n=s.scene.clone(),addAssetSceneToControllerModel(t,n);else{if(!this.gltfLoader)throw Error(`GLTFLoader not set.`);this.gltfLoader.load(t.motionController.assetUrl,e=>{this._assetCache[t.motionController.assetUrl]=e,n=e.scene.clone(),addAssetSceneToControllerModel(t,n)})}}).catch(e=>{console.warn(e)})}),e.addEventListener(`disconnected`,()=>{t.motionController=null,t.remove(n),n=null}),t}},defaultXRPanoramaControllerInitArgs=Object.assign({},omit(defaultPanoramaControllerCustomInitArgs,[`maxLatitude`,`minLatitude`]));function mapPanoResource(e,t){if(!t)return e;let n=e.match(/\d+_[a-z].png/);return e.substring(0,n.index)+t+`/`+e.substring(n.index)}var CONTROLLER_EVNET_DELTA_TIME=300,scratchRaycaster=new three.Raycaster,scratchVector3=new three.Vector3,XRPanoramaController=class e extends PanoramaController{static parseArgs(t){if(t instanceof e)return t;let n=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2});return super.parseArgs(n)}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`XRPanorama`})}constructor(e){super(e),this.xrManager=new XRManager(this.renderer,this.renderer.getContext(),{onSessionStart:e=>{this.emit(`xr.session.start`,createEvent(`xr.session.start`,{session:e,machineType:this.xrManager.machineType}))},onSessionEnd:()=>{this.emit(`xr.session.end`,createEvent(`xr.session.end`,{session:null,machineType:this.xrManager.machineType}))}}),this.xrControllerRay={left:new three.Raycaster,right:new three.Raycaster},this.xrControllerRay.left.params.Points={threshold:.1},this.xrControllerRay.left.firstHitOnly=!0,this.xrControllerRay.left.floorIndex=-1,this.xrControllerRay.right.params.Points={threshold:.1},this.xrControllerRay.right.firstHitOnly=!0,this.xrControllerRay.right.floorIndex=-1,this.gazeRay=null,this.pointerLines={left:new FiveLine,right:new FiveLine},this.pointerLines.left.visible=!1,this.pointerLines.right.visible=!0,this.pointerLines.left.setMaterial({color:new three.Vector3(1,1,1)}),this.pointerLines.left.points.material.depthTest=!1,this.pointerLines.right.setMaterial({color:new three.Vector3(1,1,1)}),this.pointerLines.right.points.material.depthTest=!1,this.controllerWrappers=[new three.Group,new three.Group];let t=this.xrManager.getController(0);this.controllerWrappers[0].add(t);let n=this.xrManager.getController(1);this.controllerWrappers[1].add(n);let r=new XRControllerModelFactory;r.gltfLoader={load(e,t){internalFetcher.ajax(e,{responseType:`arraybuffer`}).then(t=>{var n;return parseGltf(t.body,{resourcePath:e.slice(0,e.lastIndexOf(`/`)+1),search:(n=e.split(`?`)[1])==null?``:n,fetcher:internalFetcher})}).then(e=>t(e))}},(this.xrManager.machineType===`Oculus`||this.xrManager.machineType===`Pico`)&&this.scene.add(this.pointerLines.left,this.pointerLines.right,this.controllerWrappers[0],this.controllerWrappers[1]),this.panoResources={},this.panoResources[this.locationMotion.keyframes[0].key=this.locationMotion.keyframes[1].key=createUuid()]={panoId:panoStringify(this.currentPano),leftPanoPicture:null,position:this.camera.pose.offset.clone(),effect:`fade`,effectEasing:defaultEffectEase,fixCameraTransform:new three.Matrix4},this.parallaxCameraMatrixs=[];let o=AnimationFrameLoop.shared.getContext();if(!o){console.error(`获取session失败,请退出重试`);return}this.on(`xr.session.end`,()=>{this.scene.remove(this.pointerLines.left,this.pointerLines.right)}),this.xrManager.setSession(o),this.on(`xr.session.start`,()=>{let e=this.xrManager.getControllerGrip(0);e.add(r.createControllerModel(e)),this.controllerWrappers[0].add(e);let t=this.xrManager.getControllerGrip(1);t.add(r.createControllerModel(t)),this.controllerWrappers[1].add(t)}),this.xrHandleState={LeftAxesUp:{touchStartTime:0,touchStart:!1},LeftAxesDown:{touchStartTime:0,touchStart:!1},LeftAxesLeft:{touchStartTime:0,touchStart:!1},LeftAxesRight:{touchStartTime:0,touchStart:!1},LeftTrigger:{touchStartTime:0,touchStart:!1},LeftPinch:{touchStartTime:0,touchStart:!1},RightAxesUp:{touchStartTime:0,touchStart:!1},RightAxesDown:{touchStartTime:0,touchStart:!1},RightAxesLeft:{touchStartTime:0,touchStart:!1},RightAxesRight:{touchStartTime:0,touchStart:!1},RightTrigger:{touchStartTime:0,touchStart:!1},RightPinch:{touchStartTime:0,touchStart:!1},Y:{touchStartTime:0,touchStart:!1},X:{touchStartTime:0,touchStart:!1},A:{touchStartTime:0,touchStart:!1},B:{touchStartTime:0,touchStart:!1}},this.xrManager.machineType===`VP`&&this.initHandEvent()}updateConfiguration(e){return super.updateConfiguration(Object.assign(Object.assign({},e),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2}))}moveToPano(e,t,n){var r,o,s;let c=(r=t.effect)==null?`fade`:r;this.userAction=n,this.stopMomentumMovement();let l=panoStringify(e),u=this.works.getObserver(e);if(!u)throw Error(`Invalid PanoIndex`);let d=getImageSizeFromURL(u.images.up),f=this.imageOptions.size;f===void 0&&u&&d&&(f=Number(d)),f===void 0&&(f=2048);let p=this.imageOptions.transform,m=(e,t)=>mapPanoResource(applyImageURLOptions(e,p,t)),h=Object.assign({key:`pano.${l}`},pick(this.imageOptions,[`format`,`size`,`quality`])),g={right:u.images.work.getURL(u.images.right),left:u.images.work.getURL(u.images.left),up:u.images.work.getURL(u.images.up),down:u.images.work.getURL(u.images.down),front:u.images.work.getURL(u.images.front),back:u.images.work.getURL(u.images.back)},_=`pano:`+jsonHash([g,h,p]);if(this.pendingTextureTask){if(this.pendingTextureTask.hash===_)return;{let t=this.pendingTextureTask.panoId;(o=this.panoMeshes.get(t))==null||o.setProgress(0),this.emit(`pano.texture.abort`,createEvent(`pano.texture.abort`,{error:null,progress:0,meta:null,pano:e}))}}let{pano0:v,pano1:y}=this.modelScene.parameter.resolveValue(),b;if((v==null?void 0:v.map.name)===_?b=v:(y==null?void 0:y.map.name)===_&&(b=y),b){let n={panoId:l,effect:c,effectEasing:(s=t.effectEasing)==null?defaultEffectEase:s,leftPanoPicture:{panoId:b.panoId,map:b.map,mapHistogram:b.mapHistogram,mapSize:b.mapSize,matrix:u.matrix.clone().premultiply(u.work.transform),zoom:1},position:u.position.clone().applyMatrix4(u.work.transform),fixCameraTransform:new three.Matrix4};this.doMoveToPano(e,n,t);return}let S=`move-to-pano-`+l;this.pending.add(S),this.pendingTextureTask={panoId:l,hash:_,onLoad:n=>{var r,o;let s=n.body;if(this.destroyed)s.dispose();else{s.name=_;let n=Array.isArray(s.image)?s.image[0]:s.image,d=(r=n==null?void 0:n.width)==null?2048:r,f=new Histogram().formPixels(getRgbaDataFromCubeTexture(this.renderer,s,!0,sharedHistogramRgbaData).data),p={panoId:l,effect:c,effectEasing:(o=t.effectEasing)==null?defaultEffectEase:o,leftPanoPicture:{panoId:l,map:s,mapSize:d,mapHistogram:new three.Vector4().fromArray(f.toArray()),matrix:u.matrix.clone(),zoom:1},position:u.position.clone(),fixCameraTransform:new three.Matrix4};this.doMoveToPano(e,p,t)}},onError:n=>{let r=Object.assign(Object.assign(Object.assign({},e),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`pano.error`,createEvent(`pano.error`,{error:n,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),this.emit(`pano.cancel`,createEvent(`pano.cancel`,{error:null,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),t.moveCancelCallback&&t.moveCancelCallback()}};let C=this.panoMeshes.get(l);C&&C.tap&&C.tap(),this.textureLoader.loadCubeTexture(g,{imageURL:{transform:m,options:h},format:three.RGBFormat,fetcher:getFetcher(this.fiveId,u.work)},void 0,void 0,t=>{var n,r;((n=this.pendingTextureTask)==null?void 0:n.hash)===_&&((r=this.panoMeshes.get(l))==null||r.setProgress(t)),this.emit(`pano.texture.progress`,createEvent(`pano.texture.progress`,{error:null,progress:t,meta:null,pano:e}))},this.renderer).then(t=>{var n,r;this.pending.delete(S),((n=this.pendingTextureTask)==null?void 0:n.hash)===_?(this.pendingTextureTask.onLoad(t),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(l))==null||r.setProgress(0)):t.body.dispose(),this.emit(`pano.texture.success`,createEvent(`pano.texture.success`,{error:null,progress:1,meta:t.meta,pano:e}))}).then(()=>new Promise(e=>{AnimationFrameLoop.shared.add(()=>e(),!0)})).catch(t=>{var n,r;this.pending.delete(S),((n=this.pendingTextureTask)==null?void 0:n.hash)===_&&(this.pendingTextureTask.onError(t),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(l))==null||r.setProgress(0)),this.emit(`pano.texture.error`,createEvent(`pano.texture.error`,{error:t,progress:0,meta:null,pano:e})),this.emit(`error`,t)}),this.emit(`pano.texture.load`,createEvent(`pano.texture.load`,{error:null,progress:0,meta:null,pano:e}))}doMoveToPano(e,t,n={}){var r,o,s,c,l,u,d,f,p,m;let h=now(),g=createUuid();this.panoResources[g]=t;let _=1,v,y,b;if(this.locationMotion.ended){let[e,n]=this.locationMotion.getKeyFrameSegment(h),r=this.locationMotion.value,o=this.panoResourceFromLocationMotionKeyframe(n).position,s=t.position;v=Math.max(o.distanceTo(s),1),y=[{key:n.key,progress:0,value:Object.assign(Object.assign({},r),{count:0})},{key:g,progress:1,value:{distance:0,count:1}}],b=0}else{let[e,n]=this.locationMotion.getKeyFrameSegment(h),r=this.locationMotion.value,o=this.panoResourceFromLocationMotionKeyframe(e).position,s=this.panoResourceFromLocationMotionKeyframe(n).position,c=t.position,l=n.value.count-r.count,u=Math.max(o.distanceTo(s),1)*l;v=u+Math.max(s.distanceTo(c),1),y=[{key:e.key,progress:0,value:Object.assign({},r)},{key:n.key,progress:u/v,value:n.value},{key:g,progress:1,value:{count:n.value.count+1,distance:0}}];let d=this.locationMotionKeyframesLength(this.locationMotion.keyframes),f=this.locationMotionKeyframesLength(y);b=this.locationMotion.getProgressVelocity(h)*d/f}let S=t.effect===`instant`?0:this.calculateMovingDuration(n.duration,t.effect===`fly`||t.effect===`model`?v:0),C={longitude:n.longitude,latitude:n.latitude,fov:n.fov},w=Object.assign(Object.assign({},e),{mode:this.mode,longitude:(r=C.longitude)==null?this.camera.pose.longitude:r,latitude:(o=C.latitude)==null?this.camera.pose.latitude:o,fov:(s=C.fov)==null?this.camera.pose.fov:s,offset:t.position.clone(),distance:0}),T=this.currentPano;if(this.emit(`pano.moveTo`,createEvent(`pano.moveTo`,{options:n,prevPano:T,progress:0,state:w,userAction:this.userAction,error:null})),n.moveStartCallback&&n.moveStartCallback(w),this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement&&this.videoTexture.image.getAttribute(`src`)&&(this.videoTexture.image.pause(),this.videoTexture.image.removeAttribute(`uuid`),this.videoTexture.image.removeAttribute(`src`),this.videoTexture.image.oncanplay=noop,this.videoTexture.needsUpdate=!0),this.panoVideo.setMaterial(null),t.effect===`fly`||t.effect===`model`)this.cameraMotion.set(C,S).catch(noop);else{let e=coordinatesToVector({longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude}),n=coordinatesToVector({longitude:(c=C.longitude)==null?this.cameraMotion.value.longitude:c,latitude:(l=C.latitude)==null?this.cameraMotion.value.latitude:l}),r=new three.Object3D;r.lookAt(e);let o=new three.Matrix4().makeRotationFromQuaternion(r.quaternion);r.lookAt(n);let s=new three.Matrix4().makeRotationFromQuaternion(r.quaternion),h=new three.Matrix4().getInverse(o).premultiply(s),g=this.cameraMotion.value.fov,_=(u=C.fov)==null?this.cameraMotion.value.fov:u,v=1;t.effect===`zoomin`?v=1.5:t.effect===`zoomout`&&(v=.4);let b=_*v;for(let e=0;e<y.length-1;e++){let t=y[e].key;if(t){let e=this.panoResources[t];e&&(e.fixCameraTransform.copy(h),e.leftPanoPicture&&(e.leftPanoPicture.zoom=Math.tan(b/2/180*Math.PI)/Math.tan(g/2/180*Math.PI)))}}this.cameraMotion.setKeyframes([{progress:0,value:{longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov}},{progress:0,value:{longitude:(d=C.longitude)==null?this.cameraMotion.value.longitude:d,latitude:(f=C.latitude)==null?this.cameraMotion.value.latitude:f,fov:b}},{progress:1,value:{longitude:(p=C.longitude)==null?this.cameraMotion.value.longitude:p,latitude:(m=C.latitude)==null?this.cameraMotion.value.latitude:m,fov:_}}],S).catch(noop)}this.locationMotion.setKeyframes(y,S,b).then(()=>{for(let e of this.modelScene.children)e instanceof Model&&e.show();let t=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:0});this.emit(`pano.arrived`,createEvent(`pano.arrived`,{options:n,prevPano:T,progress:1,state:t,userAction:this.userAction,error:null})),n.moveEndCallback&&n.moveEndCallback(t);let r=this.works.getObserver(this.currentPano);if(r&&r.images.video&&this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement){let e={map:this.videoTexture,size:r.images.video.size.clone(),matrix:r.images.video.matrix.clone(),panoMatrix:r.matrix.clone().premultiply(r.work.transform),alpha:1},t=createUuid(),n=this.videoTexture.image;n.setAttribute(`uuid`,t),canplayVideo().then(o=>{o&&r.images.video&&n.getAttribute(`uuid`)===t&&(n.oncanplay=()=>{n.oncanplay=noop,n.play()},n.ontimeupdate=()=>{n.currentTime>.5&&(n.ontimeupdate=noop,this.panoVideo.setMaterial(e))},n.src=r.images.video.source)}).catch((()=>{n.removeAttribute(`uuid`)}))}},()=>{this.emit(`pano.cancel`,createEvent(`pano.cancel`,{options:n,prevPano:T,progress:0,state:w,userAction:this.userAction,error:null})),n.moveCancelCallback&&n.moveCancelCallback()})}checkSelectedPano(e){var t;this.stopMomentumMovement(),this.camera.getDirection(new three.Vector3).setY(0);let n=null,r=this.works.getObserver(this.currentPano);if(!r)return null;let o=r.work.observers,s=r.accessibleNodes.filter(e=>{if(e===this.currentPano.panoIndex&&r.work.workCode===this.currentPano.workCode)return!1;let t=o[e];return!t||scratchVector3.copy(t.position).applyMatrix4(t.work.transform).distanceTo(this.camera.position)>this.maxAccessibleDistance?!1:t.loadable||t.active}),[c]=this.modelScene.intersectRaycaster(e);if(c){let[e,r]=arrayMin(s,e=>{let t=o[e];return t?scratchVector3.copy(t.standingPosition).applyMatrix4(t.work.transform).distanceTo(c.point):1/0},!0);typeof e==`number`&&r<this.panoTapTriggerRadius&&(n=(t=o[e])==null?null:t)}if(isNil(n)){let t=this.getForwardObserverOrNot(this.xrManager.cameraVR,e);t&&(n=t)}for(let e of this.locationMotion.keyframes){let t=this.panoResourceFromLocationMotionKeyframe(e);if(!(e.progress<this.locationMotion.progress)&&n){let e=panoStringify({panoIndex:n.panoIndex,workCode:n.work.workCode});if(t.panoId===e){n=null;break}}}if(isNil(n))return this.locationMotion.ended===!0&&this.cameraBounce(),null;if(!n.active){let e=panoStringify({panoIndex:n.panoIndex,workCode:n.work.workCode}),t=this.panoMeshes.get(e);t&&(t.setDisabled(!1),t.setLoading(!0))}let l={workCode:n.work.workCode,panoIndex:n.panoIndex,mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,distance:0,offset:n?n.position.clone():new three.Vector3};return this.emit(`pano.select`,createEvent(`pano.select`,{prevPano:this.currentPano,state:l,userAction:!0,options:{},progress:0,error:null})),n&&n.active?(this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:l,options:{},error:null})),{workCode:n.work.workCode,panoIndex:n.panoIndex}):null}destroy(){super.destroy()}isReady(){return!1}updateCamera(e,t,n){return Promise.resolve()}updateCameraWithKeyframes(e,t,n){return Promise.resolve()}updateTime(e,t,...n){var r,o,s,c,l,u,d,f,p;this.userAction=!0;let m={},h={},g=this.camera.getDirection(new three.Vector3),_=this.locationMotion.keyframes[0],v=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[y,b]=this.locationMotion.getKeyFrameSegment(e),S=this.panoResourceFromLocationMotionKeyframe(y),C=this.panoResourceFromLocationMotionKeyframe(b),w=this.panoResourceFromLocationMotionKeyframe(_),T=this.panoResourceFromLocationMotionKeyframe(v),E=!1;if(this.cameraMotion.ended===!1&&(this.cameraMotion.update(e),h.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),m.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-b.value.count+1,n=new three.Vector3().copy(S.position),s=new three.Vector3().copy(C.position);if(m.progress=t,t>=.01&&t<=.99&&(m.progress=clamp$1(C.effectEasing(t),.01,.99)),C.leftPanoPicture&&(t<1?S.leftPanoPicture&&(m.pano0=S.leftPanoPicture):m.pano0=C.leftPanoPicture,m.pano1=C.leftPanoPicture),C.effect===`montage`?m.transition=`BLACK`:C.effect===`spread`?m.transition=`SPREAD`:m.transition=`FADE`,C.effect===`zoomin`||C.effect===`zoomout`?m.progress=Math.pow(t,3):C.effect===`model`&&this.camera.pose.distance<.01&&(m.modelAlpha=1-Math.pow(clamp$1(Math.abs(t-.5)*2,0,1),4)),t<1&&C.effect!==`fly`){if(m.pano0&&S.leftPanoPicture){let e={panoId:m.pano0.panoId,map:m.pano0.map,mapHistogram:m.pano0.mapHistogram,mapSize:m.pano0.mapSize,zoom:m.pano0.zoom,matrix:S.leftPanoPicture.matrix.clone().setPosition(C.position)},t=this.panoPictureObserverMap.get(m.pano0);t&&this.panoPictureObserverMap.set(e,t),m.pano0=e}n.copy(s),E=!0}h.distance=this.locationMotion.value.distance,h.offset=new three.Vector3(n.x+(s.x-n.x)*t,n.y+(s.y-n.y)*t,n.z+(s.z-n.z)*t);let c=[],l=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(c.push(t),n>this.locationMotion.progress&&l.push(t))}for(let e of Object.keys(this.panoResources)){if(l.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.leftPanoPicture){let e=t.leftPanoPicture.map;if(e){if(e===((r=m.pano0)==null?void 0:r.map)||e===((o=m.pano1)==null?void 0:o.map))continue;e.dispose(),t.leftPanoPicture=null}}c.indexOf(e)>=0||delete this.panoResources[e]}let u=panoParse(C.panoId);u!==this.currentPano&&(this.currentPano=u,this.accessibleObserverFloorCheckCount=0),this.emit(`pano.moving`,createEvent(`pano.moving`,{userAction:this.userAction,prevPano:panoParse(w.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},panoParse(T.panoId)),{mode:this.mode}),clonePose(this.camera.pose)),h),options:{},progress:this.locationMotion.progress,error:null}))}this.camera.setFromPose(h),this.xrManager.cameraVR.projectionMatrix.copy(this.camera.projectionMatrix),this.xrManager.cameraVR.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),this.xrManager.cameraVR.matrix.copy(this.camera.matrix),this.xrManager.cameraVR.position.copy(this.camera.position),this.xrManager.cameraVR.quaternion.copy(this.camera.quaternion),this.xrManager.cameraVR.scale.copy(this.camera.scale),this.xrManager.cameraVR.matrixAutoUpdate=!1,this.xrManager.cameraVR.matrixWorld.copy(this.camera.matrixWorld);let[D,O]=n,k=new three.Vector3(0,0,0),A=new three.Vector2().copy(this.camera.resolution);if(O&&this.xrManager.session&&this.xrManager.referenceSpace&&this.xrManager.session.renderState.baseLayer){let n=this.xrManager.cameraVR,r=this.xrManager.referenceSpace,o=this.xrManager.session.renderState.baseLayer,u=O.getViewerPose(r),d=(s=u==null?void 0:u.views)==null?[]:s;for(let e=0;e<d.length;e++){let t=d[e],r=n.cameras[e],s=o.getViewport(t);s&&(r.projectionMatrix.fromArray(t.projectionMatrix),r.projectionMatrixInverse.getInverse(r.projectionMatrix),r.matrix.fromArray(t.transform.matrix),r.matrix.setPosition(this.camera.position),r.matrix.decompose(r.position,r.quaternion,r.scale),r.matrixWorld.copy(r.matrix),r.matrixWorldInverse.getInverse(r.matrixWorld),r.matrixAutoUpdate=!1,k.copy(r.position),r.viewport.set(s.x,s.y,s.width,s.height),A.set(s.width,s.height))}if(this.xrManager.setProjectionFromUnion(this.xrManager.cameraVR,this.xrManager.cameraL,this.xrManager.cameraR),this.camera.quaternion.copy(this.xrManager.cameraVR.quaternion),this.camera.scale.copy(this.xrManager.cameraVR.scale),this.camera.matrix.compose(this.camera.position,this.camera.quaternion,this.camera.scale),this.camera.computePose((c=h.distance)==null?this.camera.pose.distance:c),this.xrManager.session.inputSources){for(let e=0;e<this.xrManager.session.inputSources.length;e++)if(this.xrManager.session.inputSources[e]&&this.xrManager.session.inputSources[e].targetRayMode===`transient-pointer`){let t=O.getPose(this.xrManager.session.inputSources[e].targetRaySpace,r);if(t){let e=t.transform.orientation,n=new three.Quaternion(e.x,e.y,e.z,e.w),r=new three.Vector3(0,0,-1).applyQuaternion(n);this.gazeRay=new three.Raycaster(this.camera.position,r)}}}if(this.xrManager.machineType===`Oculus`||this.xrManager.machineType===`Pico`){let n=this.xrManager.session.inputSources;for(let e=0;e<n.length;e++){let t=this.xrManager.controllers[e],o=n[e];if(!o)continue;t&&t.update(o,O,r);let s=this.xrManager.getController(e),c=new three.Vector3(0,1.2,0),u=s.position.clone().add(k).sub(c);o.handedness===`left`?this.xrControllerRay.left.set(u,new three.Vector3(0,0,-1).applyEuler(s.rotation)):o.handedness===`right`&&this.xrControllerRay.right.set(u,new three.Vector3(0,0,-1).applyEuler(s.rotation)),this.controllerWrappers[e].position.copy(new three.Vector3(0,0,0).add(k).sub(c));let d=this.modelScene.intersectRaycaster(this.xrControllerRay.right);if(d.length===0){let e=this.works.getResolvedObserver(this.currentPano);d=this.xrControllerRay.right.intersectObject(this.modelScene.boundingMesh,!0).map(t=>{var n;let r=(n=e==null?void 0:e.floorIndex)==null?0:n;return Object.assign({floorIndex:r,floor:r},t)})}if(d.length>=1&&d[0].face)if(o.handedness===`right`){let e=this.xrControllerRay.right.intersectObject(this.xrCustomObjectsScene,!0),t=d[0].face.normal,n=t.clone(),r=d[0].point.clone();this.intersectMesh.position.copy(r);let o=r.clone().add(n);if(this.intersectMesh.lookAt(o),Math.abs(t.y)>.99){let e=this.camera.position.clone().sub(r);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0,e.length>0?(this.pointerLines.right.setPoints(u,e[0].point),this.pointerLines.right.points.visible=!0,this.intersectMesh.visible=!1):(this.pointerLines.right.points.visible=!1,this.pointerLines.right.setPoints(u,d[0].point));let s=d[0],c=createEvent(`intersect.update`,{raycaster:(l=this.xrControllerRay.right)==null?null:l,intersection:s==null?null:s,object:this.intersectMesh});if(this.emit(`intersect.update`,c),c.defaultPrevented){this.hideIntersectMesh();return}}else this.pointerLines.left.setPoints(u,d[0].point)}this.updateControllerHelper(n,e,t)}}else O||console.error(`xrFrame丢失,请重试`),this.xrManager.session||console.error(`session丢失,请重试`),this.xrManager.session&&!this.xrManager.session.renderState.baseLayer&&console.error(`no layer found`);isEmptyObject(m)===!1&&this.modelScene.parameter.set(m),this.emit(`camera.update`,createEvent(`camera.update`,{userAction:this.userAction,state:Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose))}));let j=this.works.getResolvedObserver(this.currentPano),M=this.locationMotion.ended?this.getForwardObserverOrNot(this.xrManager.cameraVR):null,N=this.works.getObserver(S.panoId),P=this.works.getObserver(C.panoId);if(this.adjustPanoCircleMeshPositionBasedOnModel&&this.helper.visible&&j){let e=[],t=j.work.observers;for(let n of j.accessibleNodes){let r=t[n];r&&e.push(r)}let n=new Map;if(e.sort((e,t)=>{let r=n.get(e);r===void 0&&(r=e.standingPosition.distanceTo(j.standingPosition),n.set(e,r));let o=n.get(e);return o===void 0&&(o=t.standingPosition.distanceTo(j.standingPosition),n.set(t,o)),r-o}),e.length){this.accessibleObserverFloorCheckCount%=e.length;let t=e[this.accessibleObserverFloorCheckCount],n=this.modelScene.models.find(e=>e.work===(t==null?void 0:t.work));if(t&&n&&n.visible){let e=.3,r=.05,o=.005,s=t.standingPosition.clone().applyMatrix4(t.work.transform),c=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode}),l=adjustPanoCircleMeshVectors.map(t=>{scratchRaycaster.ray.origin.copy(s),scratchRaycaster.ray.origin.add(scratchVector3.copy(t).setY(e)),scratchRaycaster.ray.direction.set(0,-1,0),scratchRaycaster.firstHitOnly=!0,scratchRaycaster.floorIndex=-1;let[r]=n.intersectRaycaster(scratchRaycaster);return r&&r.distance-o<=e?new three.Vector3().copy(s).setY(r.point.y+o):s});l.sort((e,t)=>t.y-e.y);let u=l[Math.floor(l.length/2)],[d]=l.filter(e=>e.distanceTo(u)<=.05);if(d){let e=new three.Vector4(s.x,s.y,s.z,d.y-s.y),t=this.adjustPanoCircleMeshPositionFix.get(c);t&&!e.equals(t)&&(this.needsRender=!0),this.adjustPanoCircleMeshPositionFix.set(c,e)}}this.accessibleObserverFloorCheckCount++}}let F=new Map;if(N)for(let e of N.accessibleNodes){let t=N.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});F.set(e,t)}}if(P)for(let e of P.accessibleNodes){let t=P.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});F.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{F.get(t)?F.delete(t):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),F.forEach((e,t)=>{let n=this.panoCircleMeshCreator(e,{aerialObserverMinHeight:this.aerialObserverMinHeight});this.panoMeshes.set(t,n),this.helper.add(n),F.delete(t)}),this.panoMeshes.forEach((e,t)=>{let n=this.works.getObserver(t);if(n){let r=n.position.distanceTo(n.standingPosition)>this.aerialObserverMinHeight;if(r)e.position.copy(n.position).applyMatrix4(n.work.transform),e.scale.setScalar(18);else{e.position.copy(n.standingPosition).applyMatrix4(n.work.transform);let t=this.adjustPanoCircleMeshPositionFix.get(n.panoId);t&&(scratchVector3.set(t.x,t.y,t.z),scratchVector3.equals(e.position)&&(e.position.y+=t.w)),e.scale.setScalar(1.2)}let o=this.camera.position.clone().setY(e.position.y),s=new three.Vector3().copy(e.position).sub(o).normalize();if(t===panoStringify(this.currentPano)){let t=clamp$1((.5-o.distanceTo(e.position))/.5,0,1);s.multiplyScalar(1-t).add(g.clone().multiplyScalar(t))}if(s.length()>0){let t=r?-Math.PI/2:0,n=Math.atan2(s.x,s.z);e.quaternion.setFromEuler(new three.Euler(t,n,0,`YXZ`))}}else e.visible=!1}),this.camera.pose.distance>.1||E)this.panoMeshes.forEach(n=>{n.setOpacity(0),n.setCurrent(!1),n.updateTime&&n.updateTime(e,t),n.visible=!1});else if(j){let n=j.work.observers,[,r]=arrayMin(j.accessibleNodes,e=>{let t=n[e];return!t||!t.active?1/0:j.standingPosition.distanceTo(t.standingPosition)},!0);r=clamp$1(r,2.5,1/0);let o=j.accessibleNodes.concat(j.panoIndex).map(e=>panoStringify({panoIndex:e,workCode:j.work.workCode}));this.panoMeshes.forEach((n,s)=>{let c=this.works.getObserver(s),l=!1,u=1;if(o.indexOf(s)===-1)l=!1,u=0;else if(!c)l=!1,u=0;else if(!c.loadable&&!c.active)l=!1,u=0;else{let e=n.position.clone().project(this.camera);l=Math.abs(e.x)<1&&Math.abs(e.y)<1&&Math.abs(e.z)<1&&!n.loading&&n.progress===0&&M!==null&&panoStringify({panoIndex:M.panoIndex,workCode:M.work.workCode})===s;let t=n.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);u=t<.01?0:clamp$1(r/t,.1,.85)}c&&c===P&&c.position.distanceTo(c.standingPosition)>this.aerialObserverMinHeight&&n.position.distanceTo(this.camera.position)<35&&(u=0),this.modelScene.parameter.resolveValue().modelAlpha>0&&(u=0),n.setCurrent(l),n.setOpacity(u),n.updateTime&&n.updateTime(e,t)})}{let e=(u=this.modelScene.parameter.progress)==null?1:u,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,o=t===0?n:r,s;if(o&&(s=this.works.getObserver(o.panoId),s||(s=this.panoPictureObserverMap.get(o))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(canUseNativeImageBitmap()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!s||!o||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:A,pixelRatio:1,time:this.camera.time,cameraMatrix:this.xrManager.cameraVR.matrixWorld,cameraProjectionMatrix:this.xrManager.cameraVR.projectionMatrix,panoMap:null,panoMatrix:new three.Matrix4,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=getImageSizeLevel(o.mapSize)+1,c=4;this.tiling.setObserver(s);let l={renderer:this.renderer,resolution:A,pixelRatio:1,time:this.camera.time,cameraMatrix:this.xrManager.cameraVR.matrixWorld,cameraProjectionMatrix:this.xrManager.cameraVR.projectionMatrix,panoMap:o.map,panoMatrix:o.matrix,panoZoom:o.zoom,minLevel:e,level:4},u=this.tiling.update(l),f={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:easeInQuart(Math.abs(((d=this.modelScene.parameter.progress)==null?0:d)-.5)*2)},p=this.modelScene.parameter.refinedScreen;(u||f.pano!==(p==null?void 0:p.pano)||f.opacity!==(p==null?void 0:p.opacity))&&this.modelScene.parameter.set(`refinedScreen`,f)}}if(this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e),this.intersectMesh&&this.intersectMesh.parent&&j&&j.position.y-j.standingPosition.y>10){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1);{let e=C.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((f=this.modelScene.parameter.pano0Depth)==null?void 0:f.panoId)!==t.panoId||((p=this.modelScene.parameter.pano1Depth)==null?void 0:p.panoId)!==n.panoId){let e=500,r=512;this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1});let o=new three.CubeCamera(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);o.matrix.copy(t.matrix),o.matrixWorld.copy(o.matrix),o.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,o,500);let s=new three.CubeCamera(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);s.matrix.copy(n.matrix),s.matrixWorld.copy(s.matrix),s.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,s,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}render(){if(this.xrManager.session&&this.xrManager.session.renderState.baseLayer){let e=this.xrManager.session.renderState.baseLayer;return this.renderer.setRenderTarget(null),this.renderer.setScissorTest(!1),this.renderer.setFramebuffer(e.framebuffer),this.renderer.render(this.scene,this.xrManager.cameraVR),this.renderer.setFramebuffer(null),!0}return!1}onPanGesture(){}onTapGesture(){}onPinchGesture(){}onMouseMove(){}onMouseOut(){}panoResourceFromLocationMotionKeyframe(e){return this.panoResources[e.key]}updateControllerHelper(e,t,n){let r=this.xrControllerRay.left,o=this.xrControllerRay.right;if(!e||e.length===0)return;let s={buttons:{X:!1,Y:!1,LeftTrigger:!1,LeftPinch:!1,A:!1,B:!1,RightTrigger:!1,RightPinch:!1}};for(let c=0;c<e.length;c++){let l=e[c].handedness,u=e[c].gamepad;switch(l){case`left`:u.axes&&(this.emitHandleEvent(u.axes[2]===-1,`LeftAxesLeft`,t),this.emitHandleEvent(u.axes[2]===1,`LeftAxesRight`,t),this.emitHandleEvent(u.axes[3]===-1,`LeftAxesUp`,t),this.emitHandleEvent(u.axes[3]===1,`LeftAxesDown`,t)),u!=null&&u.buttons&&(u.buttons[4]&&this.emitHandleEvent(u.buttons[4].pressed,`X`,t),u.buttons[5]&&this.emitHandleEvent(u.buttons[5].pressed,`Y`,t),u.buttons[0]&&this.emitHandleEvent(u.buttons[0].pressed,`LeftTrigger`,t),u.buttons[1]&&this.emitHandleEvent(u.buttons[1].pressed,`LeftPinch`,t));let e={raycaster:r,axes:{up:u.axes&&u.axes[3]<0?Math.abs(u.axes[3]):0,down:u.axes&&u.axes[3]<0?0:Math.abs(u.axes[3]),left:u.axes&&u.axes[2]<0?Math.abs(u.axes[2]):0,right:u.axes&&u.axes[2]<0?0:Math.abs(u.axes[2])},deltaTime:n};s.buttons.X=u.buttons&&u.buttons[4]?u.buttons[4].pressed:!1,s.buttons.Y=u.buttons&&u.buttons[5]?u==null?void 0:u.buttons[5].pressed:!1,s.buttons.LeftTrigger=u.buttons&&u.buttons[0]?u==null?void 0:u.buttons[0].pressed:!1,s.buttons.LeftPinch=u.buttons&&u.buttons[1]?u==null?void 0:u.buttons[1].pressed:!1,s.left=e;break;case`right`:u.axes&&(this.emitHandleEvent(u.axes[2]===-1,`RightAxesLeft`,t),this.emitHandleEvent(u.axes[2]===1,`RightAxesRight`,t),this.emitHandleEvent(u.axes[3]===-1,`RightAxesUp`,t),this.emitHandleEvent(u.axes[3]===1,`RightAxesDown`,t)),u.buttons&&(u.buttons[4]&&this.emitHandleEvent(u.buttons[4].pressed,`A`,t),u.buttons[5]&&this.emitHandleEvent(u.buttons[5].pressed,`B`,t),u.buttons[0]&&this.emitHandleEvent(u.buttons[0].pressed,`RightTrigger`,t),u.buttons[1]&&this.emitHandleEvent(u.buttons[1].pressed,`RightPinch`,t)),s.right={raycaster:o,axes:{up:u.axes&&u.axes[3]<0?Math.abs(u.axes[3]):0,down:u.axes&&u.axes[3]<0?0:Math.abs(u.axes[3]),left:u.axes&&u.axes[2]<0?Math.abs(u.axes[2]):0,right:u.axes&&u.axes[2]<0?0:Math.abs(u.axes[2])},deltaTime:n},s.buttons.A=u.buttons&&u.buttons[4]?u==null?void 0:u.buttons[4].pressed:!1,s.buttons.B=u.buttons&&u.buttons[5]?u==null?void 0:u.buttons[5].pressed:!1,s.buttons.RightTrigger=u.buttons&&u.buttons[0]?u==null?void 0:u.buttons[0].pressed:!1,s.buttons.RightPinch=u.buttons&&u.buttons[1]?u==null?void 0:u.buttons[1].pressed:!1;break;default:break}}this.emit(`xr.controller.update`,createEvent(`xr.controller.update`,s))}emitHandleEvent(e,t,n){let r=this.xrControllerRay.left,o=this.xrControllerRay.right;if(e)this.xrHandleState[t].touchStart===!1?(this.xrHandleState[t].touchStartTime=n,this.xrHandleState[t].touchStart=!0,this.emit(`xr.gesture.buttonDown`,createEvent(`xr.gesture.buttonDown`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!1,isFirst:!0,controllers:{raycaster:{leftRay:r,rightRay:o}}}))):n-this.xrHandleState[t].touchStartTime>CONTROLLER_EVNET_DELTA_TIME&&this.emit(`xr.gesture.press`,createEvent(`xr.gesture.tap`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!0,isFirst:!0,controllers:{raycaster:{leftRay:r,rightRay:o}}}));else if(this.xrHandleState[t].touchStart===!0){if(this.emit(`xr.gesture.buttonUp`,createEvent(`xr.gesture.buttonUp`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!0,isFirst:!1,controllers:{raycaster:{leftRay:r,rightRay:o}}})),n-this.xrHandleState[t].touchStartTime<=CONTROLLER_EVNET_DELTA_TIME){let e=createEvent(`xr.gesture.tap`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!0,isFirst:!1,controllers:{raycaster:{leftRay:r,rightRay:o}}});!this.emit(`xr.gesture.tap`,e)&&!e.defaultPrevented&&t===`RightTrigger`&&this.checkSelectedPano(this.xrControllerRay.right)}this.xrHandleState[t].touchStart=!1,this.xrHandleState[t].touchStartTime=0}}initHandEvent(){if(!this.xrManager.session)throw Error(`初始化失败`);this.xrManager.session.addEventListener(`select`,e=>{this.gazeRay&&this.checkSelectedPano(this.gazeRay)})}},Controllers={Floorplan:FloorplanController,Topview:TopviewController,Panorama:PanoramaController,VRPanorama:VRPanoramaController,Model:ModelController,Mapview:MapviewController,XRPanorama:XRPanoramaController},controllersDefaultInitArgs={Floorplan:defaultFloorplanControllerCustomInitArgs,Topview:defaultTopviewControllerCustomInitArgs,Panorama:defaultPanoramaControllerCustomInitArgs,VRPanorama:defaultVRPanoramaControllerCustomInitArgs,Model:defaultModelControllerCustomInitArgs,Mapview:defaultMapviewControllerCustomInitArgs,XRPanorama:defaultXRPanoramaControllerInitArgs},PROXY_CONTROLLER_EVENT_NAMES=`gesture.pan,gesture.tap,gesture.dbltap,gesture.press,gesture.pinch,gesture.mousewheel,gesture.mousemove,gesture.momentum,gesture.create,initAnimation.start,initAnimation.end,camera.update,intersect.update,pano.select,pano.moveTo,pano.moving,pano.arrived,pano.cancel,pano.error,pano.texture.load,pano.texture.progress,pano.texture.success,pano.texture.error,pano.texture.abort,xr.session.start,xr.session.end,xr.gesture.tap,xr.gesture.press,xr.gesture.buttonUp,xr.gesture.buttonDown,xr.controller.update`.split(`,`);function initLegacyEvent(e){e.on(`initAnimation.start`,t=>{e.emit(`initAnimationWillStart`,t.state.panoIndex,t.state,t.userAction)}),e.on(`initAnimation.end`,t=>{e.emit(`initAnimationEnded`,t.state.panoIndex,t.state,t.userAction)}),e.on(`gesture.pan`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pan`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPanGesture`,t.state,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pan`,t.pointers,t.isFinal),e.emit(`panGesture`,t.state,t.isFinal))}),e.on(`gesture.tap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`tap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`tap`,t.pointers,t.isFinal),e.emit(`tapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.dbltap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`dbltap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsDblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`dbltap`,t.pointers,t.isFinal),e.emit(`dblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.press`,t=>{let n=!1;n=e.emit(`wantsGesture`,`press`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`press`,t.pointers,t.isFinal),e.emit(`pressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal))}),e.on(`gesture.pinch`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pinch`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPinchGesture`,t.scale,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pinch`,t.pointers,t.isFinal),e.emit(`pinchGesture`,t.scale,t.state.fov,t.isFinal))}),e.on(`gesture.mousewheel`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseWheel`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsMouseWheel`,t.center.delta,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseWheel`,t.pointers,t.isFinal),e.emit(`mouseWheel`,t.center.delta,t.state.fov,t.isFinal))}),e.on(`gesture.mousemove`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseMove`,t.pointers,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseMove`,t.pointers,t.isFinal),n=e.emit(`wantsChangeCameraFov`,t.state.fov),n&&t.preventDefault())}),e.on(`gesture.momentum`,t=>{let n=!1;n=e.emit(`wantsInteriaPan`,t.state),n&&t.preventDefault(),t.defaultPrevented||e.emit(`interiaPan`,t.state,t.isFinal)}),e.on(`camera.update`,t=>{e.emit(`cameraFovUpdate`,t.state.fov,t.userAction),e.emit(`cameraDirectionUpdate`,t.state,t.userAction);let n=coordinatesToVector(t.state);n.setLength(t.state.distance);let r=t.state.offset.clone().sub(n);e.emit(`cameraPositionUpdate`,r,t.userAction),e.emit(`cameraUpdate`,t.state,t.userAction)}),e.on(`intersect.update`,t=>{if(t.intersection){let n=!1;n=e.emit(`wantsShowIntersectionOnModel`,t.raycaster),n&&t.preventDefault(),t.defaultPrevented||e.emit(`intersectionOnModelUpdate`,t.intersection,t.object)}else e.emit(`intersectionHidden`)}),e.on(`pano.request`,t=>{let n=e.emit(`wantsMoveToPano`,t.state.panoIndex,t.options,t.userAction);n||(n=e.emit(`wantsToMoveToPano`,t.state.panoIndex,t.options,t.userAction)),n&&t.preventDefault(),t.defaultPrevented||e.emit(`panoWillLoad`,t.state.panoIndex)}),e.on(`pano.select`,t=>{e.emit(`panoSelected`,t.state.panoIndex)}),e.on(`pano.moveTo`,t=>{e.emit(`panoLoaded`,t.state.panoIndex),e.emit(`moveToPano`,t.state.panoIndex,t.userAction),e.emit(`panoWillArrive`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.moving`,t=>{e.emit(`movingToPano`,t.state.panoIndex,t.prevPano.panoIndex,t.progress)}),e.on(`pano.arrived`,t=>{e.emit(`panoArrived`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.cancel`,t=>{e.emit(`moveToPanoCanceled`,t.state.panoIndex)}),e.on(`pano.error`,t=>{e.emit(`panoLoadError`,t.error,t.state.panoIndex)}),e.on(`pano.texture.load`,t=>{e.emit(`textureStartLoad`,t.pano.panoIndex)}),e.on(`pano.texture.success`,t=>{e.emit(`textureLoaded`,t.pano.panoIndex,t.meta)}),e.on(`pano.texture.error`,t=>{e.emit(`textureError`,t.error,t.pano.panoIndex)}),e.on(`pano.texture.abort`,t=>{e.emit(`textureAbort`,t.pano.panoIndex)}),e.on(`pano.texture.progress`,t=>{e.emit(`textureLoading`,t.progress,t.pano.panoIndex)}),e.on(`xr.session.start`,t=>{e.emit(`webXRSessionStart`)}),e.on(`xr.session.end`,t=>{e.emit(`webXRSessionEnd`)}),e.on(`xr.gesture.tap`,t=>{e.emit(`webXRControllerEvent`,`tap`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.press`,t=>{e.emit(`webXRControllerEvent`,`press`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonUp`,t=>{e.emit(`webXRControllerEvent`,`buttonUp`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonDown`,t=>{e.emit(`webXRControllerEvent`,`buttonDown`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.controller.update`,t=>{e.emit(`webXRControllerRayUpdate`,{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0}),t.left&&e.emit(`webXRAxesUpdate`,`left`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.left.axes.up,down:t.left.axes.down,left:t.left.axes.left,right:t.left.axes.right},deltaTime:t.left.deltaTime}),t.right&&e.emit(`webXRAxesUpdate`,`right`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.right.axes.up,down:t.right.axes.down,left:t.right.axes.left,right:t.right.axes.right},deltaTime:t.right.deltaTime})}),e.on(`works.request`,t=>{e.emit(`willLoad`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.load`,t=>{e.emit(`load`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.ready`,t=>{e.emit(`loaded`,t.input,t.works[0])}),e.on(`state.change`,t=>{e.emit(`stateChange`,t.state,t.userAction)}),e.on(`currentState.change`,t=>{e.emit(`currentStateChange`,t.state,t.userAction)}),e.on(`state.set`,t=>{e.emit(`setState`,t.state)}),e.on(`state.synced`,t=>{e.emit(`stateSynced`,t.state)}),e.on(`model.request`,t=>{e.emit(`modelWillLoad`,t.work.model)}),e.on(`model.error`,t=>{e.emit(`modelLoadError`,t.error,t.model)}),e.on(`model.load`,t=>{e.emit(`modelLoaded`,t.model)}),e.on(`model.changeShownFloor`,t=>{e.emit(`modelShownFloorChange`,t.model.shownFloor,t.model.floorLength)}),e.on(`render`,t=>{e.emit(`renderFrame`,t.needsRender)}),e.on(`mode.change.request`,t=>{e.emit(`wantsChangeMode`,t.mode,t.prevMode)}),e.on(`mode.change`,t=>{e.emit(`modeChange`,t.mode,t.prevMode,t.state.panoIndex,t.state,t.userAction)}),e.on(`helpers.visible`,t=>{e.emit(`helpersVisibleChange`,t.object.visible)}),e.on(`network.resource`,t=>{e.emit(`network`,t.source,t.requestType,t.requestState,t.detail)})}function generateDefaultVideoElement(){if(typeof window<`u`){let e=document.createElement(`video`);e.loop=!0,e.autoplay=!0,e.playsInline=!0,e.muted=!0,e.crossOrigin=``;let t=()=>{document.removeEventListener(`touchstart`,t,!1),document.removeEventListener(`mousedown`,t,!1),e.muted=!1};return document.addEventListener(`touchstart`,t,!1),document.addEventListener(`mousedown`,t,!1),e}else return{}}function initLights(){let e=new three.Group;e.name=`internalLights`;{let t=new three.DirectionalLight(16777215,.1);t.name=`direction0`,t.position.copy(new three.Vector3(0,1,0)),e.add(t)}{let t=new three.DirectionalLight(16777215,.1);t.name=`direction1`,t.position.copy(new three.Vector3(-1,-1,-1)),e.add(t)}{let t=new three.DirectionalLight(16777215,.3);t.name=`direction2`,t.position.copy(new three.Vector3(1,1,1)),e.add(t)}{let t=new three.AmbientLight(16777215,.6);t.name=`ambient0`,e.add(t)}return e}function parseKeyValue(e){var t,n;let r={},o=e.split(/(\;|\,)/);for(let e of o){let o=e.split(`=`),s=(t=o[0])==null?void 0:t.trim(),c=(n=o[1])==null?void 0:n.trim();s&&c&&(r[s]=c)}return r}function getViewportScale(){var e;if(typeof document<`u`){let t=document.getElementsByTagName(`meta`);for(let n=0;n<t.length;n++){let r=t[n];if(r.getAttribute(`name`)===`viewport`){let t=parseKeyValue((e=r.getAttribute(`content`))==null?``:e),n=Number(t[`initial-scale`]);if(!isNaN(n))return n}}}return 1}var realsee_png_data_url_default=`data:image/png;base64,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`,imageSize=[351,63],imageOffset=[20,20],vertices=new Float32Array([-.5,-.5,0,.5,-.5,0,-.5,.5,0,.5,.5,0]),uvs=new Float32Array([0,0,1,0,0,1,1,1]),index=new Uint8Array([0,1,2,1,3,2]),geometry=new three.BufferGeometry;geometry.setAttribute(`position`,new three.BufferAttribute(vertices,3)),geometry.setAttribute(`uv`,new three.BufferAttribute(uvs,2)),geometry.setIndex(new three.BufferAttribute(index,1));var material=new three.MeshBasicMaterial({transparent:!0,depthTest:!1,depthWrite:!1,stencilWrite:!1,fog:!1}),mesh=new three.Mesh(geometry,material);mesh.matrixAutoUpdate=!1;var scene=new three.Scene;scene.add(mesh),scene.matrixAutoUpdate=!1;var camera=new three.OrthographicCamera(-.5,.5,.5,-.5,.1,1);camera.position.set(0,0,.5),camera.lookAt(0,0,0),camera.updateMatrixWorld(!0),camera.matrixAutoUpdate=!1;var prevViewport=new three.Vector4,prevScissor=new three.Vector4;function renderPoweredByRealsee(e){if(material.map){let t=e.getViewport(prevViewport),n=e.getScissor(prevScissor),r=e.getScissorTest(),o=e.autoClear,s=n.x+imageOffset[0]/3,c=n.y+imageOffset[1]/3,l=imageSize[0]/3,u=imageSize[1]/3;e.setViewport(s,c,l,u),e.setScissor(s,c,l,u),e.setScissorTest(!0),e.autoClear=!1,e.render(scene,camera),e.setViewport(t),e.setScissor(n),e.setScissorTest(r),e.autoClear=o}else{let e=new three.Texture,t=new Image;t.onload=()=>{e.image=t,e.wrapS=three.ClampToEdgeWrapping,e.wrapT=three.ClampToEdgeWrapping,e.minFilter=three.LinearFilter,e.needsUpdate=!0,e.generateMipmaps=!1,material.needsUpdate=!0,t.onload=noop},t.src=realsee_png_data_url_default,material.map=e}}var jsContent$1=`(function(){function e(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})}async function t(e={}){var t,n=e,r=!1,i=!0,a=self.location.href;if(r||i)try{new URL(\`.\`,a).href}catch{}console.log.bind(console),console.error.bind(console);var o=!1;function s(e){for(var t=0,n=e.length,r=new Uint8Array(n),i;t<n;++t)i=e.charCodeAt(t),r[t]=~i>>8&i;return r}var c,l,u=!1;function d(){var e=M.buffer;new Int8Array(e),new Int16Array(e),n.HEAPU8=l=new Uint8Array(e),new Uint16Array(e),new Int32Array(e),n.HEAPU32=new Uint32Array(e),n.HEAPF32=new Float32Array(e),new Float64Array(e),new BigInt64Array(e),new BigUint64Array(e)}function f(){if(n.preRun)for(typeof n.preRun==\`function\`&&(n.preRun=[n.preRun]);n.preRun.length;)T(n.preRun.shift());x(w)}function p(){u=!0,I.c()}function m(){if(n.postRun)for(typeof n.postRun==\`function\`&&(n.postRun=[n.postRun]);n.postRun.length;)C(n.postRun.shift());x(S)}var h;function g(){return s(\`\\0asm\\0\\0\\0&\\\`\\\`}}\\\`}\\\`\\0\\\`\\v\\0\\\`\\0\\0\\x07aa\\0\\0\\b\\x07\\0\\0\\x07\\bA\\v\\x07b\\0c\\0\\x07d\\0e\\0f\\0\\f
|
|
2240
2240
|
@\\x07T~@A\\b(\\0" \\0B\\x07|Bøÿÿÿ|"BÿÿÿÿX@ §"\\0?\\0AtM\\r \\0\\0\\r\\vA\\bA06\\0A\\vA\\b \\x006\\0 \\v\\0 \\0 Atr\\vr \\0¼"Aÿÿÿq!@ AvAÿq"E\\r\\0 Að\\0M@ ArAñ\\0 kv!\\f\\v AK@Aø!A\\0!\\f\\v A
|
|
2241
2241
|
tA\\x07k!\\v AvAqr A\\rvr\\vß\\v\\b@ \\0E\\r\\0 \\0A\\bk" \\0Ak(\\0"Axq"\\0j!@ Aq\\r\\0 AqE\\r (\\0"k"A\\b(\\0I\\r \\0 j!\\0@@@A\\b(\\0 G@ (\\f! AÿM@ (\\b"G\\rA\\bA\\b(\\0A~ Avwq6\\0\\f\\v (!\\x07 G@ (\\b" 6\\f 6\\b\\f\\v (" Aj ("E\\r Aj\\v!@ ! "Aj! ("\\r\\0 Aj! ("\\r\\0\\v A\\x006\\0\\f\\v ("AqAG\\rA\\b \\x006\\0 A~q6 \\0Ar6 \\x006\\0\\v 6\\f 6\\b\\f\\vA\\0!\\v \\x07E\\r\\0@ ("At"(¸
|
|
2242
2242
|
F@ A¸
|
|
@@ -2322,4 +2322,4 @@ A\\0H@@@ \\0 F\\r\\0 \\x07 \\0Atj(\\0Atj" (\\0"Aj6\\0 Atj \\x
|
|
|
2322
2322
|
At"j \\b Aj"j(\\0 \\x07j(\\0j6\\0
|
|
2323
2323
|
Ak!
|
|
2324
2324
|
\\f\\v\\v\\v\\0\\v\\v \\0A\\b\\v\`)}function _(e){return e}function v(e,t){var n,r=_(e);return n=new WebAssembly.Module(r),[new WebAssembly.Instance(n,t),n]}function y(){return{a:P}}function b(){function e(e,t){return I=e.exports,N(I),d(),I}var t=y();return n.instantiateWasm?new Promise((r,i)=>{n.instantiateWasm(t,(t,n)=>{r(e(t,n))})}):(h??=g(),e(v(h,t)[0]))}for(var x=e=>{for(;e.length>0;)e.shift()(n)},S=[],C=e=>S.push(e),w=[],T=e=>w.push(e),E=()=>2147483648,D=(e,t)=>Math.ceil(e/t)*t,O=e=>{var t=(e-M.buffer.byteLength+65535)/65536|0;try{return M.grow(t),d(),1}catch{}},k=e=>{var t=l.length;e>>>=0;var n=E();if(e>n)return!1;for(var r=1;r<=4;r*=2){var i=t*(1+.2/r);if(i=Math.min(i,e+100663296),O(Math.min(n,D(Math.max(e,i),65536))))return!0}return!1},A=new Uint8Array(123),j=25;j>=0;--j)A[48+j]=52+j,A[65+j]=j,A[97+j]=26+j;if(A[43]=62,A[47]=63,n.noExitRuntime&&n.noExitRuntime,n.print&&n.print,n.printErr&&n.printErr,n.wasmBinary&&n.wasmBinary,n.arguments&&n.arguments,n.thisProgram&&n.thisProgram,n.preInit)for(typeof n.preInit==\`function\`&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();var M;function N(e){n._sort=e.d,n._malloc=e.e,n._free=e.f,M=e.b,e.__indirect_function_table}var P={a:k};function F(){f();function e(){n.calledRun=!0,!o&&(p(),c?.(n),n.onRuntimeInitialized?.(),m())}n.setStatus?(n.setStatus(\`Running...\`),setTimeout(()=>{setTimeout(()=>n.setStatus(\`\`),1),e()},1)):e()}var I=b();return F(),t=u?n:new Promise((e,t)=>{c=e}),t}let n;function r(){return e(this,void 0,void 0,function*(){n=yield t()})}let i,a,o,s,c,l,u,d,f,p=0,m=0,h=[],g=!0,_=!1,v=!1,y=!1,b=()=>e(void 0,void 0,void 0,function*(){if(_){v=!0;return}_=!0,v=!1,n||(yield r());let e=2**Math.ceil(Math.log2(i.vertexCount));p<e&&(p>0&&(n._free(a),n._free(s),n._free(c),n._free(l),n._free(u),n._free(d),n._free(f)),p=e,a=n._malloc(64),s=n._malloc(p*4),c=n._malloc(3*p*4),l=n._malloc(p*4),u=n._malloc(p*4),d=n._malloc(p*4),f=n._malloc(p*4)),m<i.transforms.length&&(m>0&&n._free(o),m=i.transforms.length,o=n._malloc(m*4)),_=!1,v&&(v=!1,yield b())}),x=()=>{if(_||v||!n)return;_=!0,n.HEAPF32.set(i.positions,c/4),n.HEAPF32.set(i.transforms,o/4),n.HEAPU32.set(i.transformIndices,s/4),n.HEAPF32.set(new Float32Array(h),a/4),n._sort(a,o,s,i.vertexCount,c,l,u,d,f);let e=new Uint32Array(n.HEAPU32.buffer,u,i.vertexCount),t=new Uint32Array(e.slice().buffer);self.postMessage({depthIndex:t,generation:i.generation},[t.buffer]),_=!1,g=!1},S=()=>{y||(y=!0,g&&x(),setTimeout(()=>{y=!1,S()}))};self.onmessage=e=>new Promise(t=>{if(e.data.warmup){r().finally(()=>t(!0));return}e.data.sortData&&(i={positions:new Float32Array(e.data.sortData.positions),transforms:new Float32Array(e.data.sortData.transforms),transformIndices:new Uint32Array(e.data.sortData.transformIndices),vertexCount:e.data.sortData.vertexCount,generation:e.data.sortData.generation??0},g=!0,b()),e.data.viewProj?(e.data.viewProj.every(e=>h.includes(e))===!1&&(h=e.data.viewProj,g=!0),S(),t(!0)):t(!0)})})();`,blob=typeof self<`u`&&self.Blob&&new Blob([`(self.URL || self.webkitURL).revokeObjectURL(self.location.href);`,jsContent],{type:`text/javascript;charset=utf-8`});function WorkerWrapper(e){let t;try{if(t=blob&&(self.URL||self.webkitURL).createObjectURL(blob),!t)throw``;let n=new Worker(t,{name:e==null?void 0:e.name});return n.addEventListener(`error`,()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),n}catch(t){return new Worker(`data:text/javascript;charset=utf-8,`+encodeURIComponent(jsContent),{name:e==null?void 0:e.name})}}var vertex_default=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("}rpvv|{-uvtu}-sy|nH}rpvv|{-uvtu}-v{Hnvor-sy|n-}ynV{qr\x07H{vs|z-uvtu}-nz}yr?Q-lr\x07rH{vs|z-uvtu}-nz}yr?Q-ln{s|zH{vs|z-uvtu}-nz}yr?Q-ln{s|zV{qvprH{vs|z-uvtu}-nz}yr?Q-lyn\brV{qvprH{vs|z-uvtu}-nz}yr?Q-luar\x07rH{vs|z-rp?-luar\x07r`v rH{vs|z-v{-lzn\x07`uQrtrrH0vs-[bZlT`lPYV]]R_`-K-=----{vs|z-rp?-lyn\brPyv}}r_n{trh[bZlT`lYNfR_`jH----{vs|z-znA-lpyv}}rZnvprV{rrh[bZlT`lPYV]]R_`jH0r{qvs{vs|z-rp?-r|yv|{Hn\bv{t-rpA-P|y|Hn\bv{t-rp?-]|vv|{Hn\bv{t-rp?-bH<<参考Tnvn{`}yn@qp|{-sy|n-\0E-J-\05E;=6H<<原版的固定xr{ry`v r,不要轻易调整这个数p|{-sy|n-xr{ry?Q`v r-J-=;@Hp|{-sy|n-zn\x07`prr{`}npr`}yn`v r-J-?=AE;=H<<固定的u相关系数p|{-sy|n-`UlP>-J-=;AEEC=?B>>F=?F>FFHp|{-sy|n-`UlP?l=-J->;=F?BAEAHp|{-sy|n-`UlP?l>-J-:>;=F?BAEAHp|{-sy|n-`UlP?l?-J-=;@>B@F>CHp|{-sy|n-`UlP?l@-J-:>;=F?BAEAHp|{-sy|n-`UlP?lA-J-=;BAC?DA?Hrp?-tr`UQnnbc5v{-}ynVq\x079-v{-p|z}|{r{\\ssr9-rp?-r\x07r`v r6-\n----v{-uP|z}|{r{P|{-J-=H----vs-5lzn\x07`uQrtrr-KJ->6-uP|z}|{r{P|{-8J-FH----vs-5lzn\x07`uQrtrr-KJ-?6-uP|z}|{r{P|{-8J->BH----vs-5lzn\x07`uQrtrr-KJ-@6-uP|z}|{r{P|{-8J-?>H--------v{-}nqqrqP|z}|{r{P|{-J-uP|z}|{r{P|{H----vs-5}nqqrqP|z}|{r{P|{-2-A-.J-=6-\n--------}nqqrqP|z}|{r{P|{-J-55}nqqrqP|z}|{r{P|{-<-A6-8->6-7-AH----\f--------sy|n-yv{rnP|z}|{r{V{qr\x07-J-sy|n5}ynVq\x07-7-}nqqrqP|z}|{r{P|{-8-p|z}|{r{\\ssr6H----sy|n-r\x07ryV{qr\x07-J-yv{rnP|z}|{r{V{qr\x07-<-A;=H------sy|n-q-J-r\x07ryV{qr\x07-<-r\x07r`v r;\x07H----sy|n-\b-J-sy||5q6-<-r\x07r`v r;\bH----sy|n-\x07-J-snp5q6H----r{-rp?5\x079-\b6H\f|vq-znv{-56-\n----v{-}ynV{qr\x07b-J-v{5}ynV{qr\x07-8-=;B6H----v{-}ynV{qr\x07V-J-v{5}ynV{qr\x07b6H----rpA-pr{-J-r\x07rySrpu5lr\x07r9-vrp?55}ynV{qr\x07b-3-=\x07@ss6-II->9-}ynV{qr\x07b-KK->=69-=6H--------v{-n{s|zV{qr\x07-J-r\x07rySrpu5ln{s|zV{qvpr9-vrp?5}ynV{qr\x07b-3-=\x07@ss9-}ynV{qr\x07b-KK->=69-=6;\x07H----znA-n{s|z-J-znA5--------r\x07rySrpu5ln{s|z9-vrp?5=9-n{s|zV{qr\x0769-=69--------r\x07rySrpu5ln{s|z9-vrp?5>9-n{s|zV{qr\x0769-=69--------r\x07rySrpu5ln{s|z9-vrp?5?9-n{s|zV{qr\x0769-=69--------r\x07rySrpu5ln{s|z9-vrp?5@9-n{s|zV{qr\x0769-=6----6H----znA-n{s|zZ|qrycvrZnv\x07-J-vrZnv\x07-7-n{s|zH----rp@-}ynPr{r-J-v{Ova|Sy|n5pr{;\x07\b 6H----rpA-|yqPr{r-J-n{s|z-7-rpA5}ynPr{r9->;=6H----0vs-[bZlT`lPYV]]R_`-K-=----v{-yn\brV{qr\x07-J-v{5r\x07rySrpu5lyn\brV{qvpr9-vrp?5}ynV{qr\x07b-3-=\x07@ss9-}ynV{qr\x07b-KK->=69-=6;\x076H----vs-5yn\brV{qr\x07-KJ-=-33-yn\brV{qr\x07-I-[bZlT`lYNfR_`6-\n--------rp?-pyv}_n{tr-J-lyn\brPyv}}r_n{trhyn\brV{qr\x07jH--------v{-pyv}`n-J-v{5pyv}_n{tr;\x07-8-=;B6H--------v{-pyv}P|{-J-v{5pyv}_n{tr;\b-8-=;B6H--------v{-pyv}R{q-J-pyv}`n-8-pyv}P|{H--------s|-5v{-v-J-=H-v-I-[bZlT`lPYV]]R_`H-v886-\n----------------vs-5v-I-pyv}`n-\v\v-v-KJ-pyv}R{q6-\n--------------------p|{v{rH----------------\f----------------rpA-pyv}}r]|vv|{-J-lpyv}}rZnvprV{rrhvj-7-|yqPr{rH----------------o||y-pyv}}rq-J-pyv}}r]|vv|{;\x07-K-:=;B-33-pyv}}r]|vv|{;\x07-I-=;BH----------------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{;\b-K-:=;B-33-pyv}}r]|vv|{;\b-I-=;BH----------------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{; -K-:=;B-33-pyv}}r]|vv|{; -I-=;BH----------------vs-5pyv}}rq6-\n--------------------tyl]|vv|{-J-rpA5=;=9-=;=9-?;=9->;=6H--------------------r{H----------------\f--------\f----\f----0r{qvs----rpA-vrPr{r-J-n{s|zZ|qrycvrZnv\x07-7-rpA5}ynPr{r9->;=6H----rpA-pyv}Pr{r-J-}|wrpv|{Znv\x07-7-vrPr{rH----<<剔除超出视锥体的}yn----sy|n-pyv}-J->;?-7-pyv}Pr{r;H----vs-5pyv}Pr{r; -I-:pyv}Pr{r;-\v\v-pyv}Pr{r; -K-pyv}Pr{r;-\v\v---------pyv}Pr{r;\x07-I-:pyv}-\v\v-pyv}Pr{r;\x07-K-pyv}-\v\v---------pyv}Pr{r;\b-I-:pyv}-\v\v-pyv}Pr{r;\b-K-pyv}6-\n--------tyl]|vv|{-J-rpA5=;=9-=;=9-?;=9->;=6H--------r{H----\f----rp@-{qpPr{r-J-pyv}Pr{r;\x07\b -<-pyv}Pr{r;H----rp?-s|pny-J-rp?5--------}|wrpv|{Znv\x07h=jh=j-7-r|yv|{;\x07-7-=;B9--------}|wrpv|{Znv\x07h>jh>j-7-r|yv|{;\b-7-=;B----6H--------]|vv|{-J-}|vv|{;\x07\bH----<<-读取协方差数据(使用-unys?\x07>C-打包)----rpA-p|-J-r\x07rySrpu5lr\x07r9-vrp?555}ynV{qr\x07b-3-=\x07@ss6-II->6-\v->9-}ynV{qr\x07b-KK->=69-=6H----rp?->-J-{}npxUnys?\x07>C5p|;\x076H-----rp?-?-J-{}npxUnys?\x07>C5p|;\b6H------rp?-@-J-{}npxUnys?\x07>C5p|; 6H----------sy|n-Z>>-J->;\x07-<-A;=H----sy|n-Z>?-J->;\b-<-A;=H----sy|n-Z>@-J-?;\x07-<-A;=H----sy|n-Z??-J-?;\b-<-A;=H----sy|n-Z?@-J-@;\x07-<-A;=H----sy|n-Z@@-J-@;\b-<-A;=H--------zn@-cx-J-zn@5--------Z>>9-Z>?9-Z>@9--------Z>?9-Z??9-Z?@9----------Z>@9-Z?@9-Z@@-------6H----<<-判断是否是正交模式:透视时-}|wrpv|{Znv\x07h@jh@j-J-=,正交时-J->----o||y-v\\u|tn}uvp-J-}|wrpv|{Znv\x07h@jh@j-K-=;DH----sy|n-n{vznv|{]|tr-J--}|wrpv|{Znv\x07h@jh@jH----zn@-WH----vs-5v\\u|tn}uvp6-\n--------<<-正交模式的雅可比矩阵--------W-J-n{}|r5zn@5------------s|pny;\x079-=;=9-=;=9------------=;=9-s|pny;\b9-=;=9------------=;=9-=;=9-=;=--------66H----\f-ryr-\n--------<<-透视模式的雅可比矩阵--------sy|n--J->;=-<-5vrPr{r; -7-vrPr{r; 6H--------W-J-zn@5------------s|pny;\x07-<-vrPr{r; 9-=;=9-:5s|pny;\x07-7-vrPr{r;\x076-7-9------------=;=9-s|pny;\b-<-vrPr{r; 9-:5s|pny;\b-7-vrPr{r;\b6-7-9------------=;=9-=;=9-=;=--------6H----\f----zn@-d-J-n{}|r5zn@5n{s|zZ|qrycvrZnv\x0766H----zn@-a-J-d-7-WH----<<-将-@Q-协方差矩阵变换为-?Q-协方差矩阵----zn@-p|?Qz-J-n{}|r5a6-7-cx-7-aH----p|?Qzh=jh=j-8J-xr{ry?Q`v rH----p|?Qzh>jh>j-8J-xr{ry?Q`v rH----rp@-p|?Q-J-rp@5p|?Qzh=jh=j9-p|?Qzh=jh>j9-p|?Qzh>jh>j6H----sy|n-n-J-p|?Q;\x07H----sy|n-q-J-p|?Q; H----sy|n-o-J-p|?Q;\bH----sy|n-Q-J-n-7-q-:-o-7-oH----sy|n-npr-J-n-8-qH----sy|n-npr\\r?-J-=;B-7-nprH----sy|n-rz?-J-\05zn\x075=;>9-npr\\r?-7-npr\\r?-:-Q66H----sy|n-rvtr{cnyr>-J-npr\\r?-8-rz?H----sy|n-rvtr{cnyr?-J-npr\\r?-:-rz?H----vs-5rvtr{cnyr?-IJ-=;=6-\n--------r{H----\f----rp?-rvtr{crp|>-J-{|znyv r5rp?5o9-rvtr{cnyr>-:-n66H----rp?-rvtr{crp|?-J-rp?5rvtr{crp|>;\b9-:rvtr{crp|>;\x076H----rp?-onvcrp|>-J-rvtr{crp|>--7-zv{5\0E-7-\05rvtr{cnyr>69-zn\x07`prr{`}npr`}yn`v r6H----rp?-onvcrp|?-J-rvtr{crp|?--7-zv{5\0E-7-\05rvtr{cnyr?69-zn\x07`prr{`}npr`}yn`v r6H----rp?-onvcvr}|-J-rp?5>;=-<-r|yv|{;\x079->;=-<-r|yv|{;\b6H----rp?-{qp\\ssr-J-rp?5]|vv|{;\x07-7-onvcrp|>-8-]|vv|{;\b-7-onvcrp|?6-7---------------------onvcvr}|-7-?;=H----rpA-\0nq]|-J-rpA5{qpPr{r;\x07\b-8-{qp\\ssr9-{qpPr{r; 9->;=6H----tyl]|vv|{-J-\0nq]|H----<<-读取颜色----rpA-p|y|-J-rpA5--------5p|;6-3-=\x07ss9--------5p|;-KK-E6-3-=\x07ss9--------5p|;-KK->C6-3-=\x07ss9--------5p|;-KK-?A6-3-=\x07ss----6-<-?BB;=H----<<应用球谐光照,目前只兼容=>?----vs-5lzn\x07`uQrtrr-KJ->6-\n--------rp@-pnzrn]|V{\\owrp-J-rp@5v{rr5n{s|z6-7-rpA5pnzrn]|vv|{9->;=66H--------rp@-|owrpcvrQv-J-{|znyv r5}ynPr{r-:-pnzrn]|V{\\owrp6H----------------rpA-u=>?@-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9-=9-luar\x07r`v r66H----------rpA-uABCD-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9-A9-luar\x07r`v r66H----------rpA-uEF>=>>-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9-E9-luar\x07r`v r66H-----------------rp@-u>-J-u=>?@;toH-----------------------------------rp@-u?-J-rp@5u=>?@;n9-uABCD;t6H---------------------rp@-u@-J-rp@5uABCD;on9-uEF>=>>;6H-----------------------------sy|n-\x07-J-|owrpcvrQv;\x07H--------sy|n-\b-J-|owrpcvrQv;\bH--------sy|n- -J-|owrpcvrQv; H--------rp@-uP|y|-J-u>-7-5:=;AEEC=?B-7-\b6-8-u?-7-5=;AEEC=?B-7- 6-8-u@-7-5:=;AEEC=?B-7-\x076H--------p|y|;to-8J-uP|y|H----------------vs-5lzn\x07`uQrtrr-KJ-?6-\n----------------------rpA-u>?>@>A>B-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9->?9-luar\x07r`v r66H------------rpA-u>C>D>E>F-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9->C9-luar\x07r`v r66H-------------rpA-u?=?>???@-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9-?=9-luar\x07r`v r66H-------------------------rp@-uA-J-uEF>=>>;tonH------------------------------------rp@-uB-J-u>?>@>A>B;toH----------------------------------rp@-uC-J-rp@5u>?>@>A>B;n9-u>C>D>E>F;t6H---------------rp@-uD-J-rp@5u>C>D>E>F;on9-u?=?>???@;6H---------------rp@-uElqrt?-J-u?=?>???@;tonH-----------------------------------------sy|n-\x07\x07-J-\x07-7-\x07H------------sy|n-\b\b-J-\b-7-\bH------------sy|n- -J- -7- H------------sy|n-\x07\b-J-\x07-7-\bH------------sy|n-\b -J-\b-7- H------------sy|n-\x07 -J-\x07-7- H------------------------p|y|;to-8J----------------5`UlP?l=-7-\x07\b6-7-uA-8----------------5`UlP?l>-7-\b 6-7-uB-8----------------5`UlP?l?-7-5?;=-7- -:-\x07\x07-:-\b\b66-7-uC-8----------------5`UlP?l@-7-\x07 6-7-uD-8----------------5`UlP?lA-7-5\x07\x07-:-\b\b66-7-uElqrt?H--------\f----\f--------p|y|;to-J-pynz}5p|y|;to9-rp@5=;=69-rp@5>;=66H----P|y|-J-p|y|H----]|vv|{-7J-\0EH----b-J-}|vv|{;\x07\bH\f"),fragment_default=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}(`}rpvv|{-uvtu}-sy|nH0v{pyqr-Ip|zz|{Kn\bv{t-rpA-P|y|Hn\bv{t-rp?-]|vv|{Hn\bv{t-rp?-bH|vq-znv{-56-
|
|
2325
|
-
----<<-计算从-}yn-中心到当前片段的平方距离----<<-由于-]|vv|{-已经按-\05E6-缩放,平方结果会被缩放-E-倍----<<-如果平方结果大于-E,说明在椭圆外,距离均值超过-\05E6-个标准差----sy|n-N-J-q|5]|vv|{9-]|vv|{6H----vs-5N-K-E;=6-qvpnqH--------rp@-p|y|-J-P|y|;toH--------<<-由于渲染的-}yn-按-\05E6-缩放,高斯公式中的逆协方差矩阵部分变成单位矩阵----<<-因此只剩下-5e-:-zrn{6-7-5e-:-zrn{6,而-zrn{-为零,所以是-e-7-e,即-N----sy|n-|}npv\b-J-r\x07}5:=;B-7-N6-7-P|y|;nH--------tylSntP|y|-J-rpA5p|y|;to9-|}npv\b6H\f`),PBMGaussianSplattingRenderMesh=class extends three.Mesh{constructor(){super(),this.renderData=null,this.needsRender=!1,this.sortWorker=null,this.depthIndex=new Uint32Array,this.splatIndexCapacity=0,this.activeSlot=null,this.pendingSlot=null,this.rebuildGeneration=0,this.forceClipperUniformRefresh=!1,this.incrementalUpdateInFlight=!1,this.dataTexture=null,this.transformsTexture=null,this.transformIndicesTexture=null,this.layerIndicesTexture=null,this.shTexture=null,this.usedSHDegree=0,this.onBeforeRender=(e,t,n)=>{let r=n,o=this.collectObjects(t);if(o.length===0){this.geometry.instanceCount=0;return}let s=0;o.forEach(e=>{e.usedSHDegree>s&&(s=e.usedSHDegree)}),this.setMaxShDegree(s),this.isSceneNeedsRebuild(o)&&(this.tryStartIncrementalUpdate(o)||(this.startPendingRebuild(o),this.gsSceneState.lastClipperHash=``));let c=o.filter(e=>e.transformChanged);c.length>0&&(this.syncTransformsForSlot(this.activeSlot,c),this.syncTransformsForSlot(this.pendingSlot,c),c.forEach(e=>{e.transformChanged=!1,e.selectedChanged=!1})),this.activeSlot&&this.updateSlotTextures(this.activeSlot),this.pendingSlot&&this.updateSlotTextures(this.pendingSlot);let l=new three.Matrix4().multiplyMatrices(r.perspectiveProjectionMatrix,r.matrixWorldInverse).elements;this.pendingSlot&&this.pendingSlot.renderData.initialBuildComplete&&this.pendingSlot.awaitingFirstSort?this.requestSort(this.pendingSlot,l):this.activeSlot&&this.requestSort(this.activeSlot,l);let u=this.getClipperHash(o);if((this.forceClipperUniformRefresh||u!==this.gsSceneState.lastClipperHash)&&(this.updateClipperUniforms(o),this.gsSceneState.lastClipperHash=u,this.forceClipperUniformRefresh=!1,this.needsRender=!0),this.activeSlot){let e=Math.min(this.usedSHDegree,this.activeSlot.renderData.maxShDegree);this.material.uniforms.u_maxShDegree.value=e,e>0&&!this.activeSlot.textures.shTexture?this.createSHTexture(this.activeSlot):e===0&&this.activeSlot.textures.shTexture&&(this.activeSlot.textures.shTexture.dispose(),this.activeSlot.textures.shTexture=null),this.material.uniforms.u_shTexture.value=this.activeSlot.textures.shTexture,this.renderData=this.activeSlot.renderData}else this.pendingSlot||(this.bindSlotTextures(null),this.material.uniforms.u_maxShDegree.value=0,this.geometry.instanceCount=0);this.material.uniforms.resolution.value.set(r.resolution.x,r.resolution.y)};let e=this.createGeometry(),t=this.createMaterial();this.geometry=e,this.material=t,this.frustumCulled=!1,this.renderOrder=-99999999999,this.gsSceneState={lastObjectsHash:``,lastClipperHash:``},this.sortWorker=new WorkerWrapper,this.sortWorker.postMessage({warmup:!0}),RenderData.warmupWasm(),this.sortWorker.onmessage=e=>{if(e.data.depthIndex){let t=e.data.generation;if(this.pendingSlot&&t===this.pendingSlot.generation){this.pendingSlot.awaitingFirstSort=!1,this.swapPendingToActive(e.data.depthIndex);return}this.activeSlot&&t===this.activeSlot.generation&&(this.activeSlot.awaitingFirstSort=!1,this.applyDepthIndex(e.data.depthIndex))}}}ensureSplatIndexCapacity(e){let t=this.geometry.getAttribute(`splatIndex`);if(e<=this.splatIndexCapacity)return t;let n=this.getExpandedCapacity(e),r=t.array,o=new Float32Array(n);o.set(r.subarray(0,Math.min(r.length,n)));let s=new three.InstancedBufferAttribute(o,1,!1,1);return s.setUsage(three.DynamicDrawUsage),this.geometry.setAttribute(`splatIndex`,s),this.splatIndexCapacity=n,this.geometry._maxInstanceCount=n,s}getExpandedCapacity(e){let t=Math.max(this.splatIndexCapacity,1);for(;t<e;)t*=2;return t}createGeometry(){let e=new three.InstancedBufferGeometry,t=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0]);e.setAttribute(`position`,new three.BufferAttribute(t,3));let n=new Uint16Array([0,1,2,0,2,3]);e.setIndex(new three.BufferAttribute(n,1)),this.splatIndexCapacity=1;let r=new Float32Array(this.splatIndexCapacity);for(let e=0;e<r.length;e++)r[e]=e;let o=new three.InstancedBufferAttribute(r,1,!1,1);return o.setUsage(three.DynamicDrawUsage),e.setAttribute(`splatIndex`,o),e._maxInstanceCount=this.splatIndexCapacity,e.instanceCount=0,e}createMaterial(){return new three.ShaderMaterial({vertexShader:vertex_default,fragmentShader:fragment_default,defines:{NUM_GS_LAYERS:0,NUM_GS_CLIPPERS:0},uniforms:{u_texture:{value:null},u_transforms:{value:null},u_transformIndices:{value:null},u_layerIndices:{value:null},u_numGsLayers:{value:0},u_numGsClippers:{value:0},u_layerClipperRanges:{value:[]},u_clipperMatricesInverse:{value:[]},u_shTexture:{value:null},u_shTextureSize:{value:new three.Vector2},u_maxShDegree:{value:0},resolution:{value:new three.Vector2}},side:three.DoubleSide,transparent:!0,blending:three.NormalBlending,depthTest:!0,depthWrite:!1})}createDefaultLayerClipperRanges(e){return Array.from({length:e},()=>new three.Vector2(-1,0))}createDefaultClipperMatrices(e){return Array.from({length:e},()=>new three.Matrix4)}createTextures(e){let t=new three.DataTexture(e.data,e.width,e.height,three.RGBAIntegerFormat,three.UnsignedIntType);t.internalFormat=`RGBA32UI`,t.minFilter=three.NearestFilter,t.magFilter=three.NearestFilter,t.needsUpdate=!0;let n=new three.DataTexture(e.transforms,e.transformsWidth,e.transformsHeight,three.RGBAFormat,three.FloatType);n.internalFormat=`RGBA32F`,n.minFilter=three.NearestFilter,n.magFilter=three.NearestFilter,n.needsUpdate=!0;let r=new three.DataTexture(e.transformIndices,e.transformIndicesWidth,e.transformIndicesHeight,three.RedIntegerFormat,three.UnsignedIntType);r.internalFormat=`R32UI`,r.minFilter=three.NearestFilter,r.magFilter=three.NearestFilter,r.needsUpdate=!0;let o=new three.DataTexture(e.layerIndices,e.layerIndicesWidth,e.layerIndicesHeight,three.RedIntegerFormat,three.UnsignedIntType);return o.internalFormat=`R32UI`,o.minFilter=three.NearestFilter,o.magFilter=three.NearestFilter,o.needsUpdate=!0,{dataTexture:t,transformsTexture:n,transformIndicesTexture:r,layerIndicesTexture:o,shTexture:null}}createSHTexture(e){let{renderData:t,textures:n}=e;n.shTexture&&(n.shTexture.dispose(),n.shTexture=null);let r=Math.min(this.usedSHDegree,t.maxShDegree),o=0;if(r>=1&&(o+=9),r>=2&&(o+=15),r>=3&&(o+=21),o===0)return;let s=4,c=o;c%4!=0&&(c=Math.ceil(c/4)*4);let l=t.numPoints*c/4,u=2048,d=Math.ceil(l/u),f=new Float32Array(u*d*4);for(let e=0;e<t.numPoints;e++){let n=c/4*e,o=0;if(t.sh1&&r>=1)for(let r=0;r<9;r++){let s=n+Math.floor(o/4),c=o%4,l=s*4+c;f[l]=t.sh1[e*9+r],o++}if(t.sh2&&r>=2)for(let r=0;r<15;r++){let s=n+Math.floor(o/4),c=o%4,l=s*4+c;f[l]=t.sh2[e*15+r],o++}if(t.sh3&&r>=3)for(let r=0;r<21;r++){let s=n+Math.floor(o/4),c=o%4,l=s*4+c;f[l]=t.sh3[e*21+r],o++}}n.shTexture=new three.DataTexture(f,u,d,three.RGBAFormat,three.FloatType),n.shTexture.internalFormat=`RGBA32F`,n.shTexture.minFilter=three.NearestFilter,n.shTexture.magFilter=three.NearestFilter,n.shTexture.needsUpdate=!0,this.material.uniforms.u_shTextureSize.value.set(u,d),this.material.uniforms.u_maxShDegree.value=r}setMaxShDegree(e){var t,n;if(e<0||e>2){console.warn(`现在只支持012三种阶数,你输入的是${e}`);return}let r=this.usedSHDegree;this.usedSHDegree=e,r!==e&&((t=this.activeSlot)!=null&&t.textures.shTexture&&(this.activeSlot.textures.shTexture.dispose(),this.activeSlot.textures.shTexture=null),(n=this.pendingSlot)!=null&&n.textures.shTexture&&(this.pendingSlot.textures.shTexture.dispose(),this.pendingSlot.textures.shTexture=null),this.material.uniforms.u_maxShDegree.value=e,e===0?this.material.uniforms.u_shTexture.value=null:this.activeSlot&&this.activeSlot.renderData.maxShDegree>0&&(this.createSHTexture(this.activeSlot),this.material.uniforms.u_shTexture.value=this.activeSlot.textures.shTexture))}bindSlotTextures(e){if(!e){this.dataTexture=null,this.transformsTexture=null,this.transformIndicesTexture=null,this.layerIndicesTexture=null,this.shTexture=null,this.material.uniforms.u_texture.value=null,this.material.uniforms.u_transforms.value=null,this.material.uniforms.u_transformIndices.value=null,this.material.uniforms.u_layerIndices.value=null,this.material.uniforms.u_shTexture.value=null;return}this.dataTexture=e.textures.dataTexture,this.transformsTexture=e.textures.transformsTexture,this.transformIndicesTexture=e.textures.transformIndicesTexture,this.layerIndicesTexture=e.textures.layerIndicesTexture,this.shTexture=e.textures.shTexture,this.material.uniforms.u_texture.value=this.dataTexture,this.material.uniforms.u_transforms.value=this.transformsTexture,this.material.uniforms.u_transformIndices.value=this.transformIndicesTexture,this.material.uniforms.u_layerIndices.value=this.layerIndicesTexture,this.material.uniforms.u_shTexture.value=this.shTexture}disposeSlot(e){e&&(e.renderData.dispose(),this.disposeTextures(e.textures))}disposeTextures(e){e.dataTexture.dispose(),e.transformsTexture.dispose(),e.transformIndicesTexture.dispose(),e.layerIndicesTexture.dispose(),e.shTexture&&(e.shTexture.dispose(),e.shTexture=null)}applyDepthIndex(e){this.depthIndex=e;let t=this.depthIndex.length,n=this.ensureSplatIndexCapacity(t);n.array.set(this.depthIndex,0),n.count=this.depthIndex.length,n.updateRange.offset=0,n.updateRange.count=t,n.needsUpdate=!0,this.geometry.instanceCount=this.depthIndex.length,this.needsRender=!0}swapPendingToActive(e){if(!this.pendingSlot)return;let t=this.activeSlot;this.activeSlot=this.pendingSlot,this.pendingSlot=null,this.renderData=this.activeSlot.renderData,this.ensureSplatIndexCapacity(this.activeSlot.renderData.numPoints),this.bindSlotTextures(this.activeSlot),this.activeSlot.sortDataUploaded=!0,this.forceClipperUniformRefresh=!0,this.applyDepthIndex(e),t&&this.disposeSlot(t)}createSlot(e){let t={generation:e.generation,renderData:e,textures:this.createTextures(e),awaitingFirstSort:!0,sortDataUploaded:!1};return this.usedSHDegree>0&&e.maxShDegree>0&&this.createSHTexture(t),t}updateSlotTextures(e){e.renderData.dataChanged&&(e.textures.dataTexture.needsUpdate=!0,e.renderData.dataChanged=!1),e.renderData.transformsChanged&&(e.textures.transformsTexture.needsUpdate=!0,e.textures.transformIndicesTexture.needsUpdate=!0,e.renderData.transformsChanged=!1)}postSortData(e){var t;let n=new Float32Array(e.renderData.positions.slice().buffer),r=new Float32Array(e.renderData.transforms.slice().buffer),o=new Uint32Array(e.renderData.transformIndices.slice().buffer);(t=this.sortWorker)==null||t.postMessage({sortData:{positions:n,transforms:r,transformIndices:o,vertexCount:e.renderData.numPoints,generation:e.generation}},[n.buffer,r.buffer,o.buffer]),e.sortDataUploaded=!0}requestSort(e,t){var n;e.renderData.initialBuildComplete&&((e.renderData.dataChanged||e.renderData.transformsChanged||!e.sortDataUploaded)&&this.postSortData(e),(n=this.sortWorker)==null||n.postMessage({viewProj:t}))}syncTransformsForSlot(e,t){e&&t.forEach(t=>{e.renderData.splatIndices.has(t)&&e.renderData.updateTransform(t)})}collectObjects(e){let t=[];return e.traverse(e=>{e instanceof PBMGaussianSplattingObject&&e.visible&&t.push(e)}),t.sort((e,t)=>{let n=e.uuid+e.gsViewLayerKey,r=t.uuid+t.gsViewLayerKey;return n<r?-1:n>r?1:0}),t}isSceneNeedsRebuild(e){let t=e.map(e=>`${e.uuid}:${e.gsViewLayerKey}`).join(`|`),n=t!==this.gsSceneState.lastObjectsHash;return this.gsSceneState.lastObjectsHash=t,n}getClipperHash(e){return e.map(e=>{let t=e.gsClippers.map(e=>{var t;return`${(t=e.floorIndex)==null?-1:t}:${e.clippingBoxMatrix.elements.join(`,`)}`}).join(`;`);return`${e.gsViewLayerKey}:${t}`}).join(`|`)}updateClipperCounts(e,t){let n=Math.max(0,e|0),r=Math.max(0,t|0),o=this.material.defines;(o.NUM_GS_LAYERS!==n||o.NUM_GS_CLIPPERS!==r)&&(o.NUM_GS_LAYERS=n,o.NUM_GS_CLIPPERS=r,this.material.needsUpdate=!0),this.material.uniforms.u_numGsLayers.value=e,this.material.uniforms.u_numGsClippers.value=t}updateClipperUniforms(e){var t,n,r,o;let s=(n=(t=this.activeSlot)==null?void 0:t.renderData)==null?null:n;if(!s){this.material.uniforms.u_layerClipperRanges.value=[],this.material.uniforms.u_clipperMatricesInverse.value=[],this.updateClipperCounts(0,0);return}let c=new Map;for(let t of e)c.has(t.gsViewLayerKey)||c.set(t.gsViewLayerKey,t.gsClippers);let l=s.layerKeys.length,u=0;for(let e of s.layerKeys)u+=((r=c.get(e))==null?[]:r).length;let d=this.createDefaultLayerClipperRanges(l),f=this.createDefaultClipperMatrices(u),p=0;for(let e of s.layerKeys){let t=s.layerKeyToIndex.get(e);if(t===void 0)continue;let n=(o=c.get(e))==null?[]:o,r=p,l=0;for(let e of n)f[p].getInverse(e.clippingBoxMatrix),p++,l++;l>0&&d[t].set(r,l)}this.material.uniforms.u_layerClipperRanges.value=d,this.material.uniforms.u_clipperMatricesInverse.value=f,this.updateClipperCounts(l,p)}startPendingRebuild(e){this.pendingSlot&&(this.disposeSlot(this.pendingSlot),this.pendingSlot=null),this.rebuildGeneration+=1;let t=new RenderData(e,this.rebuildGeneration);this.pendingSlot=this.createSlot(t)}tryStartIncrementalUpdate(e){if(!this.activeSlot||this.pendingSlot||this.incrementalUpdateInFlight)return!1;let t=this.activeSlot.renderData.getObjectsInOrder();if(!this.activeSlot.renderData.canIncrementalAppend(e))return!1;let n=e.slice(t.length);if(n.length===0)return!1;this.incrementalUpdateInFlight=!0;let r=this.activeSlot;return r.renderData.appendObjects(n).then(e=>{if(!e||this.activeSlot!==r||r.renderData.disposed)return;let t=r.textures;r.textures=this.createTextures(r.renderData),this.usedSHDegree>0&&r.renderData.maxShDegree>0&&this.createSHTexture(r),this.bindSlotTextures(r),this.ensureSplatIndexCapacity(r.renderData.numPoints),r.sortDataUploaded=!1,r.awaitingFirstSort=!0,this.disposeTextures(t),this.forceClipperUniformRefresh=!0,this.gsSceneState.lastClipperHash=``,this.needsRender=!0}).catch(e=>{console.warn(`Incremental append failed, fallback to rebuild:`,e)}).finally(()=>{this.incrementalUpdateInFlight=!1}),!0}dispose(){this.disposeSlot(this.pendingSlot),this.pendingSlot=null,this.disposeSlot(this.activeSlot),this.activeSlot=null,this.renderData=null,this.sortWorker&&this.sortWorker.terminate(),this.bindSlotTextures(null),this.geometry.dispose(),this.material.dispose()}},PBMGaussianSplattingTestMesh=class extends three.Mesh{constructor(){super(),this.onBeforeRender=(e,t,n)=>{this.collectObjects(t).length>0&&console.warn(`未开启webgl2, 3dgs仅支持在开启webgl2模式后使用`)}}collectObjects(e){let t=[];return e.traverse(e=>{e instanceof PBMGaussianSplattingObject&&e.visible&&t.push(e)}),t}},DEFAULT_MODE_CHANGE_DURATION=1e3,DEFAULT_CAMERA_FOV=90,DEFAULT_REQUEST_PROXY=e=>e.replace(`//vrlab-public.ljcdn.com/`,`//vr-public.realsee-cdn.cn/`).replace(`//vrlab-image4.ljcdn.com/`,`//vr-image-4.realsee-cdn.cn/`).replace(`//vrlab-image3.ljcdn.com/`,`//vr-image-3.realsee-cdn.cn/`).replace(`//vrlab-image2.ljcdn.com/`,`//vr-image-2.realsee-cdn.cn/`).replace(`//vrlab-image1.ljcdn.com/`,`//vr-image-1.realsee-cdn.cn/`),scratchSphere=new three.Sphere,scratchBox3=new three.Box3,scratchViewport=new three.Vector4,scratchScissor=new three.Vector4,scratchClearColor=new three.Color,scratchRenderSize=new three.Vector2,worksMap=new WeakMap,emptyWorks=createWorks([parseWork(null)]),Five_Instances={},Five=class e extends Subscribe{static get version(){return`6.8.0-alpha.21`}static get dracoPath(){return draco.decoderPath}static set dracoPath(e){draco.setDecoderPath(e)}static get ktx2Path(){return ktx2.transcoderPath}static set ktx2Path(e){ktx2.setTranscoderPath(e)}static get useNativeImageBitmap(){return canUseNativeImageBitmap()}static set useNativeImageBitmap(e){useNativeImageBitmap(e)}constructor(e={}){var t,n,r,o,s,c,l,u,d,f,p;if(super(),this.pbmGaussianSplattingRenderMesh=null,this.fiveId=createUuid(),Five_Instances[this.fiveId]=this,this.currentUpdateArgs={time:now(),args:[]},this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.needsRender=!1,this.onlyRenderIfNeeds=(t=e.onlyRenderIfNeeds)==null?!0:t,this.imageOptions=Object.assign({},(n=e.imageOptions)==null?{}:n),this.textureOptions=Object.assign({},(r=e.textureOptions)==null?{}:r),this.poweredByRealsee=(o=e.poweredByRealsee)==null?!0:o,this.backgroundColor=new three.Color((s=e.backgroundColor)==null?1579548:s),this.backgroundAlpha=(c=e.backgroundAlpha)==null?1:c,this.extraElements=[],this.controllerInits={Panorama:Object.assign({},e.panorama),Model:Object.assign({},e.model),Floorplan:Object.assign({},e.floorplan),Topview:Object.assign({},e.topview),Mapview:Object.assign({},e.mapview),VRPanorama:Object.assign({},e.vrPanorama),XRPanorama:Object.assign({},e.xrPanorama)},this.fps={testCount:0,testTime:now()},this.modeChangeDuration=(l=e.modeChangeDuration)==null?DEFAULT_MODE_CHANGE_DURATION:l,this.enableWheel=(u=e.enableWheel)==null?!0:u,typeof window<`u`)if(`renderer`in e)e.renderer instanceof InternalWebGLRenderer&&this.throwError(Error(`cannot render a internal renderer`)),this.renderer=e.renderer;else try{this.renderer=new InternalWebGLRenderer({preserveDrawingBuffer:e.preserveDrawingBuffer,antialias:e.antialias,webgl2:e.webgl2,logarithmicDepthBuffer:e.logarithmicDepthBuffer,precision:e.precision,powerPreference:e.powerPreference});let t=getViewportScale();this.renderer.setPixelRatio(t===1?window.devicePixelRatio:1),this.renderer.setSize(512,512),this.renderer.setClearColor(this.backgroundColor,this.backgroundAlpha)}catch(e){let t=e instanceof Error?e:Error(String(e));this.throwError(t)}this.getPixelsRenderTarget=new three.WebGLRenderTarget(1,1,{encoding:(f=(d=this.renderer)==null?void 0:d.outputEncoding)==null?three.sRGBEncoding:f,generateMipmaps:!1}),this.viewport=Object.assign({left:0,bottom:0,width:1,height:1},e.viewport),this.camera=new Camera(DEFAULT_CAMERA_FOV),this.scene=new Scene,this.xrCustomObjectsScene=new three.Scene,this.scene.add(this.xrCustomObjectsScene),this.scene.matrixAutoUpdate=!1,this.loadWorkTask=Promise.resolve(),this.requestProxy=(p=e.requestProxy)==null?DEFAULT_REQUEST_PROXY:p,this.networkSubscribe=new NetworkSubscribe,this.networkSubscribe.on(`network`,(e,t,n,r)=>{var o;this.emit(`network.resource`,createEvent(`network.resource`,{source:e,requestType:t,requestState:n,detail:r})),(o=this.analysis)==null||o.network(this.works,e,t,n,r)}),this.readyCallbacks=[],this.syncingState=!1,this.helperGroup=new three.Group,this.helperGroup.name=`helper`,this.helperGroup.matrixAutoUpdate=!1,this.scene.add(this.helperGroup),worksMap.set(this,emptyWorks),this.modelScene=new ModelScene({fiveId:this.fiveId}),this.modelScene.addEventListener(`model.create`,e=>{this.bindModel(e.model)}),this.scene.add(this.modelScene);let[m]=this.modelScene.setModels(emptyWorks,{forceReplaceImmediately:!0});defineProperty(m,`loaded`,{get(){return!1},set(e){}}),this.videoTexture=new three.VideoTexture(e.videoInstance||generateDefaultVideoElement());let h=initLights();this.scene.add(h),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.stateSynced=!1,this.destroyed=!1,this.paused=!0,typeof window<`u`&&(e.play!==!1&&this.play(),this.stopAnimationLoop=AnimationFrameLoop.shared.add((e,t,...n)=>{this.updateTime(e,t,...n)},!1,0,10));let g=()=>{typeof document<`u`&&document.fullscreenElement===null&&this.currentMode===`VRPanorama`&&this.controller.emit(`vr.requestExit`,createEvent(`vr.requestExit`,{}))},_=()=>{this.needsRender=!0};if(typeof document<`u`&&document.addEventListener(`fullscreenchange`,g,!1),this.renderer&&this.renderer.domElement.addEventListener(`webglcontextrestored`,_,!1),this.removeEventListeners=()=>{typeof document<`u`&&document.removeEventListener(`fullscreenchange`,g,!1),this.renderer&&this.renderer.domElement.removeEventListener(`webglcontextrestored`,_,!1)},this.plugins={},e.plugins&&e.plugins.length){for(let t of e.plugins)if(typeof t==`function`)t(this);else if(Array.isArray(t)){let[e,n,r]=t;if(typeof e==`function`){let t=e(this,r);typeof n==`string`&&(this.plugins[n]?this.throwError(Error(`plugin name ${n} is exists.`)):this.plugins[n]=t)}}}initLegacyEvent(this),this.fiveRenderer=new FiveRenderer,this.adaptiveLuminancePass=new AdaptiveLuminancePass,this.adaptiveLuminancePass.enabled=!1,this.fiveRenderer.composer.addPass(this.adaptiveLuminancePass),this.eyeDomeLightingPass=new EyeDomeLightingPass(this.camera),this.eyeDomeLightingPass.enabled=!1,this.fiveRenderer.composer.addPass(this.eyeDomeLightingPass),e.webgl2?(this.pbmGaussianSplattingRenderMesh=new PBMGaussianSplattingRenderMesh,this.scene.add(this.pbmGaussianSplattingRenderMesh)):this.scene.add(new PBMGaussianSplattingTestMesh)}get ident(){return this.fiveId}get panoIndex(){return this.pano.panoIndex}get panoId(){return panoStringify(this.pano)}dispose(){var e;if(this.destroyed===!0)return;delete Five_Instances[this.fiveId],this.emit(`dispose`),this.destroyed=!0,this.pause(),this.stopAnimationLoop&&(this.stopAnimationLoop(),this.stopAnimationLoop=void 0),this.off(),this.networkSubscribe.off(),this.controller&&(this.controller.destroy(),this.controller=void 0);let t=this.getElement();t&&t.parentNode&&t.parentNode.removeChild(t);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((e=n.pano0)==null?void 0:e.map)&&n.pano1.map.dispose(),n.reset(`pano0`,`pano1`),this.modelScene.dispose(),this.scene.dispose(),this.xrCustomObjectsScene.dispose(),worksMap.set(this,emptyWorks),this.renderer&&this.renderer.render(new three.Scene,new three.Camera),this.fiveRenderer.dispose(),this.renderer instanceof InternalWebGLRenderer&&(this.renderer.forceContextLoss&&this.renderer.forceContextLoss(),this.renderer.dispose())}setViewport(e){Object.assign(this.viewport,e),this.needsRender=!0}get boundingMesh(){return this.modelScene.boundingMesh}get helperVisible(){return this.helperGroup.visible}set helperVisible(e){this.helperGroup.visible!==e&&(this.helperGroup.visible=e,this.emit(`helpers.visible`,createEvent(`helpers.visible`,{object:this.helperGroup})),this.needsRender=!0)}updateConfiguration(e,t=!0){let n=!1,r=!1;e.panorama&&(Object.assign(this.controllerInits.Panorama,omitUndefinedFields(e.panorama)),this.currentMode===`Panorama`&&(n=!0)),e.model&&(Object.assign(this.controllerInits.Model,omitUndefinedFields(e.model)),this.currentMode===`Model`&&(n=!0)),e.floorplan&&(Object.assign(this.controllerInits.Floorplan,omitUndefinedFields(e.floorplan)),this.currentMode===`Floorplan`&&(n=!0)),e.topview&&(Object.assign(this.controllerInits.Topview,omitUndefinedFields(e.topview)),this.currentMode===`Topview`&&(n=!0)),e.mapview&&(Object.assign(this.controllerInits.Mapview,omitUndefinedFields(e.mapview)),this.currentMode===`Mapview`&&(n=!0)),e.vrPanorama&&(Object.assign(this.controllerInits.VRPanorama,omitUndefinedFields(e.vrPanorama)),this.currentMode===`VRPanorama`&&(n=!0)),e.imageOptions&&(Object.assign(this.imageOptions,e.imageOptions),(this.currentMode===`Panorama`||this.currentMode===`VRPanorama`)&&(r=!0,n=!0)),e.textureOptions&&Object.assign(this.textureOptions,e.textureOptions),t&&n&&this.controller&&this.currentMode&&(!this.controller.updateConfiguration(this.controllerInits[this.currentMode])||r)&&this.changeMode(this.currentMode,this.getCurrentState(),0,!1,!0)}appendTo(e,t={}){if(!this.renderer)return;if(!(this.renderer instanceof InternalWebGLRenderer)){this.throwError(Error(`cannot call appendTo method when render a external renderer`));return}let n=this.getElement();if(!n)return;e.appendChild(n),this.refresh(t);let r=window.getComputedStyle(e).position;r!==`relative`&&r!==`absolute`&&r!==`fixed`&&r!==`sticky`&&(e.style.position=`relative`)}refresh(e={},t){var n,r,o;if(!this.renderer)return;let s=this.renderer.domElement.parentNode,{width:c=(n=s==null?void 0:s.offsetWidth)==null?512:n,height:l=(r=s==null?void 0:s.offsetHeight)==null?512:r}=e;if(c=Math.max(1,c),l=Math.max(1,l),!t){let e=getViewportScale(),n=typeof window<`u`?window.devicePixelRatio:1;if(t=(o=e===1?n:1)==null?1:o,t>1){let e=Math.max(c,l)*t,n=Math.min(this.renderer.capabilities.maxTextureSize,4096);e>n&&(t=Math.max(t/e*n,1),t=Math.floor(t*100)/100)}}this.renderer.setPixelRatio(t),this.renderer.setSize(c,l),this.needsRender=!0;let u=now(),d=u-this.currentUpdateArgs.time,f=this.currentUpdateArgs.args;this.updateTime(u,d,...f)}addExtraElement(e){return this.extraElements.indexOf(e)===-1&&(this.extraElements.push(e),this.controller&&this.controller.bindExtraElement(e)),()=>this.removeExtraElement(e)}removeExtraElement(e){let t=this.extraElements.indexOf(e);t!==-1&&(this.extraElements.splice(t,1),this.controller&&this.controller.unbindExtraElement(e))}getSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}getDrawingBufferSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getDrawingBufferSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}updateCamera(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCamera(e,t,n)}updateCameraWithKeyframes(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCameraWithKeyframes(e,t,n)}get works(){return worksMap.get(this)||emptyWorks}get work(){return this.works[0]}get observers(){return this.work.observers}get models(){return this.modelScene.models}get model(){return this.modelScene.models[0]}load(e,t,n,r=!0){if(!this.renderer)throw Error(`renderer is not initialized`);let o=this.loadWorkTask.then(()=>isPromise(e)?e.then(e=>this.load_(e,t,n,r)):this.load_(e,t,n,r));return this.loadWorkTask=o.catch(e=>{this.throwError(e)}),o}load_(t,n,r,o=!0){var s,c,l,u,d,f,p,m,h,g;let _={};typeof r==`number`?_.duration=r:typeof r==`object`&&Object.assign(_,r),this.works===emptyWorks&&(_.duration===void 0&&(_.duration=0),_.effect===void 0&&(_.effect=`instant`));let v={};Object.assign(v,_.model),!v[`3d-tiles`]&&_[`3d-tiles`]&&(v[`3d-tiles`]=_[`3d-tiles`]),!v.textureOptions&&_.textureOptions&&(v.textureOptions=_.textureOptions),!v.textureOptions&&this.textureOptions&&(v.textureOptions=this.textureOptions);let y=[];if(Array.isArray(t))for(let e of t)e instanceof Work?y.push(e):typeof e!=`string`&&`work`in e?y.push(parseWork(e.work,e)):y.push(parseWork(e));else t instanceof Work?y.push(t):y.push(parseWork(t));_.mode===`add`&&(y=[].concat(this.works,y));let b;try{b=createWorks(y)}catch(e){return this.throwError(e),Promise.reject(e)}for(let e of b)this.bindWorkFetcher(e);n===void 0&&(n=`inherit`),n===`inherit`&&this.works===emptyWorks&&(n=`initial`);let S=this.currentMode,C=b.initial,w=C.work.observers[0],T=w?{workCode:w.work.workCode,panoIndex:w.panoIndex}:{workCode:C.work.workCode,panoIndex:0},E=(s=C.mode)==null?w?`Panorama`:`Mapview`:s,D={};if(n===`inherit`){let e=this.getCurrentState(),[t]=b.filter(t=>t.workCode===e.workCode);if(t)T={workCode:e.workCode,panoIndex:e.panoIndex},E=e.mode,D={longitude:e.latitude,latitude:e.latitude,fov:e.fov,distance:e.distance,offset:e.offset.clone()};else{n={mode:S};let e=(l=(c=b[0])==null?void 0:c.observers)==null?void 0:l[this.panoIndex];e?(n.workCode=e.work.workCode,n.panoIndex=e.panoIndex):typeof b.initial.panoIndex==`number`?(n.workCode=b.initial.work.workCode,n.panoIndex=b.initial.panoIndex):(n.mode===`Panorama`||n.mode===`VRPanorama`||n.mode===`XRPanorama`)&&(n.mode=`Mapview`),n.mode===S&&(n.longitude=this.camera.pose.longitude,n.latitude=this.camera.pose.latitude,n.fov=this.camera.pose.fov)}}if(n===`initial`&&(typeof C.panoIndex==`number`&&(T={workCode:C.work.workCode,panoIndex:C.panoIndex}),C.mode&&(E=C.mode),D={longitude:C.longitude,latitude:C.latitude,fov:C.fov,distance:C.distance,offset:(u=C.offset)==null?void 0:u.clone()}),typeof n==`object`){if(E=(d=n.mode)==null?S:d,typeof n.panoIndex==`number`){let e=b.getObserver({workCode:(p=(f=n.workCode)==null?C.work.workCode:f)==null?``:p,panoIndex:n.panoIndex});e&&(T={workCode:e.work.workCode,panoIndex:e.panoIndex})}D={longitude:n.longitude,latitude:n.latitude,fov:n.fov,distance:n.distance,offset:n.offset?new three.Vector3().copy(n.offset):void 0}}let O=(m=_.duration)==null?this.modeChangeDuration:m;(E===`Floorplan`||E===`Topview`||E===`Mapview`)&&S===E&&(O=0);let k=`fly`;(E===`Panorama`||E===`VRPanorama`||E===`XRPanorama`)&&S===E&&(k=(h=_.effect)==null?`fade`:h),this.emit(`works.request`,createEvent(`works.request`,{input:t,works:b,userAction:o}));let A=(e,t,r)=>{let s=this.getCurrentState(),c=Object.assign(Object.assign({mode:e},t),r);n===`inherit`&&(c=this.getCurrentState()),this.pano=t;let l=Object.assign(Object.assign({initial:{state:c,currentState:s,duration:O,effect:k,userAction:o}},this.commonParams()),this.controllerInits[e]),u=Controllers[c.mode].initAnimationEndState(l);if(this.controller&&S===e)this.controller.updateWork(b,u,{effect:k,duration:O},o)===!1&&(this.controller.destroy(),this.controller=this.applyController(e,l));else{if(this.controller)this.controller.destroy();else{let t=Controllers[e].initAnimationEndState(l);this.camera.setFromPose(t),this.emit(`camera.update`,createEvent(`camera.update`,{state:this.getCurrentState(),userAction:o}))}this.controller=this.applyController(e,l);let t=createEvent(`mode.change`,{prevMode:S,mode:e,state:u,userAction:o});try{this.emit(`mode.change`,t)}catch(e){console.error(e)}}this.updateTime(this.currentUpdateArgs.time,0,...this.currentUpdateArgs.args)};worksMap.set(this,b);let j=Promise.resolve();if(E===e.Mode.Floorplan||E===e.Mode.Topview||E===e.Mode.Mapview||E===e.Mode.Model){this.modelScene.loaded===!1&&(this.camera.setFromPose(D),assignPose(this.state,this.camera.pose));let e=this.modelScene.setModels(b,v);j=Promise.all(e.map(e=>e.loadedReady)).then(()=>{this.needsRender=!0,A(E,T,D),this.emit(`camera.update`,createEvent(`camera.update`,{state:this.getCurrentState(),userAction:o}))})}else{A(E,T,D);let e=this.controller,t=!1;this.modelScene.autoRefine=!1;let n=()=>{this.works===b&&t===!1&&(this.needsRender=!0,this.emit(`camera.update`,createEvent(`camera.update`,{state:this.getCurrentState(),userAction:o})),t=!0,this.modelScene.autoRefine=!0),e.off(`pano.arrived`,n),e.off(`pano.cancel`,n)},r=this.modelScene.setModels(b,v);j=Promise.all(r.map(e=>e.initReady)).then(noop),e.once(`pano.arrived`,n),e.once(`pano.cancel`,n),setTimeout(n,((g=_.duration)==null?this.modeChangeDuration:g)+1e3)}return this.emit(`works.load`,createEvent(`works.load`,{input:t,userAction:o,works:b})),j.then(()=>this.ready()).then(()=>{var e;this.emit(`works.ready`,createEvent(`works.ready`,{input:t,userAction:o,works:b})),(e=this.analysis)==null||e.work(b)})}reset(){let e=this.loadWorkTask.then(()=>this.reset_());return this.loadWorkTask=e.catch(e=>{this.throwError(e)}),e}reset_(){return new Promise(e=>{var t;this.controller&&(this.controller.destroy(),this.controller=void 0);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((t=n.pano0)==null?void 0:t.map)&&n.pano1.map.dispose(),n.set({pano0:null,pano1:null,modelAlpha:1}),worksMap.set(this,emptyWorks),this.modelScene.setModels(emptyWorks,{forceReplaceImmediately:!0}),this.renderer&&this.modelScene.update(this.renderer,this.camera),this.needsRender=!0,this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.camera.setFromPose({distance:0,fov:DEFAULT_CAMERA_FOV,longitude:0,latitude:0,offset:new three.Vector3(0,0,0)}),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.camera.needsRender=!1,this.needsRender=!1,e()})}changeMode(t,n={},r,o=!0,s=!1){return new Promise((c,l)=>{var u,d,f,p;if(!this.renderer)throw Error(`renderer is not initialized.`);n=Object.assign({},n);let m=0;this.controller&&(m=typeof r==`number`?r:(u=r==null?void 0:r.duration)==null?this.modeChangeDuration:u);let h=`fly`;this.controller&&typeof r==`object`&&r.effect&&(h=r.effect);let g=typeof n.panoIndex==`number`?{workCode:(p=(d=n.workCode)==null?(f=this.work)==null?void 0:f.workCode:d)==null?``:p,panoIndex:n.panoIndex}:this.pano;if(!e.Mode.hasOwnProperty(t)){let e=Error(`mode "${t}" is not existed`);this.throwError(e),l(e);return}if((t===e.Mode.Panorama||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama)&&!this.works.getObserver(g)){let e=Error(`PanoId ${panoStringify(g)} not existed.`);this.throwError(e),l(e);return}(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)&&this.modelScene.empty&&(m=0);let _=this.controller,v=this.currentMode,y=()=>{if(this.controller&&this.controller.stopMomentumMovement(),this.controller&&s===!1&&v===t)t===e.Mode.Panorama||t===e.Mode.Model||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama?!panoEqual(this.pano,g)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`?this.controller.moveToPano(g,Object.assign({duration:m},n),o):this.controller.updateCamera(n,m,o).catch(noop):(panoEqual(this.pano,g)||(this.pano=g),this.controller.updateCamera(n,m,o).catch(noop));else{let e=Object.assign(Object.assign({},n),g),r=Object.assign(Object.assign({initial:{state:e,currentState:this.getCurrentState(),duration:m,effect:h,userAction:o}},this.commonParams()),this.controllerInits[t]),s=Controllers[t].initAnimationEndState(r),c=createEvent(`mode.change.request`,{prevMode:this.currentMode,mode:t,state:s,userAction:o});if(this.emit(`mode.change.request`,c),!c.defaultPrevented){_&&_.destroy(),this.controller=this.applyController(t,r);let e=createEvent(`mode.change`,{prevMode:this.currentMode,mode:t,state:s,userAction:o});this.emit(`mode.change`,e)}}c()},b=AnimationFrameLoop.shared.getContext();b&&(typeof XRSession<`u`&&b instanceof XRSession&&b.end(),AnimationFrameLoop.shared.setContext(null)),t===e.Mode.VRPanorama?(this.requestFullscreen(),requestDeviceOrientationPermission().then(()=>y()).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.exitFullscreen(),this.throwError(t),l(t)})):t===e.Mode.XRPanorama?requestXRSessionPermission().then(e=>{AnimationFrameLoop.shared.setContext(e),s=!0,y()}).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.throwError(t),l(t)}):y()})}getPixels(e,t,n,r,o,s,c){if(!this.renderer)throw Error(`renderer is not initialized.`);let l=now(),u=this.renderer.getPixelRatio(),d=this.renderer.getRenderTarget(),f=this.getSize(new three.Vector2),p=0,m=0,h=1,g=1,_,v,y,b,S;typeof e==`number`?(p=e,typeof t==`number`&&(m=t),typeof n==`number`&&(h=n),typeof r==`number`&&(g=r),_=o,v=s,S=c):(p=e.x,m=e.y,h=e.width,g=e.height,_=e.pixelRatio,v=e.flipY,y=e.helperVisible,b=e.skipPanorama,S=e.buffer),p=Math.floor(p),m=Math.floor(m),h=Math.floor(h),g=Math.floor(g),_=Math.floor(_==null?u:_),v=v==null?!1:v;let C=this.helperVisible,w=this.modelScene.parameter.modelAlpha;this.helperVisible=y==null?this.helperVisible:y,b&&(this.controller instanceof Controllers.Panorama||this.controller instanceof Controllers.VRPanorama||this.controller instanceof Controllers.XRPanorama)&&b===!0&&this.modelScene.parameter.set(`modelAlpha`,1),this.modelScene.update(this.renderer,this.camera);let T=this.getPixelsRenderTarget;T.setSize(h*_,g*_),this.renderer.setRenderTarget(T),this.camera.pixelRatio=_,this.camera.resolution.set(h,g),this.camera.setViewOffset(f.width,f.height,p,f.height-m-g,h,g),this.camera.aspect=f.width/f.height,this.camera.updateTime(l),this.scene.update(this.renderer,this.camera);let E=this.renderer.autoClear,D=this.renderer.autoClearColor,O=this.renderer.autoClearDepth,k=this.renderer.autoClearStencil,A=scratchClearColor.copy(this.renderer.getClearColor()),j=this.renderer.getClearAlpha(),M=this.renderer.getScissorTest();this.renderer.autoClear=!0,this.renderer.autoClearColor=!0,this.renderer.autoClearDepth=!0,this.renderer.autoClearStencil=!0,this.renderer.setScissorTest(!1);let N=this.scene.background;this.scene.background=this.camera.isOrthographicCamera?null:N,this.renderer.render(this.scene,this.camera),this.scene.background=N,this.renderer.autoClear=E,this.renderer.autoClearColor=D,this.renderer.autoClearDepth=O,this.renderer.autoClearStencil=k,this.renderer.setClearColor(A,j),this.renderer.setScissorTest(M),this.helperVisible=C,w===void 0?this.modelScene.parameter.reset(`modelAlpha`):this.modelScene.parameter.set(`modelAlpha`,w),this.renderer.setRenderTarget(d),this.camera.clearViewOffset(),this.camera.pixelRatio=u,this.camera.resolution.copy(f),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height,this.camera.updateTime(l),this.modelScene.update(this.renderer,this.camera),this.scene.update(this.renderer,this.camera);let P=h*_,F=g*_,I=P*F,L=I*4;if(S){if(S.length!==L)throw Error(`buffer length is not equals pixels ${L}`)}else S=new Uint8Array(L);if(this.renderer.readRenderTargetPixels(T,0,0,h*_,g*_,S),v){let e=I/2;for(let t=0,n=0,r=0,o=0;n<e;n++)for(o=(F-Math.floor(n/P)-1)*P+n%P,r=0;r<4;r++)t=S[n*4+r],S[n*4+r]=S[o*4+r],S[o*4+r]=t}return S}getElement(){var e;return(e=this.renderer)==null?void 0:e.domElement}render(e){let t=this.renderer;if(!t)return;let n=t.getRenderTarget();t.setRenderTarget(null);let r=t.autoClear,o=t.autoClearColor,s=t.autoClearDepth,c=t.autoClearStencil,l=scratchClearColor.copy(t.getClearColor()),u=t.getClearAlpha(),d=t.getViewport(scratchViewport),f=t.getScissor(scratchScissor),p=t.getScissorTest();t.autoClear=!0,t.autoClearColor=!0,t.autoClearDepth=!0,t.autoClearStencil=!0;let m=t.getSize(scratchRenderSize),h=Math.floor(m.x*this.viewport.left),g=Math.floor(m.y*this.viewport.bottom),_=Math.floor(m.x*this.viewport.width),v=Math.floor(m.y*this.viewport.height);t.setClearColor(this.backgroundColor,this.backgroundAlpha),t.setViewport(h,g,_,v),t.setScissor(h,g,_,v);let y=this.viewport.bottom!==0||this.viewport.left!==0||this.viewport.width!==1||this.viewport.height!==1;t.setScissorTest(y);let b=this.scene.background;this.scene.background=this.camera.isOrthographicCamera?null:b;let S=!0;if(this.controller&&this.controller.render()&&(S=!1),S){let e=this.fiveRenderer.render(t,this.scene,this.modelScene,this.camera,this.needsRender);this.poweredByRealsee&&e&&renderPoweredByRealsee(t)}this.scene.background=b,t.autoClear=r,t.autoClearColor=o,t.autoClearDepth=s,t.autoClearStencil=c,t.setClearColor(l,u),t.setViewport(d),t.setScissor(f),t.setScissorTest(p),t.setRenderTarget(n),e&&AnimationFrameLoop.shared.add(e,!0)}updateTime(e,t,...n){if(this.currentUpdateArgs={time:e,args:n},this.destroyed)return;if(this.renderer&&ktx2.detectSupport(this.renderer),this.syncingState=this.syncState(e,t),this.controller&&this.controller.updateTime(e,t,...n),this.renderer&&(this.camera.pixelRatio=this.renderer.getPixelRatio(),this.getSize(this.camera.resolution),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height),this.camera.controllerMode=this.currentMode,this.camera.updateTime(e),this.renderer){let e=this.modelScene.loaded,t=this.modelScene.refined;this.modelScene.update(this.renderer,this.camera),e===!1&&this.modelScene.loaded===!0&&(this.controller&&this.controller.updateModel(this.modelScene),AnimationFrameLoop.shared.add(()=>{this.emit(`models.load`,createEvent(`models.load`,{modelScene:this.modelScene}))},!0,0,10)),t===!1&&this.modelScene.refined===!0&&AnimationFrameLoop.shared.add(()=>{this.emit(`models.refined`,createEvent(`models.refined`,{modelScene:this.modelScene}))},!0,0,10)}if(this.camera.autoNearFar){scratchBox3.makeEmpty(),scratchBox3.expandByObject(this.modelScene.boundingMesh);let t=scratchBox3.getBoundingSphere(scratchSphere),n=t.radius*2;t.containsPoint(this.camera.position)||(n=this.camera.position.distanceTo(t.center)+t.radius),n=clamp$1(n,800);let r=n/1e4;r=clamp$1(r,.03,.1),this.camera.near!==r&&(this.camera.near=r),this.camera.far!==n&&(this.camera.far=n),this.camera.updateTime(e)}if(this.renderer){let e=this.modelScene.visible;this.modelScene.visible=!1,this.scene.update(this.renderer,this.camera),this.modelScene.visible=e}if(this.syncingState=!1,this.controller&&this.controller.needsRender===!0&&(this.controller.needsRender=!1,this.needsRender=!0),this.camera.needsRender===!0&&(this.camera.needsRender=!1,this.needsRender=!0),this.modelScene.needsRender===!0&&(this.modelScene.needsRender=!1,this.needsRender=!0),this.scene.needsRender===!0&&(this.scene.needsRender=!1,this.needsRender=!0),this.pbmGaussianSplattingRenderMesh&&this.pbmGaussianSplattingRenderMesh.needsRender===!0&&(this.pbmGaussianSplattingRenderMesh.needsRender=!1,this.needsRender=!0),this.onlyRenderIfNeeds!==!0&&(this.needsRender=!0),this.paused===!0)return;let r=createEvent(`render.prepare`,{needsRender:this.needsRender});this.emit(`render.prepare`,r),r.defaultPrevented&&(this.needsRender=!1);let o=this.needsRender;this.render(),this.needsRender=!1,this.emit(`render`,createEvent(`render`,{needsRender:o})),this.hasListener(`fps`)&&(this.fps.testTime&&e-this.fps.testTime<1e3?this.fps.testCount++:(this.emit(`fps`,this.fps.testCount),this.fps.testTime=e,this.fps.testCount=0))}pause(){this.paused=!0,this.renderer&&this.renderer instanceof InternalWebGLRenderer&&this.renderer.clear(!0,!0,!0)}play(){this.needsRender=!0,this.paused=!1}moveToPano(t,n={},r=!0){let{controller:o,renderer:s}=this;if(!o)return this.throwError(Error(`controller is not initialized.`)),Promise.resolve();if(!s)return this.throwError(Error(`renderer is not initialized.`)),Promise.resolve();typeof t==`number`&&this.pano.workCode&&(t={workCode:this.pano.workCode,panoIndex:t});let c=this.works.getObserver(t);if(!c)return this.throwError(Error(`pano ${JSON.stringify(t)} not existed.`)),Promise.resolve();let l={workCode:c.work.workCode,panoIndex:c.panoIndex};return`moveToPano`in o&&typeof o.moveToPano==`function`?o.moveToPano(l,n,r):c&&(this.pano=l,this.once(`initAnimation.start`,e=>{n.moveStartCallback&&n.moveStartCallback(e.state)}),this.once(`initAnimation.end`,e=>{n.moveEndCallback&&n.moveEndCallback(e.state)}),this.changeMode(e.Mode.Panorama,n,{effect:n.effect},r)),this.ready()}preloadPano(e,t=noop){let n=this.works.getObserver(e);if(!n)return Promise.reject(Error(`Pano ${JSON.stringify(e)} never found`));let r=[`right`,`left`,`up`,`down`,`front`,`back`],o=now();return Promise.all(r.map(e=>{let t=panoStringify({panoIndex:n.panoIndex,workCode:n.work.workCode}),r=Object.assign({key:`pano.${t}.${e}`},pick(this.imageOptions,[`size`,`format`,`quality`,`forceUseExifOrientation`,`mappings`])),o=n.work.getURL(n.images[e]),s=this.imageOptions.transform?this.imageOptions.transform(o,r):imageURL(o,r);return getFetcher(this.fiveId,n.work).preload(s)})).then(()=>{let e=now()-o;return t(e),e})}project2d(e,t=!1){if(!this.renderer)return null;if(t){let t=this.camera.position,n=e.clone().sub(t),r=new three.Raycaster(t,n.clone().normalize());r.params.Points={threshold:.1};let[o]=this.modelScene.intersectRaycaster(r);if(o&&o.distance+.01<n.length())return null}let n=e.clone().project(this.camera);if(Math.abs(n.z)>1)return null;let r=this.renderer.getSize(new three.Vector2),o=r.x*this.viewport.width,s=r.y*this.viewport.height,c=r.x*this.viewport.left+(n.x+1)/2*o,l=r.y*(1-this.viewport.bottom-this.viewport.height)+(-n.y+1)/2*s;return new three.Vector2(c,l)}getCurrentState(){return Object.assign(Object.assign({},this.camera.copyPose()),{mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex})}setState(e,t=!1,n=!0){var r,o,s,c,l,u,d,f,p,m;e=pick(e,[`mode`,`workCode`,`panoIndex`,`longitude`,`latitude`,`fov`,`offset`,`distance`]),e.offset&&!(e instanceof three.Vector3)&&(e.offset=new three.Vector3(e.offset.x,e.offset.y,e.offset.z));let h;if(typeof e.panoIndex==`number`)if(e.workCode)h={workCode:e.workCode,panoIndex:e.panoIndex};else{let t=(o=(r=this.work)==null?void 0:r.workCode)==null?``:o,n=this.state.workCode;this.works.filter(e=>e.workCode===n).length>0&&(t=n),h={workCode:t,panoIndex:e.panoIndex}}let g=(s=e.mode)==null?this.state.mode:s,_,v,y,b,S;if(this.controller&&this.controller.stopMomentumMovement(),this.state.mode!==g){if(g===`VRPanorama`){this.changeMode(`VRPanorama`,void 0,void 0,!0);return}let t={workCode:h==null?void 0:h.workCode,panoIndex:h==null?void 0:h.panoIndex};typeof e.longitude==`number`&&(t.longitude=e.longitude),typeof e.latitude==`number`&&(t.latitude=e.latitude),typeof e.fov==`number`&&(t.fov=e.fov),typeof e.distance==`number`&&(t.distance=e.distance),e.offset instanceof three.Vector3&&(t.offset=e.offset);let n=Object.assign(Object.assign({initial:{state:t,currentState:this.getCurrentState(),duration:this.modeChangeDuration,effect:`fly`,userAction:!1}},this.commonParams()),this.controllerInits[g]),r=Controllers[g].initAnimationEndState(n);_=r.longitude,v=r.latitude,y=r.fov,b=r.offset,S=r.distance}else _=(c=e.longitude)==null?this.state.longitude:c,v=(l=e.latitude)==null?this.state.latitude:l,y=(u=e.fov)==null?this.state.fov:u,b=(d=e.offset)==null?this.state.offset:d,S=(f=e.distance)==null?this.state.distance:f;let C={workCode:(h==null?this.pano:h).workCode,panoIndex:(h==null?this.pano:h).panoIndex,mode:g,longitude:_,latitude:v,fov:y,offset:b,distance:S};this.emit(`state.set`,createEvent(`state.set`,{userAction:n,state:C})),stateEqual(this.state,C)||(this.controller&&C.mode===`VRPanorama`&&C.mode!==this.state.mode?(assignState(this.state,C),this.changeMode(`VRPanorama`)):this.controller&&C.mode===`XRPanorama`&&C.mode!==this.state.mode?(assignState(this.state,C),this.changeMode(`XRPanorama`)):(assignState(this.state,C),this.controller&&n&&(this.controller.userAction=!1),t&&this.state.mode===C.mode&&(this.syncingState=this.syncState(now(),0,t),this.syncingState&&((p=this.controller)==null||p.updateTime(now(),0),this.syncingState=!1)),this.emit(`state.change`,createEvent(`state.change`,{userAction:n,state:this.state})),(m=this.analysis)==null||m.state(this.works,this.state)))}syncState(t,n,r=!1){let o=this.stateSynced;if(this.stateSynced=!1,!this.controller)return!1;if(this.state.mode!==this.currentMode){let e={mode:this.state.mode,workCode:this.state.workCode,panoIndex:this.state.panoIndex,longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.changeMode(this.state.mode,e,this.modeChangeDuration,this.controller.userAction),!0}if(!this.controller.isReady())return!1;if(this.controller instanceof Controllers.Model){if(notSimilarVector3(this.camera.pose.offset,this.state.offset)){let e={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset};return this.controller.moveToPosition(this.state.offset,Object.assign(Object.assign({},e),{duration:r?0:void 0}),!1),!0}}else{let e={workCode:this.state.workCode,panoIndex:this.state.panoIndex};if(!panoEqual(e,this.pano)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`){let t={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.controller.moveToPano(e,t,!1),!0}}if(this.controller instanceof Controllers.Floorplan||this.controller instanceof Controllers.Topview||this.controller instanceof Controllers.Mapview){let e=1,t=.2,n=.2,o=Math.PI/45,s=r?this.state.fov:stepNumber(this.camera.pose.fov,this.state.fov,1),c=Math.abs(this.camera.pose.distance-this.state.distance),l=c>n*15?c/15:.2,u=r?this.state.distance:stepNumber(this.camera.pose.distance,this.state.distance,l),d=this.camera.pose.offset.distanceTo(this.state.offset),f=d>n*15?d/15:n,p=r?new three.Vector3().copy(this.state.offset):stepVector(this.camera.pose.offset,this.state.offset,f),{longitude:m,latitude:h}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:stepCoordinates({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},o);if(notSimilarValue(s,this.camera.pose.fov)||notSimilarVector3(p,this.camera.pose.offset)||notSimilarValue(u,this.camera.pose.distance)||notSimilarValue(m,this.camera.pose.longitude,Math.PI*2)||notSimilarValue(h,this.camera.pose.latitude)){let e={x:p.x,y:p.y,z:p.z},t={fov:s};return Object.assign(e,{distance:u}),Object.assign(t,{longitude:m,latitude:h}),this.controller.stopMomentumMovement(),this.controller.cameraMotion.set(t,0).catch(noop),this.controller.locationMotion.set(e,0).catch(noop),!0}}else{let e=1,t=Math.PI/45,n=r?this.state.fov:stepNumber(this.camera.pose.fov,this.state.fov,1),{longitude:o,latitude:s}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:stepCoordinates({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},t),c=this.state.distance,l=new three.Vector3().copy(this.state.offset);if(notSimilarValue(c,this.camera.pose.distance)&&(this.state.distance=this.camera.pose.distance),notSimilarVector3(l,this.camera.pose.offset)&&(this.state.offset=this.camera.pose.offset.clone()),notSimilarValue(o,this.camera.pose.longitude,Math.PI*2)||notSimilarValue(s,this.camera.pose.latitude)||notSimilarValue(n,this.camera.pose.fov))return this.controller.stopMomentumMovement(),this.controller.cameraMotion.set({longitude:o,latitude:s,fov:n},0).catch(noop),!0}if(this.stateSynced=!0,o===!1&&this.emit(`state.synced`,createEvent(`state.synced`,{userAction:!1,state:this.state})),this.readyCallbacks.length&&this.stateSynced){let t=this.currentMode;if(!(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)||this.modelScene.loaded){let e=this.readyCallbacks.slice();this.readyCallbacks.length=0;for(let t of e)this.controller instanceof Controllers.Panorama&&t.tile===!0&&!this.controller.isTileReady()?this.readyCallbacks.push(t):t()}}return!1}ready(e={}){return new Promise(t=>{var n;this.readyCallbacks.push(Object.assign(t,{tile:(n=e.tile)==null?!1:n}))}).then(()=>this.model.initReady).then(noop)}requestFullscreen(){var e;if(!isMobile)return;let t=(e=this.getElement())==null?void 0:e.parentNode;t&&`requestFullscreen`in t&&typeof document<`u`&&document.fullscreenElement===null&&t.requestFullscreen()}exitFullscreen(){typeof document<`u`&&document.fullscreenElement&&`exitFullscreen`in document&&document.exitFullscreen()}throwError(e){this.hasListener(`error`)?this.emit(`error`,e):console.error(e)}bindModel(e){let t=()=>{AnimationFrameLoop.shared.add(()=>{this.emit(`model.load`,createEvent(`model.load`,{work:e.work,model:e,error:null}))},!0)},n=t=>{let{error:n}=t;this.emit(`model.error`,createEvent(`model.error`,{work:e.work,model:e,error:n})),this.throwError(n)},r=()=>{this.emit(`model.changeShownFloor`,createEvent(`model.changeShownFloor`,{work:e.work,model:e,error:null}))},o=t=>{this.emit(`models.tileLoad`,createEvent(`model.tileLoad`,{work:e.work,model:e,tile:t.tile}))},s=t=>{this.emit(`models.tileUnload`,createEvent(`model.tileUnload`,{work:e.work,model:e,tile:t.tile}))},c=()=>{e.removeEventListener(`load`,t),e.removeEventListener(`error`,n),e.removeEventListener(`changeShownFloor`,r),e.removeEventListener(`tileLoad`,o),e.removeEventListener(`tileUnload`,s),e.removeEventListener(`dispose`,c)};e.addEventListener(`load`,t),e.addEventListener(`error`,n),e.addEventListener(`changeShownFloor`,r),e.addEventListener(`tileLoad`,o),e.addEventListener(`tileUnload`,s),e.addEventListener(`dispose`,c),this.emit(`model.request`,createEvent(`model.request`,{work:e.work,model:e,error:null}))}bindWorkFetcher(e){let t=this,n=e.workCode,r=e.allowHosts,o=new Fetcher({get networkSubscribe(){return t.networkSubscribe},requestProxy(e){return Promise.resolve(e).then(e=>t.requestProxy(e,n)).then(e=>{let t=verifyURL(e,r);return t instanceof Error?Promise.reject(t):t})}});registerFetcher(this.fiveId,e,o)}commonParams(){return{fiveId:this.fiveId,scene:this.scene,xrCustomObjectsScene:this.xrCustomObjectsScene,helper:this.helperGroup,camera:this.camera,renderer:this.renderer,viewport:this.viewport,element:this.getElement(),works:this.works,imageOptions:this.imageOptions,enableWheel:this.enableWheel,extraElements:this.extraElements,videoTexture:this.videoTexture,modelScene:this.modelScene}}applyController(t,n){if(!this.renderer)throw Error(`renderer is not initialized.`);let r=Controllers[t];this.currentMode=t;let o=new r(n);for(let e of PROXY_CONTROLLER_EVENT_NAMES)o.on(e,(...t)=>{if(this.emit(e,...t))return!1});{let e=Controllers[t].initAnimationEndState(n),r=n.initial.userAction;stateEqual(this.state,e)||(assignState(this.state,e),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state}))),this.emit(`currentState.change`,createEvent(`currentState.change`,{userAction:r,state:this.getCurrentState()}))}return o.on(`camera.update`,e=>{var t;if(this.controller){let n=this.controller.getTargetState();e.userAction&&this.syncingState===!1&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:e.userAction,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}this.emit(`currentState.change`,createEvent(`currentState.change`,{userAction:e.userAction,state:this.getCurrentState()}))}),o.on(`initAnimation.start`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`initAnimation.end`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.moveTo`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.arrived`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.cancel`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.moveTo`,e=>{let{userAction:t}=e;this.emit(`currentState.change`,createEvent(`currentState.change`,{userAction:t,state:this.getCurrentState()}))}),o.on(`pano.request`,e=>{this.emit(`pano.request`,e),e.defaultPrevented||this.moveToPano(e.state,e.options,e.userAction)}),o.on(`vr.requestExit`,()=>{this.currentMode===e.Mode.VRPanorama&&(this.exitFullscreen(),this.changeMode(e.Mode.Panorama))}),o.on(`error`,e=>this.throwError(e)),o}removeEventListeners(){}get internalLightsEnabled(){let e=this.scene.children.find(e=>e.name===`internalLights`);return e?e.visible:!1}set internalLightsEnabled(e){let t=this.scene.children.find(e=>e.name===`internalLights`);t&&(t.visible=e),t=this.modelScene.children.find(e=>e.name===`internalLights`),t&&(t.visible=e)}get scissor(){return this.viewport}setScissor(e){return this.setViewport(e)}getPose(){let{longitude:e,latitude:t,fov:n,offset:r,distance:o}=this.camera.copyPose();return{longitude:e,latitude:t,fov:n,offset:r.clone(),distance:o}}getLongitudeAndLatitude(){let{longitude:e,latitude:t}=this.getPose();return{longitude:e,latitude:t}}getOffset(){return this.getPose().offset}getCameraLocal(){if(this.pano.workCode&&this.controller&&this.works){let e=this.works.getObserver(this.pano);if(e){let t=new three.Object3D;t.matrix.copy(e.matrix).premultiply(e.work.transform),t.matrix.decompose(t.position,t.quaternion,t.scale),t.matrixAutoUpdate=!1;let n=new three.Vector3(0,0,-1);n.applyQuaternion(this.camera.quaternion);let r=t.quaternion.clone().inverse();return n.applyQuaternion(r),{theta:Math.atan2(n.x,-n.z),phi:-Math.asin(n.y),lookAtVector:n}}}return null}addPass(e){this.fiveRenderer.composer.addPass(e)}removePass(e){let t=this.fiveRenderer.composer.passes.indexOf(e);t!==-1&&this.fiveRenderer.composer.passes.splice(t,1)}insertPass(e,t){this.fiveRenderer.composer.insertPass(e,t)}get renderMode(){return this.fiveRenderer.renderMode}set renderMode(e){this.fiveRenderer.renderMode=e}get enableHQ(){return this.fiveRenderer.renderMode===`point-cloud-high-quality`}set enableHQ(e){this.fiveRenderer.renderMode=e?`point-cloud-high-quality`:`default`,this.needsRender=!0}get enableEDL(){return this.eyeDomeLightingPass.enabled}set enableEDL(e){this.eyeDomeLightingPass.enabled=e,this.needsRender=!0}get enableAdaptiveLuminance(){return this.adaptiveLuminancePass.enabled}set enableAdaptiveLuminance(e){this.adaptiveLuminancePass.enabled=e,this.needsRender=!0}get enableIOSEDR(){return!1}set enableIOSEDR(e){}get enablePostProcessing(){return!0}set enablePostProcessing(e){}get modelSceneNeedsRender(){return this.modelScene.needsRender}set modelSceneNeedsRender(e){this.modelScene.needsRender=e}};Five.Mode={Panorama:`Panorama`,Model:`Model`,Floorplan:`Floorplan`,Topview:`Topview`,Mapview:`Mapview`,VRPanorama:`VRPanorama`,XRPanorama:`XRPanorama`},typeof window<`u`&&Object.assign(window,{__FIVE_DEBUG__:{THREE:three,constructor:Five,instances:Five_Instances}});var XRButton=class{static createButton(e){let t=document.createElement(`button`);function n(){t.style.display=``,t.style.cursor=`pointer`,t.style.left=`calc(50% - 50px)`,t.style.width=`100px`,t.textContent=`ENTER VR`,t.onmouseenter=function(){t.style.opacity=`1.0`},t.onmouseleave=function(){t.style.opacity=`0.5`},t.onclick=function(){e&&e()}}function r(){t.style.display=``,t.style.cursor=`auto`,t.style.left=`calc(50% - 75px)`,t.style.width=`150px`,t.onmouseenter=null,t.onmouseleave=null,t.onclick=null}function o(){r(),t.textContent=`VR NOT SUPPORTED`}function s(e){e.style.position=`absolute`,e.style.bottom=`20px`,e.style.padding=`12px 6px`,e.style.border=`1px solid #fff`,e.style.borderRadius=`4px`,e.style.background=`rgba(0,0,0,0.1)`,e.style.color=`#fff`,e.style.font=`normal 13px sans-serif`,e.style.textAlign=`center`,e.style.opacity=`0.5`,e.style.outline=`none`,e.style.zIndex=`999`}if(`xr`in navigator)return t.id=`VRButton`,t.style.display=`none`,s(t),navigator.xr.isSessionSupported(`immersive-vr`).then(function(e){e?n():o()}),t;{let e=document.createElement(`a`);return window.isSecureContext===!1?(e.href=document.location.href.replace(/^http:/,`https:`),e.innerHTML=`WEBXR NEEDS HTTPS`):(e.href=`https://immersiveweb.dev/`,e.innerHTML=`WEBXR NOT AVAILABLE`),e.style.left=`calc(50% - 90px)`,e.style.width=`180px`,e.style.textDecoration=`none`,s(e),e}}};exports.AdaptiveLuminancePass=AdaptiveLuminancePass,exports.AnimationFrameLoop=AnimationFrameLoop,exports.BoundingMesh=BoundingMesh,exports.Camera=Camera,exports.CustomShader=PBMCustomShader,exports.PBMCustomShader=PBMCustomShader,exports.EffectComposer=EffectComposer,exports.EyeDomeLightingPass=EyeDomeLightingPass,exports.Fetcher=Fetcher,exports.Five=Five,exports.FivePass=FivePass,exports.FiveRenderer=FiveRenderer,exports.FullScreenQuad=FullScreenQuad,exports.Histogram=Histogram,exports.InternalWebGLRenderer=InternalWebGLRenderer,exports.Model=Model,exports.ModelScene=ModelScene,exports.Motion=Motion,exports.NetworkSubscribe=NetworkSubscribe,exports.PBMContainer=PBMContainer,exports.PBMGSObject=PBMGaussianSplattingObject,exports.PBMGroup=PBMGroup,exports.PBMMesh=PBMMesh,exports.PBMMeshMaterial=PBMMeshMaterial,exports.PBMPanoFilter=PBMPanoFilter,exports.PBMPointCloud=PBMPointCloud,exports.PBMPointCloudMaterial=PBMPointCloudMaterial,exports.PBMSkinnedMesh=PBMSkinnedMesh,exports.PBMUpdateable=PBMUpdateable,exports.PROXY_CONTROLLER_EVENT_NAMES=PROXY_CONTROLLER_EVENT_NAMES,exports.PanoCircleMesh=PanoCircleMesh,exports.PanoCircleMeshCustom=PanoCircleMeshCustom,exports.PanoCircleMeshSolid=PanoCircleMeshSolid,exports.Parameter=Parameter,exports.Scene=Scene,exports.Subscribe=Subscribe,exports.TextureLoader=TextureLoader,exports.Tile=Tile,exports.Tile3D=Tile3D,exports.Tile3DModel=Tile3D,exports.TileCache=TileCache,exports.TileNode=TileNode,exports.TileRequestScheduler=TileRequestScheduler,exports.Tileset=Tileset,exports.Trajectory=Trajectory,exports.TrajectoryNode=TrajectoryNode,exports.Work=Work,exports.WorkResolvedObserver=WorkResolvedObserver,exports.XRButton=XRButton,exports.controllersDefaultInitArgs=controllersDefaultInitArgs,exports.coordinatesToVector=coordinatesToVector,exports.createDebugBoundingMesh=createDebugBoundingMesh,exports.createWorks=createWorks,exports.defaultImageURLTransform=imageURL,exports.draco=draco,exports.getViewportScale=getViewportScale,exports.headingToLongitude=headingToLongitude,exports.imageSupport=imageSupport,exports.isBoundingVolume=isBoundingVolume,exports.isPanoId=isPanoId,exports.ktx2=ktx2,exports.loadAt3d=loadAt3d,exports.loadB3dm=loadB3dm,exports.loadDome=loadDome,exports.loadDomez=loadDomez,exports.loadFbx=loadFbx,exports.loadGltf=loadGltf,exports.loadPbm=loadPbm,exports.loadPly=loadPly,exports.loadPnts=loadPnts,exports.loadSplat=loadSplat,exports.loadSpz=loadSpz,exports.loadX3p=loadX3p,exports.longitudeToHeading=longitudeToHeading,exports.makeBoundingVolume=makeBoundingVolume,exports.panoEqual=panoEqual,exports.panoParse=panoParse,exports.panoStringify=panoStringify,exports.parseWork=parseWork,exports.vectorToCoordinates=vectorToCoordinates,exports.workToJson=workToJson});
|
|
2325
|
+
----<<-计算从-}yn-中心到当前片段的平方距离----<<-由于-]|vv|{-已经按-\05E6-缩放,平方结果会被缩放-E-倍----<<-如果平方结果大于-E,说明在椭圆外,距离均值超过-\05E6-个标准差----sy|n-N-J-q|5]|vv|{9-]|vv|{6H----vs-5N-K-E;=6-qvpnqH--------rp@-p|y|-J-P|y|;toH--------<<-由于渲染的-}yn-按-\05E6-缩放,高斯公式中的逆协方差矩阵部分变成单位矩阵----<<-因此只剩下-5e-:-zrn{6-7-5e-:-zrn{6,而-zrn{-为零,所以是-e-7-e,即-N----sy|n-|}npv\b-J-r\x07}5:=;B-7-N6-7-P|y|;nH--------tylSntP|y|-J-rpA5p|y|;to9-|}npv\b6H\f`),PBMGaussianSplattingRenderMesh=class extends three.Mesh{constructor(){super(),this.renderData=null,this.needsRender=!1,this.sortWorker=null,this.depthIndex=new Uint32Array,this.splatIndexCapacity=0,this.activeSlot=null,this.pendingSlot=null,this.rebuildGeneration=0,this.forceClipperUniformRefresh=!1,this.incrementalUpdateInFlight=!1,this.dataTexture=null,this.transformsTexture=null,this.transformIndicesTexture=null,this.layerIndicesTexture=null,this.shTexture=null,this.usedSHDegree=0,this.onBeforeRender=(e,t,n)=>{let r=n,o=this.collectObjects(t);if(o.length===0){this.geometry.instanceCount=0;return}let s=0;o.forEach(e=>{e.usedSHDegree>s&&(s=e.usedSHDegree)}),this.setMaxShDegree(s),this.isSceneNeedsRebuild(o)&&(this.tryStartIncrementalUpdate(o)||(this.startPendingRebuild(o),this.gsSceneState.lastClipperHash=``));let c=o.filter(e=>e.transformChanged);c.length>0&&(this.syncTransformsForSlot(this.activeSlot,c),this.syncTransformsForSlot(this.pendingSlot,c),c.forEach(e=>{e.transformChanged=!1,e.selectedChanged=!1})),this.activeSlot&&this.updateSlotTextures(this.activeSlot),this.pendingSlot&&this.updateSlotTextures(this.pendingSlot);let l=new three.Matrix4().multiplyMatrices(r.perspectiveProjectionMatrix,r.matrixWorldInverse).elements;this.pendingSlot&&this.pendingSlot.renderData.initialBuildComplete&&this.pendingSlot.awaitingFirstSort?this.requestSort(this.pendingSlot,l):this.activeSlot&&this.requestSort(this.activeSlot,l);let u=this.getClipperHash(o);if((this.forceClipperUniformRefresh||u!==this.gsSceneState.lastClipperHash)&&(this.updateClipperUniforms(o),this.gsSceneState.lastClipperHash=u,this.forceClipperUniformRefresh=!1,this.needsRender=!0),this.activeSlot){let e=Math.min(this.usedSHDegree,this.activeSlot.renderData.maxShDegree);this.material.uniforms.u_maxShDegree.value=e,e>0&&!this.activeSlot.textures.shTexture?this.createSHTexture(this.activeSlot):e===0&&this.activeSlot.textures.shTexture&&(this.activeSlot.textures.shTexture.dispose(),this.activeSlot.textures.shTexture=null),this.material.uniforms.u_shTexture.value=this.activeSlot.textures.shTexture,this.renderData=this.activeSlot.renderData}else this.pendingSlot||(this.bindSlotTextures(null),this.material.uniforms.u_maxShDegree.value=0,this.geometry.instanceCount=0);this.material.uniforms.resolution.value.set(r.resolution.x,r.resolution.y)};let e=this.createGeometry(),t=this.createMaterial();this.geometry=e,this.material=t,this.frustumCulled=!1,this.renderOrder=-99999999999,this.gsSceneState={lastObjectsHash:``,lastClipperHash:``},this.sortWorker=new WorkerWrapper,this.sortWorker.postMessage({warmup:!0}),RenderData.warmupWasm(),this.sortWorker.onmessage=e=>{if(e.data.depthIndex){let t=e.data.generation;if(this.pendingSlot&&t===this.pendingSlot.generation){this.pendingSlot.awaitingFirstSort=!1,this.swapPendingToActive(e.data.depthIndex);return}this.activeSlot&&t===this.activeSlot.generation&&(this.activeSlot.awaitingFirstSort=!1,this.applyDepthIndex(e.data.depthIndex))}}}ensureSplatIndexCapacity(e){let t=this.geometry.getAttribute(`splatIndex`);if(e<=this.splatIndexCapacity)return t;let n=this.getExpandedCapacity(e),r=t.array,o=new Float32Array(n);o.set(r.subarray(0,Math.min(r.length,n)));let s=new three.InstancedBufferAttribute(o,1,!1,1);return s.setUsage(three.DynamicDrawUsage),this.geometry.setAttribute(`splatIndex`,s),this.splatIndexCapacity=n,this.geometry._maxInstanceCount=n,s}getExpandedCapacity(e){let t=Math.max(this.splatIndexCapacity,1);for(;t<e;)t*=2;return t}createGeometry(){let e=new three.InstancedBufferGeometry,t=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0]);e.setAttribute(`position`,new three.BufferAttribute(t,3));let n=new Uint16Array([0,1,2,0,2,3]);e.setIndex(new three.BufferAttribute(n,1)),this.splatIndexCapacity=1;let r=new Float32Array(this.splatIndexCapacity);for(let e=0;e<r.length;e++)r[e]=e;let o=new three.InstancedBufferAttribute(r,1,!1,1);return o.setUsage(three.DynamicDrawUsage),e.setAttribute(`splatIndex`,o),e._maxInstanceCount=this.splatIndexCapacity,e.instanceCount=0,e}createMaterial(){return new three.ShaderMaterial({vertexShader:vertex_default,fragmentShader:fragment_default,defines:{NUM_GS_LAYERS:0,NUM_GS_CLIPPERS:0},uniforms:{u_texture:{value:null},u_transforms:{value:null},u_transformIndices:{value:null},u_layerIndices:{value:null},u_numGsLayers:{value:0},u_numGsClippers:{value:0},u_layerClipperRanges:{value:[]},u_clipperMatricesInverse:{value:[]},u_shTexture:{value:null},u_shTextureSize:{value:new three.Vector2},u_maxShDegree:{value:0},resolution:{value:new three.Vector2}},side:three.DoubleSide,transparent:!0,blending:three.NormalBlending,depthTest:!0,depthWrite:!1})}createDefaultLayerClipperRanges(e){return Array.from({length:e},()=>new three.Vector2(-1,0))}createDefaultClipperMatrices(e){return Array.from({length:e},()=>new three.Matrix4)}createTextures(e){let t=new three.DataTexture(e.data,e.width,e.height,three.RGBAIntegerFormat,three.UnsignedIntType);t.internalFormat=`RGBA32UI`,t.minFilter=three.NearestFilter,t.magFilter=three.NearestFilter,t.needsUpdate=!0;let n=new three.DataTexture(e.transforms,e.transformsWidth,e.transformsHeight,three.RGBAFormat,three.FloatType);n.internalFormat=`RGBA32F`,n.minFilter=three.NearestFilter,n.magFilter=three.NearestFilter,n.needsUpdate=!0;let r=new three.DataTexture(e.transformIndices,e.transformIndicesWidth,e.transformIndicesHeight,three.RedIntegerFormat,three.UnsignedIntType);r.internalFormat=`R32UI`,r.minFilter=three.NearestFilter,r.magFilter=three.NearestFilter,r.needsUpdate=!0;let o=new three.DataTexture(e.layerIndices,e.layerIndicesWidth,e.layerIndicesHeight,three.RedIntegerFormat,three.UnsignedIntType);return o.internalFormat=`R32UI`,o.minFilter=three.NearestFilter,o.magFilter=three.NearestFilter,o.needsUpdate=!0,{dataTexture:t,transformsTexture:n,transformIndicesTexture:r,layerIndicesTexture:o,shTexture:null}}createSHTexture(e){let{renderData:t,textures:n}=e;n.shTexture&&(n.shTexture.dispose(),n.shTexture=null);let r=Math.min(this.usedSHDegree,t.maxShDegree),o=0;if(r>=1&&(o+=9),r>=2&&(o+=15),r>=3&&(o+=21),o===0)return;let s=4,c=o;c%4!=0&&(c=Math.ceil(c/4)*4);let l=t.numPoints*c/4,u=2048,d=Math.ceil(l/u),f=new Float32Array(u*d*4);for(let e=0;e<t.numPoints;e++){let n=c/4*e,o=0;if(t.sh1&&r>=1)for(let r=0;r<9;r++){let s=n+Math.floor(o/4),c=o%4,l=s*4+c;f[l]=t.sh1[e*9+r],o++}if(t.sh2&&r>=2)for(let r=0;r<15;r++){let s=n+Math.floor(o/4),c=o%4,l=s*4+c;f[l]=t.sh2[e*15+r],o++}if(t.sh3&&r>=3)for(let r=0;r<21;r++){let s=n+Math.floor(o/4),c=o%4,l=s*4+c;f[l]=t.sh3[e*21+r],o++}}n.shTexture=new three.DataTexture(f,u,d,three.RGBAFormat,three.FloatType),n.shTexture.internalFormat=`RGBA32F`,n.shTexture.minFilter=three.NearestFilter,n.shTexture.magFilter=three.NearestFilter,n.shTexture.needsUpdate=!0,this.material.uniforms.u_shTextureSize.value.set(u,d),this.material.uniforms.u_maxShDegree.value=r}setMaxShDegree(e){var t,n;if(e<0||e>2){console.warn(`现在只支持012三种阶数,你输入的是${e}`);return}let r=this.usedSHDegree;this.usedSHDegree=e,r!==e&&((t=this.activeSlot)!=null&&t.textures.shTexture&&(this.activeSlot.textures.shTexture.dispose(),this.activeSlot.textures.shTexture=null),(n=this.pendingSlot)!=null&&n.textures.shTexture&&(this.pendingSlot.textures.shTexture.dispose(),this.pendingSlot.textures.shTexture=null),this.material.uniforms.u_maxShDegree.value=e,e===0?this.material.uniforms.u_shTexture.value=null:this.activeSlot&&this.activeSlot.renderData.maxShDegree>0&&(this.createSHTexture(this.activeSlot),this.material.uniforms.u_shTexture.value=this.activeSlot.textures.shTexture))}bindSlotTextures(e){if(!e){this.dataTexture=null,this.transformsTexture=null,this.transformIndicesTexture=null,this.layerIndicesTexture=null,this.shTexture=null,this.material.uniforms.u_texture.value=null,this.material.uniforms.u_transforms.value=null,this.material.uniforms.u_transformIndices.value=null,this.material.uniforms.u_layerIndices.value=null,this.material.uniforms.u_shTexture.value=null;return}this.dataTexture=e.textures.dataTexture,this.transformsTexture=e.textures.transformsTexture,this.transformIndicesTexture=e.textures.transformIndicesTexture,this.layerIndicesTexture=e.textures.layerIndicesTexture,this.shTexture=e.textures.shTexture,this.material.uniforms.u_texture.value=this.dataTexture,this.material.uniforms.u_transforms.value=this.transformsTexture,this.material.uniforms.u_transformIndices.value=this.transformIndicesTexture,this.material.uniforms.u_layerIndices.value=this.layerIndicesTexture,this.material.uniforms.u_shTexture.value=this.shTexture}disposeSlot(e){e&&(e.renderData.dispose(),this.disposeTextures(e.textures))}disposeTextures(e){e.dataTexture.dispose(),e.transformsTexture.dispose(),e.transformIndicesTexture.dispose(),e.layerIndicesTexture.dispose(),e.shTexture&&(e.shTexture.dispose(),e.shTexture=null)}applyDepthIndex(e){this.depthIndex=e;let t=this.depthIndex.length,n=this.ensureSplatIndexCapacity(t);n.array.set(this.depthIndex,0),n.count=this.depthIndex.length,n.updateRange.offset=0,n.updateRange.count=t,n.needsUpdate=!0,this.geometry.instanceCount=this.depthIndex.length,this.needsRender=!0}swapPendingToActive(e){if(!this.pendingSlot)return;let t=this.activeSlot;this.activeSlot=this.pendingSlot,this.pendingSlot=null,this.renderData=this.activeSlot.renderData,this.ensureSplatIndexCapacity(this.activeSlot.renderData.numPoints),this.bindSlotTextures(this.activeSlot),this.activeSlot.sortDataUploaded=!0,this.forceClipperUniformRefresh=!0,this.applyDepthIndex(e),t&&this.disposeSlot(t)}createSlot(e){let t={generation:e.generation,renderData:e,textures:this.createTextures(e),awaitingFirstSort:!0,sortDataUploaded:!1};return this.usedSHDegree>0&&e.maxShDegree>0&&this.createSHTexture(t),t}updateSlotTextures(e){e.renderData.dataChanged&&(e.textures.dataTexture.needsUpdate=!0,e.renderData.dataChanged=!1),e.renderData.transformsChanged&&(e.textures.transformsTexture.needsUpdate=!0,e.textures.transformIndicesTexture.needsUpdate=!0,e.renderData.transformsChanged=!1)}postSortData(e){var t;let n=new Float32Array(e.renderData.positions.slice().buffer),r=new Float32Array(e.renderData.transforms.slice().buffer),o=new Uint32Array(e.renderData.transformIndices.slice().buffer);(t=this.sortWorker)==null||t.postMessage({sortData:{positions:n,transforms:r,transformIndices:o,vertexCount:e.renderData.numPoints,generation:e.generation}},[n.buffer,r.buffer,o.buffer]),e.sortDataUploaded=!0}requestSort(e,t){var n;e.renderData.initialBuildComplete&&((e.renderData.dataChanged||e.renderData.transformsChanged||!e.sortDataUploaded)&&this.postSortData(e),(n=this.sortWorker)==null||n.postMessage({viewProj:t}))}syncTransformsForSlot(e,t){e&&t.forEach(t=>{e.renderData.splatIndices.has(t)&&e.renderData.updateTransform(t)})}collectObjects(e){let t=[];return e.traverse(e=>{e instanceof PBMGaussianSplattingObject&&e.visible&&t.push(e)}),t.sort((e,t)=>{let n=e.uuid+e.gsViewLayerKey,r=t.uuid+t.gsViewLayerKey;return n<r?-1:n>r?1:0}),t}isSceneNeedsRebuild(e){let t=e.map(e=>`${e.uuid}:${e.gsViewLayerKey}`).join(`|`),n=t!==this.gsSceneState.lastObjectsHash;return this.gsSceneState.lastObjectsHash=t,n}getClipperHash(e){return e.map(e=>{let t=e.gsClippers.map(e=>{var t;return`${(t=e.floorIndex)==null?-1:t}:${e.clippingBoxMatrix.elements.join(`,`)}`}).join(`;`);return`${e.gsViewLayerKey}:${t}`}).join(`|`)}updateClipperCounts(e,t){let n=Math.max(0,e|0),r=Math.max(0,t|0),o=this.material.defines;(o.NUM_GS_LAYERS!==n||o.NUM_GS_CLIPPERS!==r)&&(o.NUM_GS_LAYERS=n,o.NUM_GS_CLIPPERS=r,this.material.needsUpdate=!0),this.material.uniforms.u_numGsLayers.value=e,this.material.uniforms.u_numGsClippers.value=t}updateClipperUniforms(e){var t,n,r,o;let s=(n=(t=this.activeSlot)==null?void 0:t.renderData)==null?null:n;if(!s){this.material.uniforms.u_layerClipperRanges.value=[],this.material.uniforms.u_clipperMatricesInverse.value=[],this.updateClipperCounts(0,0);return}let c=new Map;for(let t of e)c.has(t.gsViewLayerKey)||c.set(t.gsViewLayerKey,t.gsClippers);let l=s.layerKeys.length,u=0;for(let e of s.layerKeys)u+=((r=c.get(e))==null?[]:r).length;let d=this.createDefaultLayerClipperRanges(l),f=this.createDefaultClipperMatrices(u),p=0;for(let e of s.layerKeys){let t=s.layerKeyToIndex.get(e);if(t===void 0)continue;let n=(o=c.get(e))==null?[]:o,r=p,l=0;for(let e of n)f[p].getInverse(e.clippingBoxMatrix),p++,l++;l>0&&d[t].set(r,l)}this.material.uniforms.u_layerClipperRanges.value=d,this.material.uniforms.u_clipperMatricesInverse.value=f,this.updateClipperCounts(l,p)}startPendingRebuild(e){this.pendingSlot&&(this.disposeSlot(this.pendingSlot),this.pendingSlot=null),this.rebuildGeneration+=1;let t=new RenderData(e,this.rebuildGeneration);this.pendingSlot=this.createSlot(t)}tryStartIncrementalUpdate(e){if(!this.activeSlot||this.pendingSlot||this.incrementalUpdateInFlight)return!1;let t=this.activeSlot.renderData.getObjectsInOrder();if(!this.activeSlot.renderData.canIncrementalAppend(e))return!1;let n=e.slice(t.length);if(n.length===0)return!1;this.incrementalUpdateInFlight=!0;let r=this.activeSlot;return r.renderData.appendObjects(n).then(e=>{if(!e||this.activeSlot!==r||r.renderData.disposed)return;let t=r.textures;r.textures=this.createTextures(r.renderData),this.usedSHDegree>0&&r.renderData.maxShDegree>0&&this.createSHTexture(r),this.bindSlotTextures(r),this.ensureSplatIndexCapacity(r.renderData.numPoints),r.sortDataUploaded=!1,r.awaitingFirstSort=!0,this.disposeTextures(t),this.forceClipperUniformRefresh=!0,this.gsSceneState.lastClipperHash=``,this.needsRender=!0}).catch(e=>{console.warn(`Incremental append failed, fallback to rebuild:`,e)}).finally(()=>{this.incrementalUpdateInFlight=!1}),!0}dispose(){this.disposeSlot(this.pendingSlot),this.pendingSlot=null,this.disposeSlot(this.activeSlot),this.activeSlot=null,this.renderData=null,this.sortWorker&&this.sortWorker.terminate(),this.bindSlotTextures(null),this.geometry.dispose(),this.material.dispose()}},PBMGaussianSplattingTestMesh=class extends three.Mesh{constructor(){super(),this.onBeforeRender=(e,t,n)=>{this.collectObjects(t).length>0&&console.warn(`未开启webgl2, 3dgs仅支持在开启webgl2模式后使用`)}}collectObjects(e){let t=[];return e.traverse(e=>{e instanceof PBMGaussianSplattingObject&&e.visible&&t.push(e)}),t}},DEFAULT_MODE_CHANGE_DURATION=1e3,DEFAULT_CAMERA_FOV=90,DEFAULT_REQUEST_PROXY=e=>e.replace(`//vrlab-public.ljcdn.com/`,`//vr-public.realsee-cdn.cn/`).replace(`//vrlab-image4.ljcdn.com/`,`//vr-image-4.realsee-cdn.cn/`).replace(`//vrlab-image3.ljcdn.com/`,`//vr-image-3.realsee-cdn.cn/`).replace(`//vrlab-image2.ljcdn.com/`,`//vr-image-2.realsee-cdn.cn/`).replace(`//vrlab-image1.ljcdn.com/`,`//vr-image-1.realsee-cdn.cn/`),scratchSphere=new three.Sphere,scratchBox3=new three.Box3,scratchViewport=new three.Vector4,scratchScissor=new three.Vector4,scratchClearColor=new three.Color,scratchRenderSize=new three.Vector2,worksMap=new WeakMap,emptyWorks=createWorks([parseWork(null)]),Five_Instances={},Five=class e extends Subscribe{static get version(){return`6.8.0-alpha.22`}static get dracoPath(){return draco.decoderPath}static set dracoPath(e){draco.setDecoderPath(e)}static get ktx2Path(){return ktx2.transcoderPath}static set ktx2Path(e){ktx2.setTranscoderPath(e)}static get useNativeImageBitmap(){return canUseNativeImageBitmap()}static set useNativeImageBitmap(e){useNativeImageBitmap(e)}constructor(e={}){var t,n,r,o,s,c,l,u,d,f,p;if(super(),this.pbmGaussianSplattingRenderMesh=null,this.fiveId=createUuid(),Five_Instances[this.fiveId]=this,this.currentUpdateArgs={time:now(),args:[]},this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.needsRender=!1,this.onlyRenderIfNeeds=(t=e.onlyRenderIfNeeds)==null?!0:t,this.imageOptions=Object.assign({},(n=e.imageOptions)==null?{}:n),this.textureOptions=Object.assign({},(r=e.textureOptions)==null?{}:r),this.poweredByRealsee=(o=e.poweredByRealsee)==null?!0:o,this.backgroundColor=new three.Color((s=e.backgroundColor)==null?1579548:s),this.backgroundAlpha=(c=e.backgroundAlpha)==null?1:c,this.extraElements=[],this.controllerInits={Panorama:Object.assign({},e.panorama),Model:Object.assign({},e.model),Floorplan:Object.assign({},e.floorplan),Topview:Object.assign({},e.topview),Mapview:Object.assign({},e.mapview),VRPanorama:Object.assign({},e.vrPanorama),XRPanorama:Object.assign({},e.xrPanorama)},this.fps={testCount:0,testTime:now()},this.modeChangeDuration=(l=e.modeChangeDuration)==null?DEFAULT_MODE_CHANGE_DURATION:l,this.enableWheel=(u=e.enableWheel)==null?!0:u,typeof window<`u`)if(`renderer`in e)e.renderer instanceof InternalWebGLRenderer&&this.throwError(Error(`cannot render a internal renderer`)),this.renderer=e.renderer;else try{this.renderer=new InternalWebGLRenderer({preserveDrawingBuffer:e.preserveDrawingBuffer,antialias:e.antialias,webgl2:e.webgl2,logarithmicDepthBuffer:e.logarithmicDepthBuffer,precision:e.precision,powerPreference:e.powerPreference});let t=getViewportScale();this.renderer.setPixelRatio(t===1?window.devicePixelRatio:1),this.renderer.setSize(512,512),this.renderer.setClearColor(this.backgroundColor,this.backgroundAlpha)}catch(e){let t=e instanceof Error?e:Error(String(e));this.throwError(t)}this.getPixelsRenderTarget=new three.WebGLRenderTarget(1,1,{encoding:(f=(d=this.renderer)==null?void 0:d.outputEncoding)==null?three.sRGBEncoding:f,generateMipmaps:!1}),this.viewport=Object.assign({left:0,bottom:0,width:1,height:1},e.viewport),this.camera=new Camera(DEFAULT_CAMERA_FOV),this.scene=new Scene,this.xrCustomObjectsScene=new three.Scene,this.scene.add(this.xrCustomObjectsScene),this.scene.matrixAutoUpdate=!1,this.loadWorkTask=Promise.resolve(),this.requestProxy=(p=e.requestProxy)==null?DEFAULT_REQUEST_PROXY:p,this.networkSubscribe=new NetworkSubscribe,this.networkSubscribe.on(`network`,(e,t,n,r)=>{var o;this.emit(`network.resource`,createEvent(`network.resource`,{source:e,requestType:t,requestState:n,detail:r})),(o=this.analysis)==null||o.network(this.works,e,t,n,r)}),this.readyCallbacks=[],this.syncingState=!1,this.helperGroup=new three.Group,this.helperGroup.name=`helper`,this.helperGroup.matrixAutoUpdate=!1,this.scene.add(this.helperGroup),worksMap.set(this,emptyWorks),this.modelScene=new ModelScene({fiveId:this.fiveId}),this.modelScene.addEventListener(`model.create`,e=>{this.bindModel(e.model)}),this.scene.add(this.modelScene);let[m]=this.modelScene.setModels(emptyWorks,{forceReplaceImmediately:!0});defineProperty(m,`loaded`,{get(){return!1},set(e){}}),this.videoTexture=new three.VideoTexture(e.videoInstance||generateDefaultVideoElement());let h=initLights();this.scene.add(h),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.stateSynced=!1,this.destroyed=!1,this.paused=!0,typeof window<`u`&&(e.play!==!1&&this.play(),this.stopAnimationLoop=AnimationFrameLoop.shared.add((e,t,...n)=>{this.updateTime(e,t,...n)},!1,0,10));let g=()=>{typeof document<`u`&&document.fullscreenElement===null&&this.currentMode===`VRPanorama`&&this.controller.emit(`vr.requestExit`,createEvent(`vr.requestExit`,{}))},_=()=>{this.needsRender=!0};if(typeof document<`u`&&document.addEventListener(`fullscreenchange`,g,!1),this.renderer&&this.renderer.domElement.addEventListener(`webglcontextrestored`,_,!1),this.removeEventListeners=()=>{typeof document<`u`&&document.removeEventListener(`fullscreenchange`,g,!1),this.renderer&&this.renderer.domElement.removeEventListener(`webglcontextrestored`,_,!1)},this.plugins={},e.plugins&&e.plugins.length){for(let t of e.plugins)if(typeof t==`function`)t(this);else if(Array.isArray(t)){let[e,n,r]=t;if(typeof e==`function`){let t=e(this,r);typeof n==`string`&&(this.plugins[n]?this.throwError(Error(`plugin name ${n} is exists.`)):this.plugins[n]=t)}}}initLegacyEvent(this),this.fiveRenderer=new FiveRenderer,this.adaptiveLuminancePass=new AdaptiveLuminancePass,this.adaptiveLuminancePass.enabled=!1,this.fiveRenderer.composer.addPass(this.adaptiveLuminancePass),this.eyeDomeLightingPass=new EyeDomeLightingPass(this.camera),this.eyeDomeLightingPass.enabled=!1,this.fiveRenderer.composer.addPass(this.eyeDomeLightingPass),e.webgl2?(this.pbmGaussianSplattingRenderMesh=new PBMGaussianSplattingRenderMesh,this.scene.add(this.pbmGaussianSplattingRenderMesh)):this.scene.add(new PBMGaussianSplattingTestMesh)}get ident(){return this.fiveId}get panoIndex(){return this.pano.panoIndex}get panoId(){return panoStringify(this.pano)}dispose(){var e;if(this.destroyed===!0)return;delete Five_Instances[this.fiveId],this.emit(`dispose`),this.destroyed=!0,this.pause(),this.stopAnimationLoop&&(this.stopAnimationLoop(),this.stopAnimationLoop=void 0),this.off(),this.networkSubscribe.off(),this.controller&&(this.controller.destroy(),this.controller=void 0);let t=this.getElement();t&&t.parentNode&&t.parentNode.removeChild(t);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((e=n.pano0)==null?void 0:e.map)&&n.pano1.map.dispose(),n.reset(`pano0`,`pano1`),this.modelScene.dispose(),this.scene.dispose(),this.xrCustomObjectsScene.dispose(),worksMap.set(this,emptyWorks),this.renderer&&this.renderer.render(new three.Scene,new three.Camera),this.fiveRenderer.dispose(),this.renderer instanceof InternalWebGLRenderer&&(this.renderer.forceContextLoss&&this.renderer.forceContextLoss(),this.renderer.dispose())}setViewport(e){Object.assign(this.viewport,e),this.needsRender=!0}get boundingMesh(){return this.modelScene.boundingMesh}get helperVisible(){return this.helperGroup.visible}set helperVisible(e){this.helperGroup.visible!==e&&(this.helperGroup.visible=e,this.emit(`helpers.visible`,createEvent(`helpers.visible`,{object:this.helperGroup})),this.needsRender=!0)}updateConfiguration(e,t=!0){let n=!1,r=!1;e.panorama&&(Object.assign(this.controllerInits.Panorama,omitUndefinedFields(e.panorama)),this.currentMode===`Panorama`&&(n=!0)),e.model&&(Object.assign(this.controllerInits.Model,omitUndefinedFields(e.model)),this.currentMode===`Model`&&(n=!0)),e.floorplan&&(Object.assign(this.controllerInits.Floorplan,omitUndefinedFields(e.floorplan)),this.currentMode===`Floorplan`&&(n=!0)),e.topview&&(Object.assign(this.controllerInits.Topview,omitUndefinedFields(e.topview)),this.currentMode===`Topview`&&(n=!0)),e.mapview&&(Object.assign(this.controllerInits.Mapview,omitUndefinedFields(e.mapview)),this.currentMode===`Mapview`&&(n=!0)),e.vrPanorama&&(Object.assign(this.controllerInits.VRPanorama,omitUndefinedFields(e.vrPanorama)),this.currentMode===`VRPanorama`&&(n=!0)),e.imageOptions&&(Object.assign(this.imageOptions,e.imageOptions),(this.currentMode===`Panorama`||this.currentMode===`VRPanorama`)&&(r=!0,n=!0)),e.textureOptions&&Object.assign(this.textureOptions,e.textureOptions),t&&n&&this.controller&&this.currentMode&&(!this.controller.updateConfiguration(this.controllerInits[this.currentMode])||r)&&this.changeMode(this.currentMode,this.getCurrentState(),0,!1,!0)}appendTo(e,t={}){if(!this.renderer)return;if(!(this.renderer instanceof InternalWebGLRenderer)){this.throwError(Error(`cannot call appendTo method when render a external renderer`));return}let n=this.getElement();if(!n)return;e.appendChild(n),this.refresh(t);let r=window.getComputedStyle(e).position;r!==`relative`&&r!==`absolute`&&r!==`fixed`&&r!==`sticky`&&(e.style.position=`relative`)}refresh(e={},t){var n,r,o;if(!this.renderer)return;let s=this.renderer.domElement.parentNode,{width:c=(n=s==null?void 0:s.offsetWidth)==null?512:n,height:l=(r=s==null?void 0:s.offsetHeight)==null?512:r}=e;if(c=Math.max(1,c),l=Math.max(1,l),!t){let e=getViewportScale(),n=typeof window<`u`?window.devicePixelRatio:1;if(t=(o=e===1?n:1)==null?1:o,t>1){let e=Math.max(c,l)*t,n=Math.min(this.renderer.capabilities.maxTextureSize,4096);e>n&&(t=Math.max(t/e*n,1),t=Math.floor(t*100)/100)}}this.renderer.setPixelRatio(t),this.renderer.setSize(c,l),this.needsRender=!0;let u=now(),d=u-this.currentUpdateArgs.time,f=this.currentUpdateArgs.args;this.updateTime(u,d,...f)}addExtraElement(e){return this.extraElements.indexOf(e)===-1&&(this.extraElements.push(e),this.controller&&this.controller.bindExtraElement(e)),()=>this.removeExtraElement(e)}removeExtraElement(e){let t=this.extraElements.indexOf(e);t!==-1&&(this.extraElements.splice(t,1),this.controller&&this.controller.unbindExtraElement(e))}getSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}getDrawingBufferSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getDrawingBufferSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}updateCamera(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCamera(e,t,n)}updateCameraWithKeyframes(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCameraWithKeyframes(e,t,n)}get works(){return worksMap.get(this)||emptyWorks}get work(){return this.works[0]}get observers(){return this.work.observers}get models(){return this.modelScene.models}get model(){return this.modelScene.models[0]}load(e,t,n,r=!0){if(!this.renderer)throw Error(`renderer is not initialized`);let o=this.loadWorkTask.then(()=>isPromise(e)?e.then(e=>this.load_(e,t,n,r)):this.load_(e,t,n,r));return this.loadWorkTask=o.catch(e=>{this.throwError(e)}),o}load_(t,n,r,o=!0){var s,c,l,u,d,f,p,m,h,g;let _={};typeof r==`number`?_.duration=r:typeof r==`object`&&Object.assign(_,r),this.works===emptyWorks&&(_.duration===void 0&&(_.duration=0),_.effect===void 0&&(_.effect=`instant`));let v={};Object.assign(v,_.model),!v[`3d-tiles`]&&_[`3d-tiles`]&&(v[`3d-tiles`]=_[`3d-tiles`]),!v.textureOptions&&_.textureOptions&&(v.textureOptions=_.textureOptions),!v.textureOptions&&this.textureOptions&&(v.textureOptions=this.textureOptions);let y=[];if(Array.isArray(t))for(let e of t)e instanceof Work?y.push(e):typeof e!=`string`&&`work`in e?y.push(parseWork(e.work,e)):y.push(parseWork(e));else t instanceof Work?y.push(t):y.push(parseWork(t));_.mode===`add`&&(y=[].concat(this.works,y));let b;try{b=createWorks(y)}catch(e){return this.throwError(e),Promise.reject(e)}for(let e of b)this.bindWorkFetcher(e);n===void 0&&(n=`inherit`),n===`inherit`&&this.works===emptyWorks&&(n=`initial`);let S=this.currentMode,C=b.initial,w=C.work.observers[0],T=w?{workCode:w.work.workCode,panoIndex:w.panoIndex}:{workCode:C.work.workCode,panoIndex:0},E=(s=C.mode)==null?w?`Panorama`:`Mapview`:s,D={};if(n===`inherit`){let e=this.getCurrentState(),[t]=b.filter(t=>t.workCode===e.workCode);if(t)T={workCode:e.workCode,panoIndex:e.panoIndex},E=e.mode,D={longitude:e.latitude,latitude:e.latitude,fov:e.fov,distance:e.distance,offset:e.offset.clone()};else{n={mode:S};let e=(l=(c=b[0])==null?void 0:c.observers)==null?void 0:l[this.panoIndex];e?(n.workCode=e.work.workCode,n.panoIndex=e.panoIndex):typeof b.initial.panoIndex==`number`?(n.workCode=b.initial.work.workCode,n.panoIndex=b.initial.panoIndex):(n.mode===`Panorama`||n.mode===`VRPanorama`||n.mode===`XRPanorama`)&&(n.mode=`Mapview`),n.mode===S&&(n.longitude=this.camera.pose.longitude,n.latitude=this.camera.pose.latitude,n.fov=this.camera.pose.fov)}}if(n===`initial`&&(typeof C.panoIndex==`number`&&(T={workCode:C.work.workCode,panoIndex:C.panoIndex}),C.mode&&(E=C.mode),D={longitude:C.longitude,latitude:C.latitude,fov:C.fov,distance:C.distance,offset:(u=C.offset)==null?void 0:u.clone()}),typeof n==`object`){if(E=(d=n.mode)==null?S:d,typeof n.panoIndex==`number`){let e=b.getObserver({workCode:(p=(f=n.workCode)==null?C.work.workCode:f)==null?``:p,panoIndex:n.panoIndex});e&&(T={workCode:e.work.workCode,panoIndex:e.panoIndex})}D={longitude:n.longitude,latitude:n.latitude,fov:n.fov,distance:n.distance,offset:n.offset?new three.Vector3().copy(n.offset):void 0}}let O=(m=_.duration)==null?this.modeChangeDuration:m;(E===`Floorplan`||E===`Topview`||E===`Mapview`)&&S===E&&(O=0);let k=`fly`;(E===`Panorama`||E===`VRPanorama`||E===`XRPanorama`)&&S===E&&(k=(h=_.effect)==null?`fade`:h),this.emit(`works.request`,createEvent(`works.request`,{input:t,works:b,userAction:o}));let A=(e,t,r)=>{let s=this.getCurrentState(),c=Object.assign(Object.assign({mode:e},t),r);n===`inherit`&&(c=this.getCurrentState()),this.pano=t;let l=Object.assign(Object.assign({initial:{state:c,currentState:s,duration:O,effect:k,userAction:o}},this.commonParams()),this.controllerInits[e]),u=Controllers[c.mode].initAnimationEndState(l);if(this.controller&&S===e)this.controller.updateWork(b,u,{effect:k,duration:O},o)===!1&&(this.controller.destroy(),this.controller=this.applyController(e,l));else{if(this.controller)this.controller.destroy();else{let t=Controllers[e].initAnimationEndState(l);this.camera.setFromPose(t),this.emit(`camera.update`,createEvent(`camera.update`,{state:this.getCurrentState(),userAction:o}))}this.controller=this.applyController(e,l);let t=createEvent(`mode.change`,{prevMode:S,mode:e,state:u,userAction:o});try{this.emit(`mode.change`,t)}catch(e){console.error(e)}}this.updateTime(this.currentUpdateArgs.time,0,...this.currentUpdateArgs.args)};worksMap.set(this,b);let j=Promise.resolve();if(E===e.Mode.Floorplan||E===e.Mode.Topview||E===e.Mode.Mapview||E===e.Mode.Model){this.modelScene.loaded===!1&&(this.camera.setFromPose(D),assignPose(this.state,this.camera.pose));let e=this.modelScene.setModels(b,v);j=Promise.all(e.map(e=>e.loadedReady)).then(()=>{this.needsRender=!0,A(E,T,D),this.emit(`camera.update`,createEvent(`camera.update`,{state:this.getCurrentState(),userAction:o}))})}else{A(E,T,D);let e=this.controller,t=!1;this.modelScene.autoRefine=!1;let n=()=>{this.works===b&&t===!1&&(this.needsRender=!0,this.emit(`camera.update`,createEvent(`camera.update`,{state:this.getCurrentState(),userAction:o})),t=!0,this.modelScene.autoRefine=!0),e.off(`pano.arrived`,n),e.off(`pano.cancel`,n)},r=this.modelScene.setModels(b,v);j=Promise.all(r.map(e=>e.initReady)).then(noop),e.once(`pano.arrived`,n),e.once(`pano.cancel`,n),setTimeout(n,((g=_.duration)==null?this.modeChangeDuration:g)+1e3)}return this.emit(`works.load`,createEvent(`works.load`,{input:t,userAction:o,works:b})),j.then(()=>this.ready()).then(()=>{var e;this.emit(`works.ready`,createEvent(`works.ready`,{input:t,userAction:o,works:b})),(e=this.analysis)==null||e.work(b)})}reset(){let e=this.loadWorkTask.then(()=>this.reset_());return this.loadWorkTask=e.catch(e=>{this.throwError(e)}),e}reset_(){return new Promise(e=>{var t;this.controller&&(this.controller.destroy(),this.controller=void 0);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((t=n.pano0)==null?void 0:t.map)&&n.pano1.map.dispose(),n.set({pano0:null,pano1:null,modelAlpha:1}),worksMap.set(this,emptyWorks),this.modelScene.setModels(emptyWorks,{forceReplaceImmediately:!0}),this.renderer&&this.modelScene.update(this.renderer,this.camera),this.needsRender=!0,this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.camera.setFromPose({distance:0,fov:DEFAULT_CAMERA_FOV,longitude:0,latitude:0,offset:new three.Vector3(0,0,0)}),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.camera.needsRender=!1,this.needsRender=!1,e()})}changeMode(t,n={},r,o=!0,s=!1){return new Promise((c,l)=>{var u,d,f,p;if(!this.renderer)throw Error(`renderer is not initialized.`);n=Object.assign({},n);let m=0;this.controller&&(m=typeof r==`number`?r:(u=r==null?void 0:r.duration)==null?this.modeChangeDuration:u);let h=`fly`;this.controller&&typeof r==`object`&&r.effect&&(h=r.effect);let g=typeof n.panoIndex==`number`?{workCode:(p=(d=n.workCode)==null?(f=this.work)==null?void 0:f.workCode:d)==null?``:p,panoIndex:n.panoIndex}:this.pano;if(!e.Mode.hasOwnProperty(t)){let e=Error(`mode "${t}" is not existed`);this.throwError(e),l(e);return}if((t===e.Mode.Panorama||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama)&&!this.works.getObserver(g)){let e=Error(`PanoId ${panoStringify(g)} not existed.`);this.throwError(e),l(e);return}(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)&&this.modelScene.empty&&(m=0);let _=this.controller,v=this.currentMode,y=()=>{if(this.controller&&this.controller.stopMomentumMovement(),this.controller&&s===!1&&v===t)t===e.Mode.Panorama||t===e.Mode.Model||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama?!panoEqual(this.pano,g)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`?this.controller.moveToPano(g,Object.assign({duration:m},n),o):this.controller.updateCamera(n,m,o).catch(noop):(panoEqual(this.pano,g)||(this.pano=g),this.controller.updateCamera(n,m,o).catch(noop));else{let e=Object.assign(Object.assign({},n),g),r=Object.assign(Object.assign({initial:{state:e,currentState:this.getCurrentState(),duration:m,effect:h,userAction:o}},this.commonParams()),this.controllerInits[t]),s=Controllers[t].initAnimationEndState(r),c=createEvent(`mode.change.request`,{prevMode:this.currentMode,mode:t,state:s,userAction:o});if(this.emit(`mode.change.request`,c),!c.defaultPrevented){_&&_.destroy(),this.controller=this.applyController(t,r);let e=createEvent(`mode.change`,{prevMode:this.currentMode,mode:t,state:s,userAction:o});this.emit(`mode.change`,e)}}c()},b=AnimationFrameLoop.shared.getContext();b&&(typeof XRSession<`u`&&b instanceof XRSession&&b.end(),AnimationFrameLoop.shared.setContext(null)),t===e.Mode.VRPanorama?(this.requestFullscreen(),requestDeviceOrientationPermission().then(()=>y()).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.exitFullscreen(),this.throwError(t),l(t)})):t===e.Mode.XRPanorama?requestXRSessionPermission().then(e=>{AnimationFrameLoop.shared.setContext(e),s=!0,y()}).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.throwError(t),l(t)}):y()})}getPixels(e,t,n,r,o,s,c){if(!this.renderer)throw Error(`renderer is not initialized.`);let l=now(),u=this.renderer.getPixelRatio(),d=this.renderer.getRenderTarget(),f=this.getSize(new three.Vector2),p=0,m=0,h=1,g=1,_,v,y,b,S;typeof e==`number`?(p=e,typeof t==`number`&&(m=t),typeof n==`number`&&(h=n),typeof r==`number`&&(g=r),_=o,v=s,S=c):(p=e.x,m=e.y,h=e.width,g=e.height,_=e.pixelRatio,v=e.flipY,y=e.helperVisible,b=e.skipPanorama,S=e.buffer),p=Math.floor(p),m=Math.floor(m),h=Math.floor(h),g=Math.floor(g),_=Math.floor(_==null?u:_),v=v==null?!1:v;let C=this.helperVisible,w=this.modelScene.parameter.modelAlpha;this.helperVisible=y==null?this.helperVisible:y,b&&(this.controller instanceof Controllers.Panorama||this.controller instanceof Controllers.VRPanorama||this.controller instanceof Controllers.XRPanorama)&&b===!0&&this.modelScene.parameter.set(`modelAlpha`,1),this.modelScene.update(this.renderer,this.camera);let T=this.getPixelsRenderTarget;T.setSize(h*_,g*_),this.renderer.setRenderTarget(T),this.camera.pixelRatio=_,this.camera.resolution.set(h,g),this.camera.setViewOffset(f.width,f.height,p,f.height-m-g,h,g),this.camera.aspect=f.width/f.height,this.camera.updateTime(l),this.scene.update(this.renderer,this.camera);let E=this.renderer.autoClear,D=this.renderer.autoClearColor,O=this.renderer.autoClearDepth,k=this.renderer.autoClearStencil,A=scratchClearColor.copy(this.renderer.getClearColor()),j=this.renderer.getClearAlpha(),M=this.renderer.getScissorTest();this.renderer.autoClear=!0,this.renderer.autoClearColor=!0,this.renderer.autoClearDepth=!0,this.renderer.autoClearStencil=!0,this.renderer.setScissorTest(!1);let N=this.scene.background;this.scene.background=this.camera.isOrthographicCamera?null:N,this.renderer.render(this.scene,this.camera),this.scene.background=N,this.renderer.autoClear=E,this.renderer.autoClearColor=D,this.renderer.autoClearDepth=O,this.renderer.autoClearStencil=k,this.renderer.setClearColor(A,j),this.renderer.setScissorTest(M),this.helperVisible=C,w===void 0?this.modelScene.parameter.reset(`modelAlpha`):this.modelScene.parameter.set(`modelAlpha`,w),this.renderer.setRenderTarget(d),this.camera.clearViewOffset(),this.camera.pixelRatio=u,this.camera.resolution.copy(f),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height,this.camera.updateTime(l),this.modelScene.update(this.renderer,this.camera),this.scene.update(this.renderer,this.camera);let P=h*_,F=g*_,I=P*F,L=I*4;if(S){if(S.length!==L)throw Error(`buffer length is not equals pixels ${L}`)}else S=new Uint8Array(L);if(this.renderer.readRenderTargetPixels(T,0,0,h*_,g*_,S),v){let e=I/2;for(let t=0,n=0,r=0,o=0;n<e;n++)for(o=(F-Math.floor(n/P)-1)*P+n%P,r=0;r<4;r++)t=S[n*4+r],S[n*4+r]=S[o*4+r],S[o*4+r]=t}return S}getElement(){var e;return(e=this.renderer)==null?void 0:e.domElement}render(e){let t=this.renderer;if(!t)return;let n=t.getRenderTarget();t.setRenderTarget(null);let r=t.autoClear,o=t.autoClearColor,s=t.autoClearDepth,c=t.autoClearStencil,l=scratchClearColor.copy(t.getClearColor()),u=t.getClearAlpha(),d=t.getViewport(scratchViewport),f=t.getScissor(scratchScissor),p=t.getScissorTest();t.autoClear=!0,t.autoClearColor=!0,t.autoClearDepth=!0,t.autoClearStencil=!0;let m=t.getSize(scratchRenderSize),h=Math.floor(m.x*this.viewport.left),g=Math.floor(m.y*this.viewport.bottom),_=Math.floor(m.x*this.viewport.width),v=Math.floor(m.y*this.viewport.height);t.setClearColor(this.backgroundColor,this.backgroundAlpha),t.setViewport(h,g,_,v),t.setScissor(h,g,_,v);let y=this.viewport.bottom!==0||this.viewport.left!==0||this.viewport.width!==1||this.viewport.height!==1;t.setScissorTest(y);let b=this.scene.background;this.scene.background=this.camera.isOrthographicCamera?null:b;let S=!0;if(this.controller&&this.controller.render()&&(S=!1),S){let e=this.fiveRenderer.render(t,this.scene,this.modelScene,this.camera,this.needsRender);this.poweredByRealsee&&e&&renderPoweredByRealsee(t)}this.scene.background=b,t.autoClear=r,t.autoClearColor=o,t.autoClearDepth=s,t.autoClearStencil=c,t.setClearColor(l,u),t.setViewport(d),t.setScissor(f),t.setScissorTest(p),t.setRenderTarget(n),e&&AnimationFrameLoop.shared.add(e,!0)}updateTime(e,t,...n){if(this.currentUpdateArgs={time:e,args:n},this.destroyed)return;if(this.renderer&&ktx2.detectSupport(this.renderer),this.syncingState=this.syncState(e,t),this.controller&&this.controller.updateTime(e,t,...n),this.renderer&&(this.camera.pixelRatio=this.renderer.getPixelRatio(),this.getSize(this.camera.resolution),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height),this.camera.controllerMode=this.currentMode,this.camera.updateTime(e),this.renderer){let e=this.modelScene.loaded,t=this.modelScene.refined;this.modelScene.update(this.renderer,this.camera),e===!1&&this.modelScene.loaded===!0&&(this.controller&&this.controller.updateModel(this.modelScene),AnimationFrameLoop.shared.add(()=>{this.emit(`models.load`,createEvent(`models.load`,{modelScene:this.modelScene}))},!0,0,10)),t===!1&&this.modelScene.refined===!0&&AnimationFrameLoop.shared.add(()=>{this.emit(`models.refined`,createEvent(`models.refined`,{modelScene:this.modelScene}))},!0,0,10)}if(this.camera.autoNearFar){scratchBox3.makeEmpty(),scratchBox3.expandByObject(this.modelScene.boundingMesh);let t=scratchBox3.getBoundingSphere(scratchSphere),n=t.radius*2;t.containsPoint(this.camera.position)||(n=this.camera.position.distanceTo(t.center)+t.radius),n=clamp$1(n,800);let r=n/1e4;r=clamp$1(r,.03,.1),this.camera.near!==r&&(this.camera.near=r),this.camera.far!==n&&(this.camera.far=n),this.camera.updateTime(e)}if(this.renderer){let e=this.modelScene.visible;this.modelScene.visible=!1,this.scene.update(this.renderer,this.camera),this.modelScene.visible=e}if(this.syncingState=!1,this.controller&&this.controller.needsRender===!0&&(this.controller.needsRender=!1,this.needsRender=!0),this.camera.needsRender===!0&&(this.camera.needsRender=!1,this.needsRender=!0),this.modelScene.needsRender===!0&&(this.modelScene.needsRender=!1,this.needsRender=!0),this.scene.needsRender===!0&&(this.scene.needsRender=!1,this.needsRender=!0),this.pbmGaussianSplattingRenderMesh&&this.pbmGaussianSplattingRenderMesh.needsRender===!0&&(this.pbmGaussianSplattingRenderMesh.needsRender=!1,this.needsRender=!0),this.onlyRenderIfNeeds!==!0&&(this.needsRender=!0),this.paused===!0)return;let r=createEvent(`render.prepare`,{needsRender:this.needsRender});this.emit(`render.prepare`,r),r.defaultPrevented&&(this.needsRender=!1);let o=this.needsRender;this.render(),this.needsRender=!1,this.emit(`render`,createEvent(`render`,{needsRender:o})),this.hasListener(`fps`)&&(this.fps.testTime&&e-this.fps.testTime<1e3?this.fps.testCount++:(this.emit(`fps`,this.fps.testCount),this.fps.testTime=e,this.fps.testCount=0))}pause(){this.paused=!0,this.renderer&&this.renderer instanceof InternalWebGLRenderer&&this.renderer.clear(!0,!0,!0)}play(){this.needsRender=!0,this.paused=!1}moveToPano(t,n={},r=!0){let{controller:o,renderer:s}=this;if(!o)return this.throwError(Error(`controller is not initialized.`)),Promise.resolve();if(!s)return this.throwError(Error(`renderer is not initialized.`)),Promise.resolve();typeof t==`number`&&this.pano.workCode&&(t={workCode:this.pano.workCode,panoIndex:t});let c=this.works.getObserver(t);if(!c)return this.throwError(Error(`pano ${JSON.stringify(t)} not existed.`)),Promise.resolve();let l={workCode:c.work.workCode,panoIndex:c.panoIndex};return`moveToPano`in o&&typeof o.moveToPano==`function`?o.moveToPano(l,n,r):c&&(this.pano=l,this.once(`initAnimation.start`,e=>{n.moveStartCallback&&n.moveStartCallback(e.state)}),this.once(`initAnimation.end`,e=>{n.moveEndCallback&&n.moveEndCallback(e.state)}),this.changeMode(e.Mode.Panorama,n,{effect:n.effect},r)),this.ready()}preloadPano(e,t=noop){let n=this.works.getObserver(e);if(!n)return Promise.reject(Error(`Pano ${JSON.stringify(e)} never found`));let r=[`right`,`left`,`up`,`down`,`front`,`back`],o=now();return Promise.all(r.map(e=>{let t=panoStringify({panoIndex:n.panoIndex,workCode:n.work.workCode}),r=Object.assign({key:`pano.${t}.${e}`},pick(this.imageOptions,[`size`,`format`,`quality`,`forceUseExifOrientation`,`mappings`])),o=n.work.getURL(n.images[e]),s=this.imageOptions.transform?this.imageOptions.transform(o,r):imageURL(o,r);return getFetcher(this.fiveId,n.work).preload(s)})).then(()=>{let e=now()-o;return t(e),e})}project2d(e,t=!1){if(!this.renderer)return null;if(t){let t=this.camera.position,n=e.clone().sub(t),r=new three.Raycaster(t,n.clone().normalize());r.params.Points={threshold:.1};let[o]=this.modelScene.intersectRaycaster(r);if(o&&o.distance+.01<n.length())return null}let n=e.clone().project(this.camera);if(Math.abs(n.z)>1)return null;let r=this.renderer.getSize(new three.Vector2),o=r.x*this.viewport.width,s=r.y*this.viewport.height,c=r.x*this.viewport.left+(n.x+1)/2*o,l=r.y*(1-this.viewport.bottom-this.viewport.height)+(-n.y+1)/2*s;return new three.Vector2(c,l)}getCurrentState(){return Object.assign(Object.assign({},this.camera.copyPose()),{mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex})}setState(e,t=!1,n=!0){var r,o,s,c,l,u,d,f,p,m;e=pick(e,[`mode`,`workCode`,`panoIndex`,`longitude`,`latitude`,`fov`,`offset`,`distance`]),e.offset&&!(e instanceof three.Vector3)&&(e.offset=new three.Vector3(e.offset.x,e.offset.y,e.offset.z));let h;if(typeof e.panoIndex==`number`)if(e.workCode)h={workCode:e.workCode,panoIndex:e.panoIndex};else{let t=(o=(r=this.work)==null?void 0:r.workCode)==null?``:o,n=this.state.workCode;this.works.filter(e=>e.workCode===n).length>0&&(t=n),h={workCode:t,panoIndex:e.panoIndex}}let g=(s=e.mode)==null?this.state.mode:s,_,v,y,b,S;if(this.controller&&this.controller.stopMomentumMovement(),this.state.mode!==g){if(g===`VRPanorama`){this.changeMode(`VRPanorama`,void 0,void 0,!0);return}let t={workCode:h==null?void 0:h.workCode,panoIndex:h==null?void 0:h.panoIndex};typeof e.longitude==`number`&&(t.longitude=e.longitude),typeof e.latitude==`number`&&(t.latitude=e.latitude),typeof e.fov==`number`&&(t.fov=e.fov),typeof e.distance==`number`&&(t.distance=e.distance),e.offset instanceof three.Vector3&&(t.offset=e.offset);let n=Object.assign(Object.assign({initial:{state:t,currentState:this.getCurrentState(),duration:this.modeChangeDuration,effect:`fly`,userAction:!1}},this.commonParams()),this.controllerInits[g]),r=Controllers[g].initAnimationEndState(n);_=r.longitude,v=r.latitude,y=r.fov,b=r.offset,S=r.distance}else _=(c=e.longitude)==null?this.state.longitude:c,v=(l=e.latitude)==null?this.state.latitude:l,y=(u=e.fov)==null?this.state.fov:u,b=(d=e.offset)==null?this.state.offset:d,S=(f=e.distance)==null?this.state.distance:f;let C={workCode:(h==null?this.pano:h).workCode,panoIndex:(h==null?this.pano:h).panoIndex,mode:g,longitude:_,latitude:v,fov:y,offset:b,distance:S};this.emit(`state.set`,createEvent(`state.set`,{userAction:n,state:C})),stateEqual(this.state,C)||(this.controller&&C.mode===`VRPanorama`&&C.mode!==this.state.mode?(assignState(this.state,C),this.changeMode(`VRPanorama`)):this.controller&&C.mode===`XRPanorama`&&C.mode!==this.state.mode?(assignState(this.state,C),this.changeMode(`XRPanorama`)):(assignState(this.state,C),this.controller&&n&&(this.controller.userAction=!1),t&&this.state.mode===C.mode&&(this.syncingState=this.syncState(now(),0,t),this.syncingState&&((p=this.controller)==null||p.updateTime(now(),0),this.syncingState=!1)),this.emit(`state.change`,createEvent(`state.change`,{userAction:n,state:this.state})),(m=this.analysis)==null||m.state(this.works,this.state)))}syncState(t,n,r=!1){let o=this.stateSynced;if(this.stateSynced=!1,!this.controller)return!1;if(this.state.mode!==this.currentMode){let e={mode:this.state.mode,workCode:this.state.workCode,panoIndex:this.state.panoIndex,longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.changeMode(this.state.mode,e,this.modeChangeDuration,this.controller.userAction),!0}if(!this.controller.isReady())return!1;if(this.controller instanceof Controllers.Model){if(notSimilarVector3(this.camera.pose.offset,this.state.offset)){let e={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset};return this.controller.moveToPosition(this.state.offset,Object.assign(Object.assign({},e),{duration:r?0:void 0}),!1),!0}}else{let e={workCode:this.state.workCode,panoIndex:this.state.panoIndex};if(!panoEqual(e,this.pano)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`){let t={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.controller.moveToPano(e,t,!1),!0}}if(this.controller instanceof Controllers.Floorplan||this.controller instanceof Controllers.Topview||this.controller instanceof Controllers.Mapview){let e=1,t=.2,n=.2,o=Math.PI/45,s=r?this.state.fov:stepNumber(this.camera.pose.fov,this.state.fov,1),c=Math.abs(this.camera.pose.distance-this.state.distance),l=c>n*15?c/15:.2,u=r?this.state.distance:stepNumber(this.camera.pose.distance,this.state.distance,l),d=this.camera.pose.offset.distanceTo(this.state.offset),f=d>n*15?d/15:n,p=r?new three.Vector3().copy(this.state.offset):stepVector(this.camera.pose.offset,this.state.offset,f),{longitude:m,latitude:h}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:stepCoordinates({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},o);if(notSimilarValue(s,this.camera.pose.fov)||notSimilarVector3(p,this.camera.pose.offset)||notSimilarValue(u,this.camera.pose.distance)||notSimilarValue(m,this.camera.pose.longitude,Math.PI*2)||notSimilarValue(h,this.camera.pose.latitude)){let e={x:p.x,y:p.y,z:p.z},t={fov:s};return Object.assign(e,{distance:u}),Object.assign(t,{longitude:m,latitude:h}),this.controller.stopMomentumMovement(),this.controller.cameraMotion.set(t,0).catch(noop),this.controller.locationMotion.set(e,0).catch(noop),!0}}else{let e=1,t=Math.PI/45,n=r?this.state.fov:stepNumber(this.camera.pose.fov,this.state.fov,1),{longitude:o,latitude:s}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:stepCoordinates({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},t),c=this.state.distance,l=new three.Vector3().copy(this.state.offset);if(notSimilarValue(c,this.camera.pose.distance)&&(this.state.distance=this.camera.pose.distance),notSimilarVector3(l,this.camera.pose.offset)&&(this.state.offset=this.camera.pose.offset.clone()),notSimilarValue(o,this.camera.pose.longitude,Math.PI*2)||notSimilarValue(s,this.camera.pose.latitude)||notSimilarValue(n,this.camera.pose.fov))return this.controller.stopMomentumMovement(),this.controller.cameraMotion.set({longitude:o,latitude:s,fov:n},0).catch(noop),!0}if(this.stateSynced=!0,o===!1&&this.emit(`state.synced`,createEvent(`state.synced`,{userAction:!1,state:this.state})),this.readyCallbacks.length&&this.stateSynced){let t=this.currentMode;if(!(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)||this.modelScene.loaded){let e=this.readyCallbacks.slice();this.readyCallbacks.length=0;for(let t of e)this.controller instanceof Controllers.Panorama&&t.tile===!0&&!this.controller.isTileReady()?this.readyCallbacks.push(t):t()}}return!1}ready(e={}){return new Promise(t=>{var n;this.readyCallbacks.push(Object.assign(t,{tile:(n=e.tile)==null?!1:n}))}).then(()=>this.model.initReady).then(noop)}requestFullscreen(){var e;if(!isMobile)return;let t=(e=this.getElement())==null?void 0:e.parentNode;t&&`requestFullscreen`in t&&typeof document<`u`&&document.fullscreenElement===null&&t.requestFullscreen()}exitFullscreen(){typeof document<`u`&&document.fullscreenElement&&`exitFullscreen`in document&&document.exitFullscreen()}throwError(e){this.hasListener(`error`)?this.emit(`error`,e):console.error(e)}bindModel(e){let t=()=>{AnimationFrameLoop.shared.add(()=>{this.emit(`model.load`,createEvent(`model.load`,{work:e.work,model:e,error:null}))},!0)},n=t=>{let{error:n}=t;this.emit(`model.error`,createEvent(`model.error`,{work:e.work,model:e,error:n})),this.throwError(n)},r=()=>{this.emit(`model.changeShownFloor`,createEvent(`model.changeShownFloor`,{work:e.work,model:e,error:null}))},o=t=>{this.emit(`models.tileLoad`,createEvent(`model.tileLoad`,{work:e.work,model:e,tile:t.tile}))},s=t=>{this.emit(`models.tileUnload`,createEvent(`model.tileUnload`,{work:e.work,model:e,tile:t.tile}))},c=()=>{e.removeEventListener(`load`,t),e.removeEventListener(`error`,n),e.removeEventListener(`changeShownFloor`,r),e.removeEventListener(`tileLoad`,o),e.removeEventListener(`tileUnload`,s),e.removeEventListener(`dispose`,c)};e.addEventListener(`load`,t),e.addEventListener(`error`,n),e.addEventListener(`changeShownFloor`,r),e.addEventListener(`tileLoad`,o),e.addEventListener(`tileUnload`,s),e.addEventListener(`dispose`,c),this.emit(`model.request`,createEvent(`model.request`,{work:e.work,model:e,error:null}))}bindWorkFetcher(e){let t=this,n=e.workCode,r=e.allowHosts,o=new Fetcher({get networkSubscribe(){return t.networkSubscribe},requestProxy(e){return Promise.resolve(e).then(e=>t.requestProxy(e,n)).then(e=>{let t=verifyURL(e,r);return t instanceof Error?Promise.reject(t):t})}});registerFetcher(this.fiveId,e,o)}commonParams(){return{fiveId:this.fiveId,scene:this.scene,xrCustomObjectsScene:this.xrCustomObjectsScene,helper:this.helperGroup,camera:this.camera,renderer:this.renderer,viewport:this.viewport,element:this.getElement(),works:this.works,imageOptions:this.imageOptions,enableWheel:this.enableWheel,extraElements:this.extraElements,videoTexture:this.videoTexture,modelScene:this.modelScene}}applyController(t,n){if(!this.renderer)throw Error(`renderer is not initialized.`);let r=Controllers[t];this.currentMode=t;let o=new r(n);for(let e of PROXY_CONTROLLER_EVENT_NAMES)o.on(e,(...t)=>{if(this.emit(e,...t))return!1});{let e=Controllers[t].initAnimationEndState(n),r=n.initial.userAction;stateEqual(this.state,e)||(assignState(this.state,e),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state}))),this.emit(`currentState.change`,createEvent(`currentState.change`,{userAction:r,state:this.getCurrentState()}))}return o.on(`camera.update`,e=>{var t;if(this.controller){let n=this.controller.getTargetState();e.userAction&&this.syncingState===!1&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:e.userAction,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}this.emit(`currentState.change`,createEvent(`currentState.change`,{userAction:e.userAction,state:this.getCurrentState()}))}),o.on(`initAnimation.start`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`initAnimation.end`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.moveTo`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.arrived`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.cancel`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.moveTo`,e=>{let{userAction:t}=e;this.emit(`currentState.change`,createEvent(`currentState.change`,{userAction:t,state:this.getCurrentState()}))}),o.on(`pano.request`,e=>{this.emit(`pano.request`,e),e.defaultPrevented||this.moveToPano(e.state,e.options,e.userAction)}),o.on(`vr.requestExit`,()=>{this.currentMode===e.Mode.VRPanorama&&(this.exitFullscreen(),this.changeMode(e.Mode.Panorama))}),o.on(`error`,e=>this.throwError(e)),o}removeEventListeners(){}get internalLightsEnabled(){let e=this.scene.children.find(e=>e.name===`internalLights`);return e?e.visible:!1}set internalLightsEnabled(e){let t=this.scene.children.find(e=>e.name===`internalLights`);t&&(t.visible=e),t=this.modelScene.children.find(e=>e.name===`internalLights`),t&&(t.visible=e)}get scissor(){return this.viewport}setScissor(e){return this.setViewport(e)}getPose(){let{longitude:e,latitude:t,fov:n,offset:r,distance:o}=this.camera.copyPose();return{longitude:e,latitude:t,fov:n,offset:r.clone(),distance:o}}getLongitudeAndLatitude(){let{longitude:e,latitude:t}=this.getPose();return{longitude:e,latitude:t}}getOffset(){return this.getPose().offset}getCameraLocal(){if(this.pano.workCode&&this.controller&&this.works){let e=this.works.getObserver(this.pano);if(e){let t=new three.Object3D;t.matrix.copy(e.matrix).premultiply(e.work.transform),t.matrix.decompose(t.position,t.quaternion,t.scale),t.matrixAutoUpdate=!1;let n=new three.Vector3(0,0,-1);n.applyQuaternion(this.camera.quaternion);let r=t.quaternion.clone().inverse();return n.applyQuaternion(r),{theta:Math.atan2(n.x,-n.z),phi:-Math.asin(n.y),lookAtVector:n}}}return null}addPass(e){this.fiveRenderer.composer.addPass(e)}removePass(e){let t=this.fiveRenderer.composer.passes.indexOf(e);t!==-1&&this.fiveRenderer.composer.passes.splice(t,1)}insertPass(e,t){this.fiveRenderer.composer.insertPass(e,t)}get renderMode(){return this.fiveRenderer.renderMode}set renderMode(e){this.fiveRenderer.renderMode=e}get enableHQ(){return this.fiveRenderer.renderMode===`point-cloud-high-quality`}set enableHQ(e){this.fiveRenderer.renderMode=e?`point-cloud-high-quality`:`default`,this.needsRender=!0}get enableEDL(){return this.eyeDomeLightingPass.enabled}set enableEDL(e){this.eyeDomeLightingPass.enabled=e,this.needsRender=!0}get enableAdaptiveLuminance(){return this.adaptiveLuminancePass.enabled}set enableAdaptiveLuminance(e){this.adaptiveLuminancePass.enabled=e,this.needsRender=!0}get enableIOSEDR(){return!1}set enableIOSEDR(e){}get enablePostProcessing(){return!0}set enablePostProcessing(e){}get modelSceneNeedsRender(){return this.modelScene.needsRender}set modelSceneNeedsRender(e){this.modelScene.needsRender=e}};Five.Mode={Panorama:`Panorama`,Model:`Model`,Floorplan:`Floorplan`,Topview:`Topview`,Mapview:`Mapview`,VRPanorama:`VRPanorama`,XRPanorama:`XRPanorama`},typeof window<`u`&&Object.assign(window,{__FIVE_DEBUG__:{THREE:three,constructor:Five,instances:Five_Instances}});var XRButton=class{static createButton(e){let t=document.createElement(`button`);function n(){t.style.display=``,t.style.cursor=`pointer`,t.style.left=`calc(50% - 50px)`,t.style.width=`100px`,t.textContent=`ENTER VR`,t.onmouseenter=function(){t.style.opacity=`1.0`},t.onmouseleave=function(){t.style.opacity=`0.5`},t.onclick=function(){e&&e()}}function r(){t.style.display=``,t.style.cursor=`auto`,t.style.left=`calc(50% - 75px)`,t.style.width=`150px`,t.onmouseenter=null,t.onmouseleave=null,t.onclick=null}function o(){r(),t.textContent=`VR NOT SUPPORTED`}function s(e){e.style.position=`absolute`,e.style.bottom=`20px`,e.style.padding=`12px 6px`,e.style.border=`1px solid #fff`,e.style.borderRadius=`4px`,e.style.background=`rgba(0,0,0,0.1)`,e.style.color=`#fff`,e.style.font=`normal 13px sans-serif`,e.style.textAlign=`center`,e.style.opacity=`0.5`,e.style.outline=`none`,e.style.zIndex=`999`}if(`xr`in navigator)return t.id=`VRButton`,t.style.display=`none`,s(t),navigator.xr.isSessionSupported(`immersive-vr`).then(function(e){e?n():o()}),t;{let e=document.createElement(`a`);return window.isSecureContext===!1?(e.href=document.location.href.replace(/^http:/,`https:`),e.innerHTML=`WEBXR NEEDS HTTPS`):(e.href=`https://immersiveweb.dev/`,e.innerHTML=`WEBXR NOT AVAILABLE`),e.style.left=`calc(50% - 90px)`,e.style.width=`180px`,e.style.textDecoration=`none`,s(e),e}}};exports.AdaptiveLuminancePass=AdaptiveLuminancePass,exports.AnimationFrameLoop=AnimationFrameLoop,exports.BoundingMesh=BoundingMesh,exports.Camera=Camera,exports.CustomShader=PBMCustomShader,exports.PBMCustomShader=PBMCustomShader,exports.EffectComposer=EffectComposer,exports.EyeDomeLightingPass=EyeDomeLightingPass,exports.Fetcher=Fetcher,exports.Five=Five,exports.FivePass=FivePass,exports.FiveRenderer=FiveRenderer,exports.FullScreenQuad=FullScreenQuad,exports.Histogram=Histogram,exports.InternalWebGLRenderer=InternalWebGLRenderer,exports.Model=Model,exports.ModelScene=ModelScene,exports.Motion=Motion,exports.NetworkSubscribe=NetworkSubscribe,exports.PBMContainer=PBMContainer,exports.PBMGSObject=PBMGaussianSplattingObject,exports.PBMGroup=PBMGroup,exports.PBMMesh=PBMMesh,exports.PBMMeshMaterial=PBMMeshMaterial,exports.PBMPanoFilter=PBMPanoFilter,exports.PBMPointCloud=PBMPointCloud,exports.PBMPointCloudMaterial=PBMPointCloudMaterial,exports.PBMSkinnedMesh=PBMSkinnedMesh,exports.PBMUpdateable=PBMUpdateable,exports.PROXY_CONTROLLER_EVENT_NAMES=PROXY_CONTROLLER_EVENT_NAMES,exports.PanoCircleMesh=PanoCircleMesh,exports.PanoCircleMeshCustom=PanoCircleMeshCustom,exports.PanoCircleMeshSolid=PanoCircleMeshSolid,exports.Parameter=Parameter,exports.Scene=Scene,exports.Subscribe=Subscribe,exports.TextureLoader=TextureLoader,exports.Tile=Tile,exports.Tile3D=Tile3D,exports.Tile3DModel=Tile3D,exports.TileCache=TileCache,exports.TileNode=TileNode,exports.TileRequestScheduler=TileRequestScheduler,exports.Tileset=Tileset,exports.Trajectory=Trajectory,exports.TrajectoryNode=TrajectoryNode,exports.Work=Work,exports.WorkResolvedObserver=WorkResolvedObserver,exports.XRButton=XRButton,exports.controllersDefaultInitArgs=controllersDefaultInitArgs,exports.coordinatesToVector=coordinatesToVector,exports.createDebugBoundingMesh=createDebugBoundingMesh,exports.createWorks=createWorks,exports.defaultImageURLTransform=imageURL,exports.draco=draco,exports.getViewportScale=getViewportScale,exports.headingToLongitude=headingToLongitude,exports.imageSupport=imageSupport,exports.isBoundingVolume=isBoundingVolume,exports.isPanoId=isPanoId,exports.ktx2=ktx2,exports.loadAt3d=loadAt3d,exports.loadB3dm=loadB3dm,exports.loadDome=loadDome,exports.loadDomez=loadDomez,exports.loadFbx=loadFbx,exports.loadGltf=loadGltf,exports.loadPbm=loadPbm,exports.loadPly=loadPly,exports.loadPnts=loadPnts,exports.loadSplat=loadSplat,exports.loadSpz=loadSpz,exports.loadX3p=loadX3p,exports.longitudeToHeading=longitudeToHeading,exports.makeBoundingVolume=makeBoundingVolume,exports.panoEqual=panoEqual,exports.panoParse=panoParse,exports.panoStringify=panoStringify,exports.parseWork=parseWork,exports.vectorToCoordinates=vectorToCoordinates,exports.workToJson=workToJson});
|