@openglobus/openglobus-react 0.4.8 → 0.4.9
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/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +2 -2
- package/dist/index.umd.cjs.map +1 -1
- package/package.json +2 -2
package/dist/index.umd.cjs
CHANGED
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
vec2 project(vec4 p,vec2 viewport){return(0.5*p.xyz/p.w+0.5).xy*viewport;}mat2 rotate2d(float angle){return mat2(cos(angle),-sin(angle),sin(angle),cos(angle));}attribute vec2 a_vertices;attribute vec2 a_texCoord;attribute vec3 a_positionsHigh;attribute vec3 a_positionsLow;attribute vec3 a_offset;attribute vec2 a_size;attribute float a_rotation;attribute vec4 a_rgba;varying vec2 v_texCoords;varying vec4 v_rgba;uniform mat4 viewMatrix;uniform mat4 projectionMatrix;uniform vec3 eyePositionHigh;uniform vec3 eyePositionLow;uniform vec3 uScaleByDistance;uniform float opacity;uniform float planetRadius;uniform vec2 viewport;uniform float depthOffset;const vec3 ZERO3=vec3(0.0);void main(){vec3 a_positions=a_positionsHigh+a_positionsLow;vec3 cameraPos=eyePositionHigh+eyePositionLow;v_texCoords=a_texCoord;vec3 look=a_positions-cameraPos;float lookDist=length(look);v_rgba=a_rgba;if(opacity*step(lookDist,sqrt(dot(cameraPos,cameraPos)-planetRadius)+sqrt(dot(a_positions,a_positions)-planetRadius))==0.0){return;}float scd=(1.0-smoothstep(uScaleByDistance[0],uScaleByDistance[1],lookDist))*(1.0-step(uScaleByDistance[2],lookDist));mat4 viewMatrixRTE=viewMatrix;viewMatrixRTE[3]=vec4(0.0,0.0,0.0,1.0);vec3 highDiff=a_positionsHigh-eyePositionHigh;vec3 lowDiff=a_positionsLow-eyePositionLow;vec4 posRTE=viewMatrixRTE*vec4(highDiff+lowDiff,1.0);vec4 projPos=projectionMatrix*posRTE;float camSlope=dot(vec3(viewMatrix[0][2],viewMatrix[1][2],viewMatrix[2][2]),normalize(cameraPos));if(camSlope>0.5){float dist=dot(look,normalize(cameraPos));projPos.z+=dist*0.02;}else{projPos.z+=-(abs(projPos.z))*0.002;}projPos.z+=depthOffset+a_offset.z;vec2 screenPos=project(projPos,viewport);vec2 v=screenPos+rotate2d(a_rotation)*(a_vertices*a_size*scd+a_offset.xy);gl_Position=vec4((2.0*v/viewport-1.0)*projPos.w,projPos.z,projPos.w);}`,fragmentShader:"precision highp float;uniform sampler2D u_texture;varying vec2 v_texCoords;varying vec4 v_rgba;void main(){vec4 color=texture2D(u_texture,v_texCoords);if(color.a<0.1)discard;gl_FragColor=color*v_rgba;}"})),this._renderer.handler.programs.billboardPicking||this._renderer.handler.addProgram(new X("billboardPicking",{uniforms:{viewport:"vec2",projectionMatrix:"mat4",viewMatrix:"mat4",eyePositionHigh:"vec3",eyePositionLow:"vec3",planetRadius:"float",uScaleByDistance:"vec3",opacity:"float",depthOffset:"float"},attributes:{a_vertices:"vec2",a_positionsHigh:"vec3",a_positionsLow:"vec3",a_offset:"vec3",a_size:"vec2",a_rotation:"float",a_rgba:"vec4"},vertexShader:`precision highp float;
|
|
98
98
|
#define EMPTY - 1.0
|
|
99
99
|
#define RTL 1.0
|
|
100
|
-
vec2 project(vec4 p,vec2 viewport){return(0.5*p.xyz/p.w+0.5).xy*viewport;}mat2 rotate2d(float angle){return mat2(cos(angle),-sin(angle),sin(angle),cos(angle));}attribute vec2 a_vertices;attribute vec3 a_positionsHigh;attribute vec3 a_positionsLow;attribute vec3 a_offset;attribute vec2 a_size;attribute float a_rotation;attribute vec4 a_rgba;varying vec3 v_rgb;uniform mat4 viewMatrix;uniform mat4 projectionMatrix;uniform vec3 eyePositionHigh;uniform vec3 eyePositionLow;uniform vec3 uScaleByDistance;uniform float opacity;uniform float planetRadius;uniform vec2 viewport;uniform float depthOffset;const vec3 ZERO3=vec3(0.0);void main(){vec3 a_positions=a_positionsHigh+a_positionsLow;vec3 cameraPos=eyePositionHigh+eyePositionLow;vec3 look=a_positions-cameraPos;float lookDist=length(look);v_rgb=a_rgba.rgb;if(opacity*step(lookDist,sqrt(dot(cameraPos,cameraPos)-planetRadius)+sqrt(dot(a_positions,a_positions)-planetRadius))==0.0){return;}float scd=(1.0-smoothstep(uScaleByDistance[0],uScaleByDistance[1],lookDist))*(1.0-step(uScaleByDistance[2],lookDist));mat4 viewMatrixRTE=viewMatrix;viewMatrixRTE[3]=vec4(0.0,0.0,0.0,1.0);vec3 highDiff=a_positionsHigh-eyePositionHigh;vec3 lowDiff=a_positionsLow-eyePositionLow;vec4 posRTE=viewMatrixRTE*vec4(highDiff+lowDiff,1.0);vec4 projPos=projectionMatrix*posRTE;float camSlope=dot(vec3(viewMatrix[0][2],viewMatrix[1][2],viewMatrix[2][2]),normalize(cameraPos));if(camSlope>0.5){float dist=dot(look,normalize(cameraPos));projPos.z+=dist*0.02;}else{projPos.z+=-(abs(projPos.z))*0.002;}projPos.z+=depthOffset+a_offset.z;vec2 screenPos=project(projPos,viewport);vec2 v=screenPos+rotate2d(a_rotation)*(a_vertices*a_size*scd+a_offset.xy);gl_Position=vec4((2.0*v/viewport-1.0)*projPos.w,projPos.z,projPos.w);}`,fragmentShader:"precision highp float;varying vec3 v_rgb;void main(){gl_FragColor=vec4(v_rgb,1.0);}"})))}setRenderer(e){this._renderer=e,this.initProgram()}refresh(){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]=!0}_removeBillboards(){let e=this._billboards.length;for(;e--;){let t=this._billboards[e];t._handlerIndex=-1,t._handler=null,t._isReady=!1,t._lockId=-1}this._billboards.length=0,this._billboards=[]}clear(){this._texCoordArr=null,this._vertexArr=null,this._positionHighArr=null,this._positionLowArr=null,this._sizeArr=null,this._offsetArr=null,this._rgbaArr=null,this._rotationArr=null,this._pickingColorArr=null,this._texCoordArr=new Float32Array([]),this._vertexArr=new Float32Array([]),this._positionHighArr=new Float32Array([]),this._positionLowArr=new Float32Array([]),this._sizeArr=new Float32Array([]),this._offsetArr=new Float32Array([]),this._rgbaArr=new Float32Array([]),this._rotationArr=new Float32Array([]),this._pickingColorArr=new Float32Array([]),this._removeBillboards(),this._deleteBuffers(),this.refresh()}_deleteBuffers(){if(this._renderer){let e=this._renderer.handler.gl;e.deleteBuffer(this._positionHighBuffer),e.deleteBuffer(this._positionLowBuffer),e.deleteBuffer(this._sizeBuffer),e.deleteBuffer(this._offsetBuffer),e.deleteBuffer(this._rgbaBuffer),e.deleteBuffer(this._rotationBuffer),e.deleteBuffer(this._vertexBuffer),e.deleteBuffer(this._texCoordBuffer),e.deleteBuffer(this._pickingColorBuffer)}this._positionHighBuffer=null,this._positionLowBuffer=null,this._sizeBuffer=null,this._offsetBuffer=null,this._rgbaBuffer=null,this._rotationBuffer=null,this._vertexBuffer=null,this._texCoordBuffer=null,this._pickingColorBuffer=null}update(){if(this._renderer){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]&&(this._buffersUpdateCallbacks[e].call(this),this._changedBuffers[e]=!1)}}add(e){e._handlerIndex==-1&&(e._isReady=!0,e._handler=this,e._handlerIndex=this._billboards.length,this._billboards.push(e))}_displayPASS(){let e=this._renderer,t=e.handler;t.programs.billboard.activate();let i=t.programs.billboard._program,r=i.attributes,s=i.uniforms,n=t.gl,a=this._entityCollection;n.disable(n.CULL_FACE),n.uniform1f(s.depthOffset,a.polygonOffsetUnits),n.uniform1i(s.u_texture,0),n.uniformMatrix4fv(s.viewMatrix,!1,e.activeCamera.getViewMatrix()),n.uniformMatrix4fv(s.projectionMatrix,!1,e.activeCamera.getProjectionMatrix()),n.uniform3fv(s.eyePositionHigh,e.activeCamera.eyeHigh),n.uniform3fv(s.eyePositionLow,e.activeCamera.eyeLow),n.uniform3fv(s.uScaleByDistance,a.scaleByDistance),n.uniform1f(s.opacity,a._fadingOpacity),n.bindBuffer(n.ARRAY_BUFFER,this._texCoordBuffer),n.vertexAttribPointer(r.a_texCoord,this._texCoordBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._vertexBuffer),n.vertexAttribPointer(r.a_vertices,this._vertexBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._positionHighBuffer),n.vertexAttribPointer(r.a_positionsHigh,this._positionHighBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._positionLowBuffer),n.vertexAttribPointer(r.a_positionsLow,this._positionLowBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._rgbaBuffer),n.vertexAttribPointer(r.a_rgba,this._rgbaBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._sizeBuffer),n.vertexAttribPointer(r.a_size,this._sizeBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._offsetBuffer),n.vertexAttribPointer(r.a_offset,this._offsetBuffer.itemSize,n.FLOAT,!1,0,0),n.uniform1f(s.planetRadius,a.renderNode._planetRadius2||0),n.uniform2fv(s.viewport,[t.canvas.clientWidth,t.canvas.clientHeight]),n.bindBuffer(n.ARRAY_BUFFER,this._rotationBuffer),n.vertexAttribPointer(r.a_rotation,this._rotationBuffer.itemSize,n.FLOAT,!1,0,0),n.drawArrays(n.TRIANGLES,0,this._vertexBuffer.numItems),n.enable(n.CULL_FACE)}_pickingPASS(){let e=this._renderer,t=e.handler;t.programs.billboardPicking.activate();let i=t.programs.billboardPicking._program,r=i.attributes,s=i.uniforms,n=t.gl,a=this._entityCollection;n.disable(n.CULL_FACE),n.uniform1f(s.depthOffset,a.polygonOffsetUnits),n.uniformMatrix4fv(s.viewMatrix,!1,e.activeCamera.getViewMatrix()),n.uniformMatrix4fv(s.projectionMatrix,!1,e.activeCamera.getProjectionMatrix()),n.uniform3fv(s.eyePositionHigh,e.activeCamera.eyeHigh),n.uniform3fv(s.eyePositionLow,e.activeCamera.eyeLow),n.uniform3fv(s.uScaleByDistance,a.scaleByDistance),n.uniform1f(s.opacity,a._fadingOpacity),n.bindBuffer(n.ARRAY_BUFFER,this._vertexBuffer),n.vertexAttribPointer(r.a_vertices,this._vertexBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._positionHighBuffer),n.vertexAttribPointer(r.a_positionsHigh,this._positionHighBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._positionLowBuffer),n.vertexAttribPointer(r.a_positionsLow,this._positionLowBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._pickingColorBuffer),n.vertexAttribPointer(r.a_rgba,this._pickingColorBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._sizeBuffer),n.vertexAttribPointer(r.a_size,this._sizeBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._offsetBuffer),n.vertexAttribPointer(r.a_offset,this._offsetBuffer.itemSize,n.FLOAT,!1,0,0),n.uniform1f(s.planetRadius,a.renderNode._planetRadius2||0),n.uniform2fv(s.viewport,[t.canvas.clientWidth,t.canvas.clientHeight]),n.bindBuffer(n.ARRAY_BUFFER,this._rotationBuffer),n.vertexAttribPointer(r.a_rotation,this._rotationBuffer.itemSize,n.FLOAT,!1,0,0),n.drawArrays(n.TRIANGLES,0,this._vertexBuffer.numItems),n.enable(n.CULL_FACE)}draw(){this._billboards.length&&(this.update(),this._displayPASS())}drawPicking(){this._billboards.length&&this.pickingEnabled&&this._pickingPASS()}reindexBillboardsArray(e){let t=this._billboards;for(let i=e;i<t.length;i++)t[i]._handlerIndex=i}_removeBillboard(e){let t=e._handlerIndex;this._billboards.splice(t,1);let i=24*t;this._rgbaArr=ce(this._rgbaArr,i,24),i=18*t,this._positionHighArr=ce(this._positionHighArr,i,18),this._positionLowArr=ce(this._positionLowArr,i,18),this._offsetArr=ce(this._offsetArr,i,18),this._pickingColorArr=ce(this._pickingColorArr,i,18),i=12*t,this._vertexArr=ce(this._vertexArr,i,12),this._sizeArr=ce(this._sizeArr,i,12),this._texCoordArr=ce(this._texCoordArr,i,12),i=6*t,this._rotationArr=ce(this._rotationArr,i,6),this.reindexBillboardsArray(t),this.refresh(),e._handlerIndex=-1,e._handler=null,e._isReady=!1,e._lockId=-1}setAlignedAxisArr(e,t){}remove(e){e._handler&&(e._isReady&&this.__id===e._handler.__id?this._removeBillboard(e):e._handler=null)}setPositionArr(e,t,i){let r=18*e,s=this._positionHighArr,n=t.x,a=t.y,l=t.z;s[r]=n,s[r+1]=a,s[r+2]=l,s[r+3]=n,s[r+4]=a,s[r+5]=l,s[r+6]=n,s[r+7]=a,s[r+8]=l,s[r+9]=n,s[r+10]=a,s[r+11]=l,s[r+12]=n,s[r+13]=a,s[r+14]=l,s[r+15]=n,s[r+16]=a,s[r+17]=l,s=this._positionLowArr,n=i.x,a=i.y,l=i.z,s[r]=n,s[r+1]=a,s[r+2]=l,s[r+3]=n,s[r+4]=a,s[r+5]=l,s[r+6]=n,s[r+7]=a,s[r+8]=l,s[r+9]=n,s[r+10]=a,s[r+11]=l,s[r+12]=n,s[r+13]=a,s[r+14]=l,s[r+15]=n,s[r+16]=a,s[r+17]=l,this._changedBuffers[1]=!0}setPickingColorArr(e,t){let i=18*e,r=this._pickingColorArr,s=t.x/255,n=t.y/255,a=t.z/255;r[i]=s,r[i+1]=n,r[i+2]=a,r[i+3]=s,r[i+4]=n,r[i+5]=a,r[i+6]=s,r[i+7]=n,r[i+8]=a,r[i+9]=s,r[i+10]=n,r[i+11]=a,r[i+12]=s,r[i+13]=n,r[i+14]=a,r[i+15]=s,r[i+16]=n,r[i+17]=a,this._changedBuffers[0]=!0}setSizeArr(e,t,i){let r=12*e,s=this._sizeArr,n=t,a=i;s[r]=n,s[r+1]=a,s[r+2]=n,s[r+3]=a,s[r+4]=n,s[r+5]=a,s[r+6]=n,s[r+7]=a,s[r+8]=n,s[r+9]=a,s[r+10]=n,s[r+11]=a,this._changedBuffers[2]=!0}setOffsetArr(e,t){let i=18*e,r=this._offsetArr,s=t.x,n=t.y,a=t.z;r[i]=s,r[i+1]=n,r[i+2]=a,r[i+3]=s,r[i+4]=n,r[i+5]=a,r[i+6]=s,r[i+7]=n,r[i+8]=a,r[i+9]=s,r[i+10]=n,r[i+11]=a,r[i+12]=s,r[i+13]=n,r[i+14]=a,r[i+15]=s,r[i+16]=n,r[i+17]=a,this._changedBuffers[3]=!0}setRgbaArr(e,t){let i=24*e,r=this._rgbaArr,s=t.x,n=t.y,a=t.z,l=t.w;r[i]=s,r[i+1]=n,r[i+2]=a,r[i+3]=l,r[i+4]=s,r[i+5]=n,r[i+6]=a,r[i+7]=l,r[i+8]=s,r[i+9]=n,r[i+10]=a,r[i+11]=l,r[i+12]=s,r[i+13]=n,r[i+14]=a,r[i+15]=l,r[i+16]=s,r[i+17]=n,r[i+18]=a,r[i+19]=l,r[i+20]=s,r[i+21]=n,r[i+22]=a,r[i+23]=l,this._changedBuffers[4]=!0}setRotationArr(e,t){let i=6*e,r=this._rotationArr;r[i]=t,r[i+1]=t,r[i+2]=t,r[i+3]=t,r[i+4]=t,r[i+5]=t,this._changedBuffers[5]=!0}setTexCoordArr(e,t){let i=12*e,r=this._texCoordArr;r[i]=t[0],r[i+1]=t[1],r[i+2]=t[2],r[i+3]=t[3],r[i+4]=t[4],r[i+5]=t[5],r[i+6]=t[6],r[i+7]=t[7],r[i+8]=t[8],r[i+9]=t[9],r[i+10]=t[10],r[i+11]=t[11],this._changedBuffers[6]=!0}setVisibility(e,t){let i;i=t?[-.5,.5,-.5,-.5,.5,-.5,.5,-.5,.5,.5,-.5,.5]:[0,0,0,0,0,0,0,0,0,0,0,0],this.setVertexArr(e,i)}setVertexArr(e,t){let i=12*e,r=this._vertexArr;r[i]=t[0],r[i+1]=t[1],r[i+2]=t[2],r[i+3]=t[3],r[i+4]=t[4],r[i+5]=t[5],r[i+6]=t[6],r[i+7]=t[7],r[i+8]=t[8],r[i+9]=t[9],r[i+10]=t[10],r[i+11]=t[11],this._changedBuffers[7]=!0}createPositionBuffer(){let e=this._renderer.handler,t=this._positionHighArr.length/3;this._positionHighBuffer&&this._positionHighBuffer.numItems===t||(e.gl.deleteBuffer(this._positionHighBuffer),e.gl.deleteBuffer(this._positionLowBuffer),this._positionHighBuffer=e.createStreamArrayBuffer(3,t),this._positionLowBuffer=e.createStreamArrayBuffer(3,t)),e.setStreamArrayBuffer(this._positionHighBuffer,this._positionHighArr),e.setStreamArrayBuffer(this._positionLowBuffer,this._positionLowArr)}createSizeBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._sizeBuffer),this._sizeBuffer=e.createArrayBuffer(this._sizeArr,2,this._sizeArr.length/2)}createOffsetBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._offsetBuffer),this._offsetBuffer=e.createArrayBuffer(this._offsetArr,3,this._offsetArr.length/3)}createRgbaBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._rgbaBuffer),this._rgbaBuffer=e.createArrayBuffer(this._rgbaArr,4,this._rgbaArr.length/4)}createRotationBuffer(){let e=this._renderer.handler;this._rotationBuffer&&this._rotationBuffer.numItems===this._rotationArr.length||(e.gl.deleteBuffer(this._rotationBuffer),this._rotationBuffer=e.createStreamArrayBuffer(1,this._rotationArr.length)),e.setStreamArrayBuffer(this._rotationBuffer,this._rotationArr)}createVertexBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._vertexBuffer),this._vertexBuffer=e.createArrayBuffer(this._vertexArr,2,this._vertexArr.length/2)}createTexCoordBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._texCoordBuffer),this._texCoordBuffer=e.createArrayBuffer(this._texCoordArr,2,this._texCoordArr.length/2)}createPickingColorBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._pickingColorBuffer),this._pickingColorBuffer=e.createArrayBuffer(this._pickingColorArr,3,this._pickingColorArr.length/3)}refreshTexCoordsArr(){}};kn.__counter__=0;let In=kn;class Jl extends In{constructor(e){super(e),this._billboards=[]}add(e){if(e._handlerIndex==-1){super.add(e),this._addBillboardToArrays(e),this.refresh();let t=e.getSrc()||e.getImage()&&e.getImage().src;t&&e.setSrc(t)}}_addBillboardToArrays(e){e.getVisibility()?this._vertexArr=oe(this._vertexArr,[-.5,.5,-.5,-.5,.5,-.5,.5,-.5,.5,.5,-.5,.5]):this._vertexArr=oe(this._vertexArr,[0,0,0,0,0,0,0,0,0,0,0,0]),this._texCoordArr=oe(this._texCoordArr,[0,0,0,0,0,0,0,0,0,0,0,0]);let t,i=e._positionHigh.x,r=e._positionHigh.y,s=e._positionHigh.z;this._positionHighArr=oe(this._positionHighArr,[i,r,s,i,r,s,i,r,s,i,r,s,i,r,s,i,r,s]),i=e._positionLow.x,r=e._positionLow.y,s=e._positionLow.z,this._positionLowArr=oe(this._positionLowArr,[i,r,s,i,r,s,i,r,s,i,r,s,i,r,s,i,r,s]),i=e._width,r=e._height,this._sizeArr=oe(this._sizeArr,[i,r,i,r,i,r,i,r,i,r,i,r]),i=e._offset.x,r=e._offset.y,s=e._offset.z,this._offsetArr=oe(this._offsetArr,[i,r,s,i,r,s,i,r,s,i,r,s,i,r,s,i,r,s]),i=e._color.x,r=e._color.y,s=e._color.z,t=e._color.w,this._rgbaArr=oe(this._rgbaArr,[i,r,s,t,i,r,s,t,i,r,s,t,i,r,s,t,i,r,s,t,i,r,s,t]),i=e._rotation,this._rotationArr=oe(this._rotationArr,[i,i,i,i,i,i]),i=e._entity._pickingColor.x/255,r=e._entity._pickingColor.y/255,s=e._entity._pickingColor.z/255,this._pickingColorArr=oe(this._pickingColorArr,[i,r,s,i,r,s,i,r,s,i,r,s,i,r,s,i,r,s])}get billboards(){return this._billboards}refreshTexCoordsArr(){if(this._entityCollection&&this._renderer){let e=this._renderer.billboardsTextureAtlas;for(let t=0;t<this._billboards.length;t++){let i=this._billboards[t],r=i.getImage();if(r){let s=e.get(r.__nodeIndex);s&&this.setTexCoordArr(i._handlerIndex,s.texCoords)}}}}}class eh{constructor(e){this.isFree=!0,this._geoObjectHandler=e,this.geoObjects=[],this.numInstances=0,this._colorTexture=null,this._colorTextureSrc=null,this._colorTextureImage=null,this._normalTexture=null,this._normalTextureSrc=null,this._normalTextureImage=null,this._metallicRoughnessTexture=null,this._metallicRoughnessTextureSrc=null,this._metallicRoughnessTextureImage=null,this._sizeArr=[],this._translateArr=[],this._vertexArr=[],this._rtcPositionHighArr=[],this._rtcPositionLowArr=[],this._qRotArr=[],this._rgbaArr=[],this._normalsArr=[],this._indicesArr=[],this._pickingColorArr=[],this._visibleArr=[],this._texCoordArr=[],this._localPositionArr=[],this._sizeBuffer=null,this._translateBuffer=null,this._vertexBuffer=null,this._rtcPositionHighBuffer=null,this._rtcPositionLowBuffer=null,this._qRotBuffer=null,this._rgbaBuffer=null,this._normalsBuffer=null,this._indicesBuffer=null,this._pickingColorBuffer=null,this._visibleBuffer=null,this._texCoordBuffer=null,this._localPositionBuffer=null,this._materialParams=new Float32Array(9),this._materialShininess=0,this._buffersUpdateCallbacks=[],this._buffersUpdateCallbacks[Un]=this.createPickingColorBuffer,this._buffersUpdateCallbacks[On]=this.createNormalsBuffer,this._buffersUpdateCallbacks[Fn]=this.createRgbaBuffer,this._buffersUpdateCallbacks[Nn]=this.createIndicesBuffer,this._buffersUpdateCallbacks[zn]=this.createVertexBuffer,this._buffersUpdateCallbacks[Vn]=this.createSizeBuffer,this._buffersUpdateCallbacks[Gn]=this.createVisibleBuffer,this._buffersUpdateCallbacks[jn]=this.createTexCoordBuffer,this._buffersUpdateCallbacks[Hn]=this.createQRotBuffer,this._buffersUpdateCallbacks[qn]=this.createTranslateBuffer,this._buffersUpdateCallbacks[Dn]=this.createRTCPositionBuffer,this._buffersUpdateCallbacks[Yn]=this.createLocalPositionBuffer,this._changedBuffers=new Array(this._buffersUpdateCallbacks.length)}setMaterialAmbient(e,t,i){this._materialParams[0]=e,this._materialParams[1]=t,this._materialParams[2]=i}setMaterialDiffuse(e,t,i){this._materialParams[3]=e,this._materialParams[4]=t,this._materialParams[5]=i}setMaterialSpecular(e,t,i){this._materialParams[6]=e,this._materialParams[7]=t,this._materialParams[8]=i}setMaterialShininess(e){this._materialShininess=e}setMaterialParams(e,t,i,r){this.setMaterialAmbient(e[0],e[1],e[2]),this.setMaterialDiffuse(t[0],t[1],t[2]),this.setMaterialSpecular(i[0],i[1],i[2]),this.setMaterialShininess(r)}drawOpaque(e){let t=e.gl,i=e.uniforms,r=e.attributes;t.bindBuffer(t.ARRAY_BUFFER,this._qRotBuffer),t.vertexAttribPointer(r.qRot,this._qRotBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._sizeBuffer),t.vertexAttribPointer(r.aScale,this._sizeBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._translateBuffer),t.vertexAttribPointer(r.aTranslate,this._translateBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._localPositionBuffer),t.vertexAttribPointer(r.aLocalPosition,this._localPositionBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._visibleBuffer),t.vertexAttribPointer(r.aDispose,this._visibleBuffer.itemSize,t.FLOAT,!1,0,0),t.uniform1f(i.uUseTexture,this._colorTexture?1:0),t.bindBuffer(t.ARRAY_BUFFER,this._rgbaBuffer),t.vertexAttribPointer(r.aColor,this._rgbaBuffer.itemSize,t.FLOAT,!1,0,0),t.uniform3fv(i.materialParams,this._materialParams),t.uniform1f(i.materialShininess,this._materialShininess),this._drawElementsInstanced(e)}drawTransparent(e){let t=e.gl,i=e.uniforms,r=e.attributes;t.bindBuffer(t.ARRAY_BUFFER,this._qRotBuffer),t.vertexAttribPointer(r.qRot,this._qRotBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._sizeBuffer),t.vertexAttribPointer(r.aScale,this._sizeBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._translateBuffer),t.vertexAttribPointer(r.aTranslate,this._translateBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._localPositionBuffer),t.vertexAttribPointer(r.aLocalPosition,this._localPositionBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._visibleBuffer),t.vertexAttribPointer(r.aDispose,this._visibleBuffer.itemSize,t.FLOAT,!1,0,0),t.uniform1f(i.uUseTexture,this._colorTexture?1:0),t.uniform3fv(i.materialParams,this._materialParams),t.uniform1f(i.materialShininess,this._materialShininess),t.bindBuffer(t.ARRAY_BUFFER,this._rgbaBuffer),t.vertexAttribPointer(r.aColor,this._rgbaBuffer.itemSize,t.FLOAT,!1,0,0),this._drawElementsInstanced(e)}_drawElementsInstanced(e){let t=e.gl,i=e.uniforms,r=e.attributes,s=this._geoObjectHandler._renderer;t.bindBuffer(t.ARRAY_BUFFER,this._rtcPositionHighBuffer),t.vertexAttribPointer(r.aRTCPositionHigh,this._rtcPositionHighBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._rtcPositionLowBuffer),t.vertexAttribPointer(r.aRTCPositionLow,this._rtcPositionLowBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._normalsBuffer),t.vertexAttribPointer(r.aVertexNormal,this._normalsBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._vertexBuffer),t.vertexAttribPointer(r.aVertexPosition,this._vertexBuffer.itemSize,t.FLOAT,!1,0,0),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,this._colorTexture||s.handler.defaultTexture),t.uniform1i(i.uTexture,0),t.bindBuffer(t.ARRAY_BUFFER,this._texCoordBuffer),t.vertexAttribPointer(r.aTexCoord,this._texCoordBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this._indicesBuffer),e.drawElementsInstanced(t.TRIANGLES,this._indicesBuffer.numItems,t.UNSIGNED_INT,0,this.numInstances)}async loadColorTexture(){if(this._geoObjectHandler._renderer){if(!this._colorTextureSrc)return this._colorTextureImage?(await this._colorTextureImage.decode(),void this._createColorTexture(this._colorTextureImage)):void 0;{const e=await Gi(this._colorTextureSrc);this._createColorTexture(e)}}}async loadNormalTexture(){if(this._geoObjectHandler._renderer){if(!this._normalTextureSrc)return this._normalTextureImage?(await this._normalTextureImage.decode(),void this._createNormalTexture(this._normalTextureImage)):void 0;{const e=await Gi(this._normalTextureSrc);this._createNormalTexture(e)}}}async loadMetallicRoughnessTexture(){if(this._geoObjectHandler._renderer){if(!this._metallicRoughnessTextureSrc)return this._metallicRoughnessTextureImage?(await this._metallicRoughnessTextureImage.decode(),void this._createMetallicRoughnessTexture(this._metallicRoughnessTextureImage)):void 0;{const e=await Gi(this._metallicRoughnessTextureSrc);this._createMetallicRoughnessTexture(e)}}}clear(){this.numInstances=0,this.geoObjects=[],this._sizeArr=[],this._translateArr=[],this._vertexArr=[],this._rtcPositionHighArr=[],this._rtcPositionLowArr=[],this._qRotArr=[],this._rgbaArr=[],this._normalsArr=[],this._indicesArr=[],this._pickingColorArr=[],this._visibleArr=[],this._texCoordArr=[],this._localPositionArr=[],this._deleteBuffers(),this.isFree=!1}_deleteBuffers(){if(this._geoObjectHandler&&this._geoObjectHandler._renderer){let e=this._geoObjectHandler._renderer.handler,t=e.gl;e.deleteTexture(this._colorTexture),e.deleteTexture(this._normalTexture),e.deleteTexture(this._metallicRoughnessTexture),this._colorTexture=null,this._normalTexture=null,this._metallicRoughnessTexture=null,t.deleteBuffer(this._sizeBuffer),t.deleteBuffer(this._translateBuffer),t.deleteBuffer(this._vertexBuffer),t.deleteBuffer(this._rtcPositionHighBuffer),t.deleteBuffer(this._rtcPositionLowBuffer),t.deleteBuffer(this._qRotBuffer),t.deleteBuffer(this._rgbaBuffer),t.deleteBuffer(this._normalsBuffer),t.deleteBuffer(this._indicesBuffer),t.deleteBuffer(this._pickingColorBuffer),t.deleteBuffer(this._visibleBuffer),t.deleteBuffer(this._texCoordBuffer),t.deleteBuffer(this._localPositionBuffer)}this._sizeBuffer=null,this._translateBuffer=null,this._vertexBuffer=null,this._rtcPositionHighBuffer=null,this._rtcPositionLowBuffer=null,this._qRotBuffer=null,this._rgbaBuffer=null,this._normalsBuffer=null,this._indicesBuffer=null,this._pickingColorBuffer=null,this._visibleBuffer=null,this._texCoordBuffer=null,this._localPositionBuffer=null}createVertexBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._vertexBuffer),this._vertexArr=se(this._vertexArr),this._vertexBuffer=e.createArrayBuffer(this._vertexArr,3,this._vertexArr.length/3)}createVisibleBuffer(){const e=this._geoObjectHandler._renderer.handler,t=this._visibleArr.length;this._visibleBuffer&&this._visibleBuffer.numItems===t||(e.gl.deleteBuffer(this._visibleBuffer),this._visibleBuffer=e.createStreamArrayBuffer(1,t)),this._visibleArr=se(this._visibleArr),e.setStreamArrayBuffer(this._visibleBuffer,this._visibleArr)}createSizeBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._sizeArr.length/3;this._sizeBuffer&&this._sizeBuffer.numItems===t||(e.gl.deleteBuffer(this._sizeBuffer),this._sizeBuffer=e.createStreamArrayBuffer(3,t)),this._sizeArr=se(this._sizeArr),e.setStreamArrayBuffer(this._sizeBuffer,this._sizeArr)}createTranslateBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._translateArr.length/3;this._translateBuffer&&this._translateBuffer.numItems===t||(e.gl.deleteBuffer(this._translateBuffer),this._translateBuffer=e.createStreamArrayBuffer(3,t)),this._translateArr=se(this._translateArr),e.setStreamArrayBuffer(this._translateBuffer,this._translateArr)}createLocalPositionBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._localPositionArr.length/3;this._localPositionBuffer&&this._localPositionBuffer.numItems===t||(e.gl.deleteBuffer(this._localPositionBuffer),this._localPositionBuffer=e.createStreamArrayBuffer(3,t)),this._localPositionArr=se(this._localPositionArr),e.setStreamArrayBuffer(this._localPositionBuffer,this._localPositionArr)}createTexCoordBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._texCoordBuffer),this._texCoordArr=se(this._texCoordArr),this._texCoordBuffer=e.createArrayBuffer(this._texCoordArr,2,this._texCoordArr.length/2)}createRTCPositionBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._rtcPositionHighArr.length/3;this._rtcPositionHighBuffer&&this._rtcPositionHighBuffer.numItems===t||(e.gl.deleteBuffer(this._rtcPositionHighBuffer),e.gl.deleteBuffer(this._rtcPositionLowBuffer),this._rtcPositionHighBuffer=e.createStreamArrayBuffer(3,t),this._rtcPositionLowBuffer=e.createStreamArrayBuffer(3,t)),this._rtcPositionHighArr=se(this._rtcPositionHighArr),this._rtcPositionLowArr=se(this._rtcPositionLowArr),e.setStreamArrayBuffer(this._rtcPositionHighBuffer,this._rtcPositionHighArr),e.setStreamArrayBuffer(this._rtcPositionLowBuffer,this._rtcPositionLowArr)}createRgbaBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._rgbaArr.length/4;this._rgbaBuffer&&this._rgbaBuffer.numItems===t||(e.gl.deleteBuffer(this._rgbaBuffer),this._rgbaBuffer=e.createStreamArrayBuffer(4,t)),this._rgbaArr=se(this._rgbaArr),e.setStreamArrayBuffer(this._rgbaBuffer,this._rgbaArr)}createQRotBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._qRotArr.length/4;this._qRotBuffer&&this._qRotBuffer.numItems===t||(e.gl.deleteBuffer(this._qRotBuffer),this._qRotBuffer=e.createStreamArrayBuffer(4,t)),this._qRotArr=se(this._qRotArr),e.setStreamArrayBuffer(this._qRotBuffer,this._qRotArr)}createNormalsBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._normalsBuffer),this._normalsArr=se(this._normalsArr),this._normalsBuffer=e.createArrayBuffer(this._normalsArr,3,this._normalsArr.length/3)}createIndicesBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._indicesBuffer),this._indicesArr=se(this._indicesArr,Uint32Array),this._indicesBuffer=e.createElementArrayBuffer(this._indicesArr,1,this._indicesArr.length)}createPickingColorBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._pickingColorBuffer),this._pickingColorArr=se(this._pickingColorArr),this._pickingColorBuffer=e.createArrayBuffer(this._pickingColorArr,3,this._pickingColorArr.length/3)}refresh(){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]=!0}update(){if(this._geoObjectHandler._renderer){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]&&(this._buffersUpdateCallbacks[e].call(this),this._changedBuffers[e]=!1);this.isFree=!0}}_createColorTexture(e){if(this._geoObjectHandler&&this._geoObjectHandler._renderer){let t=this._geoObjectHandler._renderer.handler;this._colorTexture=t.createTextureDefault(e,null,t.gl.REPEAT)}}_createNormalTexture(e){if(this._geoObjectHandler&&this._geoObjectHandler._renderer){let t=this._geoObjectHandler._renderer.handler;this._normalTexture=t.createTextureDefault(e,null,t.gl.REPEAT)}}_createMetallicRoughnessTexture(e){if(this._geoObjectHandler&&this._geoObjectHandler._renderer){let t=this._geoObjectHandler._renderer.handler;this._metallicRoughnessTexture=t.createTextureDefault(e,null,t.gl.REPEAT)}}}const zn=0,Dn=1,Fn=2,On=3,Nn=4,Hn=5,Vn=6,Un=7,Gn=8,jn=9,qn=10,Yn=11;function Se(o,e=0,t=0,i=1,...r){const s=e*t;for(let n=s,a=s+t;n<a;n++)o[n]=r[n%i];return o}const Wn=class _l{constructor(e){this.__id=_l.__counter__++,this.pickingEnabled=!0,this._entityCollection=e,this._renderNode=null,this._renderer=null,this._geoObjects=[],this._instanceDataMap=new Map,this._instanceDataMapValues=[],this._dataTagUpdateQueue=[],this._relativeCenter=new m,this._rtcEyePositionHigh=new Float32Array([0,0,0]),this._rtcEyePositionLow=new Float32Array([0,0,0])}initProgram(){this._renderer&&(this._renderer.handler.programs.geo_object||this._renderer.handler.addProgram(new X("geo_object",{uniforms:{viewMatrix:"mat4",projectionMatrix:"mat4",uScaleByDistance:"vec3",eyePositionHigh:"vec3",eyePositionLow:"vec3",rtcEyePositionHigh:"vec3",rtcEyePositionLow:"vec3",sunPosition:"vec3",materialParams:"vec3",materialShininess:"float",uTexture:"sampler2d",uUseTexture:"float",useLighting:"float"},attributes:{aVertexPosition:"vec3",aVertexNormal:"vec3",aTexCoord:"vec2",aLocalPosition:{type:"vec3",divisor:1},aRTCPositionHigh:{type:"vec3",divisor:1},aRTCPositionLow:{type:"vec3",divisor:1},aColor:{type:"vec4",divisor:1},aScale:{type:"vec3",divisor:1},aTranslate:{type:"vec3",divisor:1},aDispose:{type:"float",divisor:1},qRot:{type:"vec4",divisor:1}},vertexShader:"precision highp float;vec3 qRotate(vec4 q,vec3 v){return v+2.0*cross(q.xyz,cross(q.xyz,v)+q.w*v);}attribute vec3 aVertexPosition;attribute vec3 aVertexNormal;attribute vec3 aRTCPositionHigh;attribute vec3 aRTCPositionLow;attribute vec4 aColor;attribute vec3 aScale;attribute vec3 aTranslate;attribute float aDispose;attribute float aUseTexture;attribute vec2 aTexCoord;attribute vec4 qRot;attribute vec3 aLocalPosition;uniform vec3 uScaleByDistance;uniform mat4 projectionMatrix;uniform mat4 viewMatrix;uniform vec3 eyePositionHigh;uniform vec3 eyePositionLow;uniform vec3 rtcEyePositionHigh;uniform vec3 rtcEyePositionLow;varying vec3 cameraPosition;varying vec3 vNormal;varying vec3 v_vertex;varying vec4 vColor;varying float vDispose;varying vec2 vTexCoords;void main(void){if(aDispose==0.0){return;}vColor=aColor;vTexCoords=aTexCoord;mat4 viewMatrixRTE=viewMatrix;viewMatrixRTE[3]=vec4(0.0,0.0,0.0,1.0);vec3 highDiff=aRTCPositionHigh-rtcEyePositionHigh;vec3 lowDiff=aRTCPositionLow-rtcEyePositionLow;cameraPosition=eyePositionHigh+eyePositionLow;highDiff=highDiff*step(1.0,length(highDiff));vec4 positionInViewSpace=viewMatrixRTE*vec4(highDiff+lowDiff,1.0);float lookLength=length(positionInViewSpace.xyz);vNormal=normalize(qRotate(qRot,aVertexNormal));float scd=uScaleByDistance[2]*clamp(lookLength,uScaleByDistance[0],uScaleByDistance[1])/uScaleByDistance[0];vec3 vert=qRotate(qRot,scd*(aVertexPosition*aScale+aTranslate))+scd*aLocalPosition;gl_Position=projectionMatrix*viewMatrixRTE*vec4(highDiff+lowDiff+vert,1.0);v_vertex=positionInViewSpace.xyz+vert;}",fragmentShader:"precision highp float;uniform vec3 sunPosition;uniform vec3 materialParams[3];uniform float materialShininess;uniform sampler2D uTexture;uniform float uUseTexture;uniform float useLighting;varying vec3 cameraPosition;varying vec3 v_vertex;varying vec4 vColor;varying vec3 vNormal;varying vec2 vTexCoords;void main(void){vec3 lightWeighting=vec3(1.0);if(useLighting!=0.0){vec3 normal=normalize(vNormal);vec3 light_dir=normalize(sunPosition);vec3 look_dir=normalize(cameraPosition-v_vertex);float diffuse=max(dot(normal,light_dir),0.0);vec3 refl_dir=reflect(-light_dir,normal);float refl=max(dot(refl_dir,look_dir),0.0);float specular=pow(refl,materialShininess)*step(1e-4,diffuse);lightWeighting=vColor.rgb*materialParams[0]+materialParams[1]*diffuse+materialParams[2]*specular;}else{lightWeighting=vColor.rgb;}if(uUseTexture>0.0){vec4 texColor=texture2D(uTexture,vTexCoords);gl_FragColor=vec4(texColor.rgb*lightWeighting,texColor.a);}else{gl_FragColor=vec4(lightWeighting,vColor.a);}}"})),this._renderer.handler.programs.geo_object_picking||this._renderer.handler.addProgram(new X("geo_object_picking",{uniforms:{viewMatrix:"mat4",projectionMatrix:"mat4",uScaleByDistance:"vec3",pickingScale:"vec3",rtcEyePositionHigh:"vec3",rtcEyePositionLow:"vec3"},attributes:{aVertexPosition:"vec3",aRTCPositionHigh:{type:"vec3",divisor:1},aRTCPositionLow:{type:"vec3",divisor:1},aPickingColor:{type:"vec3",divisor:1},aScale:{type:"vec3",divisor:1},aTranslate:{type:"vec3",divisor:1},aLocalPosition:{type:"vec3",divisor:1},aDispose:{type:"float",divisor:1},qRot:{type:"vec4",divisor:1}},vertexShader:"precision highp float;vec3 qRotate(vec4 q,vec3 v){return v+2.0*cross(q.xyz,cross(q.xyz,v)+q.w*v);}attribute vec3 aVertexPosition;attribute vec3 aRTCPositionHigh;attribute vec3 aRTCPositionLow;attribute vec3 aPickingColor;attribute vec3 aScale;attribute vec3 aTranslate;attribute float aDispose;attribute vec4 qRot;attribute vec3 aLocalPosition;uniform vec3 rtcEyePositionHigh;uniform vec3 rtcEyePositionLow;uniform vec3 uScaleByDistance;uniform mat4 projectionMatrix;uniform mat4 viewMatrix;uniform vec3 pickingScale;varying vec3 vColor;void main(void){if(aDispose==0.0){return;}vColor=aPickingColor;mat4 viewMatrixRTE=viewMatrix;viewMatrixRTE[3]=vec4(0.0,0.0,0.0,1.0);vec3 highDiff=aRTCPositionHigh-rtcEyePositionHigh;vec3 lowDiff=aRTCPositionLow-rtcEyePositionLow;highDiff=highDiff*step(1.0,length(highDiff));vec4 positionInViewSpace=viewMatrixRTE*vec4(highDiff+lowDiff,1.0);float lookLength=length(positionInViewSpace.xyz);float scd=uScaleByDistance[2]*clamp(lookLength,uScaleByDistance[0],uScaleByDistance[1])/uScaleByDistance[0];vec3 vert=qRotate(qRot,scd*pickingScale*(aVertexPosition*aScale+aTranslate))+scd*aLocalPosition;gl_Position=projectionMatrix*viewMatrixRTE*vec4(highDiff+lowDiff+vert,1.0);}",fragmentShader:"precision highp float;varying vec3 vColor;void main(){gl_FragColor=vec4(vColor,1.0);}"})),this._renderer.handler.programs.geo_object_depth||this._renderer.handler.addProgram(new X("geo_object_depth",{uniforms:{viewMatrix:"mat4",projectionMatrix:"mat4",uScaleByDistance:"vec3",rtcEyePositionHigh:"vec3",rtcEyePositionLow:"vec3",frustumPickingColor:"float"},attributes:{aVertexPosition:"vec3",aRTCPositionHigh:{type:"vec3",divisor:1},aRTCPositionLow:{type:"vec3",divisor:1},aScale:{type:"vec3",divisor:1},aTranslate:{type:"vec3",divisor:1},aDispose:{type:"float",divisor:1},qRot:{type:"vec4",divisor:1},aLocalPosition:{type:"vec3",divisor:1}},vertexShader:`#version 300 es
|
|
100
|
+
vec2 project(vec4 p,vec2 viewport){return(0.5*p.xyz/p.w+0.5).xy*viewport;}mat2 rotate2d(float angle){return mat2(cos(angle),-sin(angle),sin(angle),cos(angle));}attribute vec2 a_vertices;attribute vec3 a_positionsHigh;attribute vec3 a_positionsLow;attribute vec3 a_offset;attribute vec2 a_size;attribute float a_rotation;attribute vec4 a_rgba;varying vec3 v_rgb;uniform mat4 viewMatrix;uniform mat4 projectionMatrix;uniform vec3 eyePositionHigh;uniform vec3 eyePositionLow;uniform vec3 uScaleByDistance;uniform float opacity;uniform float planetRadius;uniform vec2 viewport;uniform float depthOffset;const vec3 ZERO3=vec3(0.0);void main(){vec3 a_positions=a_positionsHigh+a_positionsLow;vec3 cameraPos=eyePositionHigh+eyePositionLow;vec3 look=a_positions-cameraPos;float lookDist=length(look);v_rgb=a_rgba.rgb;if(opacity*step(lookDist,sqrt(dot(cameraPos,cameraPos)-planetRadius)+sqrt(dot(a_positions,a_positions)-planetRadius))==0.0){return;}float scd=(1.0-smoothstep(uScaleByDistance[0],uScaleByDistance[1],lookDist))*(1.0-step(uScaleByDistance[2],lookDist));mat4 viewMatrixRTE=viewMatrix;viewMatrixRTE[3]=vec4(0.0,0.0,0.0,1.0);vec3 highDiff=a_positionsHigh-eyePositionHigh;vec3 lowDiff=a_positionsLow-eyePositionLow;vec4 posRTE=viewMatrixRTE*vec4(highDiff+lowDiff,1.0);vec4 projPos=projectionMatrix*posRTE;float camSlope=dot(vec3(viewMatrix[0][2],viewMatrix[1][2],viewMatrix[2][2]),normalize(cameraPos));if(camSlope>0.5){float dist=dot(look,normalize(cameraPos));projPos.z+=dist*0.02;}else{projPos.z+=-(abs(projPos.z))*0.002;}projPos.z+=depthOffset+a_offset.z;vec2 screenPos=project(projPos,viewport);vec2 v=screenPos+rotate2d(a_rotation)*(a_vertices*a_size*scd+a_offset.xy);gl_Position=vec4((2.0*v/viewport-1.0)*projPos.w,projPos.z,projPos.w);}`,fragmentShader:"precision highp float;varying vec3 v_rgb;void main(){gl_FragColor=vec4(v_rgb,1.0);}"})))}setRenderer(e){this._renderer=e,this.initProgram()}refresh(){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]=!0}_removeBillboards(){let e=this._billboards.length;for(;e--;){let t=this._billboards[e];t._handlerIndex=-1,t._handler=null,t._isReady=!1,t._lockId=-1}this._billboards.length=0,this._billboards=[]}clear(){this._texCoordArr=null,this._vertexArr=null,this._positionHighArr=null,this._positionLowArr=null,this._sizeArr=null,this._offsetArr=null,this._rgbaArr=null,this._rotationArr=null,this._pickingColorArr=null,this._texCoordArr=new Float32Array([]),this._vertexArr=new Float32Array([]),this._positionHighArr=new Float32Array([]),this._positionLowArr=new Float32Array([]),this._sizeArr=new Float32Array([]),this._offsetArr=new Float32Array([]),this._rgbaArr=new Float32Array([]),this._rotationArr=new Float32Array([]),this._pickingColorArr=new Float32Array([]),this._removeBillboards(),this._deleteBuffers(),this.refresh()}_deleteBuffers(){if(this._renderer){let e=this._renderer.handler.gl;e.deleteBuffer(this._positionHighBuffer),e.deleteBuffer(this._positionLowBuffer),e.deleteBuffer(this._sizeBuffer),e.deleteBuffer(this._offsetBuffer),e.deleteBuffer(this._rgbaBuffer),e.deleteBuffer(this._rotationBuffer),e.deleteBuffer(this._vertexBuffer),e.deleteBuffer(this._texCoordBuffer),e.deleteBuffer(this._pickingColorBuffer)}this._positionHighBuffer=null,this._positionLowBuffer=null,this._sizeBuffer=null,this._offsetBuffer=null,this._rgbaBuffer=null,this._rotationBuffer=null,this._vertexBuffer=null,this._texCoordBuffer=null,this._pickingColorBuffer=null}update(){if(this._renderer){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]&&(this._buffersUpdateCallbacks[e].call(this),this._changedBuffers[e]=!1)}}add(e){e._handlerIndex==-1&&(e._isReady=!0,e._handler=this,e._handlerIndex=this._billboards.length,this._billboards.push(e))}_displayPASS(){let e=this._renderer,t=e.handler;t.programs.billboard.activate();let i=t.programs.billboard._program,r=i.attributes,s=i.uniforms,n=t.gl,a=this._entityCollection;n.disable(n.CULL_FACE),n.uniform1f(s.depthOffset,a.polygonOffsetUnits),n.uniform1i(s.u_texture,0),n.uniformMatrix4fv(s.viewMatrix,!1,e.activeCamera.getViewMatrix()),n.uniformMatrix4fv(s.projectionMatrix,!1,e.activeCamera.getProjectionMatrix()),n.uniform3fv(s.eyePositionHigh,e.activeCamera.eyeHigh),n.uniform3fv(s.eyePositionLow,e.activeCamera.eyeLow),n.uniform3fv(s.uScaleByDistance,a.scaleByDistance),n.uniform1f(s.opacity,a._fadingOpacity),n.bindBuffer(n.ARRAY_BUFFER,this._texCoordBuffer),n.vertexAttribPointer(r.a_texCoord,this._texCoordBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._vertexBuffer),n.vertexAttribPointer(r.a_vertices,this._vertexBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._positionHighBuffer),n.vertexAttribPointer(r.a_positionsHigh,this._positionHighBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._positionLowBuffer),n.vertexAttribPointer(r.a_positionsLow,this._positionLowBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._rgbaBuffer),n.vertexAttribPointer(r.a_rgba,this._rgbaBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._sizeBuffer),n.vertexAttribPointer(r.a_size,this._sizeBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._offsetBuffer),n.vertexAttribPointer(r.a_offset,this._offsetBuffer.itemSize,n.FLOAT,!1,0,0),n.uniform1f(s.planetRadius,a.renderNode._planetRadius2||0),n.uniform2fv(s.viewport,[t.canvas.clientWidth,t.canvas.clientHeight]),n.bindBuffer(n.ARRAY_BUFFER,this._rotationBuffer),n.vertexAttribPointer(r.a_rotation,this._rotationBuffer.itemSize,n.FLOAT,!1,0,0),n.drawArrays(n.TRIANGLES,0,this._vertexBuffer.numItems),n.enable(n.CULL_FACE)}_pickingPASS(){let e=this._renderer,t=e.handler;t.programs.billboardPicking.activate();let i=t.programs.billboardPicking._program,r=i.attributes,s=i.uniforms,n=t.gl,a=this._entityCollection;n.disable(n.CULL_FACE),n.uniform1f(s.depthOffset,a.polygonOffsetUnits),n.uniformMatrix4fv(s.viewMatrix,!1,e.activeCamera.getViewMatrix()),n.uniformMatrix4fv(s.projectionMatrix,!1,e.activeCamera.getProjectionMatrix()),n.uniform3fv(s.eyePositionHigh,e.activeCamera.eyeHigh),n.uniform3fv(s.eyePositionLow,e.activeCamera.eyeLow),n.uniform3fv(s.uScaleByDistance,a.scaleByDistance),n.uniform1f(s.opacity,a._fadingOpacity),n.bindBuffer(n.ARRAY_BUFFER,this._vertexBuffer),n.vertexAttribPointer(r.a_vertices,this._vertexBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._positionHighBuffer),n.vertexAttribPointer(r.a_positionsHigh,this._positionHighBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._positionLowBuffer),n.vertexAttribPointer(r.a_positionsLow,this._positionLowBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._pickingColorBuffer),n.vertexAttribPointer(r.a_rgba,this._pickingColorBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._sizeBuffer),n.vertexAttribPointer(r.a_size,this._sizeBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,this._offsetBuffer),n.vertexAttribPointer(r.a_offset,this._offsetBuffer.itemSize,n.FLOAT,!1,0,0),n.uniform1f(s.planetRadius,a.renderNode._planetRadius2||0),n.uniform2fv(s.viewport,[t.canvas.clientWidth,t.canvas.clientHeight]),n.bindBuffer(n.ARRAY_BUFFER,this._rotationBuffer),n.vertexAttribPointer(r.a_rotation,this._rotationBuffer.itemSize,n.FLOAT,!1,0,0),n.drawArrays(n.TRIANGLES,0,this._vertexBuffer.numItems),n.enable(n.CULL_FACE)}draw(){this._billboards.length&&(this.update(),this._displayPASS())}drawPicking(){this._billboards.length&&this.pickingEnabled&&this._pickingPASS()}reindexBillboardsArray(e){let t=this._billboards;for(let i=e;i<t.length;i++)t[i]._handlerIndex=i}_removeBillboard(e){let t=e._handlerIndex;this._billboards.splice(t,1);let i=24*t;this._rgbaArr=ce(this._rgbaArr,i,24),i=18*t,this._positionHighArr=ce(this._positionHighArr,i,18),this._positionLowArr=ce(this._positionLowArr,i,18),this._offsetArr=ce(this._offsetArr,i,18),this._pickingColorArr=ce(this._pickingColorArr,i,18),i=12*t,this._vertexArr=ce(this._vertexArr,i,12),this._sizeArr=ce(this._sizeArr,i,12),this._texCoordArr=ce(this._texCoordArr,i,12),i=6*t,this._rotationArr=ce(this._rotationArr,i,6),this.reindexBillboardsArray(t),this.refresh(),e._handlerIndex=-1,e._handler=null,e._isReady=!1,e._lockId=-1}setAlignedAxisArr(e,t){}remove(e){e._handler&&(e._isReady&&this.__id===e._handler.__id?this._removeBillboard(e):e._handler=null)}setPositionArr(e,t,i){let r=18*e,s=this._positionHighArr,n=t.x,a=t.y,l=t.z;s[r]=n,s[r+1]=a,s[r+2]=l,s[r+3]=n,s[r+4]=a,s[r+5]=l,s[r+6]=n,s[r+7]=a,s[r+8]=l,s[r+9]=n,s[r+10]=a,s[r+11]=l,s[r+12]=n,s[r+13]=a,s[r+14]=l,s[r+15]=n,s[r+16]=a,s[r+17]=l,s=this._positionLowArr,n=i.x,a=i.y,l=i.z,s[r]=n,s[r+1]=a,s[r+2]=l,s[r+3]=n,s[r+4]=a,s[r+5]=l,s[r+6]=n,s[r+7]=a,s[r+8]=l,s[r+9]=n,s[r+10]=a,s[r+11]=l,s[r+12]=n,s[r+13]=a,s[r+14]=l,s[r+15]=n,s[r+16]=a,s[r+17]=l,this._changedBuffers[1]=!0}setPickingColorArr(e,t){let i=18*e,r=this._pickingColorArr,s=t.x/255,n=t.y/255,a=t.z/255;r[i]=s,r[i+1]=n,r[i+2]=a,r[i+3]=s,r[i+4]=n,r[i+5]=a,r[i+6]=s,r[i+7]=n,r[i+8]=a,r[i+9]=s,r[i+10]=n,r[i+11]=a,r[i+12]=s,r[i+13]=n,r[i+14]=a,r[i+15]=s,r[i+16]=n,r[i+17]=a,this._changedBuffers[0]=!0}setSizeArr(e,t,i){let r=12*e,s=this._sizeArr,n=t,a=i;s[r]=n,s[r+1]=a,s[r+2]=n,s[r+3]=a,s[r+4]=n,s[r+5]=a,s[r+6]=n,s[r+7]=a,s[r+8]=n,s[r+9]=a,s[r+10]=n,s[r+11]=a,this._changedBuffers[2]=!0}setOffsetArr(e,t){let i=18*e,r=this._offsetArr,s=t.x,n=t.y,a=t.z;r[i]=s,r[i+1]=n,r[i+2]=a,r[i+3]=s,r[i+4]=n,r[i+5]=a,r[i+6]=s,r[i+7]=n,r[i+8]=a,r[i+9]=s,r[i+10]=n,r[i+11]=a,r[i+12]=s,r[i+13]=n,r[i+14]=a,r[i+15]=s,r[i+16]=n,r[i+17]=a,this._changedBuffers[3]=!0}setRgbaArr(e,t){let i=24*e,r=this._rgbaArr,s=t.x,n=t.y,a=t.z,l=t.w;r[i]=s,r[i+1]=n,r[i+2]=a,r[i+3]=l,r[i+4]=s,r[i+5]=n,r[i+6]=a,r[i+7]=l,r[i+8]=s,r[i+9]=n,r[i+10]=a,r[i+11]=l,r[i+12]=s,r[i+13]=n,r[i+14]=a,r[i+15]=l,r[i+16]=s,r[i+17]=n,r[i+18]=a,r[i+19]=l,r[i+20]=s,r[i+21]=n,r[i+22]=a,r[i+23]=l,this._changedBuffers[4]=!0}setRotationArr(e,t){let i=6*e,r=this._rotationArr;r[i]=t,r[i+1]=t,r[i+2]=t,r[i+3]=t,r[i+4]=t,r[i+5]=t,this._changedBuffers[5]=!0}setTexCoordArr(e,t){let i=12*e,r=this._texCoordArr;r[i]=t[0],r[i+1]=t[1],r[i+2]=t[2],r[i+3]=t[3],r[i+4]=t[4],r[i+5]=t[5],r[i+6]=t[6],r[i+7]=t[7],r[i+8]=t[8],r[i+9]=t[9],r[i+10]=t[10],r[i+11]=t[11],this._changedBuffers[6]=!0}setVisibility(e,t){let i;i=t?[-.5,.5,-.5,-.5,.5,-.5,.5,-.5,.5,.5,-.5,.5]:[0,0,0,0,0,0,0,0,0,0,0,0],this.setVertexArr(e,i)}setVertexArr(e,t){let i=12*e,r=this._vertexArr;r[i]=t[0],r[i+1]=t[1],r[i+2]=t[2],r[i+3]=t[3],r[i+4]=t[4],r[i+5]=t[5],r[i+6]=t[6],r[i+7]=t[7],r[i+8]=t[8],r[i+9]=t[9],r[i+10]=t[10],r[i+11]=t[11],this._changedBuffers[7]=!0}createPositionBuffer(){let e=this._renderer.handler,t=this._positionHighArr.length/3;this._positionHighBuffer&&this._positionHighBuffer.numItems===t||(e.gl.deleteBuffer(this._positionHighBuffer),e.gl.deleteBuffer(this._positionLowBuffer),this._positionHighBuffer=e.createStreamArrayBuffer(3,t),this._positionLowBuffer=e.createStreamArrayBuffer(3,t)),e.setStreamArrayBuffer(this._positionHighBuffer,this._positionHighArr),e.setStreamArrayBuffer(this._positionLowBuffer,this._positionLowArr)}createSizeBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._sizeBuffer),this._sizeBuffer=e.createArrayBuffer(this._sizeArr,2,this._sizeArr.length/2)}createOffsetBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._offsetBuffer),this._offsetBuffer=e.createArrayBuffer(this._offsetArr,3,this._offsetArr.length/3)}createRgbaBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._rgbaBuffer),this._rgbaBuffer=e.createArrayBuffer(this._rgbaArr,4,this._rgbaArr.length/4)}createRotationBuffer(){let e=this._renderer.handler;this._rotationBuffer&&this._rotationBuffer.numItems===this._rotationArr.length||(e.gl.deleteBuffer(this._rotationBuffer),this._rotationBuffer=e.createStreamArrayBuffer(1,this._rotationArr.length)),e.setStreamArrayBuffer(this._rotationBuffer,this._rotationArr)}createVertexBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._vertexBuffer),this._vertexBuffer=e.createArrayBuffer(this._vertexArr,2,this._vertexArr.length/2)}createTexCoordBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._texCoordBuffer),this._texCoordBuffer=e.createArrayBuffer(this._texCoordArr,2,this._texCoordArr.length/2)}createPickingColorBuffer(){let e=this._renderer.handler;e.gl.deleteBuffer(this._pickingColorBuffer),this._pickingColorBuffer=e.createArrayBuffer(this._pickingColorArr,3,this._pickingColorArr.length/3)}refreshTexCoordsArr(){}};kn.__counter__=0;let In=kn;class Jl extends In{constructor(e){super(e),this._billboards=[]}add(e){if(e._handlerIndex==-1){super.add(e),this._addBillboardToArrays(e),this.refresh();let t=e.getSrc()||e.getImage()&&e.getImage().src;t&&e.setSrc(t)}}_addBillboardToArrays(e){e.getVisibility()?this._vertexArr=oe(this._vertexArr,[-.5,.5,-.5,-.5,.5,-.5,.5,-.5,.5,.5,-.5,.5]):this._vertexArr=oe(this._vertexArr,[0,0,0,0,0,0,0,0,0,0,0,0]),this._texCoordArr=oe(this._texCoordArr,[0,0,0,0,0,0,0,0,0,0,0,0]);let t,i=e._positionHigh.x,r=e._positionHigh.y,s=e._positionHigh.z;this._positionHighArr=oe(this._positionHighArr,[i,r,s,i,r,s,i,r,s,i,r,s,i,r,s,i,r,s]),i=e._positionLow.x,r=e._positionLow.y,s=e._positionLow.z,this._positionLowArr=oe(this._positionLowArr,[i,r,s,i,r,s,i,r,s,i,r,s,i,r,s,i,r,s]),i=e._width,r=e._height,this._sizeArr=oe(this._sizeArr,[i,r,i,r,i,r,i,r,i,r,i,r]),i=e._offset.x,r=e._offset.y,s=e._offset.z,this._offsetArr=oe(this._offsetArr,[i,r,s,i,r,s,i,r,s,i,r,s,i,r,s,i,r,s]),i=e._color.x,r=e._color.y,s=e._color.z,t=e._color.w,this._rgbaArr=oe(this._rgbaArr,[i,r,s,t,i,r,s,t,i,r,s,t,i,r,s,t,i,r,s,t,i,r,s,t]),i=e._rotation,this._rotationArr=oe(this._rotationArr,[i,i,i,i,i,i]),i=e._entity._pickingColor.x/255,r=e._entity._pickingColor.y/255,s=e._entity._pickingColor.z/255,this._pickingColorArr=oe(this._pickingColorArr,[i,r,s,i,r,s,i,r,s,i,r,s,i,r,s,i,r,s])}get billboards(){return this._billboards}refreshTexCoordsArr(){if(this._entityCollection&&this._renderer){let e=this._renderer.billboardsTextureAtlas;for(let t=0;t<this._billboards.length;t++){let i=this._billboards[t],r=i.getImage();if(r){let s=e.get(r.__nodeIndex);s&&this.setTexCoordArr(i._handlerIndex,s.texCoords)}}}}}class eh{constructor(e){this.isFree=!0,this._geoObjectHandler=e,this.geoObjects=[],this.numInstances=0,this._colorTexture=null,this._colorTextureSrc=null,this._colorTextureImage=null,this._normalTexture=null,this._normalTextureSrc=null,this._normalTextureImage=null,this._metallicRoughnessTexture=null,this._metallicRoughnessTextureSrc=null,this._metallicRoughnessTextureImage=null,this._sizeArr=[],this._translateArr=[],this._vertexArr=[],this._rtcPositionHighArr=[],this._rtcPositionLowArr=[],this._qRotArr=[],this._rgbaArr=[],this._normalsArr=[],this._indicesArr=[],this._pickingColorArr=[],this._visibleArr=[],this._texCoordArr=[],this._localPositionArr=[],this._sizeBuffer=null,this._translateBuffer=null,this._vertexBuffer=null,this._rtcPositionHighBuffer=null,this._rtcPositionLowBuffer=null,this._qRotBuffer=null,this._rgbaBuffer=null,this._normalsBuffer=null,this._indicesBuffer=null,this._pickingColorBuffer=null,this._visibleBuffer=null,this._texCoordBuffer=null,this._localPositionBuffer=null,this._materialParams=new Float32Array(9),this._materialShininess=0,this._buffersUpdateCallbacks=[],this._buffersUpdateCallbacks[Un]=this.createPickingColorBuffer,this._buffersUpdateCallbacks[On]=this.createNormalsBuffer,this._buffersUpdateCallbacks[Fn]=this.createRgbaBuffer,this._buffersUpdateCallbacks[Nn]=this.createIndicesBuffer,this._buffersUpdateCallbacks[zn]=this.createVertexBuffer,this._buffersUpdateCallbacks[Vn]=this.createSizeBuffer,this._buffersUpdateCallbacks[Gn]=this.createVisibleBuffer,this._buffersUpdateCallbacks[jn]=this.createTexCoordBuffer,this._buffersUpdateCallbacks[Hn]=this.createQRotBuffer,this._buffersUpdateCallbacks[qn]=this.createTranslateBuffer,this._buffersUpdateCallbacks[Dn]=this.createRTCPositionBuffer,this._buffersUpdateCallbacks[Yn]=this.createLocalPositionBuffer,this._changedBuffers=new Array(this._buffersUpdateCallbacks.length)}setMaterialAmbient(e,t,i){this._materialParams[0]=e,this._materialParams[1]=t,this._materialParams[2]=i}setMaterialDiffuse(e,t,i){this._materialParams[3]=e,this._materialParams[4]=t,this._materialParams[5]=i}setMaterialSpecular(e,t,i){this._materialParams[6]=e,this._materialParams[7]=t,this._materialParams[8]=i}setMaterialShininess(e){this._materialShininess=e}setMaterialParams(e,t,i,r){this.setMaterialAmbient(e[0],e[1],e[2]),this.setMaterialDiffuse(t[0],t[1],t[2]),this.setMaterialSpecular(i[0],i[1],i[2]),this.setMaterialShininess(r)}drawOpaque(e){let t=e.gl,i=e.uniforms,r=e.attributes;t.bindBuffer(t.ARRAY_BUFFER,this._qRotBuffer),t.vertexAttribPointer(r.qRot,this._qRotBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._sizeBuffer),t.vertexAttribPointer(r.aScale,this._sizeBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._translateBuffer),t.vertexAttribPointer(r.aTranslate,this._translateBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._localPositionBuffer),t.vertexAttribPointer(r.aLocalPosition,this._localPositionBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._visibleBuffer),t.vertexAttribPointer(r.aDispose,this._visibleBuffer.itemSize,t.FLOAT,!1,0,0),t.uniform1f(i.uUseTexture,this._colorTexture?1:0),t.bindBuffer(t.ARRAY_BUFFER,this._rgbaBuffer),t.vertexAttribPointer(r.aColor,this._rgbaBuffer.itemSize,t.FLOAT,!1,0,0),t.uniform3fv(i.materialParams,this._materialParams),t.uniform1f(i.materialShininess,this._materialShininess),this._drawElementsInstanced(e)}drawTransparent(e){let t=e.gl,i=e.uniforms,r=e.attributes;t.bindBuffer(t.ARRAY_BUFFER,this._qRotBuffer),t.vertexAttribPointer(r.qRot,this._qRotBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._sizeBuffer),t.vertexAttribPointer(r.aScale,this._sizeBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._translateBuffer),t.vertexAttribPointer(r.aTranslate,this._translateBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._localPositionBuffer),t.vertexAttribPointer(r.aLocalPosition,this._localPositionBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._visibleBuffer),t.vertexAttribPointer(r.aDispose,this._visibleBuffer.itemSize,t.FLOAT,!1,0,0),t.uniform1f(i.uUseTexture,this._colorTexture?1:0),t.uniform3fv(i.materialParams,this._materialParams),t.uniform1f(i.materialShininess,this._materialShininess),t.bindBuffer(t.ARRAY_BUFFER,this._rgbaBuffer),t.vertexAttribPointer(r.aColor,this._rgbaBuffer.itemSize,t.FLOAT,!1,0,0),this._drawElementsInstanced(e)}_drawElementsInstanced(e){let t=e.gl,i=e.uniforms,r=e.attributes,s=this._geoObjectHandler._renderer;t.bindBuffer(t.ARRAY_BUFFER,this._rtcPositionHighBuffer),t.vertexAttribPointer(r.aRTCPositionHigh,this._rtcPositionHighBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._rtcPositionLowBuffer),t.vertexAttribPointer(r.aRTCPositionLow,this._rtcPositionLowBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._normalsBuffer),t.vertexAttribPointer(r.aVertexNormal,this._normalsBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,this._vertexBuffer),t.vertexAttribPointer(r.aVertexPosition,this._vertexBuffer.itemSize,t.FLOAT,!1,0,0),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,this._colorTexture||s.handler.defaultTexture),t.uniform1i(i.uTexture,0),t.bindBuffer(t.ARRAY_BUFFER,this._texCoordBuffer),t.vertexAttribPointer(r.aTexCoord,this._texCoordBuffer.itemSize,t.FLOAT,!1,0,0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this._indicesBuffer),e.drawElementsInstanced(t.TRIANGLES,this._indicesBuffer.numItems,t.UNSIGNED_INT,0,this.numInstances)}async loadColorTexture(){if(this._geoObjectHandler._renderer){if(!this._colorTextureSrc)return this._colorTextureImage?(await this._colorTextureImage.decode(),void this._createColorTexture(this._colorTextureImage)):void 0;{const e=await Gi(this._colorTextureSrc);this._createColorTexture(e)}}}async loadNormalTexture(){if(this._geoObjectHandler._renderer){if(!this._normalTextureSrc)return this._normalTextureImage?(await this._normalTextureImage.decode(),void this._createNormalTexture(this._normalTextureImage)):void 0;{const e=await Gi(this._normalTextureSrc);this._createNormalTexture(e)}}}async loadMetallicRoughnessTexture(){if(this._geoObjectHandler._renderer){if(!this._metallicRoughnessTextureSrc)return this._metallicRoughnessTextureImage?(await this._metallicRoughnessTextureImage.decode(),void this._createMetallicRoughnessTexture(this._metallicRoughnessTextureImage)):void 0;{const e=await Gi(this._metallicRoughnessTextureSrc);this._createMetallicRoughnessTexture(e)}}}clear(){this.numInstances=0,this.geoObjects=[],this._sizeArr=[],this._translateArr=[],this._vertexArr=[],this._rtcPositionHighArr=[],this._rtcPositionLowArr=[],this._qRotArr=[],this._rgbaArr=[],this._normalsArr=[],this._indicesArr=[],this._pickingColorArr=[],this._visibleArr=[],this._texCoordArr=[],this._localPositionArr=[],this._deleteBuffers(),this.isFree=!1}_deleteBuffers(){if(this._geoObjectHandler&&this._geoObjectHandler._renderer){let e=this._geoObjectHandler._renderer.handler,t=e.gl;e.deleteTexture(this._colorTexture),e.deleteTexture(this._normalTexture),e.deleteTexture(this._metallicRoughnessTexture),this._colorTexture=null,this._normalTexture=null,this._metallicRoughnessTexture=null,t&&(t.deleteBuffer(this._sizeBuffer),t.deleteBuffer(this._translateBuffer),t.deleteBuffer(this._vertexBuffer),t.deleteBuffer(this._rtcPositionHighBuffer),t.deleteBuffer(this._rtcPositionLowBuffer),t.deleteBuffer(this._qRotBuffer),t.deleteBuffer(this._rgbaBuffer),t.deleteBuffer(this._normalsBuffer),t.deleteBuffer(this._indicesBuffer),t.deleteBuffer(this._pickingColorBuffer),t.deleteBuffer(this._visibleBuffer),t.deleteBuffer(this._texCoordBuffer),t.deleteBuffer(this._localPositionBuffer))}this._sizeBuffer=null,this._translateBuffer=null,this._vertexBuffer=null,this._rtcPositionHighBuffer=null,this._rtcPositionLowBuffer=null,this._qRotBuffer=null,this._rgbaBuffer=null,this._normalsBuffer=null,this._indicesBuffer=null,this._pickingColorBuffer=null,this._visibleBuffer=null,this._texCoordBuffer=null,this._localPositionBuffer=null}createVertexBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._vertexBuffer),this._vertexArr=se(this._vertexArr),this._vertexBuffer=e.createArrayBuffer(this._vertexArr,3,this._vertexArr.length/3)}createVisibleBuffer(){const e=this._geoObjectHandler._renderer.handler,t=this._visibleArr.length;this._visibleBuffer&&this._visibleBuffer.numItems===t||(e.gl.deleteBuffer(this._visibleBuffer),this._visibleBuffer=e.createStreamArrayBuffer(1,t)),this._visibleArr=se(this._visibleArr),e.setStreamArrayBuffer(this._visibleBuffer,this._visibleArr)}createSizeBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._sizeArr.length/3;this._sizeBuffer&&this._sizeBuffer.numItems===t||(e.gl.deleteBuffer(this._sizeBuffer),this._sizeBuffer=e.createStreamArrayBuffer(3,t)),this._sizeArr=se(this._sizeArr),e.setStreamArrayBuffer(this._sizeBuffer,this._sizeArr)}createTranslateBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._translateArr.length/3;this._translateBuffer&&this._translateBuffer.numItems===t||(e.gl.deleteBuffer(this._translateBuffer),this._translateBuffer=e.createStreamArrayBuffer(3,t)),this._translateArr=se(this._translateArr),e.setStreamArrayBuffer(this._translateBuffer,this._translateArr)}createLocalPositionBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._localPositionArr.length/3;this._localPositionBuffer&&this._localPositionBuffer.numItems===t||(e.gl.deleteBuffer(this._localPositionBuffer),this._localPositionBuffer=e.createStreamArrayBuffer(3,t)),this._localPositionArr=se(this._localPositionArr),e.setStreamArrayBuffer(this._localPositionBuffer,this._localPositionArr)}createTexCoordBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._texCoordBuffer),this._texCoordArr=se(this._texCoordArr),this._texCoordBuffer=e.createArrayBuffer(this._texCoordArr,2,this._texCoordArr.length/2)}createRTCPositionBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._rtcPositionHighArr.length/3;this._rtcPositionHighBuffer&&this._rtcPositionHighBuffer.numItems===t||(e.gl.deleteBuffer(this._rtcPositionHighBuffer),e.gl.deleteBuffer(this._rtcPositionLowBuffer),this._rtcPositionHighBuffer=e.createStreamArrayBuffer(3,t),this._rtcPositionLowBuffer=e.createStreamArrayBuffer(3,t)),this._rtcPositionHighArr=se(this._rtcPositionHighArr),this._rtcPositionLowArr=se(this._rtcPositionLowArr),e.setStreamArrayBuffer(this._rtcPositionHighBuffer,this._rtcPositionHighArr),e.setStreamArrayBuffer(this._rtcPositionLowBuffer,this._rtcPositionLowArr)}createRgbaBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._rgbaArr.length/4;this._rgbaBuffer&&this._rgbaBuffer.numItems===t||(e.gl.deleteBuffer(this._rgbaBuffer),this._rgbaBuffer=e.createStreamArrayBuffer(4,t)),this._rgbaArr=se(this._rgbaArr),e.setStreamArrayBuffer(this._rgbaBuffer,this._rgbaArr)}createQRotBuffer(){let e=this._geoObjectHandler._renderer.handler,t=this._qRotArr.length/4;this._qRotBuffer&&this._qRotBuffer.numItems===t||(e.gl.deleteBuffer(this._qRotBuffer),this._qRotBuffer=e.createStreamArrayBuffer(4,t)),this._qRotArr=se(this._qRotArr),e.setStreamArrayBuffer(this._qRotBuffer,this._qRotArr)}createNormalsBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._normalsBuffer),this._normalsArr=se(this._normalsArr),this._normalsBuffer=e.createArrayBuffer(this._normalsArr,3,this._normalsArr.length/3)}createIndicesBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._indicesBuffer),this._indicesArr=se(this._indicesArr,Uint32Array),this._indicesBuffer=e.createElementArrayBuffer(this._indicesArr,1,this._indicesArr.length)}createPickingColorBuffer(){const e=this._geoObjectHandler._renderer.handler;e.gl.deleteBuffer(this._pickingColorBuffer),this._pickingColorArr=se(this._pickingColorArr),this._pickingColorBuffer=e.createArrayBuffer(this._pickingColorArr,3,this._pickingColorArr.length/3)}refresh(){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]=!0}update(){if(this._geoObjectHandler._renderer){let e=this._changedBuffers.length;for(;e--;)this._changedBuffers[e]&&(this._buffersUpdateCallbacks[e].call(this),this._changedBuffers[e]=!1);this.isFree=!0}}_createColorTexture(e){if(this._geoObjectHandler&&this._geoObjectHandler._renderer){let t=this._geoObjectHandler._renderer.handler;this._colorTexture=t.createTextureDefault(e,null,t.gl.REPEAT)}}_createNormalTexture(e){if(this._geoObjectHandler&&this._geoObjectHandler._renderer){let t=this._geoObjectHandler._renderer.handler;this._normalTexture=t.createTextureDefault(e,null,t.gl.REPEAT)}}_createMetallicRoughnessTexture(e){if(this._geoObjectHandler&&this._geoObjectHandler._renderer){let t=this._geoObjectHandler._renderer.handler;this._metallicRoughnessTexture=t.createTextureDefault(e,null,t.gl.REPEAT)}}}const zn=0,Dn=1,Fn=2,On=3,Nn=4,Hn=5,Vn=6,Un=7,Gn=8,jn=9,qn=10,Yn=11;function Se(o,e=0,t=0,i=1,...r){const s=e*t;for(let n=s,a=s+t;n<a;n++)o[n]=r[n%i];return o}const Wn=class _l{constructor(e){this.__id=_l.__counter__++,this.pickingEnabled=!0,this._entityCollection=e,this._renderNode=null,this._renderer=null,this._geoObjects=[],this._instanceDataMap=new Map,this._instanceDataMapValues=[],this._dataTagUpdateQueue=[],this._relativeCenter=new m,this._rtcEyePositionHigh=new Float32Array([0,0,0]),this._rtcEyePositionLow=new Float32Array([0,0,0])}initProgram(){this._renderer&&(this._renderer.handler.programs.geo_object||this._renderer.handler.addProgram(new X("geo_object",{uniforms:{viewMatrix:"mat4",projectionMatrix:"mat4",uScaleByDistance:"vec3",eyePositionHigh:"vec3",eyePositionLow:"vec3",rtcEyePositionHigh:"vec3",rtcEyePositionLow:"vec3",sunPosition:"vec3",materialParams:"vec3",materialShininess:"float",uTexture:"sampler2d",uUseTexture:"float",useLighting:"float"},attributes:{aVertexPosition:"vec3",aVertexNormal:"vec3",aTexCoord:"vec2",aLocalPosition:{type:"vec3",divisor:1},aRTCPositionHigh:{type:"vec3",divisor:1},aRTCPositionLow:{type:"vec3",divisor:1},aColor:{type:"vec4",divisor:1},aScale:{type:"vec3",divisor:1},aTranslate:{type:"vec3",divisor:1},aDispose:{type:"float",divisor:1},qRot:{type:"vec4",divisor:1}},vertexShader:"precision highp float;vec3 qRotate(vec4 q,vec3 v){return v+2.0*cross(q.xyz,cross(q.xyz,v)+q.w*v);}attribute vec3 aVertexPosition;attribute vec3 aVertexNormal;attribute vec3 aRTCPositionHigh;attribute vec3 aRTCPositionLow;attribute vec4 aColor;attribute vec3 aScale;attribute vec3 aTranslate;attribute float aDispose;attribute float aUseTexture;attribute vec2 aTexCoord;attribute vec4 qRot;attribute vec3 aLocalPosition;uniform vec3 uScaleByDistance;uniform mat4 projectionMatrix;uniform mat4 viewMatrix;uniform vec3 eyePositionHigh;uniform vec3 eyePositionLow;uniform vec3 rtcEyePositionHigh;uniform vec3 rtcEyePositionLow;varying vec3 cameraPosition;varying vec3 vNormal;varying vec3 v_vertex;varying vec4 vColor;varying float vDispose;varying vec2 vTexCoords;void main(void){if(aDispose==0.0){return;}vColor=aColor;vTexCoords=aTexCoord;mat4 viewMatrixRTE=viewMatrix;viewMatrixRTE[3]=vec4(0.0,0.0,0.0,1.0);vec3 highDiff=aRTCPositionHigh-rtcEyePositionHigh;vec3 lowDiff=aRTCPositionLow-rtcEyePositionLow;cameraPosition=eyePositionHigh+eyePositionLow;highDiff=highDiff*step(1.0,length(highDiff));vec4 positionInViewSpace=viewMatrixRTE*vec4(highDiff+lowDiff,1.0);float lookLength=length(positionInViewSpace.xyz);vNormal=normalize(qRotate(qRot,aVertexNormal));float scd=uScaleByDistance[2]*clamp(lookLength,uScaleByDistance[0],uScaleByDistance[1])/uScaleByDistance[0];vec3 vert=qRotate(qRot,scd*(aVertexPosition*aScale+aTranslate))+scd*aLocalPosition;gl_Position=projectionMatrix*viewMatrixRTE*vec4(highDiff+lowDiff+vert,1.0);v_vertex=positionInViewSpace.xyz+vert;}",fragmentShader:"precision highp float;uniform vec3 sunPosition;uniform vec3 materialParams[3];uniform float materialShininess;uniform sampler2D uTexture;uniform float uUseTexture;uniform float useLighting;varying vec3 cameraPosition;varying vec3 v_vertex;varying vec4 vColor;varying vec3 vNormal;varying vec2 vTexCoords;void main(void){vec3 lightWeighting=vec3(1.0);if(useLighting!=0.0){vec3 normal=normalize(vNormal);vec3 light_dir=normalize(sunPosition);vec3 look_dir=normalize(cameraPosition-v_vertex);float diffuse=max(dot(normal,light_dir),0.0);vec3 refl_dir=reflect(-light_dir,normal);float refl=max(dot(refl_dir,look_dir),0.0);float specular=pow(refl,materialShininess)*step(1e-4,diffuse);lightWeighting=vColor.rgb*materialParams[0]+materialParams[1]*diffuse+materialParams[2]*specular;}else{lightWeighting=vColor.rgb;}if(uUseTexture>0.0){vec4 texColor=texture2D(uTexture,vTexCoords);gl_FragColor=vec4(texColor.rgb*lightWeighting,texColor.a);}else{gl_FragColor=vec4(lightWeighting,vColor.a);}}"})),this._renderer.handler.programs.geo_object_picking||this._renderer.handler.addProgram(new X("geo_object_picking",{uniforms:{viewMatrix:"mat4",projectionMatrix:"mat4",uScaleByDistance:"vec3",pickingScale:"vec3",rtcEyePositionHigh:"vec3",rtcEyePositionLow:"vec3"},attributes:{aVertexPosition:"vec3",aRTCPositionHigh:{type:"vec3",divisor:1},aRTCPositionLow:{type:"vec3",divisor:1},aPickingColor:{type:"vec3",divisor:1},aScale:{type:"vec3",divisor:1},aTranslate:{type:"vec3",divisor:1},aLocalPosition:{type:"vec3",divisor:1},aDispose:{type:"float",divisor:1},qRot:{type:"vec4",divisor:1}},vertexShader:"precision highp float;vec3 qRotate(vec4 q,vec3 v){return v+2.0*cross(q.xyz,cross(q.xyz,v)+q.w*v);}attribute vec3 aVertexPosition;attribute vec3 aRTCPositionHigh;attribute vec3 aRTCPositionLow;attribute vec3 aPickingColor;attribute vec3 aScale;attribute vec3 aTranslate;attribute float aDispose;attribute vec4 qRot;attribute vec3 aLocalPosition;uniform vec3 rtcEyePositionHigh;uniform vec3 rtcEyePositionLow;uniform vec3 uScaleByDistance;uniform mat4 projectionMatrix;uniform mat4 viewMatrix;uniform vec3 pickingScale;varying vec3 vColor;void main(void){if(aDispose==0.0){return;}vColor=aPickingColor;mat4 viewMatrixRTE=viewMatrix;viewMatrixRTE[3]=vec4(0.0,0.0,0.0,1.0);vec3 highDiff=aRTCPositionHigh-rtcEyePositionHigh;vec3 lowDiff=aRTCPositionLow-rtcEyePositionLow;highDiff=highDiff*step(1.0,length(highDiff));vec4 positionInViewSpace=viewMatrixRTE*vec4(highDiff+lowDiff,1.0);float lookLength=length(positionInViewSpace.xyz);float scd=uScaleByDistance[2]*clamp(lookLength,uScaleByDistance[0],uScaleByDistance[1])/uScaleByDistance[0];vec3 vert=qRotate(qRot,scd*pickingScale*(aVertexPosition*aScale+aTranslate))+scd*aLocalPosition;gl_Position=projectionMatrix*viewMatrixRTE*vec4(highDiff+lowDiff+vert,1.0);}",fragmentShader:"precision highp float;varying vec3 vColor;void main(){gl_FragColor=vec4(vColor,1.0);}"})),this._renderer.handler.programs.geo_object_depth||this._renderer.handler.addProgram(new X("geo_object_depth",{uniforms:{viewMatrix:"mat4",projectionMatrix:"mat4",uScaleByDistance:"vec3",rtcEyePositionHigh:"vec3",rtcEyePositionLow:"vec3",frustumPickingColor:"float"},attributes:{aVertexPosition:"vec3",aRTCPositionHigh:{type:"vec3",divisor:1},aRTCPositionLow:{type:"vec3",divisor:1},aScale:{type:"vec3",divisor:1},aTranslate:{type:"vec3",divisor:1},aDispose:{type:"float",divisor:1},qRot:{type:"vec4",divisor:1},aLocalPosition:{type:"vec3",divisor:1}},vertexShader:`#version 300 es
|
|
101
101
|
precision highp float;vec3 qRotate(vec4 q,vec3 v){return v+2.0*cross(q.xyz,cross(q.xyz,v)+q.w*v);}in vec3 aVertexPosition;in vec3 aRTCPositionHigh;in vec3 aRTCPositionLow;in vec3 aScale;in vec3 aTranslate;in float aDispose;in vec4 qRot;in vec3 aLocalPosition;uniform vec3 rtcEyePositionHigh;uniform vec3 rtcEyePositionLow;uniform vec3 uScaleByDistance;uniform mat4 projectionMatrix;uniform mat4 viewMatrix;void main(void){if(aDispose==0.0){return;}mat4 viewMatrixRTE=viewMatrix;viewMatrixRTE[3]=vec4(0.0,0.0,0.0,1.0);vec3 highDiff=aRTCPositionHigh-rtcEyePositionHigh;vec3 lowDiff=aRTCPositionLow-rtcEyePositionLow;highDiff=highDiff*step(1.0,length(highDiff));vec4 positionInViewSpace=viewMatrixRTE*vec4(highDiff+lowDiff,1.0);float lookLength=length(positionInViewSpace.xyz);float scd=uScaleByDistance[2]*clamp(lookLength,uScaleByDistance[0],uScaleByDistance[1])/uScaleByDistance[0];vec3 vert=qRotate(qRot,scd*(aVertexPosition*aScale+aTranslate))+scd*aLocalPosition;gl_Position=projectionMatrix*viewMatrixRTE*vec4(highDiff+lowDiff+vert,1.0);}`,fragmentShader:`#version 300 es
|
|
102
102
|
precision highp float;uniform float frustumPickingColor;layout(location=0)out vec4 frustumColor;layout(location=1)out vec4 depthColor;void main(){frustumColor=vec4(frustumPickingColor,frustumPickingColor,frustumPickingColor,1.0);depthColor=vec4(gl_FragCoord.z,gl_FragCoord.z,gl_FragCoord.z,1.0);}`})))}setRenderNode(e){this._renderNode=e,this._renderer=e.renderer,this.initProgram();for(let t=0;t<this._instanceDataMapValues.length;t++)this._instanceDataMapValues[t].loadColorTexture(),this._instanceDataMapValues[t].loadNormalTexture(),this._instanceDataMapValues[t].loadMetallicRoughnessTexture();for(let t=0;t<this._geoObjects.length;t++)this._geoObjects[t].updateRotation();this.update()}setColorTextureTag(e,t){const i=this._instanceDataMap.get(t);i&&(typeof e=="string"&&(i._colorTextureSrc=e,i._colorTextureImage=null),e instanceof HTMLImageElement&&(i._colorTextureSrc=null,i._colorTextureImage=e),this._instanceDataMap.set(t,i),i.loadColorTexture())}setNormalTextureTag(e,t){const i=this._instanceDataMap.get(t);i&&(typeof e=="string"&&(i._normalTextureSrc=e,i._normalTextureImage=null),e instanceof HTMLImageElement&&(i._normalTextureSrc=null,i._normalTextureImage=e),this._instanceDataMap.set(t,i),i.loadNormalTexture())}setMetallicRoughnessTextureTag(e,t){const i=this._instanceDataMap.get(t);i&&(typeof e=="string"&&(i._metallicRoughnessTextureSrc=e,i._metallicRoughnessTextureImage=null),e instanceof HTMLImageElement&&(i._metallicRoughnessTextureSrc=null,i._metallicRoughnessTextureImage=e),this._instanceDataMap.set(t,i),i.loadMetallicRoughnessTexture())}setObjectSrc(e,t){const i=this._instanceDataMap.get(t);e&&i&&i._objectSrc!==e&&(i._objectSrc=e,$.loadObj(e).then((r=>{this._updateInstanceData(r[0],t)})))}_updateInstanceData(e,t){const i=this._instanceDataMap.get(t);i&&(e.vertices.length!==i._vertexArr.length&&(i._vertexArr=e.vertices,i._changedBuffers[zn]=!0),e.normals.length!==i._normalsArr.length&&(i._normalsArr=e.normals,i._changedBuffers[On]=!0),e.indices.length!==i._indicesArr.length&&(i._indicesArr=e.indices,i._changedBuffers[Nn]=!0),e.texCoords.length!==i._texCoordArr.length&&(i._texCoordArr=e.texCoords,i._changedBuffers[jn]=!0),i._colorTextureSrc=e.colorTextureSrc,i._normalTextureSrc=e.normalTextureSrc,i._metallicRoughnessTexture=e.metallicRoughnessTextureSrc,i._colorTextureImage=e.colorTextureImage,i._normalTextureImage=e.normalTextureImage,i._metallicRoughnessTextureImage=e.metallicRoughnessTextureImage,i.loadColorTexture(),i.loadNormalTexture(),i.loadMetallicRoughnessTexture(),this._updateTag(i),this._instanceDataMapValues=Array.from(this._instanceDataMap.values()))}_addGeoObjectToArray(e){const t=e.tag;let i=this._instanceDataMap.get(t);i||(i=new eh(this),this._instanceDataMap.set(t,i),this._instanceDataMapValues=Array.from(this._instanceDataMap.values()),i._vertexArr=e.vertices,i._normalsArr=e.normals,i._indicesArr=e.indices,i._texCoordArr=e.texCoords,i._colorTextureSrc=e.object3d.colorTextureSrc,i._normalTextureSrc=e.object3d.normalTextureSrc,i._metallicRoughnessTextureSrc=e.object3d.metallicRoughnessTextureSrc,i._colorTextureImage=e.object3d.colorTextureImage,i._normalTextureImage=e.object3d.normalTextureImage,i._metallicRoughnessTextureImage=e.object3d.metallicRoughnessTextureImage,i.setMaterialParams(e.object3d.ambient,e.object3d.diffuse,e.object3d.specular,e.object3d.shininess),i.loadColorTexture(),i.loadNormalTexture(),i.loadMetallicRoughnessTexture()),e._tagDataIndex=i.numInstances++,e._tagData=i,i.geoObjects.push(e);let r=3;i._visibleArr=we(i._visibleArr,Se([],0,1,1,e.getVisibility()?1:0)),this.getRTCPosition(e.getPosition(),e._rtcPositionHigh,e._rtcPositionLow);let s,n=e._rtcPositionHigh.x,a=e._rtcPositionHigh.y,l=e._rtcPositionHigh.z;i._rtcPositionHighArr=we(i._rtcPositionHighArr,Se([],0,r,r,n,a,l)),n=e._rtcPositionLow.x,a=e._rtcPositionLow.y,l=e._rtcPositionLow.z,i._rtcPositionLowArr=we(i._rtcPositionLowArr,Se([],0,r,r,n,a,l)),n=e._entity._pickingColor.x/255,a=e._entity._pickingColor.y/255,l=e._entity._pickingColor.z/255,i._pickingColorArr=we(i._pickingColorArr,Se([],0,r,r,n,a,l)),r=4,n=e._qRot.x,a=e._qRot.y,l=e._qRot.z,s=e._qRot.w,i._qRotArr=we(i._qRotArr,Se([],0,r,r,n,a,l,s)),n=e._color.x,a=e._color.y,l=e._color.z,s=e._color.w,i._rgbaArr=we(i._rgbaArr,Se([],0,r,r,n,a,l,s)),r=3;let h=e.getScale();n=h.x,a=h.y,l=h.z,i._sizeArr=we(i._sizeArr,Se([],0,r,r,n,a,l));let c=e.getTranslate();n=c.x,a=c.y,l=c.z,i._translateArr=we(i._translateArr,Se([],0,r,r,n,a,l));let d=e.getLocalPosition();n=d.x,a=d.y,l=d.z,i._localPositionArr=we(i._localPositionArr,Se([],0,r,r,n,a,l))}_bindCommon(){let e=this._renderer,t=e.handler.programs.geo_object._program.uniforms,i=e.handler.gl,r=this._entityCollection;i.uniform3fv(t.uScaleByDistance,r.scaleByDistance),i.uniform1f(t.useLighting,r._useLighting),i.uniform3fv(t.eyePositionHigh,e.activeCamera.eyeHigh),i.uniform3fv(t.eyePositionLow,e.activeCamera.eyeLow),i.uniform3fv(t.rtcEyePositionHigh,this._rtcEyePositionHigh),i.uniform3fv(t.rtcEyePositionLow,this._rtcEyePositionLow),i.uniformMatrix4fv(t.projectionMatrix,!1,e.activeCamera.getProjectionMatrix()),i.uniformMatrix4fv(t.viewMatrix,!1,e.activeCamera.getViewMatrix()),i.uniform3fv(t.sunPosition,this._renderNode._lightPosition)}_displayOpaquePASS(){let e=this._renderer.handler.programs.geo_object,t=e._program;e.activate(),this._bindCommon();for(let i=0;i<this._instanceDataMapValues.length;i++)this._instanceDataMapValues[i].drawOpaque(t)}_displayTransparentPASS(){let e=this._renderer.handler.programs.geo_object,t=e._program;e.activate(),this._bindCommon();for(let i=0;i<this._instanceDataMapValues.length;i++)this._instanceDataMapValues[i].drawTransparent(t)}_depthPASS(){let e=this._renderer,t=e.handler.programs.geo_object_depth,i=t._program,r=i.uniforms,s=i.attributes,n=e.handler.gl,a=this._entityCollection,l=e.activeCamera;t.activate(),n.uniform3fv(r.uScaleByDistance,a.scaleByDistance),n.uniform3fv(r.rtcEyePositionHigh,this._rtcEyePositionHigh),n.uniform3fv(r.rtcEyePositionLow,this._rtcEyePositionLow),n.uniformMatrix4fv(r.projectionMatrix,!1,e.activeCamera.getProjectionMatrix()),n.uniformMatrix4fv(r.viewMatrix,!1,e.activeCamera.getViewMatrix()),n.uniform1f(r.frustumPickingColor,l.frustumColorIndex);for(let h=0;h<this._instanceDataMapValues.length;h++){let c=this._instanceDataMapValues[h];n.bindBuffer(n.ARRAY_BUFFER,c._qRotBuffer),n.vertexAttribPointer(s.qRot,c._qRotBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,c._sizeBuffer),n.vertexAttribPointer(s.aScale,c._sizeBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,c._translateBuffer),n.vertexAttribPointer(s.aTranslate,c._translateBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,c._localPositionBuffer),n.vertexAttribPointer(s.aLocalPosition,c._localPositionBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,c._rtcPositionHighBuffer),n.vertexAttribPointer(s.aRTCPositionHigh,c._rtcPositionHighBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,c._rtcPositionLowBuffer),n.vertexAttribPointer(s.aRTCPositionLow,c._rtcPositionLowBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,c._visibleBuffer),n.vertexAttribPointer(s.aDispose,c._visibleBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,c._vertexBuffer),n.vertexAttribPointer(s.aVertexPosition,c._vertexBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,c._indicesBuffer),i.drawElementsInstanced(n.TRIANGLES,c._indicesBuffer.numItems,n.UNSIGNED_INT,0,c.numInstances)}}drawDepth(){this._geoObjects.length&&this._depthPASS()}drawPicking(){this._geoObjects.length&&this.pickingEnabled&&this._pickingPASS()}_pickingPASS(){let e=this._renderer,t=e.handler.programs.geo_object_picking,i=t._program,r=i.uniforms,s=i.attributes,n=e.handler.gl,a=this._entityCollection;t.activate(),n.uniform3fv(r.uScaleByDistance,a.scaleByDistance),n.uniform3fv(r.pickingScale,a.pickingScale),n.uniform3fv(r.rtcEyePositionHigh,this._rtcEyePositionHigh),n.uniform3fv(r.rtcEyePositionLow,this._rtcEyePositionLow),n.uniformMatrix4fv(r.projectionMatrix,!1,e.activeCamera.getProjectionMatrix()),n.uniformMatrix4fv(r.viewMatrix,!1,e.activeCamera.getViewMatrix());for(let l=0;l<this._instanceDataMapValues.length;l++){let h=this._instanceDataMapValues[l];n.bindBuffer(n.ARRAY_BUFFER,h._qRotBuffer),n.vertexAttribPointer(s.qRot,h._qRotBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,h._sizeBuffer),n.vertexAttribPointer(s.aScale,h._sizeBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,h._translateBuffer),n.vertexAttribPointer(s.aTranslate,h._translateBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,h._localPositionBuffer),n.vertexAttribPointer(s.aLocalPosition,h._localPositionBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,h._pickingColorBuffer),n.vertexAttribPointer(s.aPickingColor,h._pickingColorBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,h._rtcPositionHighBuffer),n.vertexAttribPointer(s.aRTCPositionHigh,h._rtcPositionHighBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,h._rtcPositionLowBuffer),n.vertexAttribPointer(s.aRTCPositionLow,h._rtcPositionLowBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,h._visibleBuffer),n.vertexAttribPointer(s.aDispose,h._visibleBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ARRAY_BUFFER,h._vertexBuffer),n.vertexAttribPointer(s.aVertexPosition,h._vertexBuffer.itemSize,n.FLOAT,!1,0,0),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,h._indicesBuffer),i.drawElementsInstanced(n.TRIANGLES,h._indicesBuffer.numItems,n.UNSIGNED_INT,0,h.numInstances)}}setQRotArr(e,t,i){Se(e._qRotArr,t,4,4,i.x,i.y,i.z,i.w),e._changedBuffers[Hn]=!0,this._updateTag(e)}setVisibility(e,t,i){Se(e._visibleArr,t,1,1,i?1:0),e._changedBuffers[Gn]=!0,this._updateTag(e)}setRTCPositionArr(e,t,i,r){Se(e._rtcPositionHighArr,t,3,3,i.x,i.y,i.z),Se(e._rtcPositionLowArr,t,3,3,r.x,r.y,r.z),e._changedBuffers[Dn]=!0,this._updateTag(e)}setRgbaArr(e,t,i){Se(e._rgbaArr,t,4,4,i.x,i.y,i.z,i.w),e._changedBuffers[Fn]=!0,this._updateTag(e)}setPickingColorArr(e,t,i){Se(e._pickingColorArr,t,3,3,i.x/255,i.y/255,i.z/255),e._changedBuffers[Un]=!0,this._updateTag(e)}setScaleArr(e,t,i){Se(e._sizeArr,t,3,3,i.x,i.y,i.z),e._changedBuffers[Vn]=!0,this._updateTag(e)}setTranslateArr(e,t,i){Se(e._translateArr,t,3,3,i.x,i.y,i.z),e._changedBuffers[qn]=!0,this._updateTag(e)}setLocalPositionArr(e,t,i){Se(e._localPositionArr,t,3,3,i.x,i.y,i.z),e._changedBuffers[Yn]=!0,this._updateTag(e)}_updateTag(e){e.isFree&&(e.isFree=!1,this._dataTagUpdateQueue.push(e))}update(){for(let e=0,t=this._dataTagUpdateQueue.length;e<t;e++)this._dataTagUpdateQueue[e].update();this._dataTagUpdateQueue=[]}_removeAll(){let e=this._geoObjects.length;for(;e--;){const t=this._geoObjects[e];t._tagDataIndex=-1,t._tagData=null,t._handlerIndex=-1,t._handler=null}this._geoObjects.length=0,this._geoObjects=[];for(let t=0;t<this._instanceDataMapValues.length;t++)this._instanceDataMapValues[t].clear();this._instanceDataMap.clear(),this._instanceDataMapValues=[]}clear(){this._removeAll()}getRTCPosition(e,t,i){let r=e.sub(this._relativeCenter);m.doubleToTwoFloats(r,t,i)}setRelativeCenter(e){this._relativeCenter.copy(e);for(let t=0;t<this._instanceDataMapValues.length;t++){let i=this._instanceDataMapValues[t].geoObjects;for(let r=0;r<i.length;r++)i[r].updateRTCPosition()}}_updateRTCEyePosition(){let e=this._renderer;if(e.activeCamera.isFirstPass){let t=e.activeCamera.eye.sub(this._relativeCenter);m.doubleToTwoFloat32Array(t,this._rtcEyePositionHigh,this._rtcEyePositionLow)}}draw(){this._geoObjects.length&&(this._updateRTCEyePosition(),this.update(),this._displayOpaquePASS())}drawTransparent(){this._geoObjects.length&&this._displayTransparentPASS()}add(e){e._handlerIndex===-1&&(e._handler=this,e._handlerIndex=this._geoObjects.length,this._geoObjects.push(e),this._addGeoObjectToArray(e),e.updateRotation(),e._tagData.refresh(),this._updateTag(e._tagData),e.setObjectSrc(e._objectSrc))}remove(e){e._handler&&this.__id==e._handler.__id&&this._removeGeoObject(e)}_clearDataTagQueue(){this._dataTagUpdateQueue=[]}_removeGeoObject(e){let t=e._tagData,i=e.tag;t.numInstances--;let r=!1;if(t.numInstances===0){t.clear(),this._instanceDataMap.delete(i);for(let n=0;this._instanceDataMapValues.length;n++)if(this._instanceDataMapValues[n].numInstances===0){this._instanceDataMapValues.splice(n,1);break}this._clearDataTagQueue(),r=!0}this._geoObjects.splice(e._handlerIndex,1);for(let n=e._handlerIndex,a=this._geoObjects.length;n<a;n++){let l=this._geoObjects[n];l._handlerIndex=l._handlerIndex-1}let s=e._tagDataIndex;t.geoObjects.splice(s,1);for(let n=e._tagDataIndex,a=t.geoObjects.length;n<a;n++){let l=t.geoObjects[n];l._tagDataIndex=l._tagDataIndex-1}t._rgbaArr=Pe(t._rgbaArr,4*s,4),t._rtcPositionHighArr=Pe(t._rtcPositionHighArr,3*s,3),t._rtcPositionLowArr=Pe(t._rtcPositionLowArr,3*s,3),t._qRotArr=Pe(t._qRotArr,4*s,4),t._pickingColorArr=Pe(t._pickingColorArr,3*s,3),t._sizeArr=Pe(t._sizeArr,3*s,3),t._translateArr=Pe(t._translateArr,3*s,3),t._localPositionArr=Pe(t._localPositionArr,3*s,3),t._visibleArr=Pe(t._visibleArr,s,1),e._handlerIndex=-1,e._handler=null,e._tagDataIndex=-1,e._tagData=null,r||(t.refresh(),this._updateTag(t))}};Wn.__counter__=0;let th=Wn;class ih extends In{constructor(e,t=21){super(e),this._billboards=[],this._gliphParamBuffer=null,this._fontIndexBuffer=null,this._outlineBuffer=null,this._outlineColorBuffer=null,this._gliphParamArr=new Float32Array([]),this._fontIndexArr=new Float32Array([]),this._outlineArr=new Float32Array([]),this._outlineColorArr=new Float32Array([]),this._buffersUpdateCallbacks[8]=this.createFontIndexBuffer,this._buffersUpdateCallbacks[9]=this.createOutlineBuffer,this._buffersUpdateCallbacks[10]=this.createOutlineColorBuffer,this._changedBuffers=new Array(this._buffersUpdateCallbacks.length),this._maxLetters=t}initProgram(){this._renderer&&this._renderer.handler&&this._renderer.handler.gl&&(this._renderer.handler.programs.label||(this._renderer.handler.gl.type==="webgl2"?this._renderer.handler.addProgram(new X("label",{uniforms:{viewport:"vec2",fontTextureArr:"sampler2darray",sdfParamsArr:"vec4",projectionMatrix:"mat4",viewMatrix:"mat4",eyePositionHigh:"vec3",eyePositionLow:"vec3",planetRadius:"float",scaleByDistance:"vec3",opacity:"float",isOutlinePass:"int",depthOffset:"float"},attributes:{a_outline:"float",a_gliphParam:"vec4",a_vertices:"vec2",a_texCoord:"vec4",a_positionsHigh:"vec3",a_positionsLow:"vec3",a_size:"float",a_rotation:"float",a_rgba:"vec4",a_offset:"vec3",a_fontIndex:"float"},vertexShader:`#version 300 es
|
|
103
103
|
#define EMPTY - 1.0
|
|
@@ -345,7 +345,7 @@ vec2 project(vec4 p,vec2 viewport){return(0.5*p.xyz/p.w+0.5).xy*viewport;}mat2 r
|
|
|
345
345
|
<path d="M5 15H3v4c0 1.1.9 2 2 2h4v-2H5v-4zM5 5h4V3H5c-1.1 0-2 .9-2 2v4h2V5zm14-2h-4v2h4v4h2V5c0-1.1-.9-2-2-2zm0 16h-4v2h4c1.1 0 2-.9 2-2v-4h-2v4zM12 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/>
|
|
346
346
|
</svg>`,title:"Lock/Unlock camera view"});return r.appendTo(i),r.events.on("change",(s=>{s?this.model.lockView():this.model.unlockView()})),this.events.on("visibility",(s=>{s||(r.events.stopPropagation(),r.setActive(!1))})),this.events.on("visibility",this._onVisibility),this._relativePositionView.appendTo(this.container),this.model.planet&&(this._lonView.appendTo(this.container),this._latView.appendTo(this.container),this._heightView.appendTo(this.container)),this._xView.appendTo(this.container),this._yView.appendTo(this.container),this._zView.appendTo(this.container),this._absXView.appendTo(this.container),this._absYView.appendTo(this.container),this._absZView.appendTo(this.container),this._pitchView.appendTo(this.container),this._yawView.appendTo(this.container),this._rollView.appendTo(this.container),this._absolutePitchView.appendTo(this.container),this._absoluteYawView.appendTo(this.container),this._absoluteRollView.appendTo(this.container),this._scaleView.appendTo(this.container),this._scaleXView.appendTo(this.container),this._scaleYView.appendTo(this.container),this._scaleZView.appendTo(this.container),this.model.planet&&this._groundBtn.appendTo(this.container),this._relativePositionView.events.on("change",this._onChangeRelativePosition),this._lonView.events.on("change",this._onChangeLon),this._latView.events.on("change",this._onChangeLat),this._heightView.events.on("change",this._onChangeHeight),this._xView.events.on("change",this._onChangeX),this._yView.events.on("change",this._onChangeY),this._zView.events.on("change",this._onChangeZ),this._absXView.events.on("change",this._onChangeAbsoluteX),this._absYView.events.on("change",this._onChangeAbsoluteY),this._absZView.events.on("change",this._onChangeAbsoluteZ),this._pitchView.events.on("change",this._onChangePitch),this._yawView.events.on("change",this._onChangeYaw),this._rollView.events.on("change",this._onChangeRoll),this._absolutePitchView.events.on("change",this._onChangeAbsolutePitch),this._absoluteYawView.events.on("change",this._onChangeAbsoluteYaw),this._absoluteRollView.events.on("change",this._onChangeAbsoluteRoll),this._scaleView.events.on("change",this._onChangeScale),this._scaleXView.events.on("change",this._onChangeScaleX),this._scaleYView.events.on("change",this._onChangeScaleY),this._scaleZView.events.on("change",this._onChangeScaleZ),this._groundBtn.appendTo(this.container),this._groundBtn.events.on("click",this._onGround),this}remove(){super.remove(),this._clearSceneEvents()}_initSceneEvents(){this.model.events.on("select",this._onSelect),this.model.events.on("unselect",this._onUnselect),this.model.events.on("position",this._onPosition),this.model.events.on("pitch",this._onPitch),this.model.events.on("yaw",this._onYaw),this.model.events.on("roll",this._onRoll)}_clearSceneEvents(){this.model.events.off("select",this._onSelect),this.model.events.off("unselect",this._onUnselect),this.model.events.off("position",this._onPosition),this.model.events.off("pitch",this._onPitch),this.model.events.off("yaw",this._onYaw),this.model.events.off("roll",this._onRoll)}_refresh(e){e.parent?this._relativePositionView.disabled=!1:this._relativePositionView.disabled=!0,this._relativePositionView.checked=e.relativePosition;let t=e.getLonLat();this._lonView.stopPropagation(),this._latView.stopPropagation(),this._heightView.stopPropagation(),this._lonView.value=t.lon,this._latView.value=t.lat,this._heightView.value=t.height;let i=e.getCartesian();this._xView.stopPropagation(),this._yView.stopPropagation(),this._zView.stopPropagation(),this._xView.value=i.x,this._yView.value=i.y,this._zView.value=i.z,i=e.getAbsoluteCartesian(),this._absXView.stopPropagation(),this._absYView.stopPropagation(),this._absZView.stopPropagation(),this._absXView.value=i.x,this._absYView.value=i.y,this._absZView.value=i.z,this._pitchView.stopPropagation(),this._yawView.stopPropagation(),this._rollView.stopPropagation(),this._pitchView.value=e.getPitch()*J,this._yawView.value=e.getYaw()*J,this._rollView.value=e.getRoll()*J,this._absolutePitchView.stopPropagation(),this._absoluteYawView.stopPropagation(),this._absoluteRollView.stopPropagation(),this._absolutePitchView.value=e.getAbsolutePitch()*J,this._absoluteYawView.value=e.getAbsoluteYaw()*J,this._absoluteRollView.value=e.getAbsoluteRoll()*J,this._scaleView.stopPropagation();let r=e.getScale();r.x===r.y&&r.y===r.z?this._scaleView.value=r.x:this._scaleView.value=1,this._scaleXView.stopPropagation(),this._scaleYView.stopPropagation(),this._scaleZView.stopPropagation(),this._scaleXView.value=r.x,this._scaleYView.value=r.y,this._scaleZView.value=r.z}hide(){super.hide(),this.model.events.stopPropagation(),this.model.unselect()}}const Cc=["lockview","unlockview"];class Ya extends ee{constructor(e={}){super(e),this._onLockViewDraw=()=>{this.renderer&&this._lockEntity&&(this._isFromTheBack||this.renderer.activeCamera.viewDistance(this._lockEntity.getAbsoluteCartesian(),this._lockDistance))},this._onMouseWheel=t=>{if(this.renderer&&this._lockEntity&&!this._isFromTheBack){let i=this.renderer.activeCamera.eye.distance(this._lockEntity.getAbsoluteCartesian());this._lockDistance-=.33*i*Math.sign(t.wheelDelta),this._lockDistance<.001&&(this._lockDistance=.001),this.renderer.activeCamera.viewDistance(this._lockEntity.getAbsoluteCartesian(),this._lockDistance)}},this._onMouseMove=t=>{if(this._lockEntity&&this.renderer&&(t.rightButtonDown||this.renderer.events.isKeyPressed(W.KEY_ALT))){let i=this._lockEntity.getAbsoluteCartesian(),r=this.renderer.activeCamera,s=.5/G;s>.007&&(s=.007),this.planet?r.rotateHorizontal(s*(t.x-t.prev_x),!1,i,i.isZero()?m.UP:i.normal()):r.rotateHorizontal(s*(t.x-t.prev_x),!1,i,m.UP),r.rotateVertical(s*(t.y-t.prev_y),i),this._viewDir=i.sub(r.eye).normalize()}},this.events=le(Cc),this._name="CameraLock",this.planet=e.planet||null,this._lockDistance=0,this._isFromTheBack=!1,this._lockEntity=null,this._viewDir=new m(0,0,0)}onactivate(){this.renderer}ondeactivate(){this.renderer&&this.unlockView()}oninit(){this.activate(),this.renderer}flyCartesian(e,t=120){if(!e.isZero()&&this.renderer)if(this.unlockView(),this.planet){let i=this.planet.camera;this.isVisibleDistance(e)&&i.flyDistance(e,t),i.eye.distance(e)<1e6?i.flyDistance(e,t):i.viewDistance(e,t)}else this.renderer.activeCamera.viewDistance(e,t)}lockView(e,t=!1){if(!this.renderer)return;this._lockDistance=this._getDistance(e,this._lockEntity),this._isFromTheBack=t,this._deactivateLockViewEvents(),this._lockEntity=e;let i=this.renderer.activeCamera;this.planet&&this.planet.camera.stopFlying(),i.viewDistance(e.getAbsoluteCartesian(),this._lockDistance),this._deactivateNav(),this._activateLockViewEvents(),this._viewDir=e.getAbsoluteCartesian().sub(i.eye).normalize(),this.events.dispatch(this.events.lockview,this._lockEntity,t)}_activateNav(){this.renderer&&this.renderer.controls.mouseNavigation&&this.renderer.controls.mouseNavigation.activate(),this.renderer&&this.renderer.controls.simpleNavigation&&this.renderer.controls.simpleNavigation.activate()}_deactivateNav(){this.renderer&&this.renderer.controls.mouseNavigation&&(this.renderer.controls.mouseNavigation.deactivate(),this.renderer.controls.mouseNavigation.stop()),this.renderer&&this.renderer.controls.simpleNavigation&&this.renderer.controls.simpleNavigation.deactivate()}unlockView(){this._lockEntity&&(this._deactivateLockViewEvents(),this._activateNav(),this.events.dispatch(this.events.unlockview,this._lockEntity),this._lockEntity=null)}_getCenterDist(){return this.renderer&&this.renderer.getDistanceFromPixel(this.renderer.handler.getCenter())||0}_getDistance(e,t){if(this.renderer){let i=e.getAbsoluteCartesian(),r=this.renderer.activeCamera,s=r.eye.distance(i);return t&&(s=r.eye.distance(t.getAbsoluteCartesian())),this.isVisibleDistance(i)?s:r.eye.distance(i)<1e6?this._getCenterDist():120}return 0}isVisibleDistance(e,t=0){if(this.planet){let i=this.planet.ellipsoid.equatorialSize,r=this.planet.camera.eye;return r.distance(e)<Math.sqrt(r.length2()-i*i)+t}return!0}get lockEntity(){return this._lockEntity}flyLonLat(e,t=120){if(this.planet){let i=this.planet.ellipsoid.lonLatToCartesian(e);this.flyCartesian(i,t)}}_activateLockViewEvents(){this.renderer&&(this.renderer.events.on("mousewheel",this._onMouseWheel),this.renderer.events.on("mousemove",this._onMouseMove),this.renderer.events.on("draw",this._onLockViewDraw))}_deactivateLockViewEvents(){this.renderer&&(this.renderer.events.off("mousewheel",this._onMouseWheel),this.renderer.events.off("mousemove",this._onMouseMove),this._lockEntity&&this.renderer.events.off("draw",this._onLockViewDraw))}}const Tc=["click"];class Ec extends Ce{constructor(e){super({template:Ne(`<button class="og-object3d-collection__item">
|
|
347
347
|
<div class="og-object3d-collection__item_name">{name}</div>
|
|
348
|
-
</button>`,{name:e.model.name}),...e}),this.events=le(Tc)}render(e){var t;return super.render(e),(t=this.el)==null||t.addEventListener("click",(i=>{this.events.dispatch(this.events.click,this.model,this,i)})),this}}const Ac=["select"];class Lc extends Ce{constructor(e){super({template:'<div class="og-object3d-collection"></div>',model:e.model,...e}),this._onAdd=t=>{this._addItem(t)},this.events=le(Ac),this._activeView=null}_addItem(e){let t=new Ec({model:e});t.appendTo(this.el),t.events.on("click",(i=>{var r,s;this._activeView&&((r=this._activeView.el)==null||r.classList.remove("active")),this._activeView=t,(s=this._activeView.el)==null||s.classList.add("active"),this.events.dispatch(this.events.select,i,t)}))}render(e){super.render(e);let t=this.model.getItems();for(let i of t)this._addItem(i);return this._initEvents(),this}_initEvents(){this.model.events.on("add",this._onAdd)}}const Pc=["select"];class Sc extends nt{constructor(e){super({classList:["og-object3d-manager"],title:"Object3D Collection",visible:!1,resizable:!0,useHide:!0,top:25,right:85,width:252,height:480,minHeight:100,minWidth:100}),this._onLoadClick=()=>{let t=new Ce({initRender:!0,template:'<input type="file" accept=".obj,.mtl" multiple />'});t.el&&(t.el.addEventListener("change",(i=>{const r=i.target;if(r.files){const s=Array.from(r.files),n=s.find((l=>l.name.toLowerCase().endsWith(".obj"))),a=s.find((l=>l.name.toLowerCase().endsWith(".mtl")));n&&(async function(l,h){return await $.readFileObj(l,h).then((c=>({name:l.name,objects:h?c:[$.merge(c)]})))})(n,a).then(this._addObject)}})),t.el.click())},this._addObject=t=>{this._object3dCollectionView.model.addItem(t)},this.events=le(Pc),this._object3dCollectionView=new Lc({model:e.model})}render(e){var t;super.render(e);let i=document.createElement("div");i.classList.add("og-editor_toolbar"),(t=this.container)==null||t.appendChild(i);let r=new st({classList:["og-editor_toolbar-button"],icon:'<svg class="svg-icon" style="vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M426.666667 170.666667H170.666667c-47.146667 0-84.906667 38.186667-84.906667 85.333333L85.333333 768c0 47.146667 38.186667 85.333333 85.333334 85.333333h682.666666c47.146667 0 85.333333-38.186667 85.333334-85.333333V341.333333c0-47.146667-38.186667-85.333333-85.333334-85.333333H512l-85.333333-85.333333z" /></svg>',title:"Load 3D object"});return r.appendTo(i),r.events.on("click",this._onLoadClick),this._object3dCollectionView.appendTo(this.container),this._object3dCollectionView.events.on("select",(s=>{this.events.dispatch(this.events.select,s)})),this}}const Mc=["add","remove"];class ss{constructor(e={}){this.events=le(Mc,this),this._items=ss.createItemsMap(e.collection||[])}static createItemsMap(e){let t=new Map;for(let i=0;i<e.length;i++)t.set(e[i].name,e[i]);return t}getItem(e){return this._items.get(e)}addItem(e,t=!1){this._items.has(e.name)&&!t||(this._items.set(e.name,e),this.events.dispatch(this.events.add,e))}getItems(){return Array.from(this._items,(([e,t])=>t))}}class ns extends ee{constructor(e={}){super({name:"CameraFrameComposer",autoActivate:!0,...e}),this._onPostdraw=()=>{for(let t=0,i=this._frameHandlers.length;t<i;t++)this._frameHandlers[t].frame()},this._cameraLayer=new _t({scaleByDistance:[100,1e6,1],pickingEnabled:!1}),this._cameraScene=new at("CameraScene"),this._frameHandlers=e.frameHandlers||[]}get frameHandlers(){return[...this._frameHandlers]}add(e){e.addTo(this),this._cameraLayer.add(e.cameraEntity)}oninit(){super.oninit(),this._cameraLayer.addTo(this._cameraScene)}activate(){super.activate(),this.renderer&&(this.renderer.events.on("postdraw",this._onPostdraw),this.renderer.addNode(this._cameraScene))}deactivate(){super.deactivate(),this.renderer&&(this.renderer.events.off("postdraw",this._onPostdraw),this.renderer.removeNode(this._cameraScene))}}let Rc=$.createFrustum();class Wa{constructor(e){this.camera=e.camera,this.frameBuffer=e.frameBuffer,this.frameHandler=e.frameHandler||null,this._composer=null,this._composerIndex=-1,this.showFrustum=e.showFrustum==null||e.showFrustum,this.cameraEntity=new V({visibility:!0,scale:this.frustumScale,geoObject:{tag:"frustum",color:"rgba(0,255,0,0.20)",object3d:Rc}}),this.frameBuffer.init()}get frustumScale(){return $.getFrustumScaleByCameraAspectRatio(1e3,this.camera.getViewAngle(),this.camera.getAspectRatio())}addTo(e){this._composer||(this._composer=e,this._composerIndex=e.frameHandlers.length,this._composer._frameHandlers.push(this))}remove(){this._composer&&(this._composer._frameHandlers.splice(this._composerIndex,1),this._composer=null,this._composerIndex=-1)}frame(){if(this.frameHandler&&this.frameBuffer.handler.gl&&(this.frameHandler(this),this.showFrustum)){let e=this.camera,t=$.getFrustumScaleByCameraAngles(100,e.horizontalViewAngle,e.verticalViewAngle);this.cameraEntity.setScale3v(t),this.cameraEntity.setCartesian3v(e.eye),this.cameraEntity.setAbsolutePitch(e.getAbsolutePitch()),this.cameraEntity.setAbsoluteYaw(e.getAbsoluteYaw()),this.cameraEntity.setAbsoluteRoll(e.getAbsoluteRoll())}}}function Yt(o){let e=1/Math.sqrt(o[0]*o[0]+o[1]*o[1]+o[2]*o[2]);o[0]*=e,o[1]*=e,o[2]*=e,o[3]*=e}class $a{constructor(e={}){this._pickingColorU=new Float32Array([0,0,0]),this._f=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],this.projectionMatrix=new re,this.inverseProjectionMatrix=new re,this.projectionViewMatrix=new re,this.projectionViewRTEMatrix=new re,this.inverseProjectionViewMatrix=new re,this.left=0,this.right=0,this.bottom=0,this.top=0,this.near=0,this.far=0,this.cameraFrustumIndex=e.cameraFrustumIndex!=null?e.cameraFrustumIndex:-1,this.setProjectionMatrix(e.fov||30,e.aspect||1,e.near||1,e.far||1e3)}getRightPlane(){return this._f[0]}getLeftPlane(){return this._f[1]}getBottomPlane(){return this._f[2]}getTopPlane(){return this._f[3]}getBackwardPlane(){return this._f[4]}getForwardPlane(){return this._f[5]}getProjectionViewMatrix(){return this.projectionViewMatrix._m}getProjectionViewRTEMatrix(){return this.projectionViewRTEMatrix._m}getProjectionMatrix(){return this.projectionMatrix._m}getInverseProjectionMatrix(){return this.inverseProjectionMatrix._m}setProjectionMatrix(e,t,i,r,s,n=10){if(s){let a=n*Math.tan(e*$e),l=a*t;this._setFrustumParams(a,l,i,r),this.projectionMatrix.setOrthographic(this.left,this.right,this.bottom,this.top,this.near,this.far)}else{let a=i*Math.tan(e*$e),l=a*t;this._setFrustumParams(a,l,i,r),this.projectionMatrix.setPerspective(this.left,this.right,this.bottom,this.top,this.near,this.far)}this.projectionMatrix.inverseTo(this.inverseProjectionMatrix)}_setFrustumParams(e,t,i,r){this.top=e,this.right=t,this.bottom=-this.top,this.left=-this.right,this.near=i,this.far=r}setProjectionViewRTEMatrix(e){this.projectionViewRTEMatrix=this.projectionMatrix.mul(e)}setViewMatrix(e){this.projectionViewMatrix=this.projectionMatrix.mul(e),this.projectionViewMatrix.inverseTo(this.inverseProjectionViewMatrix);let t=this.projectionViewMatrix._m;this._f[0][0]=t[3]-t[0],this._f[0][1]=t[7]-t[4],this._f[0][2]=t[11]-t[8],this._f[0][3]=t[15]-t[12],Yt(this._f[0]),this._f[1][0]=t[3]+t[0],this._f[1][1]=t[7]+t[4],this._f[1][2]=t[11]+t[8],this._f[1][3]=t[15]+t[12],Yt(this._f[1]),this._f[2][0]=t[3]+t[1],this._f[2][1]=t[7]+t[5],this._f[2][2]=t[11]+t[9],this._f[2][3]=t[15]+t[13],Yt(this._f[2]),this._f[3][0]=t[3]-t[1],this._f[3][1]=t[7]-t[5],this._f[3][2]=t[11]-t[9],this._f[3][3]=t[15]-t[13],Yt(this._f[3]),this._f[4][0]=t[3]-t[2],this._f[4][1]=t[7]-t[6],this._f[4][2]=t[11]-t[10],this._f[4][3]=t[15]-t[14],Yt(this._f[4]),this._f[5][0]=t[3]+t[2],this._f[5][1]=t[7]+t[6],this._f[5][2]=t[11]+t[10],this._f[5][3]=t[15]+t[14],Yt(this._f[5])}containsPoint(e){for(let t=0;t<6;t++)if(e.dotArr(this._f[t])+this._f[t][3]<=0)return!1;return!0}containsSphereBottomExc(e){let t=-e.radius,i=this._f;return!(e.center.dotArr(i[0])+i[0][3]<=t||e.center.dotArr(i[1])+i[1][3]<=t||e.center.dotArr(i[3])+i[3][3]<=t||e.center.dotArr(i[4])+i[4][3]<=t||e.center.dotArr(i[5])+i[5][3]<=t)}containsSphereButtom(e){let t=-e.radius,i=this._f;return!(e.center.dotArr(i[2])+i[2][3]<=t)}containsSphere(e){let t=-e.radius,i=this._f;return!(e.center.dotArr(i[0])+i[0][3]<=t||e.center.dotArr(i[1])+i[1][3]<=t||e.center.dotArr(i[2])+i[2][3]<=t||e.center.dotArr(i[3])+i[3][3]<=t||e.center.dotArr(i[4])+i[4][3]<=t||e.center.dotArr(i[5])+i[5][3]<=t)}containsSphere2(e,t){let i=-t;return!(e.dotArr(this._f[0])+this._f[0][3]<=i||e.dotArr(this._f[1])+this._f[1][3]<=i||e.dotArr(this._f[2])+this._f[2][3]<=i||e.dotArr(this._f[3])+this._f[3][3]<=i||e.dotArr(this._f[4])+this._f[4][3]<=i||e.dotArr(this._f[5])+this._f[5][3]<=i)}containsBox(e){let t,i,r=!0;for(let s=0;s<6;s++){t=0,i=0;for(let n=0;n<8&&(i===0||t===0);n++)e.vertices[n].dotArr(this._f[s])+this._f[s][3]<0?t++:i++;if(i===0)return!1;t>0&&(r=!0)}return r}}const K=class{};K.Linear=o=>o,K.QuadIn=o=>o*o,K.QuadOut=o=>1-(1-o)*(1-o),K.QuadInOut=o=>o<.5?2*o*o:1-Math.pow(-2*o+2,2)/2,K.CubicIn=o=>o*o*o,K.CubicOut=o=>1-Math.pow(1-o,3),K.CubicInOut=o=>o<.5?4*o*o*o:1-Math.pow(-2*o+2,3)/2,K.QuartIn=o=>o*o*o*o,K.QuartOut=o=>1-Math.pow(1-o,4),K.QuartInOut=o=>o<.5?8*o*o*o*o:1-Math.pow(-2*o+2,4)/2,K.QuintIn=o=>o*o*o*o*o,K.QuintOut=o=>1-Math.pow(1-o,5),K.QuintInOut=o=>o<.5?16*o*o*o*o*o:1-Math.pow(-2*o+2,5)/2,K.SineIn=o=>1-Math.cos(o*Math.PI/2),K.SineOut=o=>Math.sin(o*Math.PI/2),K.SineInOut=o=>-(Math.cos(Math.PI*o)-1)/2,K.ExpoIn=o=>o===0?0:Math.pow(2,10*o-10),K.ExpoOut=o=>o===1?1:1-Math.pow(2,-10*o),K.ExpoInOut=o=>o===0?0:o===1?1:o<.5?Math.pow(2,20*o-10)/2:(2-Math.pow(2,-20*o+10))/2,K.CircIn=o=>1-Math.sqrt(1-Math.pow(o,2)),K.CircOut=o=>Math.sqrt(1-Math.pow(o-1,2)),K.CircInOut=o=>o<.5?(1-Math.sqrt(1-Math.pow(2*o,2)))/2:(Math.sqrt(1-Math.pow(-2*o+2,2))+1)/2,K.BackIn=o=>2.70158*o*o*o-1.70158*o*o,K.BackOut=o=>1+2.70158*Math.pow(o-1,3)+1.70158*Math.pow(o-1,2),K.BackInOut=o=>{const e=2.5949095;return o<.5?Math.pow(2*o,2)*(7.189819*o-e)/2:(Math.pow(2*o-2,2)*((e+1)*(2*o-2)+e)+2)/2},K.ElasticIn=o=>{const e=2*Math.PI/3;return o===0?0:o===1?1:-Math.pow(2,10*o-10)*Math.sin((10*o-10.75)*e)},K.ElasticOut=o=>{const e=2*Math.PI/3;return o===0?0:o===1?1:Math.pow(2,-10*o)*Math.sin((10*o-.75)*e)+1},K.ElasticInOut=o=>{const e=2*Math.PI/4.5;return o===0?0:o===1?1:o<.5?-Math.pow(2,20*o-10)*Math.sin((20*o-11.125)*e)/2:Math.pow(2,-20*o+10)*Math.sin((20*o-11.125)*e)/2+1},K.BounceOut=o=>o<1/2.75?7.5625*o*o:o<2/2.75?7.5625*(o-=1.5/2.75)*o+.75:o<2.5/2.75?7.5625*(o-=2.25/2.75)*o+.9375:7.5625*(o-=2.625/2.75)*o+.984375,K.BounceIn=o=>1-K.BounceOut(1-o),K.BounceInOut=o=>o<.5?.5*(1-K.BounceOut(1-2*o)):.5*(K.BounceOut(2*o-1)+1);let Bc=K;const kc=["viewchange","moveend","flystart","flyend","flystop"],Xa=Bc.CubicInOut,Za=class xl{constructor(e={}){if(this.__id=xl.__counter__++,this.events=le(kc,this),this._isOrthographic=e.isOrthographic??!1,this._focusDistance=e.focusDistance!=null?e.focusDistance:10,this._width=e.width||1,this._height=e.height||1,this.eye=e.eye||new m,this.eyeHigh=new Float32Array(3),this.eyeLow=new Float32Array(3),this._viewAngle=e.viewAngle||47,this._horizontalViewAngle=0,this._viewMatrix=new re,this._viewMatrixRTE=new re,this._normalMatrix=new bt,this._r=new m(1,0,0),this._u=new m(0,1,0),this._b=new m(0,0,1),this._f=this._b.negateTo(),this._pr=this._r.clone(),this._pu=this._u.clone(),this._pb=this._b.clone(),this._peye=this.eye.clone(),this.isMoving=!1,this._flight=null,this._completeCallback=null,this._frameCallback=null,this._flying=!1,this._tanViewAngle_hrad=0,this._tanViewAngle_hradOneByHeight=0,this.frustums=[],this.frustumColors=[],e.frustums)for(let t=0,i=e.frustums.length;t<i;t++){let r=e.frustums[t],s=new $a({fov:this._viewAngle,aspect:this.getAspectRatio(),near:r[0],far:r[1]});s.cameraFrustumIndex=this.frustums.length,this.frustums.push(s),this.frustumColors.push(s._pickingColorU[0],s._pickingColorU[1],s._pickingColorU[2])}else{let t=1,i=500,r=new $a({fov:this._viewAngle,aspect:this.getAspectRatio(),near:t,far:i});r.cameraFrustumIndex=this.frustums.length,this.frustums.push(r),this.frustumColors.push(r._pickingColorU[0],r._pickingColorU[1],r._pickingColorU[2])}this.FARTHEST_FRUSTUM_INDEX=this.frustums.length-1,this.currentFrustumIndex=0,this.frustumColorIndex=0,this.isFirstPass=!1,this._projSizeConst=0,this.set(e.eye||new m(0,0,1),e.look||new m,e.up||new m(0,1,0))}get isOrthographic(){return this._isOrthographic}set isOrthographic(e){this._isOrthographic!==e&&(this._isOrthographic=e,this.refresh())}get focusDistance(){return this._focusDistance}set focusDistance(e){e!==this._focusDistance&&(this._focusDistance=e,this._isOrthographic&&this.refresh())}get id(){return this.__id}flyCartesian(e,t={}){this.stopFlying(),t.look=t.look||m.ZERO,t.up=t.up||m.UP,t.duration=t.duration||800;const i=t.ease||Xa;this._completeCallback=t.completeCallback||(()=>{}),this._frameCallback=t.frameCallback||(()=>{}),t.startCallback&&t.startCallback.call(this);let r=this.eye.clone(),s=this._u,n=this._b,a=t.up,l=e.clone(),h=m.sub(e,t.look),c=a.cross(h);h.normalize(),c.normalize();let d=h.cross(c);this._flight={fly:u=>{let g=1-i(u),f=r.smerp(l,g),p=s.smerp(d,g),_=m.add(f,n.smerp(h,g).negateTo()),v=new m(f.x-_.x,f.y-_.y,f.z-_.z),x=p.cross(v);v.normalize(),x.normalize();let y=v.cross(x);return{eye:f,n:v,u:x,v:y}},duration:t.duration,startedAt:Date.now()},this._flying=!0,this.events.dispatch(this.events.flystart,this)}stopFlying(){this._flying&&(this._flying=!1,this._flight=null,this._frameCallback=null,this.events.dispatch(this.events.flystop,this))}checkFly(){if(this._flying&&this._flight!==null){let e=Math.min((Date.now()-this._flight.startedAt)/this._flight.duration,1);const t=this._flight.fly(e);this.eye=t.eye,this._r=t.u,this._u=t.v,this._b=t.n,this._f.set(-this._b.x,-this._b.y,-this._b.z),this._frameCallback&&this._frameCallback(),this.update(),e>=1&&(this.stopFlying(),this._completeCallback&&(this.events.dispatch(this.events.flyend,this),this._completeCallback(),this._completeCallback=null))}}isFlying(){return this._flying}checkMoveEnd(){let e=this._r,t=this._u,i=this._b,r=this.eye;this._peye.equal(r)&&this._pr.equal(e)&&this._pu.equal(t)&&this._pb.equal(i)?(this.isMoving&&this.events.dispatch(this.events.moveend,this),this.isMoving=!1):this.isMoving=!0,this._pr.copy(e),this._pu.copy(t),this._pb.copy(i),this._peye.copy(r)}bindFrustumsPickingColors(e){for(let t=0;t<this.frustums.length;t++)e.assignPickingColor(this.frustums[t])}_init(e){this._setProj(this._viewAngle,this.getAspectRatio()),this.set(e.eye||new m(0,0,1),e.look||new m,e.up||new m(0,1,0))}getUp(){return this._u.clone()}getDown(){return this._u.negateTo()}getRight(){return this._r.clone()}getLeft(){return this._r.negateTo()}getForward(){return this._f.clone()}getBackward(){return this._b.clone()}update(){let e=this._r,t=this._u,i=this._b,r=this.eye;m.doubleToTwoFloat32Array(r,this.eyeHigh,this.eyeLow),this._viewMatrix.set([e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,-r.dot(e),-r.dot(t),-r.dot(i),1]),this._viewMatrixRTE.set([e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,0,0,0,1]);for(let s=0,n=this.frustums.length;s<n;s++)this.frustums[s].setViewMatrix(this._viewMatrix),this.frustums[s].setProjectionViewRTEMatrix(this._viewMatrixRTE);this.events.dispatch(this.events.viewchange,this)}refresh(){this._setProj(this._viewAngle,this.getAspectRatio()),this.update()}get width(){return this._width}get height(){return this._height}setViewportSize(e,t){this._width=e,this._height=t,this.refresh()}getAspectRatio(){return this._width/this._height}_setProj(e,t){this._viewAngle=e;for(let s=0,n=this.frustums.length;s<n;s++){let a=this.frustums[s];a.setProjectionMatrix(e,t,a.near,a.far,this._isOrthographic,this._focusDistance)}var i,r;this._horizontalViewAngle=(i=e,r=t,or*Math.atan(Math.tan($e*i)*r)),this._updateViewportParameters()}_updateViewportParameters(){this._tanViewAngle_hrad=Math.tan(this._viewAngle*$e),this._tanViewAngle_hradOneByHeight=this._tanViewAngle_hrad*(1/this._height),this._projSizeConst=Math.min(this._width<512?512:this._width,this._height<512?512:this._height)/(this._viewAngle*G)}setViewAngle(e){this._viewAngle=e,this.refresh()}getViewAngle(){return this._viewAngle}get viewAngle(){return this._viewAngle}get verticalViewAngle(){return this._viewAngle}get horizontalViewAngle(){return this._horizontalViewAngle}set(e,t,i){return this.eye.x=e.x,this.eye.y=e.y,this.eye.z=e.z,t=t||this._b,i=i||this._u,this._b.x=e.x-t.x,this._b.y=e.y-t.y,this._b.z=e.z-t.z,this._r.copy(i.cross(this._b)),this._b.normalize(),this._r.normalize(),this._u.copy(this._b.cross(this._r)),this._f.set(-this._b.x,-this._b.y,-this._b.z),this}look(e,t){this._b.set(this.eye.x-e.x,this.eye.y-e.y,this.eye.z-e.z),this._r.copy((t||this._u).cross(this._b)),this._b.normalize(),this._f.set(-this._b.x,-this._b.y,-this._b.z),this._r.normalize(),this._u.copy(this._b.cross(this._r))}slide(e,t,i){this.eye.x+=e*this._r.x+t*this._u.x+i*this._b.x,this.eye.y+=e*this._r.y+t*this._u.y+i*this._b.y,this.eye.z+=e*this._r.z+t*this._u.z+i*this._b.z}setRoll(e){let t=Math.cos(e),i=Math.sin(e),r=this._r.clone();this._r.set(t*r.x-i*this._u.x,t*r.y-i*this._u.y,t*r.z-i*this._u.z),this._u.set(i*r.x+t*this._u.x,i*r.y+t*this._u.y,i*r.z+t*this._u.z)}setPitch(e){let t=Math.cos(e),i=Math.sin(e),r=this._b;this._b.set(t*r.x-i*this._u.x,t*r.y-i*this._u.y,t*r.z-i*this._u.z),this._u.set(i*r.x+t*this._u.x,i*r.y+t*this._u.y,i*r.z+t*this._u.z)}setYaw(e){let t=Math.cos(e),i=Math.sin(e),r=this._r;this._r.set(t*r.x-i*this._b.x,t*r.y-i*this._b.y,t*r.z-i*this._b.z),this._b.set(i*r.x+t*this._b.x,i*r.y+t*this._b.y,i*r.z+t*this._b.z)}setPitchYawRoll(e,t,i){let r=new O;r.setPitchYawRoll(e,t,i),this.setRotation(r)}getPitch(){return this.getRotation().getPitch()}getYaw(){return this.getRotation().getYaw()}getRoll(){return this.getRotation().getRoll()}getAbsolutePitch(){return this.getRotation().getPitch()}getAbsoluteYaw(){return this.getRotation().getYaw()}getAbsoluteRoll(){return this.getRotation().getRoll()}getRotation(){return O.getLookRotation(this._f,this._u).conjugate()}setRotation(e,t,i,r){e.mulVec3Res(t||new m(0,1,0),this._u),e.mulVec3Res(i||new m(1,0,0),this._r),e.mulVec3Res(r||new m(0,0,1),this._b),this._f.set(-this._b.x,-this._b.y,-this._b.z)}rotate(e){e.mulVec3Res(this._u,this._u),e.mulVec3Res(this._r,this._r),e.mulVec3Res(this._b,this._b),this._f.set(-this._b.x,-this._b.y,-this._b.z)}unproject2v(e,t,i){return this.unproject(e.x,e.y,t,i)}unproject(e,t,i,r){let s=.5*this._width,n=.5*this._height,a=(e-s)/s,l=-(t-n)/n,h=this.frustums[0];if(this.isOrthographic){if(i){let c=.5*(h.right-h.left)*a,d=.5*(h.top-h.bottom)*l,u=this.getUp().scale(d),g=this.getRight().scale(c),f=u.addA(g),p=this.eye.add(f),_=this.getForward(),v=p.addA(_.scaleTo(i));return r&&r.copy(v),v.sub(this.eye).normalize()}return this.getForward()}{let c=h.inverseProjectionViewMatrix,d=c.mulVec4(new te(a,l,-1,1)).affinity();return c.mulVec4(new te(a,l,0,1)).affinity().subA(d).toVec3().normalize()}}project3v(e){return this.project(e.x,e.y,e.z)}project(e,t,i){let r=this.frustums[0].projectionViewMatrix.mulVec4(new te(e,t,i,1));return new N((1+r.x/r.w)*this._width*.5,(1-r.y/r.w)*this._height*.5)}rotateAround(e,t=!1,i=m.ZERO,r=m.UP){r=t?this._u:r;let s=re.getRotation(e,r),n=re.getRotationAroundPoint(e,i,r);this.eye=n.mulVec3(this.eye),this._u=s.mulVec3(this._u).normalize(),this._r=s.mulVec3(this._r).normalize(),this._b=s.mulVec3(this._b).normalize(),this._f.set(-this._b.x,-this._b.y,-this._b.z)}rotateHorizontal(e,t,i,r){this.rotateAround(e,t,i,r)}rotateVertical(e,t){this.rotateAround(e,!1,t,this._r)}projectedSize(e,t){if(this.isOrthographic){const i=this.frustums[0].projectionMatrix._m;return t*(this._height*i[5]*.5)}return Math.atan(t/this.eye.distance(e))*this._projSizeConst}getViewMatrix(){return this._viewMatrix._m}getNormalMatrix(){return this._normalMatrix._m}setCurrentFrustum(e){this.currentFrustumIndex=e,this.frustumColorIndex=10*(e+1)/255,this.isFirstPass=e===this.FARTHEST_FRUSTUM_INDEX}getCurrentFrustum(){return this.currentFrustumIndex}containsSphere(e){for(let t=0;t<this.frustums.length;t++)if(this.frustums[t].containsSphere(e))return!0;return!1}get frustum(){return this.frustums[this.currentFrustumIndex]}getProjectionMatrix(){return this.frustum.projectionMatrix._m}getProjectionViewMatrix(){return this.frustum.projectionViewMatrix._m}getProjectionViewRTEMatrix(){return this.frustum.projectionViewRTEMatrix._m}getInverseProjectionViewMatrix(){return this.frustum.inverseProjectionViewMatrix._m}getInverseProjectionMatrix(){return this.frustum.inverseProjectionMatrix._m}viewDistance(e,t=1e4){let i=e.add(this.getBackward().scaleTo(t));this.set(i,e),this.update()}copy(e){this.eye.copy(e.eye),this._r.copy(e._r),this._u.copy(e._u),this._b.copy(e._b),this._f.copy(e._f),this._width=e.width,this._height=e.height,this.setViewAngle(e.viewAngle),this.update()}getAltitude(){return this.eye.y}};Za.__counter__=0;let as=Za;class Qa extends as{constructor(e,t={}){super({...t,frustums:t.frustums||[[1,100.075],[100,1000.075],[1e3,101e4],[1e6,1e9]]}),this.planet=e,this.minAltitude=t.minAltitude||1,this.maxAltitude=t.maxAltitude||2e7,this._lonLat=this.planet.ellipsoid.cartesianToLonLat(this.eye),this._lonLatMerc=this._lonLat.forwardMercator(),this._terrainAltitude=this._lonLat.height,this._terrainPoint=new m,this._insideSegment=null,this.slope=0,this._keyLock=new mi,this._flight=null,this._completeCallback=null,this._frameCallback=null,this._flying=!1,this._checkTerrainCollision=!0,this.eyeNorm=this.eye.getNormal()}setTerrainCollisionActivity(e){this._checkTerrainCollision=e}update(){this.events.stopPropagation();let e=this.maxAltitude+this.planet.ellipsoid.getEquatorialSize();this.eye.length()>e&&this.eye.copy(this.eye.getNormal().scale(e)),super.update(),this.updateGeodeticPosition(),this.eyeNorm=this.eye.getNormal(),this.slope=this._b.dot(this.eyeNorm),this.events.dispatch(this.events.viewchange,this)}updateGeodeticPosition(){this.planet.ellipsoid.cartesianToLonLatRes(this.eye,this._lonLat),Math.abs(this._lonLat.lat)<=de&&P.forwardMercatorRes(this._lonLat,this._lonLatMerc)}setAltitude(e){let t=this._terrainPoint,i=this.planet.ellipsoid.getSurfaceNormal3v(this.eye);this.eye.x=i.x*e+t.x,this.eye.y=i.y*e+t.y,this.eye.z=i.z*e+t.z,this._terrainAltitude=e}getAltitude(){return this._terrainAltitude}setLonLat(e,t,i){this.stopFlying(),this._lonLat.set(e.lon,e.lat,e.height||this._lonLat.height);let r=this.planet.ellipsoid,s=r.lonLatToCartesian(this._lonLat),n=t?r.lonLatToCartesian(t):m.ZERO;this.set(s,n,i||s.getNormal()),this.update()}getLonLat(){return this._lonLat}getHeight(){return this._lonLat.height}getExtentPosition(e,t){t=t||0;let i=e.getNorth(),r=e.getSouth(),s=e.getEast(),n=e.getWest();n>s&&(s+=360);let a=this.planet.ellipsoid,l=new P(s,i),h=a.lonLatToCartesian(l);l.lat=r;let c=a.lonLatToCartesian(l);l.lon=n;let d=a.lonLatToCartesian(l);l.lat=i;let u=a.lonLatToCartesian(l),g=m.sub(h,d).scale(.5).addA(d),f=g.length();f<1e-6&&(l.lon=.5*(s+n),l.lat=.5*(i+r),g=a.lonLatToCartesian(l)),u.subA(g),c.subA(g),h.subA(g),d.subA(g);let p=g.getNormal(),_=p.cross(m.NORTH).normalize(),v=_.cross(p).normalize(),x=Math.max(Math.abs(v.dot(u)),Math.abs(v.dot(c)),Math.abs(v.dot(h)),Math.abs(v.dot(d))),y=Math.max(Math.abs(_.dot(u)),Math.abs(_.dot(c)),Math.abs(_.dot(h)),Math.abs(_.dot(d))),w=Math.tan(this._viewAngle*G*.5),b=this.getAspectRatio()*w,C=Math.max(y/b,x/w);return g.normalize(),g.scale(f+C+t),g}viewExtent(e,t){this.stopFlying(),this.set(this.getExtentPosition(e,t),m.ZERO,m.NORTH),this.update()}flyExtent(e,t,i={}){i.look=m.ZERO,this.flyCartesian(this.getExtentPosition(e,t),i)}viewDistance(e,t=1e4){let i=this.eye.add(this.getForward().scaleTo(t)),r=O.getRotationBetweenVectors(i.getNormal(),e.getNormal());if(r.isZero()){let s=e.add(this.getBackward().scaleTo(t));this.set(s,e)}else{let s=e.add(r.mulVec3(this.getBackward()).scale(t)),n=r.mulVec3(this.getUp());this.set(s,e,n)}this.update()}flyLonLat(e,t={}){let i=new P(e.lon,e.lat,e.height||this._lonLat.height);this.flyCartesian(this.planet.ellipsoid.lonLatToCartesian(i),t)}flyDistance(e,t=1e4,i={}){let r=this.eye.add(this.getForward().scaleTo(t)),s=O.getRotationBetweenVectors(r.getNormal(),e.getNormal());if(s.isZero()){let n=e.add(this.getBackward().scaleTo(t));this.set(n,e)}else{let n=e.add(s.mulVec3(this.getBackward()).scale(t)),a=s.mulVec3(this.getUp());i.look=e,i.up=a,this.flyCartesian(n,i)}}flyCartesian(e,t={}){this.stopFlying(),t.preventLock||(this.planet.layerLock.lock(this._keyLock),this.planet.terrainLock.lock(this._keyLock),this.planet.normalMapCreator.lock(this._keyLock)),t.amplitude=t.amplitude!=null?t.amplitude:1,t.look=t.look||m.ZERO,t.up=t.up||m.NORTH,t.duration=t.duration||800;const i=t.ease||Xa;this._completeCallback=t.completeCallback||(()=>{}),this._frameCallback=t.frameCallback||(()=>{}),t.startCallback&&t.startCallback.call(this),t.look instanceof P&&(t.look=this.planet.ellipsoid.lonLatToCartesian(t.look));let r=this.eye.clone(),s=this._u,n=this._b,a=this.planet.ellipsoid.cartesianToLonLat(e),l=t.up,h=this.planet.ellipsoid.lonLatToCartesian(new P(a.lon,a.lat,0)),c=m.sub(e,t.look),d=l.cross(c);c.normalize(),d.normalize();let u=c.cross(d),g=r.getNormal(),f=h.getNormal(),p=1-g.dot(f),_=t.amplitude*Ss*Math.sqrt(p>0?p:0),v=6639613,x=Math.max(this._lonLat.height,a.height);x>v&&(v=x);let y=x+2.5*_*(v-x),w=m.ZERO;this._flight={fly:b=>{let C,E=i(b),T=1-E;if(E>=1)C=e.clone();else{let B=r.smerp(e,T).normalize(),D=this.planet.getRayIntersectionEllipsoid(new H(w,B)),A=this._lonLat.height*T*T*T+3*y*T*T*E+3*y*T*E*E+a.height*E*E*E;C=D.addA(B.scale(A))}let L=s.smerp(u,T),S=m.add(C,n.smerp(c,T).negateTo()),R=new m(C.x-S.x,C.y-S.y,C.z-S.z),z=L.cross(R);R.normalize(),z.normalize();let F=R.cross(z);return{eye:C,n:R,u:z,v:F}},duration:t.duration,startedAt:Date.now()},this._flying=!0,this.events.dispatch(this.events.flystart,this)}stopFlying(){this._flying&&(this.planet.layerLock.free(this._keyLock),this.planet.terrainLock.free(this._keyLock),this.planet.normalMapCreator.free(this._keyLock),super.stopFlying())}rotateLeft(e,t){this.rotateHorizontal(e,t!==!0,m.ZERO),this.update()}rotateRight(e,t){this.rotateHorizontal(-e,t!==!0,m.ZERO),this.update()}rotateUp(e){this.rotateVertical(e,m.ZERO),this.update()}rotateDown(e){this.rotateVertical(-e,m.ZERO),this.update()}rotateVertical(e,t,i=0){let r=new re().setRotation(this._r,e),s=new re().setIdentity().translate(t),n=new re().setIdentity().translate(t.negateTo()),a=s.mul(r).mul(n).mulVec3(this.eye),l=r.mulVec3(this._u).normalize(),h=r.mulVec3(this._r).normalize(),c=r.mulVec3(this._b).normalize(),d=a.getNormal(),u=c.dot(d);if(!(l.dot(d)<=0))if(i){let g=u-this.slope;if(u<i&&g<0)return;(u>.1&&l.dot(d)>0||this.slope<=.1||this._u.dot(this.eye.getNormal())<=0)&&(this.eye=a,this._u=l,this._r=h,this._b=c,this._f.set(-c.x,-c.y,-c.z))}else this.eye=a,this._u=l,this._r=h,this._b=c,this._f.set(-c.x,-c.y,-c.z)}checkTerrainCollision(){if(this._terrainAltitude=this._lonLat.height,this._insideSegment&&this._insideSegment.planet)return this._terrainAltitude=this._insideSegment.getTerrainPoint(this.eye,this._insideSegment.getInsideLonLat(this),this._terrainPoint),this._terrainAltitude<this.minAltitude&&this._checkTerrainCollision&&this.setAltitude(this.minAltitude),this._terrainPoint}getSurfaceVisibleDistance(e){let t=this.planet.ellipsoid.equatorialSize;return t*Math.acos(t/(t+this._lonLat.height+e))}getHeading(){let e=this.eye.getNormal(),t=m.proj_b_to_plane(this.slope>=.97?this.getUp():this.getForward(),e).normalize(),i=m.proj_b_to_plane(m.NORTH,e).normalize(),r=Math.sign(e.dot(t.cross(i)))*Math.acos(t.dot(i))*J;return r<0?360+r:r}isVisible(e){let t=this.eye.length();return this.eye.distance(e)<Math.sqrt(t*t-this.planet.ellipsoid.equatorialSizeSqr)}getPitch(){return this.planet.getFrameRotation(this.eye).conjugate().inverse().mul(this.getRotation()).getPitch()}getYaw(){return this.planet.getFrameRotation(this.eye).conjugate().inverse().mul(this.getRotation()).getYaw()}getRoll(){return this.planet.getFrameRotation(this.eye).conjugate().inverse().mul(this.getRotation()).getRoll()}setPitch(e){let t=this.planet.getFrameRotation(this.eye),i=new O;i.setPitchYawRoll(e,this.getYaw(),this.getRoll(),t),this.setRotation(i)}setYaw(e){let t=this.planet.getFrameRotation(this.eye),i=new O;i.setPitchYawRoll(this.getPitch(),e,this.getRoll(),t),this.setRotation(i)}setRoll(e){let t=this.planet.getFrameRotation(this.eye),i=new O;i.setPitchYawRoll(this.getPitch(),this.getYaw(),e,t),this.setRotation(i)}setPitchYawRoll(e,t,i){let r=this.planet.getFrameRotation(this.eye),s=new O;s.setPitchYawRoll(e,t,i,r).conjugate(),this.setRotation(s)}}const Ka=class bl{constructor(e,t={}){this.handler=e,this.__id=bl.__counter__++,this._fbo=null,this._width=t.width||e.canvas.width,this._height=t.height||e.canvas.height,this._depthComponent=t.depthComponent!=null?t.depthComponent:"DEPTH_COMPONENT16",this._useDepth=t.useDepth==null||t.useDepth,this._active=!1,this._size=t.size||1,this._depthRenderbuffer=null,this._filter=t.filter||"NEAREST"}get width(){return this._width}get height(){return this._height}setSize(e,t,i=!1){this._width=e,this._height=t,this._active&&this.handler.gl.viewport(0,0,this._width,this._height),(this._useDepth||i)&&(this.destroy(),this.init())}init(){}destroy(){}isComplete(){let e=this.handler.gl;return e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE}checkStatus(){let e=this.handler.gl;return e.checkFramebufferStatus(e.FRAMEBUFFER)}activate(){let e=this.handler.gl;e.bindFramebuffer(e.FRAMEBUFFER,null),e.bindFramebuffer(e.FRAMEBUFFER,this._fbo),e.viewport(0,0,this._width,this._height),this._active=!0;let t=this.handler.framebufferStack.current().data;return t&&(t._active=!1),this.handler.framebufferStack.push(this),this}deactivate(){let e=this.handler,t=e.gl;t.bindFramebuffer(t.FRAMEBUFFER,null),this._active=!1;let i=this.handler.framebufferStack.popPrev();i?(t.bindFramebuffer(t.FRAMEBUFFER,i._fbo),t.viewport(0,0,i._width,i._height)):t.viewport(0,0,e.canvas.width,e.canvas.height)}isEqual(e){return!!e&&this.__id===e.__id}};Ka.__counter__=0;let Ja=Ka;class xi{constructor(e=256,t=256){this._canvas=document.createElement("canvas"),this._canvas.width=e,this._canvas.height=t,this._context=this._canvas.getContext("2d",{willReadFrequently:!0})}getCanvas(){return this._canvas}getContext(){return this._context}fillEmpty(){let e=this._context.getImageData(0,0,this._canvas.width,this._canvas.height),t=e.data;for(let i=0,r=t.length;i<r;i+=4)t[i]=t[i+1]=t[i+2]=t[i+3]=0;this._context.putImageData(e,0,0)}fill(e){this._context.fillStyle=e,this._context.fill()}getData(){return this._context.getImageData(0,0,this._canvas.width,this._canvas.height).data}fillColor(e){this._context.fillStyle=e,this._context.fillRect(0,0,this._canvas.width,this._canvas.height)}setData(e){let t=this._context.createImageData(this._canvas.width,this._canvas.height);t.data.set(e),this._context.putImageData(t,0,0)}resize(e,t){this._canvas.width=e,this._canvas.height=t,this._context=this._canvas.getContext("2d")}drawImage(e,t,i,r,s){this._context.drawImage(e,t||0,i||0,r||e.width,s||e.height)}getImage(){let e=new Image;return e.width=this.getWidth(),e.height=this.getHeight(),e.src=this._canvas.toDataURL("image/png"),e}getTextWidth(e){let t=this._context.measureText(e);return Math.round(t.width)}drawText(e,t=0,i=14,r="normal 14px Verdana",s="black"){this._context.fillStyle=s,this._context.font=r,this._context.fillText(e,t,i)}getWidth(){return this._canvas.width}getHeight(){return this._canvas.height}load(e,t){let i=new Image,r=this;i.onload=function(){r.resize(i.width,i.height),r._context.drawImage(i,0,0,i.width,i.height),t&&t(i)},i.src=e}openImage(){let e=this.getImage(),t="<!DOCTYPE html>";t+="<html>",t+="<head><title>Print</title></head>",t+="<body>",t+='<img src="'+e.src+'">',t+="</body>",t+="</html>";let i=window.open("","","width="+e.width+"px ,height="+e.height+"px");i&&(i.document.open(),i.document.write(t),i.document.close(),i.focus())}destroy(){this._canvas.width=1,this._canvas.height=1,this._canvas=null,this._context=null}}const eo={UNSIGNED_BYTE:Uint8Array,FLOAT:Float32Array};class Re extends Ja{constructor(e,t={}){super(e,t),this.readPixelBuffersAsync=i=>{const r=this.handler.gl;if(this._skipFrame)return;this._skipFrame=!0;let s=this.width,n=this.height,a=this.pixelBuffers;this.activate();for(let d=0;d<a.length;d++){let u=a[d];r.bindBuffer(r.PIXEL_PACK_BUFFER,u.buffer),r.bufferData(r.PIXEL_PACK_BUFFER,u.data.byteLength,r.STREAM_READ),r.readBuffer(u.glAttachment),r.readPixels(0,0,s,n,r.RGBA,u.glType,0),r.bindBuffer(r.PIXEL_PACK_BUFFER,null)}this.deactivate();const l=r.fenceSync(r.SYNC_GPU_COMMANDS_COMPLETE,0);var h,c;r.flush(),(h=r,c=l,new Promise(((d,u)=>{(function g(){const f=h.clientWaitSync(c,0,0);f==h.WAIT_FAILED?u():f==h.TIMEOUT_EXPIRED?requestAnimationFrame(g):d()})()}))).then((()=>{this._skipFrame=!1,r.deleteSync(l);for(let d=0;d<a.length;d++){let u=a[d];u.data&&(r.bindBuffer(r.PIXEL_PACK_BUFFER,u.buffer),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,u.data))}r.bindBuffer(r.PIXEL_PACK_BUFFER,null),i&&i(this)}))},this._targets=Re.createTargets(t.targets),this._size=this._targets.length,this._renderbufferTarget=t.renderbufferTarget!=null?t.renderbufferTarget:"DEPTH_ATTACHMENT",this.textures=t.textures||new Array(this._size),this.pixelBuffers=[],this._skipFrame=!1}static createTargets(e){let t=0,i=0;return e?e.map((r=>{let s=r.attachment||"COLOR_ATTACHMENT";s==="COLOR_ATTACHMENT"&&(s="COLOR_ATTACHMENT"+t++);let n=r.type||"UNSIGNED_BYTE";return{internalFormat:r.internalFormat||"RGBA",format:r.format||"RGBA",type:n,attachment:s,filter:r.filter||"NEAREST",pixelBufferIndex:r.readAsync?i++:-1,TypeArrayConstructor:eo[n]}})):[{internalFormat:"RGBA",format:"RGBA",type:"UNSIGNED_BYTE",attachment:"COLOR_ATTACHMENT0",filter:"NEAREST",pixelBufferIndex:-1,TypeArrayConstructor:eo.UNSIGNED_BYTE}]}destroy(){let e=this.handler.gl;if(e){for(let t=0;t<this.textures.length;t++)e.deleteTexture(this.textures[t]);this.textures=new Array(this._size);for(let t=0;t<this.pixelBuffers.length;t++)this.pixelBuffers[t].data=null,e.deleteBuffer(this.pixelBuffers[t].buffer);this.pixelBuffers=[],e.deleteFramebuffer(this._fbo),e.deleteRenderbuffer(this._depthRenderbuffer),this._depthRenderbuffer=null,this._fbo=null,this._active=!1}}init(){let e=this.handler.gl;if(!e)return;this._fbo=e.createFramebuffer(),e.bindFramebuffer(e.FRAMEBUFFER,this._fbo);let t=[];for(let i=0;i<this._targets.length;i++){let r=this._targets[i],s=this.textures[i]||this.handler.createEmptyTexture2DExt(this._width,this._height,r.filter,r.internalFormat,r.format,r.type),n=e[r.attachment];s&&(this.bindOutputTexture(s,n),this.textures[i]=s),r.attachment!=="DEPTH_ATTACHMENT"&&t.push(n),r.pixelBufferIndex!==-1&&this._createPixelBuffer(r)}e.drawBuffers&&e.drawBuffers(t),this._useDepth&&(this._depthRenderbuffer=e.createRenderbuffer(),e.bindRenderbuffer(e.RENDERBUFFER,this._depthRenderbuffer),e.renderbufferStorage(e.RENDERBUFFER,e[this._depthComponent],this._width,this._height),e.framebufferRenderbuffer(e.FRAMEBUFFER,e[this._renderbufferTarget],e.RENDERBUFFER,this._depthRenderbuffer),e.bindRenderbuffer(e.RENDERBUFFER,null)),e.bindFramebuffer(e.FRAMEBUFFER,null)}getPixelBufferData(e=0){let t=this._targets[e].pixelBufferIndex;return t!==-1?this.pixelBuffers[t].data:null}_createPixelBuffer(e){let t=this.handler.gl,i=e.pixelBufferIndex,r=this.pixelBuffers[i];r||(r=this.pixelBuffers[i]={buffer:null,data:null,glType:-1,glAttachment:-1});let s=this.width*this.height*4;r.data=null,r.data=new e.TypeArrayConstructor(s),r.buffer=t.createBuffer(),t.bindBuffer(t.PIXEL_PACK_BUFFER,r.buffer),t.bufferData(t.PIXEL_PACK_BUFFER,s,t.STREAM_READ),t.bindBuffer(t.PIXEL_PACK_BUFFER,null),r.glType=t[e.type],r.glAttachment=t[e.attachment]}bindOutputTexture(e,t){let i=this.handler.gl;i.bindTexture(i.TEXTURE_2D,e),i.framebufferTexture2D(i.FRAMEBUFFER,t||i.COLOR_ATTACHMENT0,i.TEXTURE_2D,e,0),i.bindTexture(i.TEXTURE_2D,null)}readPixels(e,t,i,r=0,s=1,n=1){let a=this.handler.gl;a.bindFramebuffer(a.FRAMEBUFFER,this._fbo),a.readBuffer&&a.readBuffer(a.COLOR_ATTACHMENT0+r||0),a.readPixels(t*this._width,i*this._height,s,n,a.RGBA,a[this._targets[r].type],e),a.bindFramebuffer(a.FRAMEBUFFER,null)}readAllPixels(e,t=0){let i=this.handler.gl;i.bindFramebuffer(i.FRAMEBUFFER,this._fbo),i.readBuffer&&i.readBuffer(i.COLOR_ATTACHMENT0+t),i.readPixels(0,0,this._width,this._height,i.RGBA,i[this._targets[t].type],e),i.bindFramebuffer(i.FRAMEBUFFER,null)}getImage(){let e=new Uint8Array(4*this._width*this._height);this.readAllPixels(e);let t=new xi(this._width,this._height);return t.setData(e),t.getImage()}readData(e,t,i,r=0){const s=this.width,n=this.height,a=Math.floor(e*(s-1)),l=4*(Math.floor(t*(n-1))*s+a),h=this.pixelBuffers[r].data;h&&(i[0]=h[l],i[1]=h[l+1],i[2]=h[l+2],i[3]=h[l+3])}}const Ic=["tick","end","start","stop"],to=class wl{constructor(e={}){this.__handler=null,this.active=!0,this.__id=wl.__counter__++,this.events=le(Ic,this),this.name=e.name||"",this.startDate=e.startDate||0,this.endDate=e.endDate||0;let t=e.currentDate||$i(new Date);e.startDate&&t<e.startDate&&(t=e.startDate),e.endDate&&t>e.endDate&&(t=e.endDate),this.currentDate=t,this._multiplier=e.multiplier!==void 0?e.multiplier:1,this._running=1,this.deltaTicks=0,this.active=!0,this._intervalDelay=0,this._intervalStart=0,this._intervalCallback=null}clearInterval(){this._intervalDelay=0,this._intervalStart=0,this._intervalCallback=null}setInterval(e,t){this._intervalStart=this.currentDate,this._intervalDelay=e*Rr,this._intervalCallback=t}setDate(e){let t=$i(e);this.startDate&&t<this.startDate&&(t=this.startDate),this.endDate&&t>this.endDate&&(t=this.endDate),this.currentDate=t}getDate(){return Ir(this.currentDate)}reset(){this.startDate&&(this.currentDate=this.startDate)}tick(e){let t=this._multiplier*this._running;if(this.deltaTicks=e*t,this.active){let i=Qs(this.currentDate,this.deltaTicks);t>0?this.endDate&&i>this.endDate?(this.currentDate=this.startDate,this.events.dispatch(this.events.end,this)):this.currentDate=i:this.startDate&&i<this.startDate?(this.currentDate=this.endDate,this.events.dispatch(this.events.end,this)):this.currentDate=i,this._intervalCallback&&this.currentDate-this._intervalStart>=this._intervalDelay&&(this._intervalStart=this.currentDate,this._intervalCallback(this)),this.events.dispatch(this.events.tick,this)}}isEqual(e){return this.__id===e.__id}start(){this._running===0&&(this._running=1,this.events.dispatch(this.events.start,this))}get multiplier(){return this._multiplier}set multiplier(e){this._multiplier=e}stop(){this._running===1&&(this._running=0,this.events.dispatch(this.events.stop,this))}};to.__counter__=0;let zc=to;class Dc{constructor(e,t){t._programController=this,this._program=t,this._handler=e,this._activated=!1}initialize(){this._handler.gl&&this._program.createProgram(this._handler.gl)}getProgram(){return this._program}activate(){if(!this._activated){this._handler.activeProgram.deactivate(),this._handler.activeProgram=this;let e=this._program;this._activated=!0,e.enableAttribArrays(),e.use()}return this}remove(){let e=this._handler.programs;e[this._program.name]&&(this._activated&&this.deactivate(),this._program.delete(),delete e[this._program.name])}deactivate(){this._program.disableAttribArrays(),this._activated=!1}isActive(){return this._activated}set(e){return this.activate(),this._program.set(e),this}drawIndexBuffer(e,t){return this._program.drawIndexBuffer(e,t),this}drawArrays(e,t){return this._program.drawArrays(e,t),this}}let io=class{constructor(){this.next=null,this.prev=null,this.data=null}};class os{constructor(e=256){this._current=new io,this._head=this._current;for(let t=0;t<e;t++){let i=new io;i.prev=this._current,this._current.next=i,this._current=i}this._current=this._head}current(){return this._current}push(e){this._current=this._current.next,this._current.data=e}pop(){let e=this._current.data;return this._current=this._current.prev,e}popPrev(){return this._current=this._current.prev,this._current.data}}const ro=["","WEBKIT_","MOZ_"],ls=["webgl2","webgl"];class Tt{constructor(e,t={}){this.framebufferStack=new os,this._requestAnimationFrameId=0,this.drawFrame=()=>{let i=window.performance.now(),r=this.deltaTime;this.deltaTime=.5*(i-this._lastAnimationFrameTime+this.prevDeltaTime),this.deltaTime>3?this.deltaTime=3:this.deltaTime<1&&(this.deltaTime=1),this.prevDeltaTime=r,this._lastAnimationFrameTime=i,this.defaultClock.tick(this.deltaTime);for(let n=0;n<this._clocks.length;n++)this._clocks[n].tick(this.deltaTime);let s=this.canvas;Math.floor(s.clientWidth*this._params.pixelRatio)===s.width&&Math.floor(s.clientHeight*this._params.pixelRatio)===s.height||(s.clientWidth===0||s.clientHeight===0?this.stop():document.hidden||(this.start(),this.setSize(s.clientWidth,s.clientHeight))),this._frameCallback()},this.events=le(["visibilitychange","resize"]),this._throttledDrawFrame=this.drawFrame,this.defaultClock=new zc,this._clocks=[],this.prevDeltaTime=0,this.deltaTime=0,this.canvas=null,this.gl=null,this.programs={},this.activeProgram=null,this._canvasSize=[0,0],this._params={anisotropy:t.anisotropy||4,width:t.width||256,height:t.height||256,pixelRatio:$s("og_dpi")||t.pixelRatio||1,extensions:t.extensions||[],context:t.context||{}},this.extensions={},this._canvasTarget=e,this._lastAnimationFrameTime=0,this._initialized=!1,this._frameCallback=function(){},this.transparentTexture=null,this.defaultTexture=null,this.framebufferStack=new os,this.createTexture_n=this.createTexture_n_webgl2.bind(this),this.createTexture_l=this.createTexture_l_webgl2.bind(this),this.createTexture_mm=this.createTexture_mm_webgl2.bind(this),this.createTexture_a=this.createTexture_a_webgl2.bind(this),this.createTexture={NEAREST:this.createTexture_n,LINEAR:this.createTexture_l,MIPMAP:this.createTexture_mm,ANISOTROPIC:this.createTexture_a},this.createTextureDefault=this.createTexture_n,this.ONCANVASRESIZE=null,this._createCanvas(),(t.autoActivate||Ue(t.autoActivate))&&this.initialize()}set frameDelay(e){this._throttledDrawFrame=e===0?this.drawFrame:si(this.drawFrame,e)}isInitialized(){return this._initialized}_createCanvas(){this._canvasTarget?this._canvasTarget instanceof HTMLElement?this.canvas=this._canvasTarget:this.canvas=document.getElementById(this._canvasTarget)||document.querySelector(this._canvasTarget):(this.canvas=document.createElement("canvas"),this.canvas.width=this._params.width,this.canvas.height=this._params.height)}static getExtension(e,t){if(!e)return;let i,r;for(i in ro)if(r=e.getExtension(ro[i]+t),r)return r}static getContext(e,t){let i=null;try{let r=new URLSearchParams(location.search).get("og_ver");if(r)i=e.getContext(r,t),i&&(i.type=r);else for(let s=0;s<ls.length;s++)if(i=e.getContext(ls[s],t),i){i.type=ls[s];break}}catch{Qe.logErr("exception during the GL context initialization")}return i||Qe.logErr("could not initialise WebGL"),i}setFrameCallback(e){e&&(this._frameCallback=e)}createEmptyTexture2DExt(e=1,t=1,i="NEAREST",r="RGBA",s="RGBA",n="UNSIGNED_BYTE",a="CLAMP_TO_EDGE",l=0){let h=this.gl,c=h.createTexture();return h.bindTexture(h.TEXTURE_2D,c),h.texImage2D(h.TEXTURE_2D,l,h[r.toUpperCase()],e,t,0,h[s.toUpperCase()],h[n.toUpperCase()],null),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h[i.toUpperCase()]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h[i.toUpperCase()]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h[a.toUpperCase()]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h[a.toUpperCase()]),h.bindTexture(h.TEXTURE_2D,null),c}createEmptyTexture_n(e,t,i,r){let s=this.gl,n=s.createTexture();return s.bindTexture(s.TEXTURE_2D,n),s.texImage2D(s.TEXTURE_2D,0,i||s.RGBA,e,t,0,s.RGBA,s.UNSIGNED_BYTE,null),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,r||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,r||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),n}createEmptyTexture_l(e,t,i,r){let s=this.gl,n=s.createTexture();return s.bindTexture(s.TEXTURE_2D,n),s.texImage2D(s.TEXTURE_2D,0,i||s.RGBA,e,t,0,s.RGBA,s.UNSIGNED_BYTE,null),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,r||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,r||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),n}createTexture_n_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_l_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_mm_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_a_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameterf(s.TEXTURE_2D,this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this._params.anisotropy),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_n_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,1,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_l_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,1,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_mm_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,2,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_a_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,2,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameterf(s.TEXTURE_2D,this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this._params.anisotropy),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}loadCubeMapTexture(e){let t=this.gl,i=t.createTexture();t.bindTexture(t.TEXTURE_CUBE_MAP,i),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MAG_FILTER,t.LINEAR);let r=[[e.px,t.TEXTURE_CUBE_MAP_POSITIVE_X],[e.nx,t.TEXTURE_CUBE_MAP_NEGATIVE_X],[e.py,t.TEXTURE_CUBE_MAP_POSITIVE_Y],[e.ny,t.TEXTURE_CUBE_MAP_NEGATIVE_Y],[e.pz,t.TEXTURE_CUBE_MAP_POSITIVE_Z],[e.nz,t.TEXTURE_CUBE_MAP_NEGATIVE_Z]],s=new xi;s.fillEmpty();let n=s.getImage();for(let a=0;a<r.length;a++){let l=r[a][1];t.bindTexture(t.TEXTURE_CUBE_MAP,i),t.texImage2D(l,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,n)}for(let a=0;a<r.length;a++){let l=r[a][1],h=new Image;h.crossOrigin="",h.onload=(function(c,d,u){return function(){t&&c&&(t.bindTexture(t.TEXTURE_CUBE_MAP,c),t.texImage2D(d,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,u))}})(i,l,h),h.src=r[a][0]}return i}addProgram(e,t=!1){if(this.programs[e.name])console.warn(`Shader program: "${e.name}" already exists.`);else{let i=new Dc(this,e);this.programs[e.name]=i,this._initProgramController(i),t||(i._activated=!1)}return e}removeProgram(e){this.programs[e]&&this.programs[e].remove()}addPrograms(e){for(let t=0;t<e.length;t++)this.addProgram(e[t])}_initProgramController(e){this._initialized&&(e.initialize(),this.activeProgram?(e.deactivate(),this.activeProgram._program.enableAttribArrays(),this.activeProgram._program.use()):(this.activeProgram=e,e.activate()))}_initPrograms(){for(let e in this.programs)this._initProgramController(this.programs[e])}initializeExtension(e,t=!1){if(!this.extensions||!this.extensions[e]){let i=Tt.getExtension(this.gl,e);i?this.extensions[e]=i:t&&console.warn("og.webgl.Handler: extension '"+e+"' doesn't initialize.")}return this.extensions&&this.extensions[e]}initialize(){if(this._initialized||!this.canvas||(this.gl=Tt.getContext(this.canvas,this._params.context),!this.gl))return;this._initialized=!0,this._params.extensions.push("EXT_texture_filter_anisotropic"),this.gl.type==="webgl"?(this._params.extensions.push("OES_standard_derivatives"),this._params.extensions.push("OES_element_index_uint"),this._params.extensions.push("WEBGL_depth_texture"),this._params.extensions.push("ANGLE_instanced_arrays")):(this._params.extensions.push("EXT_color_buffer_float"),this._params.extensions.push("OES_texture_float_linear"));let e=this._params.extensions.length;for(;e--;)this.initializeExtension(this._params.extensions[e],!0);this.gl.type==="webgl"?(this.createTexture_n=this.createTexture_n_webgl1.bind(this),this.createTexture_l=this.createTexture_l_webgl1.bind(this),this.createTexture_mm=this.createTexture_mm_webgl1.bind(this),this.createTexture_a=this.createTexture_a_webgl1.bind(this)):(this.createTexture_n=this.createTexture_n_webgl2.bind(this),this.createTexture_l=this.createTexture_l_webgl2.bind(this),this.createTexture_mm=this.createTexture_mm_webgl2.bind(this),this.createTexture_a=this.createTexture_a_webgl2.bind(this)),this.createTexture.NEAREST=this.createTexture_n,this.createTexture.LINEAR=this.createTexture_l,this.createTexture.MIPMAP=this.createTexture_mm,this.createTexture.ANISOTROPIC=this.createTexture_a,this.extensions.EXT_texture_filter_anisotropic?this.createTextureDefault=this.createTexture_a:this.createTextureDefault=this.createTexture_mm,this._initPrograms(),this._setDefaults(),this.intersectionObserver=new IntersectionObserver((t=>{this._toggleVisibilityChange(t[t.length-1].isIntersecting)}),{threshold:0}),this.intersectionObserver.observe(this.canvas),this.resizeObserver=new ResizeObserver((t=>{this._toggleVisibilityChange(t[0].contentRect.width!==0&&t[0].contentRect.height!==0)})),this.resizeObserver.observe(this.canvas),document.addEventListener("visibilitychange",(()=>{this._toggleVisibilityChange(document.visibilityState==="visible")}))}_toggleVisibilityChange(e){e?(this.start(),this.ONCANVASRESIZE&&this.ONCANVASRESIZE(),this.events.dispatch(this.events.visibilitychange,!0)):(this.events.dispatch(this.events.visibilitychange,!1),this.stop())}_setDefaults(){let e=this.gl;e&&this.canvas&&(e.depthFunc(e.LESS),e.enable(e.DEPTH_TEST),this.setSize(this.canvas.clientWidth||this._params.width,this.canvas.clientHeight||this._params.height),e.frontFace(e.CCW),e.cullFace(e.BACK),e.enable(e.CULL_FACE),e.disable(e.BLEND),this.createDefaultTexture({color:"rgba(0,0,0,0.0)"},(t=>{this.transparentTexture=t})),this.createDefaultTexture({color:"rgba(255, 255, 255, 1.0)"},(t=>{this.defaultTexture=t})))}getCanvasSize(){return this._canvasSize}createStreamArrayBuffer(e,t,i,r=4){let s=this.gl,n=s.createBuffer();return s.bindBuffer(s.ARRAY_BUFFER,n),s.bufferData(s.ARRAY_BUFFER,t*e*r,i||s.STREAM_DRAW),s.bindBuffer(s.ARRAY_BUFFER,null),n.itemSize=e,n.numItems=t,n}setStreamArrayBuffer(e,t,i=0){let r=this.gl;return r.bindBuffer(r.ARRAY_BUFFER,e),r.bufferSubData(r.ARRAY_BUFFER,i,t),r.bindBuffer(r.ARRAY_BUFFER,null),e}createArrayBuffer(e,t,i,r){let s=this.gl,n=s.createBuffer();return s.bindBuffer(s.ARRAY_BUFFER,n),s.bufferData(s.ARRAY_BUFFER,e,r||s.STATIC_DRAW),s.bindBuffer(s.ARRAY_BUFFER,null),n.itemSize=t,n.numItems=i||e.length/t,n}createArrayBufferLength(e,t){let i=this.gl,r=i.createBuffer();return i.bindBuffer(i.ARRAY_BUFFER,r),i.bufferData(i.ARRAY_BUFFER,e,t||i.STATIC_DRAW),i.bindBuffer(i.ARRAY_BUFFER,null),r.itemSize=1,r.numItems=e,r}createElementArrayBuffer(e,t,i,r){let s=this.gl,n=s.createBuffer();return s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,n),s.bufferData(s.ELEMENT_ARRAY_BUFFER,e,r||s.STATIC_DRAW),s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,null),n.itemSize=t,n.numItems=i||e.length,n}setSize(e,t){this._params.width=e,this._params.height=t,this.canvas&&(this.canvas.width=e*this._params.pixelRatio,this.canvas.height=t*this._params.pixelRatio,this._canvasSize[0]=this.canvas.width,this._canvasSize[1]=this.canvas.height,this.gl&&this.gl.viewport(0,0,e,t),this.ONCANVASRESIZE&&this.ONCANVASRESIZE(this.canvas),this.events.dispatch(this.events.resize,this))}get pixelRatio(){return this._params.pixelRatio}set pixelRatio(e){this._params.pixelRatio=e,this.setSize(this._params.width,this._params.height)}getWidth(){return this.canvas?this.canvas.width:0}getHeight(){return this.canvas?this.canvas.height:0}getClientAspect(){return this.canvas?this.canvas.clientWidth/this.canvas.clientHeight:0}getCenter(){let e=this.canvas;return e?new N(Math.round(.5*e.width),Math.round(.5*e.height)):new N}clearFrame(){let e=this.gl;e.clearColor(0,0,0,1),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}start(){!this._requestAnimationFrameId&&this._initialized&&this._animationFrameCallback()}stop(){this._requestAnimationFrameId&&(window.cancelAnimationFrame(this._requestAnimationFrameId),this._requestAnimationFrameId=0)}isStopped(){return!this._requestAnimationFrameId}isWebGl2(){return!!this.gl&&this.gl.type==="webgl2"}_animationFrameCallback(){this._requestAnimationFrameId=window.requestAnimationFrame((()=>{this._throttledDrawFrame(),this._requestAnimationFrameId&&this._animationFrameCallback()}))}createDefaultTexture(e,t){let i,r;if(e&&e.color)i=new xi(2,2),i.fillColor(e.color),r=this.createTexture_n(i.getCanvas()),r.default=!0,t(r);else if(e&&e.url){let s=new Image,n=this;s.onload=function(){r=n.createTextureDefault(s),r.default=!0,t(r)},s.src=e.url}else i=new xi(2,2),i.fillColor("#C5C5C5"),r=this.createTexture_n(i.getCanvas()),r.default=!0,t(r)}deleteTexture(e){e&&!e.default&&this.gl.deleteTexture(e)}destroy(){var e,t;(e=this.resizeObserver)==null||e.disconnect(),(t=this.intersectionObserver)==null||t.disconnect(),this.stop();for(let r in this.programs)this.removeProgram(r);let i=this.gl;if(i){i.deleteTexture(this.transparentTexture),this.transparentTexture=null,i.deleteTexture(this.defaultTexture),this.defaultTexture=null,this.framebufferStack=new os;let r=i.getParameter(i.MAX_VERTEX_ATTRIBS),s=i.createBuffer();i.bindBuffer(i.ARRAY_BUFFER,s);for(let a=0;a<r;++a)i.disableVertexAttribArray(a),i.vertexAttribPointer(a,4,i.FLOAT,!1,0,0),i.vertexAttrib1f(a,0);i.deleteBuffer(s);let n=i.getParameter(i.MAX_TEXTURE_IMAGE_UNITS);for(let a=0;a<n;++a)i.activeTexture(i.TEXTURE0+a),i.bindTexture(i.TEXTURE_CUBE_MAP,null),i.bindTexture(i.TEXTURE_2D,null);i.activeTexture(i.TEXTURE0),i.useProgram(null),i.bindBuffer(i.ARRAY_BUFFER,null),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,null),i.bindFramebuffer(i.FRAMEBUFFER,null),i.bindRenderbuffer(i.RENDERBUFFER,null),i.disable(i.BLEND),i.disable(i.CULL_FACE),i.disable(i.DEPTH_TEST),i.disable(i.DITHER),i.disable(i.SCISSOR_TEST),i.blendColor(0,0,0,0),i.blendEquation(i.FUNC_ADD),i.blendFunc(i.ONE,i.ZERO),i.clearColor(0,0,0,0),i.clearDepth(1),i.clearStencil(-1)}this.canvas&&(this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this.canvas.width=1,this.canvas.height=1,this.canvas=null),this.gl=null,this._initialized=!1}addClock(e){e.__handler||(e.__handler=this,this._clocks.push(e))}addClocks(e){for(let t=0;t<e.length;t++)this.addClock(e[t])}removeClock(e){if(e.__handler){let t=this._clocks,i=t.length;for(;i--;)if(t[i].isEqual(e)){e.__handler=null,t.splice(i,1);break}}}}class so extends Ja{constructor(e,t={}){super(e,t),this._internalFormat=t.internalFormat?t.internalFormat.toUpperCase():"RGBA8",this._msaa=t.msaa!=null?t.msaa:4,this._glFilter=0,this.renderbuffers=new Array(this._size)}destroy(){let e=this.handler.gl;if(e){for(let t=0;t<this.renderbuffers.length;t++)e.deleteRenderbuffer(this.renderbuffers[t]);this.renderbuffers=new Array(this._size),e.deleteFramebuffer(this._fbo),e.deleteRenderbuffer(this._depthRenderbuffer),this._depthRenderbuffer=null,this._fbo=null,this._active=!1}}init(){let e=this.handler.gl;if(!e)return;this._glFilter=e[this._filter],this._fbo=e.createFramebuffer(),e.bindFramebuffer(e.FRAMEBUFFER,this._fbo);let t=[];for(let i=0;i<this.renderbuffers.length;i++){let r=e.createRenderbuffer();e.bindRenderbuffer(e.RENDERBUFFER,r),this._msaa>0?e.renderbufferStorageMultisample(e.RENDERBUFFER,this._msaa,e[this._internalFormat],this._width,this._height):e.renderbufferStorage(e.RENDERBUFFER,e[this._internalFormat],this._width,this._height),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0+i,e.RENDERBUFFER,r),t.push(e.COLOR_ATTACHMENT0+i),this.renderbuffers[i]=r,e.bindRenderbuffer(e.RENDERBUFFER,null)}e.drawBuffers(t),this._useDepth&&(this._depthRenderbuffer=e.createRenderbuffer(),e.bindRenderbuffer(e.RENDERBUFFER,this._depthRenderbuffer),e.renderbufferStorageMultisample(e.RENDERBUFFER,this._msaa,e[this._depthComponent],this._width,this._height),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,this._depthRenderbuffer),e.bindRenderbuffer(e.RENDERBUFFER,null)),e.bindFramebuffer(e.FRAMEBUFFER,null)}blitTo(e,t=0){let i=this.handler.gl;i.bindFramebuffer(i.READ_FRAMEBUFFER,this._fbo),i.bindFramebuffer(i.DRAW_FRAMEBUFFER,e._fbo),i.readBuffer(i.COLOR_ATTACHMENT0+t),i.clearBufferfv(i.COLOR,0,[0,0,0,1]),i.blitFramebuffer(0,0,this._width,this._height,0,0,e._width,e._height,i.COLOR_BUFFER_BIT,this._glFilter),i.bindFramebuffer(i.FRAMEBUFFER,null),i.bindFramebuffer(i.READ_FRAMEBUFFER,null),i.bindFramebuffer(i.DRAW_FRAMEBUFFER,null)}}Object.freeze(Object.defineProperty({__proto__:null,Framebuffer:Re,Handler:Tt,Multisample:so,Program:X,types:ue},Symbol.toStringTag,{value:"Module"}));class hs extends pi{constructor(e,t={}){super(e,t),this._image=t.image||null,this._src=t.src||null,this._onLoad_=null}get instanceName(){return"GeoImage"}abortLoading(){this._image instanceof HTMLImageElement&&(this._image.src="")}setSrc(e){this._planet&&this._planet._geoImageCreator.remove(this),this._src=e,this._sourceReady=!1,this._sourceCreated=!1,this._image=new Image,this._image.crossOrigin="Anonymous",this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_),this._image.src=e}setImage(e){this._planet&&this._planet._geoImageCreator.remove(this),this._sourceCreated=!1,this._sourceReady=!1,this._image=e,this._image.crossOrigin="Anonymous",this._src=e.src,Ar(this._image)?this._applyImage(this._image):(this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_))}_createSourceTexture(){!this._sourceCreated&&this._image&&(this._sourceTexture=this._planet.renderer.handler.createTexture_l(this._image),this._sourceCreated=!0)}_onLoad(e){this._applyImage(this._image),this._image instanceof HTMLImageElement&&this._image.removeEventListener("load",this._onLoad_),this._onLoad_=null}_applyImage(e){e&&(this._frameWidth=zt(2*e.width,4096),this._frameHeight=zt(3*e.height,4096),this._sourceReady=!0,this._planet&&this._planet._geoImageCreator.add(this))}loadMaterial(e){e.isLoading=!0,this._creationProceeding=!0,!this._sourceReady&&this._src?this._image?this._image instanceof HTMLImageElement&&(Ar(this._image)?this._applyImage(this._image):(this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_))):(this._image=new Image,this._image.crossOrigin="Anonymous",this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_),this._image.src=this._src):this._planet&&this._planet._geoImageCreator.add(this)}abortMaterialLoading(e){this._image&&this._image instanceof HTMLImageElement&&(this._image.src=""),this._creationProceeding=!1,e.isLoading=!1,e.isReady=!1}}Object.freeze(Object.defineProperty({__proto__:null,AtmosphereConfig:class extends ee{constructor(o={}){super(o),this.$maxOpacity=null,this.$minOpacity=null,this.$rayleight=null,this.$mie=null,this.$height=null,this.$bottomRadius=null,this.$mieScatteringCoefficient=null,this.$mieExtinctionCoefficient=null,this.$rayleighScatteringCoefficientA=null,this.$rayleighScatteringCoefficientB=null,this.$rayleighScatteringCoefficientC=null,this.$ozoneAbsorptionCoefficientA=null,this.$ozoneAbsorptionCoefficientB=null,this.$ozoneAbsorptionCoefficientC=null,this.$sunAngularRadius=null,this.$sunIntensity=null,this.$groundAlbedo=null,this.$ozoneDensityHeight=null,this.$ozoneDensityWide=null,this._toggleBtn=new _e({classList:["og-map-button","og-atmosphere_button"],icon:`<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
|
348
|
+
</button>`,{name:e.model.name}),...e}),this.events=le(Tc)}render(e){var t;return super.render(e),(t=this.el)==null||t.addEventListener("click",(i=>{this.events.dispatch(this.events.click,this.model,this,i)})),this}}const Ac=["select"];class Lc extends Ce{constructor(e){super({template:'<div class="og-object3d-collection"></div>',model:e.model,...e}),this._onAdd=t=>{this._addItem(t)},this.events=le(Ac),this._activeView=null}_addItem(e){let t=new Ec({model:e});t.appendTo(this.el),t.events.on("click",(i=>{var r,s;this._activeView&&((r=this._activeView.el)==null||r.classList.remove("active")),this._activeView=t,(s=this._activeView.el)==null||s.classList.add("active"),this.events.dispatch(this.events.select,i,t)}))}render(e){super.render(e);let t=this.model.getItems();for(let i of t)this._addItem(i);return this._initEvents(),this}_initEvents(){this.model.events.on("add",this._onAdd)}}const Pc=["select"];class Sc extends nt{constructor(e){super({classList:["og-object3d-manager"],title:"Object3D Collection",visible:!1,resizable:!0,useHide:!0,top:25,right:85,width:252,height:480,minHeight:100,minWidth:100}),this._onLoadClick=()=>{let t=new Ce({initRender:!0,template:'<input type="file" accept=".obj,.mtl" multiple />'});t.el&&(t.el.addEventListener("change",(i=>{const r=i.target;if(r.files){const s=Array.from(r.files),n=s.find((l=>l.name.toLowerCase().endsWith(".obj"))),a=s.find((l=>l.name.toLowerCase().endsWith(".mtl")));n&&(async function(l,h){return await $.readFileObj(l,h).then((c=>({name:l.name,objects:h?c:[$.merge(c)]})))})(n,a).then(this._addObject)}})),t.el.click())},this._addObject=t=>{this._object3dCollectionView.model.addItem(t)},this.events=le(Pc),this._object3dCollectionView=new Lc({model:e.model})}render(e){var t;super.render(e);let i=document.createElement("div");i.classList.add("og-editor_toolbar"),(t=this.container)==null||t.appendChild(i);let r=new st({classList:["og-editor_toolbar-button"],icon:'<svg class="svg-icon" style="vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M426.666667 170.666667H170.666667c-47.146667 0-84.906667 38.186667-84.906667 85.333333L85.333333 768c0 47.146667 38.186667 85.333333 85.333334 85.333333h682.666666c47.146667 0 85.333333-38.186667 85.333334-85.333333V341.333333c0-47.146667-38.186667-85.333333-85.333334-85.333333H512l-85.333333-85.333333z" /></svg>',title:"Load 3D object"});return r.appendTo(i),r.events.on("click",this._onLoadClick),this._object3dCollectionView.appendTo(this.container),this._object3dCollectionView.events.on("select",(s=>{this.events.dispatch(this.events.select,s)})),this}}const Mc=["add","remove"];class ss{constructor(e={}){this.events=le(Mc,this),this._items=ss.createItemsMap(e.collection||[])}static createItemsMap(e){let t=new Map;for(let i=0;i<e.length;i++)t.set(e[i].name,e[i]);return t}getItem(e){return this._items.get(e)}addItem(e,t=!1){this._items.has(e.name)&&!t||(this._items.set(e.name,e),this.events.dispatch(this.events.add,e))}getItems(){return Array.from(this._items,(([e,t])=>t))}}class ns extends ee{constructor(e={}){super({name:"CameraFrameComposer",autoActivate:!0,...e}),this._onPostdraw=()=>{for(let t=0,i=this._frameHandlers.length;t<i;t++)this._frameHandlers[t].frame()},this._cameraLayer=new _t({scaleByDistance:[100,1e6,1],pickingEnabled:!1}),this._cameraScene=new at("CameraScene"),this._frameHandlers=e.frameHandlers||[]}get frameHandlers(){return[...this._frameHandlers]}add(e){e.addTo(this),this._cameraLayer.add(e.cameraEntity)}oninit(){super.oninit(),this._cameraLayer.addTo(this._cameraScene)}activate(){super.activate(),this.renderer&&(this.renderer.events.on("postdraw",this._onPostdraw),this.renderer.addNode(this._cameraScene))}deactivate(){super.deactivate(),this.renderer&&(this.renderer.events.off("postdraw",this._onPostdraw),this.renderer.removeNode(this._cameraScene))}}let Rc=$.createFrustum();class Wa{constructor(e){this.camera=e.camera,this.frameBuffer=e.frameBuffer,this.frameHandler=e.frameHandler||null,this._composer=null,this._composerIndex=-1,this.showFrustum=e.showFrustum==null||e.showFrustum,this.cameraEntity=new V({visibility:!0,scale:this.frustumScale,geoObject:{tag:"frustum",color:"rgba(0,255,0,0.20)",object3d:Rc}}),this.frameBuffer.init()}get frustumScale(){return $.getFrustumScaleByCameraAspectRatio(1e3,this.camera.getViewAngle(),this.camera.getAspectRatio())}addTo(e){this._composer||(this._composer=e,this._composerIndex=e.frameHandlers.length,this._composer._frameHandlers.push(this))}remove(){this._composer&&(this._composer._frameHandlers.splice(this._composerIndex,1),this._composer=null,this._composerIndex=-1)}frame(){if(this.frameHandler&&this.frameBuffer.handler.gl&&(this.frameHandler(this),this.showFrustum)){let e=this.camera,t=$.getFrustumScaleByCameraAngles(100,e.horizontalViewAngle,e.verticalViewAngle);this.cameraEntity.setScale3v(t),this.cameraEntity.setCartesian3v(e.eye),this.cameraEntity.setAbsolutePitch(e.getAbsolutePitch()),this.cameraEntity.setAbsoluteYaw(e.getAbsoluteYaw()),this.cameraEntity.setAbsoluteRoll(e.getAbsoluteRoll())}}}function Yt(o){let e=1/Math.sqrt(o[0]*o[0]+o[1]*o[1]+o[2]*o[2]);o[0]*=e,o[1]*=e,o[2]*=e,o[3]*=e}class $a{constructor(e={}){this._pickingColorU=new Float32Array([0,0,0]),this._f=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],this.projectionMatrix=new re,this.inverseProjectionMatrix=new re,this.projectionViewMatrix=new re,this.projectionViewRTEMatrix=new re,this.inverseProjectionViewMatrix=new re,this.left=0,this.right=0,this.bottom=0,this.top=0,this.near=0,this.far=0,this.cameraFrustumIndex=e.cameraFrustumIndex!=null?e.cameraFrustumIndex:-1,this.setProjectionMatrix(e.fov||30,e.aspect||1,e.near||1,e.far||1e3)}getRightPlane(){return this._f[0]}getLeftPlane(){return this._f[1]}getBottomPlane(){return this._f[2]}getTopPlane(){return this._f[3]}getBackwardPlane(){return this._f[4]}getForwardPlane(){return this._f[5]}getProjectionViewMatrix(){return this.projectionViewMatrix._m}getProjectionViewRTEMatrix(){return this.projectionViewRTEMatrix._m}getProjectionMatrix(){return this.projectionMatrix._m}getInverseProjectionMatrix(){return this.inverseProjectionMatrix._m}setProjectionMatrix(e,t,i,r,s,n=10){if(s){let a=n*Math.tan(e*$e),l=a*t;this._setFrustumParams(a,l,i,r),this.projectionMatrix.setOrthographic(this.left,this.right,this.bottom,this.top,this.near,this.far)}else{let a=i*Math.tan(e*$e),l=a*t;this._setFrustumParams(a,l,i,r),this.projectionMatrix.setPerspective(this.left,this.right,this.bottom,this.top,this.near,this.far)}this.projectionMatrix.inverseTo(this.inverseProjectionMatrix)}_setFrustumParams(e,t,i,r){this.top=e,this.right=t,this.bottom=-this.top,this.left=-this.right,this.near=i,this.far=r}setProjectionViewRTEMatrix(e){this.projectionViewRTEMatrix=this.projectionMatrix.mul(e)}setViewMatrix(e){this.projectionViewMatrix=this.projectionMatrix.mul(e),this.projectionViewMatrix.inverseTo(this.inverseProjectionViewMatrix);let t=this.projectionViewMatrix._m;this._f[0][0]=t[3]-t[0],this._f[0][1]=t[7]-t[4],this._f[0][2]=t[11]-t[8],this._f[0][3]=t[15]-t[12],Yt(this._f[0]),this._f[1][0]=t[3]+t[0],this._f[1][1]=t[7]+t[4],this._f[1][2]=t[11]+t[8],this._f[1][3]=t[15]+t[12],Yt(this._f[1]),this._f[2][0]=t[3]+t[1],this._f[2][1]=t[7]+t[5],this._f[2][2]=t[11]+t[9],this._f[2][3]=t[15]+t[13],Yt(this._f[2]),this._f[3][0]=t[3]-t[1],this._f[3][1]=t[7]-t[5],this._f[3][2]=t[11]-t[9],this._f[3][3]=t[15]-t[13],Yt(this._f[3]),this._f[4][0]=t[3]-t[2],this._f[4][1]=t[7]-t[6],this._f[4][2]=t[11]-t[10],this._f[4][3]=t[15]-t[14],Yt(this._f[4]),this._f[5][0]=t[3]+t[2],this._f[5][1]=t[7]+t[6],this._f[5][2]=t[11]+t[10],this._f[5][3]=t[15]+t[14],Yt(this._f[5])}containsPoint(e){for(let t=0;t<6;t++)if(e.dotArr(this._f[t])+this._f[t][3]<=0)return!1;return!0}containsSphereBottomExc(e){let t=-e.radius,i=this._f;return!(e.center.dotArr(i[0])+i[0][3]<=t||e.center.dotArr(i[1])+i[1][3]<=t||e.center.dotArr(i[3])+i[3][3]<=t||e.center.dotArr(i[4])+i[4][3]<=t||e.center.dotArr(i[5])+i[5][3]<=t)}containsSphereButtom(e){let t=-e.radius,i=this._f;return!(e.center.dotArr(i[2])+i[2][3]<=t)}containsSphere(e){let t=-e.radius,i=this._f;return!(e.center.dotArr(i[0])+i[0][3]<=t||e.center.dotArr(i[1])+i[1][3]<=t||e.center.dotArr(i[2])+i[2][3]<=t||e.center.dotArr(i[3])+i[3][3]<=t||e.center.dotArr(i[4])+i[4][3]<=t||e.center.dotArr(i[5])+i[5][3]<=t)}containsSphere2(e,t){let i=-t;return!(e.dotArr(this._f[0])+this._f[0][3]<=i||e.dotArr(this._f[1])+this._f[1][3]<=i||e.dotArr(this._f[2])+this._f[2][3]<=i||e.dotArr(this._f[3])+this._f[3][3]<=i||e.dotArr(this._f[4])+this._f[4][3]<=i||e.dotArr(this._f[5])+this._f[5][3]<=i)}containsBox(e){let t,i,r=!0;for(let s=0;s<6;s++){t=0,i=0;for(let n=0;n<8&&(i===0||t===0);n++)e.vertices[n].dotArr(this._f[s])+this._f[s][3]<0?t++:i++;if(i===0)return!1;t>0&&(r=!0)}return r}}const K=class{};K.Linear=o=>o,K.QuadIn=o=>o*o,K.QuadOut=o=>1-(1-o)*(1-o),K.QuadInOut=o=>o<.5?2*o*o:1-Math.pow(-2*o+2,2)/2,K.CubicIn=o=>o*o*o,K.CubicOut=o=>1-Math.pow(1-o,3),K.CubicInOut=o=>o<.5?4*o*o*o:1-Math.pow(-2*o+2,3)/2,K.QuartIn=o=>o*o*o*o,K.QuartOut=o=>1-Math.pow(1-o,4),K.QuartInOut=o=>o<.5?8*o*o*o*o:1-Math.pow(-2*o+2,4)/2,K.QuintIn=o=>o*o*o*o*o,K.QuintOut=o=>1-Math.pow(1-o,5),K.QuintInOut=o=>o<.5?16*o*o*o*o*o:1-Math.pow(-2*o+2,5)/2,K.SineIn=o=>1-Math.cos(o*Math.PI/2),K.SineOut=o=>Math.sin(o*Math.PI/2),K.SineInOut=o=>-(Math.cos(Math.PI*o)-1)/2,K.ExpoIn=o=>o===0?0:Math.pow(2,10*o-10),K.ExpoOut=o=>o===1?1:1-Math.pow(2,-10*o),K.ExpoInOut=o=>o===0?0:o===1?1:o<.5?Math.pow(2,20*o-10)/2:(2-Math.pow(2,-20*o+10))/2,K.CircIn=o=>1-Math.sqrt(1-Math.pow(o,2)),K.CircOut=o=>Math.sqrt(1-Math.pow(o-1,2)),K.CircInOut=o=>o<.5?(1-Math.sqrt(1-Math.pow(2*o,2)))/2:(Math.sqrt(1-Math.pow(-2*o+2,2))+1)/2,K.BackIn=o=>2.70158*o*o*o-1.70158*o*o,K.BackOut=o=>1+2.70158*Math.pow(o-1,3)+1.70158*Math.pow(o-1,2),K.BackInOut=o=>{const e=2.5949095;return o<.5?Math.pow(2*o,2)*(7.189819*o-e)/2:(Math.pow(2*o-2,2)*((e+1)*(2*o-2)+e)+2)/2},K.ElasticIn=o=>{const e=2*Math.PI/3;return o===0?0:o===1?1:-Math.pow(2,10*o-10)*Math.sin((10*o-10.75)*e)},K.ElasticOut=o=>{const e=2*Math.PI/3;return o===0?0:o===1?1:Math.pow(2,-10*o)*Math.sin((10*o-.75)*e)+1},K.ElasticInOut=o=>{const e=2*Math.PI/4.5;return o===0?0:o===1?1:o<.5?-Math.pow(2,20*o-10)*Math.sin((20*o-11.125)*e)/2:Math.pow(2,-20*o+10)*Math.sin((20*o-11.125)*e)/2+1},K.BounceOut=o=>o<1/2.75?7.5625*o*o:o<2/2.75?7.5625*(o-=1.5/2.75)*o+.75:o<2.5/2.75?7.5625*(o-=2.25/2.75)*o+.9375:7.5625*(o-=2.625/2.75)*o+.984375,K.BounceIn=o=>1-K.BounceOut(1-o),K.BounceInOut=o=>o<.5?.5*(1-K.BounceOut(1-2*o)):.5*(K.BounceOut(2*o-1)+1);let Bc=K;const kc=["viewchange","moveend","flystart","flyend","flystop"],Xa=Bc.CubicInOut,Za=class xl{constructor(e={}){if(this.__id=xl.__counter__++,this.events=le(kc,this),this._isOrthographic=e.isOrthographic??!1,this._focusDistance=e.focusDistance!=null?e.focusDistance:10,this._width=e.width||1,this._height=e.height||1,this.eye=e.eye||new m,this.eyeHigh=new Float32Array(3),this.eyeLow=new Float32Array(3),this._viewAngle=e.viewAngle||47,this._horizontalViewAngle=0,this._viewMatrix=new re,this._viewMatrixRTE=new re,this._normalMatrix=new bt,this._r=new m(1,0,0),this._u=new m(0,1,0),this._b=new m(0,0,1),this._f=this._b.negateTo(),this._pr=this._r.clone(),this._pu=this._u.clone(),this._pb=this._b.clone(),this._peye=this.eye.clone(),this.isMoving=!1,this._flight=null,this._completeCallback=null,this._frameCallback=null,this._flying=!1,this._tanViewAngle_hrad=0,this._tanViewAngle_hradOneByHeight=0,this.frustums=[],this.frustumColors=[],e.frustums)for(let t=0,i=e.frustums.length;t<i;t++){let r=e.frustums[t],s=new $a({fov:this._viewAngle,aspect:this.getAspectRatio(),near:r[0],far:r[1]});s.cameraFrustumIndex=this.frustums.length,this.frustums.push(s),this.frustumColors.push(s._pickingColorU[0],s._pickingColorU[1],s._pickingColorU[2])}else{let t=1,i=500,r=new $a({fov:this._viewAngle,aspect:this.getAspectRatio(),near:t,far:i});r.cameraFrustumIndex=this.frustums.length,this.frustums.push(r),this.frustumColors.push(r._pickingColorU[0],r._pickingColorU[1],r._pickingColorU[2])}this.FARTHEST_FRUSTUM_INDEX=this.frustums.length-1,this.currentFrustumIndex=0,this.frustumColorIndex=0,this.isFirstPass=!1,this._projSizeConst=0,this.set(e.eye||new m(0,0,1),e.look||new m,e.up||new m(0,1,0))}get isOrthographic(){return this._isOrthographic}set isOrthographic(e){this._isOrthographic!==e&&(this._isOrthographic=e,this.refresh())}get focusDistance(){return this._focusDistance}set focusDistance(e){e!==this._focusDistance&&(this._focusDistance=e,this._isOrthographic&&this.refresh())}get id(){return this.__id}flyCartesian(e,t={}){this.stopFlying(),t.look=t.look||m.ZERO,t.up=t.up||m.UP,t.duration=t.duration||800;const i=t.ease||Xa;this._completeCallback=t.completeCallback||(()=>{}),this._frameCallback=t.frameCallback||(()=>{}),t.startCallback&&t.startCallback.call(this);let r=this.eye.clone(),s=this._u,n=this._b,a=t.up,l=e.clone(),h=m.sub(e,t.look),c=a.cross(h);h.normalize(),c.normalize();let d=h.cross(c);this._flight={fly:u=>{let g=1-i(u),f=r.smerp(l,g),p=s.smerp(d,g),_=m.add(f,n.smerp(h,g).negateTo()),v=new m(f.x-_.x,f.y-_.y,f.z-_.z),x=p.cross(v);v.normalize(),x.normalize();let y=v.cross(x);return{eye:f,n:v,u:x,v:y}},duration:t.duration,startedAt:Date.now()},this._flying=!0,this.events.dispatch(this.events.flystart,this)}stopFlying(){this._flying&&(this._flying=!1,this._flight=null,this._frameCallback=null,this.events.dispatch(this.events.flystop,this))}checkFly(){if(this._flying&&this._flight!==null){let e=Math.min((Date.now()-this._flight.startedAt)/this._flight.duration,1);const t=this._flight.fly(e);this.eye=t.eye,this._r=t.u,this._u=t.v,this._b=t.n,this._f.set(-this._b.x,-this._b.y,-this._b.z),this._frameCallback&&this._frameCallback(),this.update(),e>=1&&(this.stopFlying(),this._completeCallback&&(this.events.dispatch(this.events.flyend,this),this._completeCallback(),this._completeCallback=null))}}isFlying(){return this._flying}checkMoveEnd(){let e=this._r,t=this._u,i=this._b,r=this.eye;this._peye.equal(r)&&this._pr.equal(e)&&this._pu.equal(t)&&this._pb.equal(i)?(this.isMoving&&this.events.dispatch(this.events.moveend,this),this.isMoving=!1):this.isMoving=!0,this._pr.copy(e),this._pu.copy(t),this._pb.copy(i),this._peye.copy(r)}bindFrustumsPickingColors(e){for(let t=0;t<this.frustums.length;t++)e.assignPickingColor(this.frustums[t])}_init(e){this._setProj(this._viewAngle,this.getAspectRatio()),this.set(e.eye||new m(0,0,1),e.look||new m,e.up||new m(0,1,0))}getUp(){return this._u.clone()}getDown(){return this._u.negateTo()}getRight(){return this._r.clone()}getLeft(){return this._r.negateTo()}getForward(){return this._f.clone()}getBackward(){return this._b.clone()}update(){let e=this._r,t=this._u,i=this._b,r=this.eye;m.doubleToTwoFloat32Array(r,this.eyeHigh,this.eyeLow),this._viewMatrix.set([e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,-r.dot(e),-r.dot(t),-r.dot(i),1]),this._viewMatrixRTE.set([e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,0,0,0,1]);for(let s=0,n=this.frustums.length;s<n;s++)this.frustums[s].setViewMatrix(this._viewMatrix),this.frustums[s].setProjectionViewRTEMatrix(this._viewMatrixRTE);this.events.dispatch(this.events.viewchange,this)}refresh(){this._setProj(this._viewAngle,this.getAspectRatio()),this.update()}get width(){return this._width}get height(){return this._height}setViewportSize(e,t){this._width=e,this._height=t,this.refresh()}getAspectRatio(){return this._width/this._height}_setProj(e,t){this._viewAngle=e;for(let s=0,n=this.frustums.length;s<n;s++){let a=this.frustums[s];a.setProjectionMatrix(e,t,a.near,a.far,this._isOrthographic,this._focusDistance)}var i,r;this._horizontalViewAngle=(i=e,r=t,or*Math.atan(Math.tan($e*i)*r)),this._updateViewportParameters()}_updateViewportParameters(){this._tanViewAngle_hrad=Math.tan(this._viewAngle*$e),this._tanViewAngle_hradOneByHeight=this._tanViewAngle_hrad*(1/this._height),this._projSizeConst=Math.min(this._width<512?512:this._width,this._height<512?512:this._height)/(this._viewAngle*G)}setViewAngle(e){this._viewAngle=e,this.refresh()}getViewAngle(){return this._viewAngle}get viewAngle(){return this._viewAngle}get verticalViewAngle(){return this._viewAngle}get horizontalViewAngle(){return this._horizontalViewAngle}set(e,t,i){return this.eye.x=e.x,this.eye.y=e.y,this.eye.z=e.z,t=t||this._b,i=i||this._u,this._b.x=e.x-t.x,this._b.y=e.y-t.y,this._b.z=e.z-t.z,this._r.copy(i.cross(this._b)),this._b.normalize(),this._r.normalize(),this._u.copy(this._b.cross(this._r)),this._f.set(-this._b.x,-this._b.y,-this._b.z),this}look(e,t){this._b.set(this.eye.x-e.x,this.eye.y-e.y,this.eye.z-e.z),this._r.copy((t||this._u).cross(this._b)),this._b.normalize(),this._f.set(-this._b.x,-this._b.y,-this._b.z),this._r.normalize(),this._u.copy(this._b.cross(this._r))}slide(e,t,i){this.eye.x+=e*this._r.x+t*this._u.x+i*this._b.x,this.eye.y+=e*this._r.y+t*this._u.y+i*this._b.y,this.eye.z+=e*this._r.z+t*this._u.z+i*this._b.z}setRoll(e){let t=Math.cos(e),i=Math.sin(e),r=this._r.clone();this._r.set(t*r.x-i*this._u.x,t*r.y-i*this._u.y,t*r.z-i*this._u.z),this._u.set(i*r.x+t*this._u.x,i*r.y+t*this._u.y,i*r.z+t*this._u.z)}setPitch(e){let t=Math.cos(e),i=Math.sin(e),r=this._b;this._b.set(t*r.x-i*this._u.x,t*r.y-i*this._u.y,t*r.z-i*this._u.z),this._u.set(i*r.x+t*this._u.x,i*r.y+t*this._u.y,i*r.z+t*this._u.z)}setYaw(e){let t=Math.cos(e),i=Math.sin(e),r=this._r;this._r.set(t*r.x-i*this._b.x,t*r.y-i*this._b.y,t*r.z-i*this._b.z),this._b.set(i*r.x+t*this._b.x,i*r.y+t*this._b.y,i*r.z+t*this._b.z)}setPitchYawRoll(e,t,i){let r=new O;r.setPitchYawRoll(e,t,i),this.setRotation(r)}getPitch(){return this.getRotation().getPitch()}getYaw(){return this.getRotation().getYaw()}getRoll(){return this.getRotation().getRoll()}getAbsolutePitch(){return this.getRotation().getPitch()}getAbsoluteYaw(){return this.getRotation().getYaw()}getAbsoluteRoll(){return this.getRotation().getRoll()}getRotation(){return O.getLookRotation(this._f,this._u).conjugate()}setRotation(e,t,i,r){e.mulVec3Res(t||new m(0,1,0),this._u),e.mulVec3Res(i||new m(1,0,0),this._r),e.mulVec3Res(r||new m(0,0,1),this._b),this._f.set(-this._b.x,-this._b.y,-this._b.z)}rotate(e){e.mulVec3Res(this._u,this._u),e.mulVec3Res(this._r,this._r),e.mulVec3Res(this._b,this._b),this._f.set(-this._b.x,-this._b.y,-this._b.z)}unproject2v(e,t,i){return this.unproject(e.x,e.y,t,i)}unproject(e,t,i,r){let s=.5*this._width,n=.5*this._height,a=(e-s)/s,l=-(t-n)/n,h=this.frustums[0];if(this.isOrthographic){if(i){let c=.5*(h.right-h.left)*a,d=.5*(h.top-h.bottom)*l,u=this.getUp().scale(d),g=this.getRight().scale(c),f=u.addA(g),p=this.eye.add(f),_=this.getForward(),v=p.addA(_.scaleTo(i));return r&&r.copy(v),v.sub(this.eye).normalize()}return this.getForward()}{let c=h.inverseProjectionViewMatrix,d=c.mulVec4(new te(a,l,-1,1)).affinity();return c.mulVec4(new te(a,l,0,1)).affinity().subA(d).toVec3().normalize()}}project3v(e){return this.project(e.x,e.y,e.z)}project(e,t,i){let r=this.frustums[0].projectionViewMatrix.mulVec4(new te(e,t,i,1));return new N((1+r.x/r.w)*this._width*.5,(1-r.y/r.w)*this._height*.5)}rotateAround(e,t=!1,i=m.ZERO,r=m.UP){r=t?this._u:r;let s=re.getRotation(e,r),n=re.getRotationAroundPoint(e,i,r);this.eye=n.mulVec3(this.eye),this._u=s.mulVec3(this._u).normalize(),this._r=s.mulVec3(this._r).normalize(),this._b=s.mulVec3(this._b).normalize(),this._f.set(-this._b.x,-this._b.y,-this._b.z)}rotateHorizontal(e,t,i,r){this.rotateAround(e,t,i,r)}rotateVertical(e,t){this.rotateAround(e,!1,t,this._r)}projectedSize(e,t){if(this.isOrthographic){const i=this.frustums[0].projectionMatrix._m;return t*(this._height*i[5]*.5)}return Math.atan(t/this.eye.distance(e))*this._projSizeConst}getViewMatrix(){return this._viewMatrix._m}getNormalMatrix(){return this._normalMatrix._m}setCurrentFrustum(e){this.currentFrustumIndex=e,this.frustumColorIndex=10*(e+1)/255,this.isFirstPass=e===this.FARTHEST_FRUSTUM_INDEX}getCurrentFrustum(){return this.currentFrustumIndex}containsSphere(e){for(let t=0;t<this.frustums.length;t++)if(this.frustums[t].containsSphere(e))return!0;return!1}get frustum(){return this.frustums[this.currentFrustumIndex]}getProjectionMatrix(){return this.frustum.projectionMatrix._m}getProjectionViewMatrix(){return this.frustum.projectionViewMatrix._m}getProjectionViewRTEMatrix(){return this.frustum.projectionViewRTEMatrix._m}getInverseProjectionViewMatrix(){return this.frustum.inverseProjectionViewMatrix._m}getInverseProjectionMatrix(){return this.frustum.inverseProjectionMatrix._m}viewDistance(e,t=1e4){let i=e.add(this.getBackward().scaleTo(t));this.set(i,e),this.update()}copy(e){this.eye.copy(e.eye),this._r.copy(e._r),this._u.copy(e._u),this._b.copy(e._b),this._f.copy(e._f),this._width=e.width,this._height=e.height,this.setViewAngle(e.viewAngle),this.update()}getAltitude(){return this.eye.y}};Za.__counter__=0;let as=Za;class Qa extends as{constructor(e,t={}){super({...t,frustums:t.frustums||[[1,100.075],[100,1000.075],[1e3,101e4],[1e6,1e9]]}),this.planet=e,this.minAltitude=t.minAltitude||1,this.maxAltitude=t.maxAltitude||2e7,this._lonLat=this.planet.ellipsoid.cartesianToLonLat(this.eye),this._lonLatMerc=this._lonLat.forwardMercator(),this._terrainAltitude=this._lonLat.height,this._terrainPoint=new m,this._insideSegment=null,this.slope=0,this._keyLock=new mi,this._flight=null,this._completeCallback=null,this._frameCallback=null,this._flying=!1,this._checkTerrainCollision=!0,this.eyeNorm=this.eye.getNormal()}setTerrainCollisionActivity(e){this._checkTerrainCollision=e}update(){this.events.stopPropagation();let e=this.maxAltitude+this.planet.ellipsoid.getEquatorialSize();this.eye.length()>e&&this.eye.copy(this.eye.getNormal().scale(e)),super.update(),this.updateGeodeticPosition(),this.eyeNorm=this.eye.getNormal(),this.slope=this._b.dot(this.eyeNorm),this.events.dispatch(this.events.viewchange,this)}updateGeodeticPosition(){this.planet.ellipsoid.cartesianToLonLatRes(this.eye,this._lonLat),Math.abs(this._lonLat.lat)<=de&&P.forwardMercatorRes(this._lonLat,this._lonLatMerc)}setAltitude(e){let t=this._terrainPoint,i=this.planet.ellipsoid.getSurfaceNormal3v(this.eye);this.eye.x=i.x*e+t.x,this.eye.y=i.y*e+t.y,this.eye.z=i.z*e+t.z,this._terrainAltitude=e}getAltitude(){return this._terrainAltitude}setLonLat(e,t,i){this.stopFlying(),this._lonLat.set(e.lon,e.lat,e.height||this._lonLat.height);let r=this.planet.ellipsoid,s=r.lonLatToCartesian(this._lonLat),n=t?r.lonLatToCartesian(t):m.ZERO;this.set(s,n,i||s.getNormal()),this.update()}getLonLat(){return this._lonLat}getHeight(){return this._lonLat.height}getExtentPosition(e,t){t=t||0;let i=e.getNorth(),r=e.getSouth(),s=e.getEast(),n=e.getWest();n>s&&(s+=360);let a=this.planet.ellipsoid,l=new P(s,i),h=a.lonLatToCartesian(l);l.lat=r;let c=a.lonLatToCartesian(l);l.lon=n;let d=a.lonLatToCartesian(l);l.lat=i;let u=a.lonLatToCartesian(l),g=m.sub(h,d).scale(.5).addA(d),f=g.length();f<1e-6&&(l.lon=.5*(s+n),l.lat=.5*(i+r),g=a.lonLatToCartesian(l)),u.subA(g),c.subA(g),h.subA(g),d.subA(g);let p=g.getNormal(),_=p.cross(m.NORTH).normalize(),v=_.cross(p).normalize(),x=Math.max(Math.abs(v.dot(u)),Math.abs(v.dot(c)),Math.abs(v.dot(h)),Math.abs(v.dot(d))),y=Math.max(Math.abs(_.dot(u)),Math.abs(_.dot(c)),Math.abs(_.dot(h)),Math.abs(_.dot(d))),w=Math.tan(this._viewAngle*G*.5),b=this.getAspectRatio()*w,C=Math.max(y/b,x/w);return g.normalize(),g.scale(f+C+t),g}viewExtent(e,t){this.stopFlying(),this.set(this.getExtentPosition(e,t),m.ZERO,m.NORTH),this.update()}flyExtent(e,t,i={}){i.look=m.ZERO,this.flyCartesian(this.getExtentPosition(e,t),i)}viewDistance(e,t=1e4){let i=this.eye.add(this.getForward().scaleTo(t)),r=O.getRotationBetweenVectors(i.getNormal(),e.getNormal());if(r.isZero()){let s=e.add(this.getBackward().scaleTo(t));this.set(s,e)}else{let s=e.add(r.mulVec3(this.getBackward()).scale(t)),n=r.mulVec3(this.getUp());this.set(s,e,n)}this.update()}flyLonLat(e,t={}){let i=new P(e.lon,e.lat,e.height||this._lonLat.height);this.flyCartesian(this.planet.ellipsoid.lonLatToCartesian(i),t)}flyDistance(e,t=1e4,i={}){let r=this.eye.add(this.getForward().scaleTo(t)),s=O.getRotationBetweenVectors(r.getNormal(),e.getNormal());if(s.isZero()){let n=e.add(this.getBackward().scaleTo(t));this.set(n,e)}else{let n=e.add(s.mulVec3(this.getBackward()).scale(t)),a=s.mulVec3(this.getUp());i.look=e,i.up=a,this.flyCartesian(n,i)}}flyCartesian(e,t={}){this.stopFlying(),t.preventLock||(this.planet.layerLock.lock(this._keyLock),this.planet.terrainLock.lock(this._keyLock),this.planet.normalMapCreator.lock(this._keyLock)),t.amplitude=t.amplitude!=null?t.amplitude:1,t.look=t.look||m.ZERO,t.up=t.up||m.NORTH,t.duration=t.duration||800;const i=t.ease||Xa;this._completeCallback=t.completeCallback||(()=>{}),this._frameCallback=t.frameCallback||(()=>{}),t.startCallback&&t.startCallback.call(this),t.look instanceof P&&(t.look=this.planet.ellipsoid.lonLatToCartesian(t.look));let r=this.eye.clone(),s=this._u,n=this._b,a=this.planet.ellipsoid.cartesianToLonLat(e),l=t.up,h=this.planet.ellipsoid.lonLatToCartesian(new P(a.lon,a.lat,0)),c=m.sub(e,t.look),d=l.cross(c);c.normalize(),d.normalize();let u=c.cross(d),g=r.getNormal(),f=h.getNormal(),p=1-g.dot(f),_=t.amplitude*Ss*Math.sqrt(p>0?p:0),v=6639613,x=Math.max(this._lonLat.height,a.height);x>v&&(v=x);let y=x+2.5*_*(v-x),w=m.ZERO;this._flight={fly:b=>{let C,E=i(b),T=1-E;if(E>=1)C=e.clone();else{let B=r.smerp(e,T).normalize(),D=this.planet.getRayIntersectionEllipsoid(new H(w,B)),A=this._lonLat.height*T*T*T+3*y*T*T*E+3*y*T*E*E+a.height*E*E*E;C=D.addA(B.scale(A))}let L=s.smerp(u,T),S=m.add(C,n.smerp(c,T).negateTo()),R=new m(C.x-S.x,C.y-S.y,C.z-S.z),z=L.cross(R);R.normalize(),z.normalize();let F=R.cross(z);return{eye:C,n:R,u:z,v:F}},duration:t.duration,startedAt:Date.now()},this._flying=!0,this.events.dispatch(this.events.flystart,this)}stopFlying(){this._flying&&(this.planet.layerLock.free(this._keyLock),this.planet.terrainLock.free(this._keyLock),this.planet.normalMapCreator.free(this._keyLock),super.stopFlying())}rotateLeft(e,t){this.rotateHorizontal(e,t!==!0,m.ZERO),this.update()}rotateRight(e,t){this.rotateHorizontal(-e,t!==!0,m.ZERO),this.update()}rotateUp(e){this.rotateVertical(e,m.ZERO),this.update()}rotateDown(e){this.rotateVertical(-e,m.ZERO),this.update()}rotateVertical(e,t,i=0){let r=new re().setRotation(this._r,e),s=new re().setIdentity().translate(t),n=new re().setIdentity().translate(t.negateTo()),a=s.mul(r).mul(n).mulVec3(this.eye),l=r.mulVec3(this._u).normalize(),h=r.mulVec3(this._r).normalize(),c=r.mulVec3(this._b).normalize(),d=a.getNormal(),u=c.dot(d);if(!(l.dot(d)<=0))if(i){let g=u-this.slope;if(u<i&&g<0)return;(u>.1&&l.dot(d)>0||this.slope<=.1||this._u.dot(this.eye.getNormal())<=0)&&(this.eye=a,this._u=l,this._r=h,this._b=c,this._f.set(-c.x,-c.y,-c.z))}else this.eye=a,this._u=l,this._r=h,this._b=c,this._f.set(-c.x,-c.y,-c.z)}checkTerrainCollision(){if(this._terrainAltitude=this._lonLat.height,this._insideSegment&&this._insideSegment.planet)return this._terrainAltitude=this._insideSegment.getTerrainPoint(this.eye,this._insideSegment.getInsideLonLat(this),this._terrainPoint),this._terrainAltitude<this.minAltitude&&this._checkTerrainCollision&&this.setAltitude(this.minAltitude),this._terrainPoint}getSurfaceVisibleDistance(e){let t=this.planet.ellipsoid.equatorialSize;return t*Math.acos(t/(t+this._lonLat.height+e))}getHeading(){let e=this.eye.getNormal(),t=m.proj_b_to_plane(this.slope>=.97?this.getUp():this.getForward(),e).normalize(),i=m.proj_b_to_plane(m.NORTH,e).normalize(),r=Math.sign(e.dot(t.cross(i)))*Math.acos(t.dot(i))*J;return r<0?360+r:r}isVisible(e){let t=this.eye.length();return this.eye.distance(e)<Math.sqrt(t*t-this.planet.ellipsoid.equatorialSizeSqr)}getPitch(){return this.planet.getFrameRotation(this.eye).conjugate().inverse().mul(this.getRotation()).getPitch()}getYaw(){return this.planet.getFrameRotation(this.eye).conjugate().inverse().mul(this.getRotation()).getYaw()}getRoll(){return this.planet.getFrameRotation(this.eye).conjugate().inverse().mul(this.getRotation()).getRoll()}setPitch(e){let t=this.planet.getFrameRotation(this.eye),i=new O;i.setPitchYawRoll(e,this.getYaw(),this.getRoll(),t),this.setRotation(i)}setYaw(e){let t=this.planet.getFrameRotation(this.eye),i=new O;i.setPitchYawRoll(this.getPitch(),e,this.getRoll(),t),this.setRotation(i)}setRoll(e){let t=this.planet.getFrameRotation(this.eye),i=new O;i.setPitchYawRoll(this.getPitch(),this.getYaw(),e,t),this.setRotation(i)}setPitchYawRoll(e,t,i){let r=this.planet.getFrameRotation(this.eye),s=new O;s.setPitchYawRoll(e,t,i,r).conjugate(),this.setRotation(s)}}const Ka=class bl{constructor(e,t={}){this.handler=e,this.__id=bl.__counter__++,this._fbo=null,this._width=t.width||e.canvas.width,this._height=t.height||e.canvas.height,this._depthComponent=t.depthComponent!=null?t.depthComponent:"DEPTH_COMPONENT16",this._useDepth=t.useDepth==null||t.useDepth,this._active=!1,this._size=t.size||1,this._depthRenderbuffer=null,this._filter=t.filter||"NEAREST"}get width(){return this._width}get height(){return this._height}setSize(e,t,i=!1){this._width=e,this._height=t,this._active&&this.handler.gl.viewport(0,0,this._width,this._height),(this._useDepth||i)&&(this.destroy(),this.init())}init(){}destroy(){}isComplete(){let e=this.handler.gl;return e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE}checkStatus(){let e=this.handler.gl;return e.checkFramebufferStatus(e.FRAMEBUFFER)}activate(){let e=this.handler.gl;e.bindFramebuffer(e.FRAMEBUFFER,null),e.bindFramebuffer(e.FRAMEBUFFER,this._fbo),e.viewport(0,0,this._width,this._height),this._active=!0;let t=this.handler.framebufferStack.current().data;return t&&(t._active=!1),this.handler.framebufferStack.push(this),this}deactivate(){let e=this.handler,t=e.gl;t.bindFramebuffer(t.FRAMEBUFFER,null),this._active=!1;let i=this.handler.framebufferStack.popPrev();i?(t.bindFramebuffer(t.FRAMEBUFFER,i._fbo),t.viewport(0,0,i._width,i._height)):t.viewport(0,0,e.canvas.width,e.canvas.height)}isEqual(e){return!!e&&this.__id===e.__id}};Ka.__counter__=0;let Ja=Ka;class xi{constructor(e=256,t=256){this._canvas=document.createElement("canvas"),this._canvas.width=e,this._canvas.height=t,this._context=this._canvas.getContext("2d",{willReadFrequently:!0})}getCanvas(){return this._canvas}getContext(){return this._context}fillEmpty(){let e=this._context.getImageData(0,0,this._canvas.width,this._canvas.height),t=e.data;for(let i=0,r=t.length;i<r;i+=4)t[i]=t[i+1]=t[i+2]=t[i+3]=0;this._context.putImageData(e,0,0)}fill(e){this._context.fillStyle=e,this._context.fill()}getData(){return this._context.getImageData(0,0,this._canvas.width,this._canvas.height).data}fillColor(e){this._context.fillStyle=e,this._context.fillRect(0,0,this._canvas.width,this._canvas.height)}setData(e){let t=this._context.createImageData(this._canvas.width,this._canvas.height);t.data.set(e),this._context.putImageData(t,0,0)}resize(e,t){this._canvas.width=e,this._canvas.height=t,this._context=this._canvas.getContext("2d")}drawImage(e,t,i,r,s){this._context.drawImage(e,t||0,i||0,r||e.width,s||e.height)}getImage(){let e=new Image;return e.width=this.getWidth(),e.height=this.getHeight(),e.src=this._canvas.toDataURL("image/png"),e}getTextWidth(e){let t=this._context.measureText(e);return Math.round(t.width)}drawText(e,t=0,i=14,r="normal 14px Verdana",s="black"){this._context.fillStyle=s,this._context.font=r,this._context.fillText(e,t,i)}getWidth(){return this._canvas.width}getHeight(){return this._canvas.height}load(e,t){let i=new Image,r=this;i.onload=function(){r.resize(i.width,i.height),r._context.drawImage(i,0,0,i.width,i.height),t&&t(i)},i.src=e}openImage(){let e=this.getImage(),t="<!DOCTYPE html>";t+="<html>",t+="<head><title>Print</title></head>",t+="<body>",t+='<img src="'+e.src+'">',t+="</body>",t+="</html>";let i=window.open("","","width="+e.width+"px ,height="+e.height+"px");i&&(i.document.open(),i.document.write(t),i.document.close(),i.focus())}destroy(){this._canvas.width=1,this._canvas.height=1,this._canvas=null,this._context=null}}const eo={UNSIGNED_BYTE:Uint8Array,FLOAT:Float32Array};class Re extends Ja{constructor(e,t={}){super(e,t),this.readPixelBuffersAsync=i=>{const r=this.handler.gl;if(this._skipFrame)return;this._skipFrame=!0;let s=this.width,n=this.height,a=this.pixelBuffers;this.activate();for(let d=0;d<a.length;d++){let u=a[d];r.bindBuffer(r.PIXEL_PACK_BUFFER,u.buffer),r.bufferData(r.PIXEL_PACK_BUFFER,u.data.byteLength,r.STREAM_READ),r.readBuffer(u.glAttachment),r.readPixels(0,0,s,n,r.RGBA,u.glType,0),r.bindBuffer(r.PIXEL_PACK_BUFFER,null)}this.deactivate();const l=r.fenceSync(r.SYNC_GPU_COMMANDS_COMPLETE,0);var h,c;r.flush(),(h=r,c=l,new Promise(((d,u)=>{(function g(){const f=h.clientWaitSync(c,0,0);f==h.WAIT_FAILED?u():f==h.TIMEOUT_EXPIRED?requestAnimationFrame(g):d()})()}))).then((()=>{this._skipFrame=!1,r.deleteSync(l);for(let d=0;d<a.length;d++){let u=a[d];u.data&&(r.bindBuffer(r.PIXEL_PACK_BUFFER,u.buffer),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,u.data))}r.bindBuffer(r.PIXEL_PACK_BUFFER,null),i&&i(this)}))},this._targets=Re.createTargets(t.targets),this._size=this._targets.length,this._renderbufferTarget=t.renderbufferTarget!=null?t.renderbufferTarget:"DEPTH_ATTACHMENT",this.textures=t.textures||new Array(this._size),this.pixelBuffers=[],this._skipFrame=!1}static createTargets(e){let t=0,i=0;return e?e.map((r=>{let s=r.attachment||"COLOR_ATTACHMENT";s==="COLOR_ATTACHMENT"&&(s="COLOR_ATTACHMENT"+t++);let n=r.type||"UNSIGNED_BYTE";return{internalFormat:r.internalFormat||"RGBA",format:r.format||"RGBA",type:n,attachment:s,filter:r.filter||"NEAREST",pixelBufferIndex:r.readAsync?i++:-1,TypeArrayConstructor:eo[n]}})):[{internalFormat:"RGBA",format:"RGBA",type:"UNSIGNED_BYTE",attachment:"COLOR_ATTACHMENT0",filter:"NEAREST",pixelBufferIndex:-1,TypeArrayConstructor:eo.UNSIGNED_BYTE}]}destroy(){let e=this.handler.gl;if(e){for(let t=0;t<this.textures.length;t++)e.deleteTexture(this.textures[t]);this.textures=new Array(this._size);for(let t=0;t<this.pixelBuffers.length;t++)this.pixelBuffers[t].data=null,e.deleteBuffer(this.pixelBuffers[t].buffer);this.pixelBuffers=[],e.deleteFramebuffer(this._fbo),e.deleteRenderbuffer(this._depthRenderbuffer),this._depthRenderbuffer=null,this._fbo=null,this._active=!1}}init(){let e=this.handler.gl;if(!e)return;this._fbo=e.createFramebuffer(),e.bindFramebuffer(e.FRAMEBUFFER,this._fbo);let t=[];for(let i=0;i<this._targets.length;i++){let r=this._targets[i],s=this.textures[i]||this.handler.createEmptyTexture2DExt(this._width,this._height,r.filter,r.internalFormat,r.format,r.type),n=e[r.attachment];s&&(this.bindOutputTexture(s,n),this.textures[i]=s),r.attachment!=="DEPTH_ATTACHMENT"&&t.push(n),r.pixelBufferIndex!==-1&&this._createPixelBuffer(r)}e.drawBuffers&&e.drawBuffers(t),this._useDepth&&(this._depthRenderbuffer=e.createRenderbuffer(),e.bindRenderbuffer(e.RENDERBUFFER,this._depthRenderbuffer),e.renderbufferStorage(e.RENDERBUFFER,e[this._depthComponent],this._width,this._height),e.framebufferRenderbuffer(e.FRAMEBUFFER,e[this._renderbufferTarget],e.RENDERBUFFER,this._depthRenderbuffer),e.bindRenderbuffer(e.RENDERBUFFER,null)),e.bindFramebuffer(e.FRAMEBUFFER,null)}getPixelBufferData(e=0){let t=this._targets[e].pixelBufferIndex;return t!==-1?this.pixelBuffers[t].data:null}_createPixelBuffer(e){let t=this.handler.gl,i=e.pixelBufferIndex,r=this.pixelBuffers[i];r||(r=this.pixelBuffers[i]={buffer:null,data:null,glType:-1,glAttachment:-1});let s=this.width*this.height*4;r.data=null,r.data=new e.TypeArrayConstructor(s),r.buffer=t.createBuffer(),t.bindBuffer(t.PIXEL_PACK_BUFFER,r.buffer),t.bufferData(t.PIXEL_PACK_BUFFER,s,t.STREAM_READ),t.bindBuffer(t.PIXEL_PACK_BUFFER,null),r.glType=t[e.type],r.glAttachment=t[e.attachment]}bindOutputTexture(e,t){let i=this.handler.gl;i.bindTexture(i.TEXTURE_2D,e),i.framebufferTexture2D(i.FRAMEBUFFER,t||i.COLOR_ATTACHMENT0,i.TEXTURE_2D,e,0),i.bindTexture(i.TEXTURE_2D,null)}readPixels(e,t,i,r=0,s=1,n=1){let a=this.handler.gl;a.bindFramebuffer(a.FRAMEBUFFER,this._fbo),a.readBuffer&&a.readBuffer(a.COLOR_ATTACHMENT0+r||0),a.readPixels(t*this._width,i*this._height,s,n,a.RGBA,a[this._targets[r].type],e),a.bindFramebuffer(a.FRAMEBUFFER,null)}readAllPixels(e,t=0){let i=this.handler.gl;i.bindFramebuffer(i.FRAMEBUFFER,this._fbo),i.readBuffer&&i.readBuffer(i.COLOR_ATTACHMENT0+t),i.readPixels(0,0,this._width,this._height,i.RGBA,i[this._targets[t].type],e),i.bindFramebuffer(i.FRAMEBUFFER,null)}getImage(){let e=new Uint8Array(4*this._width*this._height);this.readAllPixels(e);let t=new xi(this._width,this._height);return t.setData(e),t.getImage()}readData(e,t,i,r=0){const s=this.width,n=this.height,a=Math.floor(e*(s-1)),l=4*(Math.floor(t*(n-1))*s+a),h=this.pixelBuffers[r].data;h&&(i[0]=h[l],i[1]=h[l+1],i[2]=h[l+2],i[3]=h[l+3])}}const Ic=["tick","end","start","stop"],to=class wl{constructor(e={}){this.__handler=null,this.active=!0,this.__id=wl.__counter__++,this.events=le(Ic,this),this.name=e.name||"",this.startDate=e.startDate||0,this.endDate=e.endDate||0;let t=e.currentDate||$i(new Date);e.startDate&&t<e.startDate&&(t=e.startDate),e.endDate&&t>e.endDate&&(t=e.endDate),this.currentDate=t,this._multiplier=e.multiplier!==void 0?e.multiplier:1,this._running=1,this.deltaTicks=0,this.active=!0,this._intervalDelay=0,this._intervalStart=0,this._intervalCallback=null}clearInterval(){this._intervalDelay=0,this._intervalStart=0,this._intervalCallback=null}setInterval(e,t){this._intervalStart=this.currentDate,this._intervalDelay=e*Rr,this._intervalCallback=t}setDate(e){let t=$i(e);this.startDate&&t<this.startDate&&(t=this.startDate),this.endDate&&t>this.endDate&&(t=this.endDate),this.currentDate=t}getDate(){return Ir(this.currentDate)}reset(){this.startDate&&(this.currentDate=this.startDate)}tick(e){let t=this._multiplier*this._running;if(this.deltaTicks=e*t,this.active){let i=Qs(this.currentDate,this.deltaTicks);t>0?this.endDate&&i>this.endDate?(this.currentDate=this.startDate,this.events.dispatch(this.events.end,this)):this.currentDate=i:this.startDate&&i<this.startDate?(this.currentDate=this.endDate,this.events.dispatch(this.events.end,this)):this.currentDate=i,this._intervalCallback&&this.currentDate-this._intervalStart>=this._intervalDelay&&(this._intervalStart=this.currentDate,this._intervalCallback(this)),this.events.dispatch(this.events.tick,this)}}isEqual(e){return this.__id===e.__id}start(){this._running===0&&(this._running=1,this.events.dispatch(this.events.start,this))}get multiplier(){return this._multiplier}set multiplier(e){this._multiplier=e}stop(){this._running===1&&(this._running=0,this.events.dispatch(this.events.stop,this))}};to.__counter__=0;let zc=to;class Dc{constructor(e,t){t._programController=this,this._program=t,this._handler=e,this._activated=!1}initialize(){this._handler.gl&&this._program.createProgram(this._handler.gl)}getProgram(){return this._program}activate(){if(!this._activated){this._handler.activeProgram.deactivate(),this._handler.activeProgram=this;let e=this._program;this._activated=!0,e.enableAttribArrays(),e.use()}return this}remove(){let e=this._handler.programs;e[this._program.name]&&(this._activated&&this.deactivate(),this._program.delete(),delete e[this._program.name])}deactivate(){this._program.disableAttribArrays(),this._activated=!1}isActive(){return this._activated}set(e){return this.activate(),this._program.set(e),this}drawIndexBuffer(e,t){return this._program.drawIndexBuffer(e,t),this}drawArrays(e,t){return this._program.drawArrays(e,t),this}}let io=class{constructor(){this.next=null,this.prev=null,this.data=null}};class os{constructor(e=256){this._current=new io,this._head=this._current;for(let t=0;t<e;t++){let i=new io;i.prev=this._current,this._current.next=i,this._current=i}this._current=this._head}current(){return this._current}push(e){this._current=this._current.next,this._current.data=e}pop(){let e=this._current.data;return this._current=this._current.prev,e}popPrev(){return this._current=this._current.prev,this._current.data}}const ro=["","WEBKIT_","MOZ_"],ls=["webgl2","webgl"];class Tt{constructor(e,t={}){this.framebufferStack=new os,this._requestAnimationFrameId=0,this.drawFrame=()=>{let i=window.performance.now(),r=this.deltaTime;this.deltaTime=.5*(i-this._lastAnimationFrameTime+this.prevDeltaTime),this.deltaTime>3?this.deltaTime=3:this.deltaTime<1&&(this.deltaTime=1),this.prevDeltaTime=r,this._lastAnimationFrameTime=i,this.defaultClock.tick(this.deltaTime);for(let n=0;n<this._clocks.length;n++)this._clocks[n].tick(this.deltaTime);let s=this.canvas;Math.floor(s.clientWidth*this._params.pixelRatio)===s.width&&Math.floor(s.clientHeight*this._params.pixelRatio)===s.height||(s.clientWidth===0||s.clientHeight===0?this.stop():document.hidden||(this.start(),this.setSize(s.clientWidth,s.clientHeight))),this._frameCallback()},this.events=le(["visibilitychange","resize"]),this._throttledDrawFrame=this.drawFrame,this.defaultClock=new zc,this._clocks=[],this.prevDeltaTime=0,this.deltaTime=0,this.canvas=null,this.gl=null,this.programs={},this.activeProgram=null,this._canvasSize=[0,0],this._params={anisotropy:t.anisotropy||4,width:t.width||256,height:t.height||256,pixelRatio:$s("og_dpi")||t.pixelRatio||1,extensions:t.extensions||[],context:t.context||{}},this.extensions={},this._canvasTarget=e,this._lastAnimationFrameTime=0,this._initialized=!1,this._frameCallback=function(){},this.transparentTexture=null,this.defaultTexture=null,this.framebufferStack=new os,this.createTexture_n=this.createTexture_n_webgl2.bind(this),this.createTexture_l=this.createTexture_l_webgl2.bind(this),this.createTexture_mm=this.createTexture_mm_webgl2.bind(this),this.createTexture_a=this.createTexture_a_webgl2.bind(this),this.createTexture={NEAREST:this.createTexture_n,LINEAR:this.createTexture_l,MIPMAP:this.createTexture_mm,ANISOTROPIC:this.createTexture_a},this.createTextureDefault=this.createTexture_n,this.ONCANVASRESIZE=null,this._createCanvas(),(t.autoActivate||Ue(t.autoActivate))&&this.initialize()}set frameDelay(e){this._throttledDrawFrame=e===0?this.drawFrame:si(this.drawFrame,e)}isInitialized(){return this._initialized}_createCanvas(){this._canvasTarget?this._canvasTarget instanceof HTMLElement?this.canvas=this._canvasTarget:this.canvas=document.getElementById(this._canvasTarget)||document.querySelector(this._canvasTarget):(this.canvas=document.createElement("canvas"),this.canvas.width=this._params.width,this.canvas.height=this._params.height)}static getExtension(e,t){if(!e)return;let i,r;for(i in ro)if(r=e.getExtension(ro[i]+t),r)return r}static getContext(e,t){let i=null;try{let r=new URLSearchParams(location.search).get("og_ver");if(r)i=e.getContext(r,t),i&&(i.type=r);else for(let s=0;s<ls.length;s++)if(i=e.getContext(ls[s],t),i){i.type=ls[s];break}}catch{Qe.logErr("exception during the GL context initialization")}return i||Qe.logErr("could not initialise WebGL"),i}setFrameCallback(e){e&&(this._frameCallback=e)}createEmptyTexture2DExt(e=1,t=1,i="NEAREST",r="RGBA",s="RGBA",n="UNSIGNED_BYTE",a="CLAMP_TO_EDGE",l=0){let h=this.gl,c=h.createTexture();return h.bindTexture(h.TEXTURE_2D,c),h.texImage2D(h.TEXTURE_2D,l,h[r.toUpperCase()],e,t,0,h[s.toUpperCase()],h[n.toUpperCase()],null),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h[i.toUpperCase()]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h[i.toUpperCase()]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h[a.toUpperCase()]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h[a.toUpperCase()]),h.bindTexture(h.TEXTURE_2D,null),c}createEmptyTexture_n(e,t,i,r){let s=this.gl,n=s.createTexture();return s.bindTexture(s.TEXTURE_2D,n),s.texImage2D(s.TEXTURE_2D,0,i||s.RGBA,e,t,0,s.RGBA,s.UNSIGNED_BYTE,null),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,r||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,r||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),n}createEmptyTexture_l(e,t,i,r){let s=this.gl,n=s.createTexture();return s.bindTexture(s.TEXTURE_2D,n),s.texImage2D(s.TEXTURE_2D,0,i||s.RGBA,e,t,0,s.RGBA,s.UNSIGNED_BYTE,null),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,r||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,r||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),n}createTexture_n_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_l_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_mm_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_a_webgl1(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,t||s.RGBA,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameterf(s.TEXTURE_2D,this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this._params.anisotropy),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_n_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,1,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.NEAREST),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_l_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,1,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_mm_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,2,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}createTexture_a_webgl2(e,t,i,r=null){let s=this.gl;return r=r||s.createTexture(),s.bindTexture(s.TEXTURE_2D,r),s.texStorage2D(s.TEXTURE_2D,2,t||s.RGBA8,e.width,e.height),s.texSubImage2D(s.TEXTURE_2D,0,0,0,e.width,e.height,s.RGBA,s.UNSIGNED_BYTE,e),s.generateMipmap(s.TEXTURE_2D),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.texParameterf(s.TEXTURE_2D,this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this._params.anisotropy),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,i||s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,i||s.CLAMP_TO_EDGE),s.bindTexture(s.TEXTURE_2D,null),r}loadCubeMapTexture(e){let t=this.gl,i=t.createTexture();t.bindTexture(t.TEXTURE_CUBE_MAP,i),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_CUBE_MAP,t.TEXTURE_MAG_FILTER,t.LINEAR);let r=[[e.px,t.TEXTURE_CUBE_MAP_POSITIVE_X],[e.nx,t.TEXTURE_CUBE_MAP_NEGATIVE_X],[e.py,t.TEXTURE_CUBE_MAP_POSITIVE_Y],[e.ny,t.TEXTURE_CUBE_MAP_NEGATIVE_Y],[e.pz,t.TEXTURE_CUBE_MAP_POSITIVE_Z],[e.nz,t.TEXTURE_CUBE_MAP_NEGATIVE_Z]],s=new xi;s.fillEmpty();let n=s.getImage();for(let a=0;a<r.length;a++){let l=r[a][1];t.bindTexture(t.TEXTURE_CUBE_MAP,i),t.texImage2D(l,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,n)}for(let a=0;a<r.length;a++){let l=r[a][1],h=new Image;h.crossOrigin="",h.onload=(function(c,d,u){return function(){t&&c&&(t.bindTexture(t.TEXTURE_CUBE_MAP,c),t.texImage2D(d,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,u))}})(i,l,h),h.src=r[a][0]}return i}addProgram(e,t=!1){if(this.programs[e.name])console.warn(`Shader program: "${e.name}" already exists.`);else{let i=new Dc(this,e);this.programs[e.name]=i,this._initProgramController(i),t||(i._activated=!1)}return e}removeProgram(e){this.programs[e]&&this.programs[e].remove()}addPrograms(e){for(let t=0;t<e.length;t++)this.addProgram(e[t])}_initProgramController(e){this._initialized&&(e.initialize(),this.activeProgram?(e.deactivate(),this.activeProgram._program.enableAttribArrays(),this.activeProgram._program.use()):(this.activeProgram=e,e.activate()))}_initPrograms(){for(let e in this.programs)this._initProgramController(this.programs[e])}initializeExtension(e,t=!1){if(!this.extensions||!this.extensions[e]){let i=Tt.getExtension(this.gl,e);i?this.extensions[e]=i:t&&console.warn("og.webgl.Handler: extension '"+e+"' doesn't initialize.")}return this.extensions&&this.extensions[e]}initialize(){if(this._initialized||!this.canvas||(this.gl=Tt.getContext(this.canvas,this._params.context),!this.gl))return;this._initialized=!0,this._params.extensions.push("EXT_texture_filter_anisotropic"),this.gl.type==="webgl"?(this._params.extensions.push("OES_standard_derivatives"),this._params.extensions.push("OES_element_index_uint"),this._params.extensions.push("WEBGL_depth_texture"),this._params.extensions.push("ANGLE_instanced_arrays")):(this._params.extensions.push("EXT_color_buffer_float"),this._params.extensions.push("OES_texture_float_linear"));let e=this._params.extensions.length;for(;e--;)this.initializeExtension(this._params.extensions[e],!0);this.gl.type==="webgl"?(this.createTexture_n=this.createTexture_n_webgl1.bind(this),this.createTexture_l=this.createTexture_l_webgl1.bind(this),this.createTexture_mm=this.createTexture_mm_webgl1.bind(this),this.createTexture_a=this.createTexture_a_webgl1.bind(this)):(this.createTexture_n=this.createTexture_n_webgl2.bind(this),this.createTexture_l=this.createTexture_l_webgl2.bind(this),this.createTexture_mm=this.createTexture_mm_webgl2.bind(this),this.createTexture_a=this.createTexture_a_webgl2.bind(this)),this.createTexture.NEAREST=this.createTexture_n,this.createTexture.LINEAR=this.createTexture_l,this.createTexture.MIPMAP=this.createTexture_mm,this.createTexture.ANISOTROPIC=this.createTexture_a,this.extensions.EXT_texture_filter_anisotropic?this.createTextureDefault=this.createTexture_a:this.createTextureDefault=this.createTexture_mm,this._initPrograms(),this._setDefaults(),this.intersectionObserver=new IntersectionObserver((t=>{this._toggleVisibilityChange(t[t.length-1].isIntersecting)}),{threshold:0}),this.intersectionObserver.observe(this.canvas),this.resizeObserver=new ResizeObserver((t=>{this._toggleVisibilityChange(t[0].contentRect.width!==0&&t[0].contentRect.height!==0)})),this.resizeObserver.observe(this.canvas),document.addEventListener("visibilitychange",(()=>{this._toggleVisibilityChange(document.visibilityState==="visible")}))}_toggleVisibilityChange(e){e?(this.start(),this.ONCANVASRESIZE&&this.ONCANVASRESIZE(),this.events.dispatch(this.events.visibilitychange,!0)):(this.events.dispatch(this.events.visibilitychange,!1),this.stop())}_setDefaults(){let e=this.gl;e&&this.canvas&&(e.depthFunc(e.LESS),e.enable(e.DEPTH_TEST),this.setSize(this.canvas.clientWidth||this._params.width,this.canvas.clientHeight||this._params.height),e.frontFace(e.CCW),e.cullFace(e.BACK),e.enable(e.CULL_FACE),e.disable(e.BLEND),this.createDefaultTexture({color:"rgba(0,0,0,0.0)"},(t=>{this.transparentTexture=t})),this.createDefaultTexture({color:"rgba(255, 255, 255, 1.0)"},(t=>{this.defaultTexture=t})))}getCanvasSize(){return this._canvasSize}createStreamArrayBuffer(e,t,i,r=4){let s=this.gl,n=s.createBuffer();return s.bindBuffer(s.ARRAY_BUFFER,n),s.bufferData(s.ARRAY_BUFFER,t*e*r,i||s.STREAM_DRAW),s.bindBuffer(s.ARRAY_BUFFER,null),n.itemSize=e,n.numItems=t,n}setStreamArrayBuffer(e,t,i=0){let r=this.gl;return r.bindBuffer(r.ARRAY_BUFFER,e),r.bufferSubData(r.ARRAY_BUFFER,i,t),r.bindBuffer(r.ARRAY_BUFFER,null),e}createArrayBuffer(e,t,i,r){let s=this.gl,n=s.createBuffer();return s.bindBuffer(s.ARRAY_BUFFER,n),s.bufferData(s.ARRAY_BUFFER,e,r||s.STATIC_DRAW),s.bindBuffer(s.ARRAY_BUFFER,null),n.itemSize=t,n.numItems=i||e.length/t,n}createArrayBufferLength(e,t){let i=this.gl,r=i.createBuffer();return i.bindBuffer(i.ARRAY_BUFFER,r),i.bufferData(i.ARRAY_BUFFER,e,t||i.STATIC_DRAW),i.bindBuffer(i.ARRAY_BUFFER,null),r.itemSize=1,r.numItems=e,r}createElementArrayBuffer(e,t,i,r){let s=this.gl,n=s.createBuffer();return s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,n),s.bufferData(s.ELEMENT_ARRAY_BUFFER,e,r||s.STATIC_DRAW),s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,null),n.itemSize=t,n.numItems=i||e.length,n}setSize(e,t){this._params.width=e,this._params.height=t,this.canvas&&(this.canvas.width=e*this._params.pixelRatio,this.canvas.height=t*this._params.pixelRatio,this._canvasSize[0]=this.canvas.width,this._canvasSize[1]=this.canvas.height,this.gl&&this.gl.viewport(0,0,e,t),this.ONCANVASRESIZE&&this.ONCANVASRESIZE(this.canvas),this.events.dispatch(this.events.resize,this))}get pixelRatio(){return this._params.pixelRatio}set pixelRatio(e){this._params.pixelRatio=e,this.setSize(this._params.width,this._params.height)}getWidth(){return this.canvas?this.canvas.width:0}getHeight(){return this.canvas?this.canvas.height:0}getClientAspect(){return this.canvas?this.canvas.clientWidth/this.canvas.clientHeight:0}getCenter(){let e=this.canvas;return e?new N(Math.round(.5*e.width),Math.round(.5*e.height)):new N}clearFrame(){let e=this.gl;e.clearColor(0,0,0,1),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}start(){!this._requestAnimationFrameId&&this._initialized&&this._animationFrameCallback()}stop(){this._requestAnimationFrameId&&(window.cancelAnimationFrame(this._requestAnimationFrameId),this._requestAnimationFrameId=0)}isStopped(){return!this._requestAnimationFrameId}isWebGl2(){return!!this.gl&&this.gl.type==="webgl2"}_animationFrameCallback(){this._requestAnimationFrameId=window.requestAnimationFrame((()=>{this._throttledDrawFrame(),this._requestAnimationFrameId&&this._animationFrameCallback()}))}createDefaultTexture(e,t){let i,r;if(e&&e.color)i=new xi(2,2),i.fillColor(e.color),r=this.createTexture_n(i.getCanvas()),r.default=!0,t(r);else if(e&&e.url){let s=new Image,n=this;s.onload=function(){r=n.createTextureDefault(s),r.default=!0,t(r)},s.src=e.url}else i=new xi(2,2),i.fillColor("#C5C5C5"),r=this.createTexture_n(i.getCanvas()),r.default=!0,t(r)}deleteTexture(e){e&&!e.default&&this.gl&&this.gl.deleteTexture(e)}destroy(){var e,t;(e=this.resizeObserver)==null||e.disconnect(),(t=this.intersectionObserver)==null||t.disconnect(),this.stop();for(let r in this.programs)this.removeProgram(r);let i=this.gl;if(i){i.deleteTexture(this.transparentTexture),this.transparentTexture=null,i.deleteTexture(this.defaultTexture),this.defaultTexture=null,this.framebufferStack=new os;let r=i.getParameter(i.MAX_VERTEX_ATTRIBS),s=i.createBuffer();i.bindBuffer(i.ARRAY_BUFFER,s);for(let a=0;a<r;++a)i.disableVertexAttribArray(a),i.vertexAttribPointer(a,4,i.FLOAT,!1,0,0),i.vertexAttrib1f(a,0);i.deleteBuffer(s);let n=i.getParameter(i.MAX_TEXTURE_IMAGE_UNITS);for(let a=0;a<n;++a)i.activeTexture(i.TEXTURE0+a),i.bindTexture(i.TEXTURE_CUBE_MAP,null),i.bindTexture(i.TEXTURE_2D,null);i.activeTexture(i.TEXTURE0),i.useProgram(null),i.bindBuffer(i.ARRAY_BUFFER,null),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,null),i.bindFramebuffer(i.FRAMEBUFFER,null),i.bindRenderbuffer(i.RENDERBUFFER,null),i.disable(i.BLEND),i.disable(i.CULL_FACE),i.disable(i.DEPTH_TEST),i.disable(i.DITHER),i.disable(i.SCISSOR_TEST),i.blendColor(0,0,0,0),i.blendEquation(i.FUNC_ADD),i.blendFunc(i.ONE,i.ZERO),i.clearColor(0,0,0,0),i.clearDepth(1),i.clearStencil(-1)}this.canvas&&(this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this.canvas.width=1,this.canvas.height=1,this.canvas=null),this.gl=null,this._initialized=!1}addClock(e){e.__handler||(e.__handler=this,this._clocks.push(e))}addClocks(e){for(let t=0;t<e.length;t++)this.addClock(e[t])}removeClock(e){if(e.__handler){let t=this._clocks,i=t.length;for(;i--;)if(t[i].isEqual(e)){e.__handler=null,t.splice(i,1);break}}}}class so extends Ja{constructor(e,t={}){super(e,t),this._internalFormat=t.internalFormat?t.internalFormat.toUpperCase():"RGBA8",this._msaa=t.msaa!=null?t.msaa:4,this._glFilter=0,this.renderbuffers=new Array(this._size)}destroy(){let e=this.handler.gl;if(e){for(let t=0;t<this.renderbuffers.length;t++)e.deleteRenderbuffer(this.renderbuffers[t]);this.renderbuffers=new Array(this._size),e.deleteFramebuffer(this._fbo),e.deleteRenderbuffer(this._depthRenderbuffer),this._depthRenderbuffer=null,this._fbo=null,this._active=!1}}init(){let e=this.handler.gl;if(!e)return;this._glFilter=e[this._filter],this._fbo=e.createFramebuffer(),e.bindFramebuffer(e.FRAMEBUFFER,this._fbo);let t=[];for(let i=0;i<this.renderbuffers.length;i++){let r=e.createRenderbuffer();e.bindRenderbuffer(e.RENDERBUFFER,r),this._msaa>0?e.renderbufferStorageMultisample(e.RENDERBUFFER,this._msaa,e[this._internalFormat],this._width,this._height):e.renderbufferStorage(e.RENDERBUFFER,e[this._internalFormat],this._width,this._height),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0+i,e.RENDERBUFFER,r),t.push(e.COLOR_ATTACHMENT0+i),this.renderbuffers[i]=r,e.bindRenderbuffer(e.RENDERBUFFER,null)}e.drawBuffers(t),this._useDepth&&(this._depthRenderbuffer=e.createRenderbuffer(),e.bindRenderbuffer(e.RENDERBUFFER,this._depthRenderbuffer),e.renderbufferStorageMultisample(e.RENDERBUFFER,this._msaa,e[this._depthComponent],this._width,this._height),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,this._depthRenderbuffer),e.bindRenderbuffer(e.RENDERBUFFER,null)),e.bindFramebuffer(e.FRAMEBUFFER,null)}blitTo(e,t=0){let i=this.handler.gl;i.bindFramebuffer(i.READ_FRAMEBUFFER,this._fbo),i.bindFramebuffer(i.DRAW_FRAMEBUFFER,e._fbo),i.readBuffer(i.COLOR_ATTACHMENT0+t),i.clearBufferfv(i.COLOR,0,[0,0,0,1]),i.blitFramebuffer(0,0,this._width,this._height,0,0,e._width,e._height,i.COLOR_BUFFER_BIT,this._glFilter),i.bindFramebuffer(i.FRAMEBUFFER,null),i.bindFramebuffer(i.READ_FRAMEBUFFER,null),i.bindFramebuffer(i.DRAW_FRAMEBUFFER,null)}}Object.freeze(Object.defineProperty({__proto__:null,Framebuffer:Re,Handler:Tt,Multisample:so,Program:X,types:ue},Symbol.toStringTag,{value:"Module"}));class hs extends pi{constructor(e,t={}){super(e,t),this._image=t.image||null,this._src=t.src||null,this._onLoad_=null}get instanceName(){return"GeoImage"}abortLoading(){this._image instanceof HTMLImageElement&&(this._image.src="")}setSrc(e){this._planet&&this._planet._geoImageCreator.remove(this),this._src=e,this._sourceReady=!1,this._sourceCreated=!1,this._image=new Image,this._image.crossOrigin="Anonymous",this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_),this._image.src=e}setImage(e){this._planet&&this._planet._geoImageCreator.remove(this),this._sourceCreated=!1,this._sourceReady=!1,this._image=e,this._image.crossOrigin="Anonymous",this._src=e.src,Ar(this._image)?this._applyImage(this._image):(this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_))}_createSourceTexture(){!this._sourceCreated&&this._image&&(this._sourceTexture=this._planet.renderer.handler.createTexture_l(this._image),this._sourceCreated=!0)}_onLoad(e){this._applyImage(this._image),this._image instanceof HTMLImageElement&&this._image.removeEventListener("load",this._onLoad_),this._onLoad_=null}_applyImage(e){e&&(this._frameWidth=zt(2*e.width,4096),this._frameHeight=zt(3*e.height,4096),this._sourceReady=!0,this._planet&&this._planet._geoImageCreator.add(this))}loadMaterial(e){e.isLoading=!0,this._creationProceeding=!0,!this._sourceReady&&this._src?this._image?this._image instanceof HTMLImageElement&&(Ar(this._image)?this._applyImage(this._image):(this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_))):(this._image=new Image,this._image.crossOrigin="Anonymous",this._onLoad_=this._onLoad.bind(this),this._image.addEventListener("load",this._onLoad_),this._image.src=this._src):this._planet&&this._planet._geoImageCreator.add(this)}abortMaterialLoading(e){this._image&&this._image instanceof HTMLImageElement&&(this._image.src=""),this._creationProceeding=!1,e.isLoading=!1,e.isReady=!1}}Object.freeze(Object.defineProperty({__proto__:null,AtmosphereConfig:class extends ee{constructor(o={}){super(o),this.$maxOpacity=null,this.$minOpacity=null,this.$rayleight=null,this.$mie=null,this.$height=null,this.$bottomRadius=null,this.$mieScatteringCoefficient=null,this.$mieExtinctionCoefficient=null,this.$rayleighScatteringCoefficientA=null,this.$rayleighScatteringCoefficientB=null,this.$rayleighScatteringCoefficientC=null,this.$ozoneAbsorptionCoefficientA=null,this.$ozoneAbsorptionCoefficientB=null,this.$ozoneAbsorptionCoefficientC=null,this.$sunAngularRadius=null,this.$sunIntensity=null,this.$groundAlbedo=null,this.$ozoneDensityHeight=null,this.$ozoneDensityWide=null,this._toggleBtn=new _e({classList:["og-map-button","og-atmosphere_button"],icon:`<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
|
349
349
|
<svg width="800px" height="800px" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path fill="#000000" d="M135.688 18.5c-6.798 74.842-23.842 85.39-107.907 59.656 84.85 52.022 73.57 64.954-6.843 96.938 87.743-10.27 103.29 4.89 70.75 87.594 17.805-27.56 32.5-44.498 46.282-54.47-11.813 28.26-18.345 59.274-18.345 91.813 0 84.184 43.71 157.96 109.656 200.376-41.624-43.834-67.686-102.7-67.686-167.875 0-134.923 109.45-244.405 244.375-244.405 30.92 0 60.76 5.762 88 16.25-38.584-26.87-85.517-42.625-136.064-42.625-55.257 0-106.14 18.802-146.562 50.375 4.627-18.783 17.39-38.073 41.03-60.906C190.18 90.942 153.53 95.634 135.69 18.5zm10.03 77.188c5.67.002 11.428 1.247 16.876 3.874 14.506 6.998 22.72 21.81 22 36.938-10.26 10.87-19.507 22.696-27.594 35.344-9.035 2.753-19.075 2.27-28.25-2.156-19.37-9.343-27.5-32.6-18.156-51.97 6.715-13.92 20.638-22.036 35.125-22.03z"/></svg>`}),this._dialog=new nt({title:"Atmosphere Parameters",visible:!1,useHide:!0,top:60,left:60,width:720}),this._dialog.events.on("visibility",(e=>{this._toggleBtn.setActive(e)})),this._panel=new Ce({template:`<div class="og-atmosphere og-options-container">
|
|
350
350
|
|
|
351
351
|
<div class="og-option og-atmosphere-maxOpacity"></div>
|