mars3d-wind 3.7.5 → 3.7.7

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.
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Mars3D平台插件,支持气象 风向图 功能插件 mars3d-wind
3
3
  *
4
- * 版本信息:v3.7.5
5
- * 编译日期:2024-03-05 18:11:36
4
+ * 版本信息:v3.7.7
5
+ * 编译日期:2024-03-19 15:55:30
6
6
  * 版权所有:Copyright by 火星科技 http://mars3d.cn
7
7
  * 使用单位:免费公开版 ,2024-01-15
8
8
  */
@@ -11,5 +11,5 @@
11
11
  typeof define === 'function' && define.amd ? define(['exports', 'mars3d'], factory) :
12
12
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["mars3d-wind"] = {}, global.mars3d));
13
13
  })(this, (function (exports, mars3d) {
14
- 'use strict';function _0x4f07(){const _0x59815a=['latRange','data','ellipsoid','lon','vmax','geometry','age','maxParticles','off','4UTOKnz','viewerParameters','currentParticlesPosition','beginPath','resize','_calc_speedRate','Cesium','clearCommand','height','randomizeParticles','fromGeometry','add','fromDegrees','postProcessingPosition','setData','speedRate','show','push','particlesTextures','_randomParticle','BoundingSphere','3WbnFfQ','depthTest','textures','ymin','drawingBufferHeight','particlesWind','drawingBufferWidth','ClearCommand','isPointVisible','lonRange','PixelDatatype','EventType','width','ComputeCommand','toRadians','lighter','Framebuffer','autoClear','options','mouseMove','mouseHidden','outputTexture','layer','maxAge','style','rows','fragmentShaderSource','levmin','STATIC_DRAW','_updateIng','Draw','uniformMap','WindLayer','6434030MevGpP','Compute','removeEventListener','colors','RGB','mouseUp','uniform\x20sampler2D\x20currentParticlesPosition;\x20//\x20(lon,\x20lat,\x20lev)\x0auniform\x20sampler2D\x20currentParticlesSpeed;\x20//\x20(u,\x20v,\x20w,\x20normalization)\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0avec2\x20lengthOfLonLat(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20unit\x20conversion:\x20meters\x20->\x20longitude\x20latitude\x20degrees\x0a\x20\x20\x20\x20//\x20see\x20https://en.wikipedia.org/wiki/Geographic_coordinate_system#Length_of_a_degree\x20for\x20detail\x0a\x0a\x20\x20\x20\x20//\x20Calculate\x20the\x20length\x20of\x20a\x20degree\x20of\x20latitude\x20and\x20longitude\x20in\x20meters\x0a\x20\x20\x20\x20float\x20latitude\x20=\x20radians(lonLatLev.y);\x0a\x0a\x20\x20\x20\x20float\x20term1\x20=\x20111132.92;\x0a\x20\x20\x20\x20float\x20term2\x20=\x20559.82\x20*\x20cos(2.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20term3\x20=\x201.175\x20*\x20cos(4.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20term4\x20=\x200.0023\x20*\x20cos(6.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20latLength\x20=\x20term1\x20-\x20term2\x20+\x20term3\x20-\x20term4;\x0a\x0a\x20\x20\x20\x20float\x20term5\x20=\x20111412.84\x20*\x20cos(latitude);\x0a\x20\x20\x20\x20float\x20term6\x20=\x2093.5\x20*\x20cos(3.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20term7\x20=\x200.118\x20*\x20cos(5.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20longLength\x20=\x20term5\x20-\x20term6\x20+\x20term7;\x0a\x0a\x20\x20\x20\x20return\x20vec2(longLength,\x20latLength);\x0a}\x0a\x0avoid\x20updatePosition(vec3\x20lonLatLev,\x20vec3\x20speed)\x20{\x0a\x20\x20\x20\x20vec2\x20lonLatLength\x20=\x20lengthOfLonLat(lonLatLev);\x0a\x20\x20\x20\x20float\x20u\x20=\x20speed.x\x20/\x20lonLatLength.x;\x0a\x20\x20\x20\x20float\x20v\x20=\x20speed.y\x20/\x20lonLatLength.y;\x0a\x20\x20\x20\x20float\x20w\x20=\x200.0;\x0a\x20\x20\x20\x20vec3\x20windVectorInLonLatLev\x20=\x20vec3(u,\x20v,\x20w);\x0a\x0a\x20\x20\x20\x20vec3\x20nextParticle\x20=\x20lonLatLev\x20+\x20windVectorInLonLatLev;\x0a\x0a\x20\x20\x20\x20out_FragColor\x20=\x20vec4(nextParticle,\x200.0);\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20//\x20texture\x20coordinate\x20must\x20be\x20normalized\x0a\x20\x20\x20\x20vec3\x20lonLatLev\x20=\x20texture(currentParticlesPosition,\x20v_textureCoordinates).rgb;\x0a\x20\x20\x20\x20vec3\x20speed\x20=\x20texture(currentParticlesSpeed,\x20v_textureCoordinates).rgb;\x0a\x0a\x20\x20\x20\x20updatePosition(lonLatLev,\x20speed);\x0a}\x0a','690715oljHfp','globe','mouse_move','clear','SCENE3D','east','currentTrails','trails','destroyParticlesTextures','none','_mountedHook','_updateIng2','keys','GeometryAttribute','globalAlpha','LayerUtil','Math','framebuffer','tlng','unbindEvent','reverse','setOptions','getWind','windData','_map','1051182Igptaq','commandToExecute','DISABLE_LOG_DEPTH_FRAGMENT_WRITE','TextureMagnificationFilter','UNSIGNED_BYTE','preRender','steps','pow','VertexArray','setDate','0px','lat','_removedHook','_canrefresh','computeViewRectangle','segments','redraw','createSegmentsGeometry','speedFactor','isDestroyed','vertexShaderSource','framebuffers','xmin','canvas','pointerEvents','absolute','get','windField','ymax','particlesRendering','particleHeight','_calcUV','lineTo','canvasWidth','_speedRate','umax','commandType','dropRateBump','worker','Pass','reverseY','createFramebuffer','segmentsColor','7eiqLSo','PixelFormat','preExecute','refreshTimer','vertexArray','attributeLocations','NEAREST','2683776ycPnoL','clampToLatitudeRange','lng','PrimitiveCollection','_data','nextTrails','TWO_PI','RGBA','395394JNIwSR','_onMouseMoveEvent','log','forEach','fixedHeight','183786TkRdUp','getUVByPoint','TextureMinificationFilter','mouse_down','pixelSize','context','wheel','lev','viewRectangleToLonLatRange','init','createCommand','destroy','uniform\x20sampler2D\x20colorTable;\x0a\x0ain\x20float\x20speedNormalization;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20out_FragColor\x20=\x20texture(colorTable,\x20vec2(speedNormalization,\x200.0));\x0a}\x0a','default','nextTrailsColor','createTexture','array','round','createRenderingPrimitives','rawRenderState','canrefresh','Sampler','min','CanvasWindLayer','createRenderingFramebuffers','particlesComputing','particles','update','lineWidth','BaseLayer','toDegrees','dimensions','updateSpeed','FLOAT','grid','hidden','refreshParticles','top','_tomap','atan2','depthMask','WindUtil','BufferUsage','ceil','_createCanvas','224604jrfhsz','canvasContext','postProcessingSpeed','particleSystem','xmax','clientWidth','sqrt','currentParticlesSpeed','isInExtent','camera','primitives','udata','Cartesian3','ShaderSource','_onMouseDownEvent','createComputingPrimitives','_onMouseUpEvent','scene','getUVByXY','tlat','random','_addedHook','fromCache','postMessage'];_0x4f07=function(){return _0x59815a;};return _0x4f07();}const _0x4418ae=_0x38bd;(function(_0x495168,_0x4cb0bd){const _0x4c73ba=_0x38bd,_0x2495fc=_0x495168();while(!![]){try{const _0x4927be=-parseInt(_0x4c73ba(0x1d7))/0x1+-parseInt(_0x4c73ba(0x1aa))/0x2*(parseInt(_0x4c73ba(0x12a))/0x3)+-parseInt(_0x4c73ba(0x115))/0x4*(-parseInt(_0x4c73ba(0x152))/0x5)+-parseInt(_0x4c73ba(0x1a5))/0x6*(parseInt(_0x4c73ba(0x196))/0x7)+-parseInt(_0x4c73ba(0x19d))/0x8+parseInt(_0x4c73ba(0x16b))/0x9+parseInt(_0x4c73ba(0x14b))/0xa;if(_0x4927be===_0x4cb0bd)break;else _0x2495fc['push'](_0x2495fc['shift']());}catch(_0x43caa4){_0x2495fc['push'](_0x2495fc['shift']());}}}(_0x4f07,0x2c0fc));function _interopNamespace(_0x3e829c){const _0x44c180=_0x38bd;if(_0x3e829c&&_0x3e829c['__esModule'])return _0x3e829c;var _0x439d52=Object['create'](null);return _0x3e829c&&Object['keys'](_0x3e829c)['forEach'](function(_0x525ec9){const _0xb671cb=_0x38bd;if(_0x525ec9!=='default'){var _0x4a9749=Object['getOwnPropertyDescriptor'](_0x3e829c,_0x525ec9);Object['defineProperty'](_0x439d52,_0x525ec9,_0x4a9749[_0xb671cb(0x185)]?_0x4a9749:{'enumerable':!![],'get':function(){return _0x3e829c[_0x525ec9];}});}}),_0x439d52[_0x44c180(0x1b7)]=_0x3e829c,_0x439d52;}var mars3d__namespace=_interopNamespace(mars3d);const Cesium$7=mars3d__namespace[_0x4418ae(0x11b)];function getU(_0x4de911,_0x5807d2){const _0x16f459=_0x4418ae,_0xcb3954=_0x4de911*Math['cos'](Cesium$7[_0x16f459(0x162)][_0x16f459(0x138)](_0x5807d2));return _0xcb3954;}function getV(_0x108a2c,_0x87f587){const _0x1f0d84=_0x108a2c*Math['sin'](Cesium$7['Math']['toRadians'](_0x87f587));return _0x1f0d84;}function getSpeed(_0x28c671,_0x5244a3){const _0x4ea3fe=_0x4418ae,_0x483005=Math['sqrt'](Math['pow'](_0x28c671,0x2)+Math[_0x4ea3fe(0x172)](_0x5244a3,0x2));return _0x483005;}function getDirection(_0x3eb0bc,_0x313b60){const _0x3992a0=_0x4418ae;let _0x57a331=Cesium$7['Math'][_0x3992a0(0x1c8)](Math[_0x3992a0(0x1d1)](_0x313b60,_0x3eb0bc));return _0x57a331+=_0x57a331<0x0?0x168:0x0,_0x57a331;}var WindUtil={'__proto__':null,'getU':getU,'getV':getV,'getSpeed':getSpeed,'getDirection':getDirection};const Cesium$6=mars3d__namespace['Cesium'];class CustomPrimitive{constructor(_0x80e01c){const _0x17af4a=_0x4418ae;this[_0x17af4a(0x18f)]=_0x80e01c[_0x17af4a(0x18f)],this[_0x17af4a(0x111)]=_0x80e01c[_0x17af4a(0x111)],this['attributeLocations']=_0x80e01c[_0x17af4a(0x19b)],this['primitiveType']=_0x80e01c['primitiveType'],this['uniformMap']=_0x80e01c['uniformMap'],this['vertexShaderSource']=_0x80e01c[_0x17af4a(0x17f)],this[_0x17af4a(0x144)]=_0x80e01c['fragmentShaderSource'],this['rawRenderState']=_0x80e01c[_0x17af4a(0x1bd)],this['framebuffer']=_0x80e01c[_0x17af4a(0x163)],this['outputTexture']=_0x80e01c[_0x17af4a(0x13f)],this[_0x17af4a(0x13b)]=_0x80e01c['autoClear']??![],this['preExecute']=_0x80e01c['preExecute'],this['show']=!![],this['commandToExecute']=undefined,this['clearCommand']=undefined,this[_0x17af4a(0x13b)]&&(this[_0x17af4a(0x11c)]=new Cesium$6['ClearCommand']({'color':new Cesium$6['Color'](0x0,0x0,0x0,0x0),'depth':0x1,'framebuffer':this['framebuffer'],'pass':Cesium$6[_0x17af4a(0x192)]['OPAQUE']}));}[_0x4418ae(0x1b4)](_0x5999c1){const _0x177d8f=_0x4418ae;switch(this[_0x177d8f(0x18f)]){case'Draw':{const _0x237a88=Cesium$6['VertexArray']['fromGeometry']({'context':_0x5999c1,'geometry':this[_0x177d8f(0x111)],'attributeLocations':this['attributeLocations'],'bufferUsage':Cesium$6['BufferUsage']['STATIC_DRAW']}),_0x1e7faa=Cesium$6['ShaderProgram']['fromCache']({'context':_0x5999c1,'attributeLocations':this[_0x177d8f(0x19b)],'vertexShaderSource':this['vertexShaderSource'],'fragmentShaderSource':this['fragmentShaderSource']}),_0x2ed37e=Cesium$6['RenderState'][_0x177d8f(0x1ed)](this['rawRenderState']);return new Cesium$6['DrawCommand']({'primitiveType':this['primitiveType'],'shaderProgram':_0x1e7faa,'vertexArray':_0x237a88,'modelMatrix':Cesium$6['Matrix4']['IDENTITY'],'renderState':_0x2ed37e,'uniformMap':this[_0x177d8f(0x149)],'castShadows':![],'receiveShadows':![],'framebuffer':this['framebuffer'],'pass':Cesium$6[_0x177d8f(0x192)]['OPAQUE'],'pickOnly':!![],'owner':this});}case'Compute':{return new Cesium$6[(_0x177d8f(0x137))]({'owner':this,'fragmentShaderSource':this['fragmentShaderSource'],'uniformMap':this[_0x177d8f(0x149)],'outputTexture':this['outputTexture'],'persists':!![]});}}}['setGeometry'](_0x560c79,_0x4292b7){const _0x18114d=_0x4418ae;this['geometry']=_0x4292b7;const _0x49b4d1=Cesium$6[_0x18114d(0x173)]['fromGeometry']({'context':_0x560c79,'geometry':this[_0x18114d(0x111)],'attributeLocations':this[_0x18114d(0x19b)],'bufferUsage':Cesium$6[_0x18114d(0x1d4)][_0x18114d(0x146)]});this['commandToExecute'][_0x18114d(0x19a)]=_0x49b4d1;}[_0x4418ae(0x1c5)](_0x336792){const _0x4c5258=_0x4418ae;if(!this['show'])return;if(_0x336792['mode']!==Cesium$6['SceneMode']['SCENE3D'])return;!Cesium$6['defined'](this['commandToExecute'])&&(this['commandToExecute']=this['createCommand'](_0x336792[_0x4c5258(0x1af)])),Cesium$6['defined'](this[_0x4c5258(0x198)])&&this['preExecute'](),Cesium$6['defined'](this['clearCommand'])&&_0x336792['commandList'][_0x4c5258(0x126)](this['clearCommand']),_0x336792['commandList']['push'](this['commandToExecute']);}[_0x4418ae(0x17e)](){return![];}['destroy'](){const _0x4d3d20=_0x4418ae;if(this[_0x4d3d20(0x11c)]){var _0xb29227,_0x1a3c7c;(_0xb29227=this['clearCommand'])!==null&&_0xb29227!==void 0x0&&_0xb29227[_0x4d3d20(0x19a)]&&this['clearCommand'][_0x4d3d20(0x19a)]['destroy'](),(_0x1a3c7c=this['clearCommand'])!==null&&_0x1a3c7c!==void 0x0&&_0x1a3c7c['shaderProgram']&&this['clearCommand']['shaderProgram']['destroy'](),delete this['clearCommand'];}return this[_0x4d3d20(0x16c)]&&(this['commandToExecute'][_0x4d3d20(0x19a)]&&this[_0x4d3d20(0x16c)][_0x4d3d20(0x19a)]['destroy'](),this[_0x4d3d20(0x16c)]['shaderProgram']&&this[_0x4d3d20(0x16c)]['shaderProgram']['destroy'](),delete this['commandToExecute']),Cesium$6['destroyObject'](this);}}const Cesium$5=mars3d__namespace['Cesium'],Util=(function(){const _0x10a924=function(){const _0x5d2b86=new Cesium$5['Geometry']({'attributes':new Cesium$5['GeometryAttributes']({'position':new Cesium$5['GeometryAttribute']({'componentDatatype':Cesium$5['ComponentDatatype']['FLOAT'],'componentsPerAttribute':0x3,'values':new Float32Array([-0x1,-0x1,0x0,0x1,-0x1,0x0,0x1,0x1,0x0,-0x1,0x1,0x0])}),'st':new Cesium$5['GeometryAttribute']({'componentDatatype':Cesium$5['ComponentDatatype']['FLOAT'],'componentsPerAttribute':0x2,'values':new Float32Array([0x0,0x0,0x1,0x0,0x1,0x1,0x0,0x1])})}),'indices':new Uint32Array([0x3,0x2,0x0,0x0,0x2,0x1])});return _0x5d2b86;},_0x442ade=function(_0x2c4c02,_0xe87c9){if(Cesium$5['defined'](_0xe87c9)){const _0x136139={};_0x136139['arrayBufferView']=_0xe87c9,_0x2c4c02['source']=_0x136139;}const _0x14718a=new Cesium$5['Texture'](_0x2c4c02);return _0x14718a;},_0x3aae34=function(_0xed60ad,_0x2275d5,_0x2132cc){const _0xfa3284=_0x38bd,_0x48b019=new Cesium$5[(_0xfa3284(0x13a))]({'context':_0xed60ad,'colorTextures':[_0x2275d5],'depthTexture':_0x2132cc});return _0x48b019;},_0x40584b=function(_0x3c57cd){const _0x4a685e=_0x38bd,_0xc3c564=!![],_0x31a2ce=![],_0x502d28={'viewport':_0x3c57cd['viewport'],'depthTest':_0x3c57cd[_0x4a685e(0x12b)],'depthMask':_0x3c57cd[_0x4a685e(0x1d2)],'blending':_0x3c57cd['blending']},_0x316ae5=Cesium$5['Appearance']['getDefaultRenderState'](_0xc3c564,_0x31a2ce,_0x502d28);return _0x316ae5;},_0x464d8e=function(_0x134579){const _0x2e2118=_0x38bd,_0x281706={},_0x320436=Cesium$5['Math']['mod'](_0x134579['west'],Cesium$5[_0x2e2118(0x162)][_0x2e2118(0x1a3)]),_0x23e8f5=Cesium$5['Math']['mod'](_0x134579[_0x2e2118(0x157)],Cesium$5['Math']['TWO_PI']),_0x5dcc4e=_0x134579['width'];let _0x14b671,_0x28fd74;_0x5dcc4e>Cesium$5['Math']['THREE_PI_OVER_TWO']?(_0x14b671=0x0,_0x28fd74=Cesium$5['Math']['TWO_PI']):_0x23e8f5-_0x320436<_0x5dcc4e?(_0x14b671=_0x320436,_0x28fd74=_0x320436+_0x5dcc4e):(_0x14b671=_0x320436,_0x28fd74=_0x23e8f5);_0x281706['lon']={'min':Cesium$5[_0x2e2118(0x162)]['toDegrees'](_0x14b671),'max':Cesium$5['Math']['toDegrees'](_0x28fd74)};const _0x370f17=_0x134579['south'],_0x1266b2=_0x134579['north'],_0xe580b5=_0x134579['height'],_0x79a80c=_0xe580b5>Cesium$5[_0x2e2118(0x162)]['PI']/0xc?_0xe580b5/0x2:0x0;let _0x367519=Cesium$5['Math']['clampToLatitudeRange'](_0x370f17-_0x79a80c),_0x373013=Cesium$5[_0x2e2118(0x162)][_0x2e2118(0x19e)](_0x1266b2+_0x79a80c);return _0x367519<-Cesium$5['Math']['PI_OVER_THREE']&&(_0x367519=-Cesium$5['Math']['PI_OVER_TWO']),_0x373013>Cesium$5['Math']['PI_OVER_THREE']&&(_0x373013=Cesium$5['Math']['PI_OVER_TWO']),_0x281706[_0x2e2118(0x176)]={'min':Cesium$5['Math']['toDegrees'](_0x367519),'max':Cesium$5[_0x2e2118(0x162)]['toDegrees'](_0x373013)},_0x281706;};return{'getFullscreenQuad':_0x10a924,'createTexture':_0x442ade,'createFramebuffer':_0x3aae34,'createRawRenderState':_0x40584b,'viewRectangleToLonLatRange':_0x464d8e};}());var segmentDraw_vert='in\x20vec2\x20st;\x0a//\x20it\x20is\x20not\x20normal\x20itself,\x20but\x20used\x20to\x20control\x20normal\x0ain\x20vec3\x20normal;\x20//\x20(point\x20to\x20use,\x20offset\x20sign,\x20not\x20used\x20component)\x0a\x0auniform\x20sampler2D\x20currentParticlesPosition;\x0auniform\x20sampler2D\x20postProcessingPosition;\x0auniform\x20sampler2D\x20postProcessingSpeed;\x0a\x0auniform\x20float\x20particleHeight;\x0a\x0auniform\x20float\x20aspect;\x0auniform\x20float\x20pixelSize;\x0auniform\x20float\x20lineWidth;\x0a\x0aout\x20float\x20speedNormalization;\x0a\x0avec3\x20convertCoordinate(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20WGS84\x20(lon,\x20lat,\x20lev)\x20->\x20ECEF\x20(x,\x20y,\x20z)\x0a\x20\x20\x20\x20//\x20see\x20https://en.wikipedia.org/wiki/Geographic_coordinate_conversion#From_geodetic_to_ECEF_coordinates\x20for\x20detail\x0a\x0a\x20\x20\x20\x20//\x20WGS\x2084\x20geometric\x20constants\x0a\x20\x20\x20\x20float\x20a\x20=\x206378137.0;\x20//\x20Semi-major\x20axis\x0a\x20\x20\x20\x20float\x20b\x20=\x206356752.3142;\x20//\x20Semi-minor\x20axis\x0a\x20\x20\x20\x20float\x20e2\x20=\x206.69437999014e-3;\x20//\x20First\x20eccentricity\x20squared\x0a\x0a\x20\x20\x20\x20float\x20latitude\x20=\x20radians(lonLatLev.y);\x0a\x20\x20\x20\x20float\x20longitude\x20=\x20radians(lonLatLev.x);\x0a\x0a\x20\x20\x20\x20float\x20cosLat\x20=\x20cos(latitude);\x0a\x20\x20\x20\x20float\x20sinLat\x20=\x20sin(latitude);\x0a\x20\x20\x20\x20float\x20cosLon\x20=\x20cos(longitude);\x0a\x20\x20\x20\x20float\x20sinLon\x20=\x20sin(longitude);\x0a\x0a\x20\x20\x20\x20float\x20N_Phi\x20=\x20a\x20/\x20sqrt(1.0\x20-\x20e2\x20*\x20sinLat\x20*\x20sinLat);\x0a\x20\x20\x20\x20float\x20h\x20=\x20particleHeight;\x20//\x20it\x20should\x20be\x20high\x20enough\x20otherwise\x20the\x20particle\x20may\x20not\x20pass\x20the\x20terrain\x20depth\x20test\x0a\x0a\x20\x20\x20\x20vec3\x20cartesian\x20=\x20vec3(0.0);\x0a\x20\x20\x20\x20cartesian.x\x20=\x20(N_Phi\x20+\x20h)\x20*\x20cosLat\x20*\x20cosLon;\x0a\x20\x20\x20\x20cartesian.y\x20=\x20(N_Phi\x20+\x20h)\x20*\x20cosLat\x20*\x20sinLon;\x0a\x20\x20\x20\x20cartesian.z\x20=\x20((b\x20*\x20b)\x20/\x20(a\x20*\x20a)\x20*\x20N_Phi\x20+\x20h)\x20*\x20sinLat;\x0a\x20\x20\x20\x20return\x20cartesian;\x0a}\x0a\x0avec4\x20calcProjectedCoordinate(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20the\x20range\x20of\x20longitude\x20in\x20Cesium\x20is\x20[-180,\x20180]\x20but\x20the\x20range\x20of\x20longitude\x20in\x20the\x20NetCDF\x20file\x20is\x20[0,\x20360]\x0a\x20\x20\x20\x20//\x20[0,\x20180]\x20is\x20corresponding\x20to\x20[0,\x20180]\x20and\x20[180,\x20360]\x20is\x20corresponding\x20to\x20[-180,\x200]\x0a\x20\x20\x20\x20lonLatLev.x\x20=\x20mod(lonLatLev.x\x20+\x20180.0,\x20360.0)\x20-\x20180.0;\x0a\x20\x20\x20\x20vec3\x20particlePosition\x20=\x20convertCoordinate(lonLatLev);\x0a\x20\x20\x20\x20vec4\x20projectedCoordinate\x20=\x20czm_modelViewProjection\x20*\x20vec4(particlePosition,\x201.0);\x0a\x20\x20\x20\x20return\x20projectedCoordinate;\x0a}\x0a\x0avec4\x20calcOffset(vec4\x20currentProjectedCoordinate,\x20vec4\x20nextProjectedCoordinate,\x20float\x20offsetSign)\x20{\x0a\x20\x20\x20\x20vec2\x20aspectVec2\x20=\x20vec2(aspect,\x201.0);\x0a\x20\x20\x20\x20vec2\x20currentXY\x20=\x20(currentProjectedCoordinate.xy\x20/\x20currentProjectedCoordinate.w)\x20*\x20aspectVec2;\x0a\x20\x20\x20\x20vec2\x20nextXY\x20=\x20(nextProjectedCoordinate.xy\x20/\x20nextProjectedCoordinate.w)\x20*\x20aspectVec2;\x0a\x0a\x20\x20\x20\x20float\x20offsetLength\x20=\x20lineWidth\x20/\x202.0;\x0a\x20\x20\x20\x20vec2\x20direction\x20=\x20normalize(nextXY\x20-\x20currentXY);\x0a\x20\x20\x20\x20vec2\x20normalVector\x20=\x20vec2(-direction.y,\x20direction.x);\x0a\x20\x20\x20\x20normalVector.x\x20=\x20normalVector.x\x20/\x20aspect;\x0a\x20\x20\x20\x20normalVector\x20=\x20offsetLength\x20*\x20normalVector;\x0a\x0a\x20\x20\x20\x20vec4\x20offset\x20=\x20vec4(offsetSign\x20*\x20normalVector,\x200.0,\x200.0);\x0a\x20\x20\x20\x20return\x20offset;\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec2\x20particleIndex\x20=\x20st;\x0a\x0a\x20\x20\x20\x20vec3\x20currentPosition\x20=\x20texture(currentParticlesPosition,\x20particleIndex).rgb;\x0a\x20\x20\x20\x20vec4\x20nextPosition\x20=\x20texture(postProcessingPosition,\x20particleIndex);\x0a\x0a\x20\x20\x20\x20vec4\x20currentProjectedCoordinate\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20vec4\x20nextProjectedCoordinate\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20if\x20(nextPosition.w\x20>\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20currentProjectedCoordinate\x20=\x20calcProjectedCoordinate(currentPosition);\x0a\x20\x20\x20\x20\x20\x20\x20\x20nextProjectedCoordinate\x20=\x20calcProjectedCoordinate(currentPosition);\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20currentProjectedCoordinate\x20=\x20calcProjectedCoordinate(currentPosition);\x0a\x20\x20\x20\x20\x20\x20\x20\x20nextProjectedCoordinate\x20=\x20calcProjectedCoordinate(nextPosition.xyz);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20float\x20pointToUse\x20=\x20normal.x;\x20//\x20-1\x20is\x20currentProjectedCoordinate\x20and\x20+1\x20is\x20nextProjectedCoordinate\x0a\x20\x20\x20\x20float\x20offsetSign\x20=\x20normal.y;\x0a\x0a\x20\x20\x20\x20vec4\x20offset\x20=\x20pixelSize\x20*\x20calcOffset(currentProjectedCoordinate,\x20nextProjectedCoordinate,\x20offsetSign);\x0a\x20\x20\x20\x20if\x20(pointToUse\x20<\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20gl_Position\x20=\x20currentProjectedCoordinate\x20+\x20offset;\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20gl_Position\x20=\x20nextProjectedCoordinate\x20+\x20offset;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20speedNormalization\x20=\x20texture(postProcessingSpeed,\x20particleIndex).a;\x0a}\x0a',segmentDraw_frag=_0x4418ae(0x1b6),fullscreen_vert='in\x20vec3\x20position;\x0ain\x20vec2\x20st;\x0a\x0aout\x20vec2\x20textureCoordinate;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20textureCoordinate\x20=\x20st;\x0a\x20\x20\x20\x20gl_Position\x20=\x20vec4(position,\x201.0);\x0a}\x0a',trailDraw_frag='uniform\x20sampler2D\x20segmentsColorTexture;\x0auniform\x20sampler2D\x20segmentsDepthTexture;\x0a\x0auniform\x20sampler2D\x20currentTrailsColor;\x0auniform\x20sampler2D\x20trailsDepthTexture;\x0a\x0auniform\x20float\x20fadeOpacity;\x0a\x0ain\x20vec2\x20textureCoordinate;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec4\x20pointsColor\x20=\x20texture(segmentsColorTexture,\x20textureCoordinate);\x0a\x20\x20\x20\x20vec4\x20trailsColor\x20=\x20texture(currentTrailsColor,\x20textureCoordinate);\x0a\x0a\x20\x20\x20\x20trailsColor\x20=\x20floor(fadeOpacity\x20*\x20255.0\x20*\x20trailsColor)\x20/\x20255.0;\x20//\x20make\x20sure\x20the\x20trailsColor\x20will\x20be\x20strictly\x20decreased\x0a\x0a\x20\x20\x20\x20float\x20pointsDepth\x20=\x20texture(segmentsDepthTexture,\x20textureCoordinate).r;\x0a\x20\x20\x20\x20float\x20trailsDepth\x20=\x20texture(trailsDepthTexture,\x20textureCoordinate).r;\x0a\x20\x20\x20\x20float\x20globeDepth\x20=\x20czm_unpackDepth(texture(czm_globeDepthTexture,\x20textureCoordinate));\x0a\x0a\x20\x20\x20\x20out_FragColor\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20if\x20(pointsDepth\x20<\x20globeDepth)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20out_FragColor\x20+\x20pointsColor;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(trailsDepth\x20<\x20globeDepth)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20out_FragColor\x20+\x20trailsColor;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20gl_FragDepth\x20=\x20min(pointsDepth,\x20trailsDepth);\x0a}\x0a',screenDraw_frag='uniform\x20sampler2D\x20trailsColorTexture;\x0auniform\x20sampler2D\x20trailsDepthTexture;\x0a\x0ain\x20vec2\x20textureCoordinate;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec4\x20trailsColor\x20=\x20texture(trailsColorTexture,\x20textureCoordinate);\x0a\x20\x20\x20\x20float\x20trailsDepth\x20=\x20texture(trailsDepthTexture,\x20textureCoordinate).r;\x0a\x20\x20\x20\x20float\x20globeDepth\x20=\x20czm_unpackDepth(texture(czm_globeDepthTexture,\x20textureCoordinate));\x0a\x0a\x20\x20\x20\x20if\x20(trailsDepth\x20<\x20globeDepth)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20trailsColor;\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20}\x0a}\x0a';const Cesium$4=mars3d__namespace[_0x4418ae(0x11b)];class ParticlesRendering{constructor(_0x55165e,_0x15fa69,_0xf2988f,_0x22f54f,_0x5410fb){const _0x2745d6=_0x4418ae;this['createRenderingTextures'](_0x55165e,_0x15fa69,_0xf2988f['colors']),this[_0x2745d6(0x1c2)](_0x55165e),this[_0x2745d6(0x1bc)](_0x55165e,_0xf2988f,_0x22f54f,_0x5410fb);}['createRenderingTextures'](_0x1c0969,_0x1c2594,_0x3131ac){const _0x1adb38=_0x4418ae,_0x166b75={'context':_0x1c0969,'width':_0x1c0969[_0x1adb38(0x130)],'height':_0x1c0969[_0x1adb38(0x12e)],'pixelFormat':Cesium$4[_0x1adb38(0x197)][_0x1adb38(0x1a4)],'pixelDatatype':Cesium$4['PixelDatatype'][_0x1adb38(0x16f)]},_0x3a98ce={'context':_0x1c0969,'width':_0x1c0969[_0x1adb38(0x130)],'height':_0x1c0969['drawingBufferHeight'],'pixelFormat':Cesium$4['PixelFormat']['DEPTH_COMPONENT'],'pixelDatatype':Cesium$4['PixelDatatype']['UNSIGNED_INT']},_0x5259d5=_0x3131ac['length'],_0x17953c=new Float32Array(_0x5259d5*0x3);for(let _0x490286=0x0;_0x490286<_0x5259d5;_0x490286++){const _0xc459ee=Cesium$4['Color']['fromCssColorString'](_0x3131ac[_0x490286]);_0x17953c[0x3*_0x490286]=_0xc459ee['red'],_0x17953c[0x3*_0x490286+0x1]=_0xc459ee['green'],_0x17953c[0x3*_0x490286+0x2]=_0xc459ee['blue'];}const _0x5a848d={'context':_0x1c0969,'width':_0x5259d5,'height':0x1,'pixelFormat':Cesium$4['PixelFormat'][_0x1adb38(0x14f)],'pixelDatatype':Cesium$4['PixelDatatype']['FLOAT'],'sampler':new Cesium$4[(_0x1adb38(0x1bf))]({'minificationFilter':Cesium$4['TextureMinificationFilter']['LINEAR'],'magnificationFilter':Cesium$4['TextureMagnificationFilter']['LINEAR']})};this['textures']={'segmentsColor':Util['createTexture'](_0x166b75),'segmentsDepth':Util[_0x1adb38(0x1b9)](_0x3a98ce),'currentTrailsColor':Util['createTexture'](_0x166b75),'currentTrailsDepth':Util[_0x1adb38(0x1b9)](_0x3a98ce),'nextTrailsColor':Util['createTexture'](_0x166b75),'nextTrailsDepth':Util['createTexture'](_0x3a98ce),'colorTable':Util['createTexture'](_0x5a848d,_0x17953c)};}[_0x4418ae(0x1c2)](_0x5d711e){const _0x1c291c=_0x4418ae;this['framebuffers']={'segments':Util['createFramebuffer'](_0x5d711e,this[_0x1c291c(0x12c)][_0x1c291c(0x195)],this['textures']['segmentsDepth']),'currentTrails':Util['createFramebuffer'](_0x5d711e,this['textures']['currentTrailsColor'],this['textures']['currentTrailsDepth']),'nextTrails':Util[_0x1c291c(0x194)](_0x5d711e,this[_0x1c291c(0x12c)][_0x1c291c(0x1b8)],this['textures']['nextTrailsDepth'])};}[_0x4418ae(0x17c)](_0x104f35){const _0x587262=_0x4418ae,_0xfa4dc7=0x4;let _0x5b7ce9=[];for(let _0x4351ad=0x0;_0x4351ad<_0x104f35['particlesTextureSize'];_0x4351ad++){for(let _0x16ce7c=0x0;_0x16ce7c<_0x104f35['particlesTextureSize'];_0x16ce7c++){for(let _0x54e049=0x0;_0x54e049<_0xfa4dc7;_0x54e049++){_0x5b7ce9[_0x587262(0x126)](_0x4351ad/_0x104f35['particlesTextureSize']),_0x5b7ce9['push'](_0x16ce7c/_0x104f35['particlesTextureSize']);}}}_0x5b7ce9=new Float32Array(_0x5b7ce9);let _0x155951=[];const _0x5d3d0c=[-0x1,0x1],_0x354ed3=[-0x1,0x1];for(let _0x3bdd60=0x0;_0x3bdd60<_0x104f35[_0x587262(0x113)];_0x3bdd60++){for(let _0x3944e2=0x0;_0x3944e2<_0xfa4dc7/0x2;_0x3944e2++){for(let _0x18278b=0x0;_0x18278b<_0xfa4dc7/0x2;_0x18278b++){_0x155951[_0x587262(0x126)](_0x5d3d0c[_0x3944e2]),_0x155951['push'](_0x354ed3[_0x18278b]),_0x155951['push'](0x0);}}}_0x155951=new Float32Array(_0x155951);const _0x15f4dc=0x6*_0x104f35['maxParticles'],_0xf5a02f=new Uint32Array(_0x15f4dc);for(let _0x38ff02=0x0,_0x319dff=0x0,_0x5407a3=0x0;_0x38ff02<_0x104f35[_0x587262(0x113)];_0x38ff02++){_0xf5a02f[_0x319dff++]=_0x5407a3+0x0,_0xf5a02f[_0x319dff++]=_0x5407a3+0x1,_0xf5a02f[_0x319dff++]=_0x5407a3+0x2,_0xf5a02f[_0x319dff++]=_0x5407a3+0x2,_0xf5a02f[_0x319dff++]=_0x5407a3+0x1,_0xf5a02f[_0x319dff++]=_0x5407a3+0x3,_0x5407a3+=0x4;}const _0x40caf1=new Cesium$4['Geometry']({'attributes':new Cesium$4['GeometryAttributes']({'st':new Cesium$4['GeometryAttribute']({'componentDatatype':Cesium$4['ComponentDatatype'][_0x587262(0x1cb)],'componentsPerAttribute':0x2,'values':_0x5b7ce9}),'normal':new Cesium$4[(_0x587262(0x15f))]({'componentDatatype':Cesium$4['ComponentDatatype']['FLOAT'],'componentsPerAttribute':0x3,'values':_0x155951})}),'indices':_0xf5a02f});return _0x40caf1;}[_0x4418ae(0x1bc)](_0x18a0c5,_0x47379e,_0x462d77,_0x9b7376){const _0x44334a=_0x4418ae,_0x3e1f0f=this;this[_0x44334a(0x1e1)]={'segments':new CustomPrimitive({'commandType':_0x44334a(0x148),'attributeLocations':{'st':0x0,'normal':0x1},'geometry':this['createSegmentsGeometry'](_0x47379e),'primitiveType':Cesium$4['PrimitiveType']['TRIANGLES'],'uniformMap':{'currentParticlesPosition':function(){return _0x9b7376['particlesTextures']['currentParticlesPosition'];},'postProcessingPosition':function(){const _0xea3bcb=_0x44334a;return _0x9b7376['particlesTextures'][_0xea3bcb(0x122)];},'postProcessingSpeed':function(){const _0x28cad2=_0x44334a;return _0x9b7376[_0x28cad2(0x127)]['postProcessingSpeed'];},'colorTable':function(){return _0x3e1f0f['textures']['colorTable'];},'aspect':function(){const _0x1bb773=_0x44334a;return _0x18a0c5[_0x1bb773(0x130)]/_0x18a0c5['drawingBufferHeight'];},'pixelSize':function(){return _0x462d77['pixelSize'];},'lineWidth':function(){return _0x47379e['lineWidth'];},'particleHeight':function(){const _0x5ce503=_0x44334a;return _0x47379e[_0x5ce503(0x189)];}},'vertexShaderSource':new Cesium$4['ShaderSource']({'sources':[segmentDraw_vert]}),'fragmentShaderSource':new Cesium$4['ShaderSource']({'sources':[segmentDraw_frag]}),'rawRenderState':Util['createRawRenderState']({'viewport':undefined,'depthTest':{'enabled':!![]},'depthMask':!![]}),'framebuffer':this['framebuffers'][_0x44334a(0x17a)],'autoClear':!![]}),'trails':new CustomPrimitive({'commandType':_0x44334a(0x148),'attributeLocations':{'position':0x0,'st':0x1},'geometry':Util['getFullscreenQuad'](),'primitiveType':Cesium$4['PrimitiveType']['TRIANGLES'],'uniformMap':{'segmentsColorTexture':function(){return _0x3e1f0f['textures']['segmentsColor'];},'segmentsDepthTexture':function(){const _0x2a5b84=_0x44334a;return _0x3e1f0f[_0x2a5b84(0x12c)]['segmentsDepth'];},'currentTrailsColor':function(){const _0x5aad7f=_0x44334a;return _0x3e1f0f[_0x5aad7f(0x180)]['currentTrails']['getColorTexture'](0x0);},'trailsDepthTexture':function(){const _0x3ef8f4=_0x44334a;return _0x3e1f0f['framebuffers'][_0x3ef8f4(0x158)]['depthTexture'];},'fadeOpacity':function(){return _0x47379e['fadeOpacity'];}},'vertexShaderSource':new Cesium$4['ShaderSource']({'defines':['DISABLE_GL_POSITION_LOG_DEPTH'],'sources':[fullscreen_vert]}),'fragmentShaderSource':new Cesium$4[(_0x44334a(0x1e4))]({'defines':[_0x44334a(0x16d)],'sources':[trailDraw_frag]}),'rawRenderState':Util['createRawRenderState']({'viewport':undefined,'depthTest':{'enabled':!![],'func':Cesium$4['DepthFunction']['ALWAYS']},'depthMask':!![]}),'framebuffer':this['framebuffers']['nextTrails'],'autoClear':!![],'preExecute':function(){const _0x4fb598=_0x44334a,_0x315329=_0x3e1f0f['framebuffers']['currentTrails'];_0x3e1f0f['framebuffers']['currentTrails']=_0x3e1f0f['framebuffers']['nextTrails'],_0x3e1f0f['framebuffers'][_0x4fb598(0x1a2)]=_0x315329,_0x3e1f0f[_0x4fb598(0x1e1)][_0x4fb598(0x159)][_0x4fb598(0x16c)]['framebuffer']=_0x3e1f0f['framebuffers']['nextTrails'],_0x3e1f0f['primitives']['trails'][_0x4fb598(0x11c)]['framebuffer']=_0x3e1f0f['framebuffers']['nextTrails'];}}),'screen':new CustomPrimitive({'commandType':'Draw','attributeLocations':{'position':0x0,'st':0x1},'geometry':Util['getFullscreenQuad'](),'primitiveType':Cesium$4['PrimitiveType']['TRIANGLES'],'uniformMap':{'trailsColorTexture':function(){return _0x3e1f0f['framebuffers']['nextTrails']['getColorTexture'](0x0);},'trailsDepthTexture':function(){return _0x3e1f0f['framebuffers']['nextTrails']['depthTexture'];}},'vertexShaderSource':new Cesium$4[(_0x44334a(0x1e4))]({'defines':['DISABLE_GL_POSITION_LOG_DEPTH'],'sources':[fullscreen_vert]}),'fragmentShaderSource':new Cesium$4['ShaderSource']({'defines':['DISABLE_LOG_DEPTH_FRAGMENT_WRITE'],'sources':[screenDraw_frag]}),'rawRenderState':Util['createRawRenderState']({'viewport':undefined,'depthTest':{'enabled':![]},'depthMask':!![],'blending':{'enabled':!![]}}),'framebuffer':undefined})};}}function _0x38bd(_0x3f155b,_0x14cdf3){const _0x4f071f=_0x4f07();return _0x38bd=function(_0x38bde4,_0x30d2b8){_0x38bde4=_0x38bde4-0x10d;let _0x4dd8f5=_0x4f071f[_0x38bde4];return _0x4dd8f5;},_0x38bd(_0x3f155b,_0x14cdf3);}var getWind_frag='//\x20the\x20size\x20of\x20UV\x20textures:\x20width\x20=\x20lon,\x20height\x20=\x20lat*lev\x0auniform\x20sampler2D\x20U;\x20//\x20eastward\x20wind\x0auniform\x20sampler2D\x20V;\x20//\x20northward\x20wind\x0a\x0auniform\x20sampler2D\x20currentParticlesPosition;\x20//\x20(lon,\x20lat,\x20lev)\x0a\x0auniform\x20vec3\x20dimension;\x20//\x20(lon,\x20lat,\x20lev)\x0auniform\x20vec3\x20minimum;\x20//\x20minimum\x20of\x20each\x20dimension\x0auniform\x20vec3\x20maximum;\x20//\x20maximum\x20of\x20each\x20dimension\x0auniform\x20vec3\x20interval;\x20//\x20interval\x20of\x20each\x20dimension\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0avec2\x20mapPositionToNormalizedIndex2D(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20ensure\x20the\x20range\x20of\x20longitude\x20and\x20latitude\x0a\x20\x20\x20\x20lonLatLev.x\x20=\x20mod(lonLatLev.x,\x20360.0);\x0a\x20\x20\x20\x20lonLatLev.y\x20=\x20clamp(lonLatLev.y,\x20-90.0,\x2090.0);\x0a\x0a\x20\x20\x20\x20vec3\x20index3D\x20=\x20vec3(0.0);\x0a\x20\x20\x20\x20index3D.x\x20=\x20(lonLatLev.x\x20-\x20minimum.x)\x20/\x20interval.x;\x0a\x20\x20\x20\x20index3D.y\x20=\x20(lonLatLev.y\x20-\x20minimum.y)\x20/\x20interval.y;\x0a\x20\x20\x20\x20index3D.z\x20=\x20(lonLatLev.z\x20-\x20minimum.z)\x20/\x20interval.z;\x0a\x0a\x20\x20\x20\x20//\x20the\x20st\x20texture\x20coordinate\x20corresponding\x20to\x20(col,\x20row)\x20index\x0a\x20\x20\x20\x20//\x20example\x0a\x20\x20\x20\x20//\x20data\x20array\x20is\x20[0,\x201,\x202,\x203,\x204,\x205],\x20width\x20=\x203,\x20height\x20=\x202\x0a\x20\x20\x20\x20//\x20the\x20content\x20of\x20texture\x20will\x20be\x0a\x20\x20\x20\x20//\x20t\x201.0\x0a\x20\x20\x20\x20//\x20\x20\x20\x20|\x20\x203\x204\x205\x0a\x20\x20\x20\x20//\x20\x20\x20\x20|\x0a\x20\x20\x20\x20//\x20\x20\x20\x20|\x20\x200\x201\x202\x0a\x20\x20\x20\x20//\x20\x20\x200.0------1.0\x20s\x0a\x0a\x20\x20\x20\x20vec2\x20index2D\x20=\x20vec2(index3D.x,\x20index3D.z\x20*\x20dimension.y\x20+\x20index3D.y);\x0a\x20\x20\x20\x20vec2\x20normalizedIndex2D\x20=\x20vec2(index2D.x\x20/\x20dimension.x,\x20index2D.y\x20/\x20(dimension.y\x20*\x20dimension.z));\x0a\x20\x20\x20\x20return\x20normalizedIndex2D;\x0a}\x0a\x0afloat\x20getWind(sampler2D\x20windTexture,\x20vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20vec2\x20normalizedIndex2D\x20=\x20mapPositionToNormalizedIndex2D(lonLatLev);\x0a\x20\x20\x20\x20float\x20result\x20=\x20texture(windTexture,\x20normalizedIndex2D).r;\x0a\x20\x20\x20\x20return\x20result;\x0a}\x0a\x0aconst\x20mat4\x20kernelMatrix\x20=\x20mat4(\x0a\x20\x20\x20\x200.0,\x20-1.0,\x202.0,\x20-1.0,\x20//\x20first\x20column\x0a\x20\x20\x20\x202.0,\x200.0,\x20-5.0,\x203.0,\x20//\x20second\x20column\x0a\x20\x20\x20\x200.0,\x201.0,\x204.0,\x20-3.0,\x20//\x20third\x20column\x0a\x20\x20\x20\x200.0,\x200.0,\x20-1.0,\x201.0\x20//\x20fourth\x20column\x0a);\x0afloat\x20oneDimensionInterpolation(float\x20t,\x20float\x20p0,\x20float\x20p1,\x20float\x20p2,\x20float\x20p3)\x20{\x0a\x20\x20\x20\x20vec4\x20tVec4\x20=\x20vec4(1.0,\x20t,\x20t\x20*\x20t,\x20t\x20*\x20t\x20*\x20t);\x0a\x20\x20\x20\x20tVec4\x20=\x20tVec4\x20/\x202.0;\x0a\x20\x20\x20\x20vec4\x20pVec4\x20=\x20vec4(p0,\x20p1,\x20p2,\x20p3);\x0a\x20\x20\x20\x20return\x20dot((tVec4\x20*\x20kernelMatrix),\x20pVec4);\x0a}\x0a\x0afloat\x20calculateB(sampler2D\x20windTexture,\x20float\x20t,\x20float\x20lon,\x20float\x20lat,\x20float\x20lev)\x20{\x0a\x20\x20\x20\x20float\x20lon0\x20=\x20floor(lon)\x20-\x201.0\x20*\x20interval.x;\x0a\x20\x20\x20\x20float\x20lon1\x20=\x20floor(lon);\x0a\x20\x20\x20\x20float\x20lon2\x20=\x20floor(lon)\x20+\x201.0\x20*\x20interval.x;\x0a\x20\x20\x20\x20float\x20lon3\x20=\x20floor(lon)\x20+\x202.0\x20*\x20interval.x;\x0a\x0a\x20\x20\x20\x20float\x20p0\x20=\x20getWind(windTexture,\x20vec3(lon0,\x20lat,\x20lev));\x0a\x20\x20\x20\x20float\x20p1\x20=\x20getWind(windTexture,\x20vec3(lon1,\x20lat,\x20lev));\x0a\x20\x20\x20\x20float\x20p2\x20=\x20getWind(windTexture,\x20vec3(lon2,\x20lat,\x20lev));\x0a\x20\x20\x20\x20float\x20p3\x20=\x20getWind(windTexture,\x20vec3(lon3,\x20lat,\x20lev));\x0a\x0a\x20\x20\x20\x20return\x20oneDimensionInterpolation(t,\x20p0,\x20p1,\x20p2,\x20p3);\x0a}\x0a\x0afloat\x20interpolateOneTexture(sampler2D\x20windTexture,\x20vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20float\x20lon\x20=\x20lonLatLev.x;\x0a\x20\x20\x20\x20float\x20lat\x20=\x20lonLatLev.y;\x0a\x20\x20\x20\x20float\x20lev\x20=\x20lonLatLev.z;\x0a\x0a\x20\x20\x20\x20float\x20lat0\x20=\x20floor(lat)\x20-\x201.0\x20*\x20interval.y;\x0a\x20\x20\x20\x20float\x20lat1\x20=\x20floor(lat);\x0a\x20\x20\x20\x20float\x20lat2\x20=\x20floor(lat)\x20+\x201.0\x20*\x20interval.y;\x0a\x20\x20\x20\x20float\x20lat3\x20=\x20floor(lat)\x20+\x202.0\x20*\x20interval.y;\x0a\x0a\x20\x20\x20\x20vec2\x20coefficient\x20=\x20lonLatLev.xy\x20-\x20floor(lonLatLev.xy);\x0a\x20\x20\x20\x20float\x20b0\x20=\x20calculateB(windTexture,\x20coefficient.x,\x20lon,\x20lat0,\x20lev);\x0a\x20\x20\x20\x20float\x20b1\x20=\x20calculateB(windTexture,\x20coefficient.x,\x20lon,\x20lat1,\x20lev);\x0a\x20\x20\x20\x20float\x20b2\x20=\x20calculateB(windTexture,\x20coefficient.x,\x20lon,\x20lat2,\x20lev);\x0a\x20\x20\x20\x20float\x20b3\x20=\x20calculateB(windTexture,\x20coefficient.x,\x20lon,\x20lat3,\x20lev);\x0a\x0a\x20\x20\x20\x20return\x20oneDimensionInterpolation(coefficient.y,\x20b0,\x20b1,\x20b2,\x20b3);\x0a}\x0a\x0avec3\x20bicubic(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20https://en.wikipedia.org/wiki/Bicubic_interpolation#Bicubic_convolution_algorithm\x0a\x20\x20\x20\x20float\x20u\x20=\x20interpolateOneTexture(U,\x20lonLatLev);\x0a\x20\x20\x20\x20float\x20v\x20=\x20interpolateOneTexture(V,\x20lonLatLev);\x0a\x20\x20\x20\x20float\x20w\x20=\x200.0;\x0a\x20\x20\x20\x20return\x20vec3(u,\x20v,\x20w);\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20//\x20texture\x20coordinate\x20must\x20be\x20normalized\x0a\x20\x20\x20\x20vec3\x20lonLatLev\x20=\x20texture(currentParticlesPosition,\x20v_textureCoordinates).rgb;\x0a\x20\x20\x20\x20vec3\x20windVector\x20=\x20bicubic(lonLatLev);\x0a\x20\x20\x20\x20out_FragColor\x20=\x20vec4(windVector,\x200.0);\x0a}\x0a',updateSpeed_frag='uniform\x20sampler2D\x20currentParticlesSpeed;\x20//\x20(u,\x20v,\x20w,\x20normalization)\x0auniform\x20sampler2D\x20particlesWind;\x0a\x0a//\x20used\x20to\x20calculate\x20the\x20wind\x20norm\x0auniform\x20vec2\x20uSpeedRange;\x20//\x20(min,\x20max);\x0auniform\x20vec2\x20vSpeedRange;\x0auniform\x20float\x20pixelSize;\x0auniform\x20float\x20speedFactor;\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0afloat\x20calculateWindNorm(vec3\x20speed)\x20{\x0a\x20\x20\x20\x20vec3\x20percent\x20=\x20vec3(0.0);\x0a\x20\x20\x20\x20percent.x\x20=\x20(speed.x\x20-\x20uSpeedRange.x)\x20/\x20(uSpeedRange.y\x20-\x20uSpeedRange.x);\x0a\x20\x20\x20\x20percent.y\x20=\x20(speed.y\x20-\x20vSpeedRange.x)\x20/\x20(vSpeedRange.y\x20-\x20vSpeedRange.x);\x0a\x20\x20\x20\x20float\x20normalization\x20=\x20length(percent);\x0a\x0a\x20\x20\x20\x20return\x20normalization;\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20//\x20texture\x20coordinate\x20must\x20be\x20normalized\x0a\x20\x20\x20\x20//\x20vec3\x20currentSpeed\x20=\x20texture(currentParticlesSpeed,\x20v_textureCoordinates).rgb;\x0a\x20\x20\x20\x20vec3\x20windVector\x20=\x20texture(particlesWind,\x20v_textureCoordinates).rgb;\x0a\x0a\x20\x20\x20\x20vec4\x20nextSpeed\x20=\x20vec4(speedFactor\x20*\x20pixelSize\x20*\x20windVector,\x20calculateWindNorm(windVector));\x0a\x20\x20\x20\x20out_FragColor\x20=\x20nextSpeed;\x0a}\x0a',updatePosition_frag=_0x4418ae(0x151),postProcessingPosition_frag='uniform\x20sampler2D\x20nextParticlesPosition;\x0auniform\x20sampler2D\x20nextParticlesSpeed;\x20//\x20(u,\x20v,\x20w,\x20normalization)\x0a\x0a//\x20range\x20(min,\x20max)\x0auniform\x20vec2\x20lonRange;\x0auniform\x20vec2\x20latRange;\x0a\x0auniform\x20float\x20randomCoefficient;\x20//\x20use\x20to\x20improve\x20the\x20pseudo-random\x20generator\x0auniform\x20float\x20dropRate;\x20//\x20drop\x20rate\x20is\x20a\x20chance\x20a\x20particle\x20will\x20restart\x20at\x20random\x20position\x20to\x20avoid\x20degeneration\x0auniform\x20float\x20dropRateBump;\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0a//\x20pseudo-random\x20generator\x0aconst\x20vec3\x20randomConstants\x20=\x20vec3(12.9898,\x2078.233,\x204375.85453);\x0aconst\x20vec2\x20normalRange\x20=\x20vec2(0.0,\x201.0);\x0afloat\x20rand(vec2\x20seed,\x20vec2\x20range)\x20{\x0a\x20\x20\x20\x20vec2\x20randomSeed\x20=\x20randomCoefficient\x20*\x20seed;\x0a\x20\x20\x20\x20float\x20temp\x20=\x20dot(randomConstants.xy,\x20randomSeed);\x0a\x20\x20\x20\x20temp\x20=\x20fract(sin(temp)\x20*\x20(randomConstants.z\x20+\x20temp));\x0a\x20\x20\x20\x20return\x20temp\x20*\x20(range.y\x20-\x20range.x)\x20+\x20range.x;\x0a}\x0a\x0avec3\x20generateRandomParticle(vec2\x20seed,\x20float\x20lev)\x20{\x0a\x20\x20\x20\x20//\x20ensure\x20the\x20longitude\x20is\x20in\x20[0,\x20360]\x0a\x20\x20\x20\x20float\x20randomLon\x20=\x20mod(rand(seed,\x20lonRange),\x20360.0);\x0a\x20\x20\x20\x20float\x20randomLat\x20=\x20rand(-seed,\x20latRange);\x0a\x0a\x20\x20\x20\x20return\x20vec3(randomLon,\x20randomLat,\x20lev);\x0a}\x0a\x0abool\x20particleOutbound(vec3\x20particle)\x20{\x0a\x20\x20\x20\x20return\x20particle.y\x20<\x20-90.0\x20||\x20particle.y\x20>\x2090.0;\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec3\x20nextParticle\x20=\x20texture(nextParticlesPosition,\x20v_textureCoordinates).rgb;\x0a\x20\x20\x20\x20vec4\x20nextSpeed\x20=\x20texture(nextParticlesSpeed,\x20v_textureCoordinates);\x0a\x20\x20\x20\x20float\x20particleDropRate\x20=\x20dropRate\x20+\x20dropRateBump\x20*\x20nextSpeed.a;\x0a\x0a\x20\x20\x20\x20vec2\x20seed1\x20=\x20nextParticle.xy\x20+\x20v_textureCoordinates;\x0a\x20\x20\x20\x20vec2\x20seed2\x20=\x20nextSpeed.xy\x20+\x20v_textureCoordinates;\x0a\x20\x20\x20\x20vec3\x20randomParticle\x20=\x20generateRandomParticle(seed1,\x20nextParticle.z);\x0a\x20\x20\x20\x20float\x20randomNumber\x20=\x20rand(seed2,\x20normalRange);\x0a\x0a\x20\x20\x20\x20if\x20(randomNumber\x20<\x20particleDropRate\x20||\x20particleOutbound(nextParticle))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20vec4(randomParticle,\x201.0);\x20//\x201.0\x20means\x20this\x20is\x20a\x20random\x20particle\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20vec4(nextParticle,\x200.0);\x0a\x20\x20\x20\x20}\x0a}\x0a',postProcessingSpeed_frag='uniform\x20sampler2D\x20postProcessingPosition;\x0auniform\x20sampler2D\x20nextParticlesSpeed;\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec4\x20randomParticle\x20=\x20texture(postProcessingPosition,\x20v_textureCoordinates);\x0a\x20\x20\x20\x20vec4\x20particleSpeed\x20=\x20texture(nextParticlesSpeed,\x20v_textureCoordinates);\x0a\x0a\x20\x20\x20\x20if\x20(randomParticle.a\x20>\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20particleSpeed;\x0a\x20\x20\x20\x20}\x0a}\x0a';const Cesium$3=mars3d__namespace[_0x4418ae(0x11b)];class ParticlesComputing{constructor(_0x586bc1,_0x18c38e,_0x4ce3f0,_0x40748e){this['data']=_0x18c38e,this['createWindTextures'](_0x586bc1,_0x18c38e),this['createParticlesTextures'](_0x586bc1,_0x4ce3f0,_0x40748e),this['createComputingPrimitives'](_0x18c38e,_0x4ce3f0,_0x40748e);}['createWindTextures'](_0x4d66e4,_0x17d5dc){const _0x8098a0=_0x4418ae,_0x25797b={'context':_0x4d66e4,'width':_0x17d5dc['dimensions']['lon'],'height':_0x17d5dc[_0x8098a0(0x1c9)]['lat']*(_0x17d5dc['dimensions']['lev']||0x1),'pixelFormat':Cesium$3['PixelFormat']['LUMINANCE'],'pixelDatatype':Cesium$3['PixelDatatype']['FLOAT'],'flipY':![],'sampler':new Cesium$3['Sampler']({'minificationFilter':Cesium$3[_0x8098a0(0x1ac)][_0x8098a0(0x19c)],'magnificationFilter':Cesium$3[_0x8098a0(0x16e)]['NEAREST']})};this['windTextures']={'U':Util['createTexture'](_0x25797b,_0x17d5dc['U']['array']),'V':Util['createTexture'](_0x25797b,_0x17d5dc['V'][_0x8098a0(0x1ba)])};}['createParticlesTextures'](_0x5c6a51,_0x454aa0,_0x156cc2){const _0x32c396=_0x4418ae,_0xce6cc2={'context':_0x5c6a51,'width':_0x454aa0['particlesTextureSize'],'height':_0x454aa0['particlesTextureSize'],'pixelFormat':Cesium$3['PixelFormat']['RGBA'],'pixelDatatype':Cesium$3[_0x32c396(0x134)][_0x32c396(0x1cb)],'flipY':![],'sampler':new Cesium$3[(_0x32c396(0x1bf))]({'minificationFilter':Cesium$3['TextureMinificationFilter']['NEAREST'],'magnificationFilter':Cesium$3['TextureMagnificationFilter']['NEAREST']})},_0xa837c1=this[_0x32c396(0x11e)](_0x454aa0['maxParticles'],_0x156cc2),_0x526113=new Float32Array(0x4*_0x454aa0['maxParticles'])['fill'](0x0);this[_0x32c396(0x127)]={'particlesWind':Util[_0x32c396(0x1b9)](_0xce6cc2),'currentParticlesPosition':Util[_0x32c396(0x1b9)](_0xce6cc2,_0xa837c1),'nextParticlesPosition':Util['createTexture'](_0xce6cc2,_0xa837c1),'currentParticlesSpeed':Util['createTexture'](_0xce6cc2,_0x526113),'nextParticlesSpeed':Util[_0x32c396(0x1b9)](_0xce6cc2,_0x526113),'postProcessingPosition':Util[_0x32c396(0x1b9)](_0xce6cc2,_0xa837c1),'postProcessingSpeed':Util[_0x32c396(0x1b9)](_0xce6cc2,_0x526113)};}['randomizeParticles'](_0x59792b,_0x4fba96){const _0x53dda3=_0x4418ae,_0x813f2a=new Float32Array(0x4*_0x59792b);for(let _0x222d0f=0x0;_0x222d0f<_0x59792b;_0x222d0f++){_0x813f2a[0x4*_0x222d0f]=Cesium$3[_0x53dda3(0x162)]['randomBetween'](_0x4fba96['lonRange']['x'],_0x4fba96[_0x53dda3(0x133)]['y']),_0x813f2a[0x4*_0x222d0f+0x1]=Cesium$3['Math']['randomBetween'](_0x4fba96[_0x53dda3(0x1ef)]['x'],_0x4fba96['latRange']['y']),_0x813f2a[0x4*_0x222d0f+0x2]=Cesium$3['Math']['randomBetween'](this['data'][_0x53dda3(0x1b1)]['min'],this[_0x53dda3(0x10d)]['lev']['max']),_0x813f2a[0x4*_0x222d0f+0x3]=0x0;}return _0x813f2a;}['destroyParticlesTextures'](){Object['keys'](this['particlesTextures'])['forEach'](_0x4751e6=>{this['particlesTextures'][_0x4751e6]['destroy']();});}[_0x4418ae(0x1e6)](_0xb6ce95,_0x397219,_0x2d12e4){const _0x21ec17=_0x4418ae,_0x343932=new Cesium$3[(_0x21ec17(0x1e3))](_0xb6ce95[_0x21ec17(0x1c9)]['lon'],_0xb6ce95['dimensions'][_0x21ec17(0x176)],_0xb6ce95['dimensions']['lev']),_0x387de8=new Cesium$3[(_0x21ec17(0x1e3))](_0xb6ce95['lon'][_0x21ec17(0x1c0)],_0xb6ce95['lat'][_0x21ec17(0x1c0)],_0xb6ce95['lev']['min']),_0x355b84=new Cesium$3['Cartesian3'](_0xb6ce95['lon']['max'],_0xb6ce95[_0x21ec17(0x176)]['max'],_0xb6ce95['lev']['max']),_0x22a001=new Cesium$3['Cartesian3']((_0x355b84['x']-_0x387de8['x'])/(_0x343932['x']-0x1),(_0x355b84['y']-_0x387de8['y'])/(_0x343932['y']-0x1),_0x343932['z']>0x1?(_0x355b84['z']-_0x387de8['z'])/(_0x343932['z']-0x1):0x1),_0x23473d=new Cesium$3['Cartesian2'](_0xb6ce95['U']['min'],_0xb6ce95['U']['max']),_0x57a222=new Cesium$3['Cartesian2'](_0xb6ce95['V']['min'],_0xb6ce95['V']['max']),_0x477398=this;this['primitives']={'getWind':new CustomPrimitive({'commandType':'Compute','uniformMap':{'U':function(){return _0x477398['windTextures']['U'];},'V':function(){return _0x477398['windTextures']['V'];},'currentParticlesPosition':function(){const _0x10cd9a=_0x21ec17;return _0x477398[_0x10cd9a(0x127)][_0x10cd9a(0x117)];},'dimension':function(){return _0x343932;},'minimum':function(){return _0x387de8;},'maximum':function(){return _0x355b84;},'interval':function(){return _0x22a001;}},'fragmentShaderSource':new Cesium$3['ShaderSource']({'sources':[getWind_frag]}),'outputTexture':this['particlesTextures']['particlesWind'],'preExecute':function(){_0x477398['primitives']['getWind']['commandToExecute']['outputTexture']=_0x477398['particlesTextures']['particlesWind'];}}),'updateSpeed':new CustomPrimitive({'commandType':'Compute','uniformMap':{'currentParticlesSpeed':function(){return _0x477398['particlesTextures']['currentParticlesSpeed'];},'particlesWind':function(){const _0x13f74b=_0x21ec17;return _0x477398['particlesTextures'][_0x13f74b(0x12f)];},'uSpeedRange':function(){return _0x23473d;},'vSpeedRange':function(){return _0x57a222;},'pixelSize':function(){const _0x5ce96e=_0x21ec17;return _0x2d12e4[_0x5ce96e(0x1ae)];},'speedFactor':function(){const _0x6f4a35=_0x21ec17;return _0x397219[_0x6f4a35(0x17d)];}},'fragmentShaderSource':new Cesium$3[(_0x21ec17(0x1e4))]({'sources':[updateSpeed_frag]}),'outputTexture':this['particlesTextures']['nextParticlesSpeed'],'preExecute':function(){const _0x30c1ea=_0x21ec17,_0x8c866d=_0x477398['particlesTextures'][_0x30c1ea(0x1de)];_0x477398[_0x30c1ea(0x127)]['currentParticlesSpeed']=_0x477398[_0x30c1ea(0x127)]['postProcessingSpeed'],_0x477398['particlesTextures']['postProcessingSpeed']=_0x8c866d,_0x477398['primitives'][_0x30c1ea(0x1ca)]['commandToExecute']['outputTexture']=_0x477398[_0x30c1ea(0x127)]['nextParticlesSpeed'];}}),'updatePosition':new CustomPrimitive({'commandType':'Compute','uniformMap':{'currentParticlesPosition':function(){const _0x1d5bcb=_0x21ec17;return _0x477398[_0x1d5bcb(0x127)][_0x1d5bcb(0x117)];},'currentParticlesSpeed':function(){return _0x477398['particlesTextures']['currentParticlesSpeed'];}},'fragmentShaderSource':new Cesium$3['ShaderSource']({'sources':[updatePosition_frag]}),'outputTexture':this[_0x21ec17(0x127)]['nextParticlesPosition'],'preExecute':function(){const _0xc9b523=_0x21ec17,_0x566cc5=_0x477398['particlesTextures']['currentParticlesPosition'];_0x477398['particlesTextures']['currentParticlesPosition']=_0x477398['particlesTextures']['postProcessingPosition'],_0x477398['particlesTextures']['postProcessingPosition']=_0x566cc5,_0x477398['primitives']['updatePosition'][_0xc9b523(0x16c)]['outputTexture']=_0x477398['particlesTextures']['nextParticlesPosition'];}}),'postProcessingPosition':new CustomPrimitive({'commandType':_0x21ec17(0x14c),'uniformMap':{'nextParticlesPosition':function(){return _0x477398['particlesTextures']['nextParticlesPosition'];},'nextParticlesSpeed':function(){const _0xf128b7=_0x21ec17;return _0x477398[_0xf128b7(0x127)]['nextParticlesSpeed'];},'lonRange':function(){const _0x100be8=_0x21ec17;return _0x2d12e4[_0x100be8(0x133)];},'latRange':function(){return _0x2d12e4['latRange'];},'randomCoefficient':function(){const _0x586090=Math['random']();return _0x586090;},'dropRate':function(){return _0x397219['dropRate'];},'dropRateBump':function(){const _0x5a3144=_0x21ec17;return _0x397219[_0x5a3144(0x190)];}},'fragmentShaderSource':new Cesium$3['ShaderSource']({'sources':[postProcessingPosition_frag]}),'outputTexture':this['particlesTextures'][_0x21ec17(0x122)],'preExecute':function(){const _0x20503b=_0x21ec17;_0x477398['primitives'][_0x20503b(0x122)][_0x20503b(0x16c)][_0x20503b(0x13f)]=_0x477398['particlesTextures'][_0x20503b(0x122)];}}),'postProcessingSpeed':new CustomPrimitive({'commandType':_0x21ec17(0x14c),'uniformMap':{'postProcessingPosition':function(){const _0x2a65a0=_0x21ec17;return _0x477398['particlesTextures'][_0x2a65a0(0x122)];},'nextParticlesSpeed':function(){return _0x477398['particlesTextures']['nextParticlesSpeed'];}},'fragmentShaderSource':new Cesium$3[(_0x21ec17(0x1e4))]({'sources':[postProcessingSpeed_frag]}),'outputTexture':this['particlesTextures'][_0x21ec17(0x1d9)],'preExecute':function(){_0x477398['primitives']['postProcessingSpeed']['commandToExecute']['outputTexture']=_0x477398['particlesTextures']['postProcessingSpeed'];}})};}}const Cesium$2=mars3d__namespace[_0x4418ae(0x11b)];class ParticleSystem{constructor(_0x3906d4,_0xb68808,_0x4a6b54,_0x266412){const _0x28bc99=_0x4418ae;this['context']=_0x3906d4,_0xb68808={..._0xb68808},_0xb68808['udata']&&_0xb68808['vdata']&&(_0xb68808[_0x28bc99(0x1c9)]={},_0xb68808[_0x28bc99(0x1c9)]['lon']=_0xb68808['cols'],_0xb68808['dimensions']['lat']=_0xb68808['rows'],_0xb68808['dimensions']['lev']=_0xb68808[_0x28bc99(0x1b1)]||0x1,_0xb68808['lon']={},_0xb68808['lon']['min']=_0xb68808[_0x28bc99(0x181)],_0xb68808['lon']['max']=_0xb68808[_0x28bc99(0x1db)],_0xb68808['lat']={},_0xb68808[_0x28bc99(0x176)]['min']=_0xb68808[_0x28bc99(0x12d)],_0xb68808['lat']['max']=_0xb68808['ymax'],_0xb68808['lev']={},_0xb68808['lev']['min']=_0xb68808[_0x28bc99(0x145)]??0x1,_0xb68808['lev']['max']=_0xb68808['levmax']??0x1,_0xb68808['U']={},_0xb68808['U']['array']=new Float32Array(_0xb68808['udata']),_0xb68808['U']['min']=_0xb68808['umin']??Math[_0x28bc99(0x1c0)](..._0xb68808['udata']),_0xb68808['U']['max']=_0xb68808[_0x28bc99(0x18e)]??Math['max'](..._0xb68808['udata']),_0xb68808['V']={},_0xb68808['V']['array']=new Float32Array(_0xb68808['vdata']),_0xb68808['V'][_0x28bc99(0x1c0)]=_0xb68808['vmin']??Math['min'](..._0xb68808['vdata']),_0xb68808['V']['max']=_0xb68808[_0x28bc99(0x110)]??Math['max'](..._0xb68808['vdata'])),this['data']=_0xb68808,this[_0x28bc99(0x13c)]=_0x4a6b54,this['viewerParameters']=_0x266412,this['particlesComputing']=new ParticlesComputing(this[_0x28bc99(0x1af)],this['data'],this['options'],this['viewerParameters']),this[_0x28bc99(0x188)]=new ParticlesRendering(this[_0x28bc99(0x1af)],this['data'],this['options'],this['viewerParameters'],this[_0x28bc99(0x1c3)]);}['canvasResize'](_0x2ee2bc){const _0x372f69=_0x4418ae;this['particlesComputing']['destroyParticlesTextures'](),Object['keys'](this['particlesComputing']['windTextures'])['forEach'](_0x167dba=>{this['particlesComputing']['windTextures'][_0x167dba]['destroy']();}),this[_0x372f69(0x188)]['textures']['colorTable'][_0x372f69(0x1b5)](),Object['keys'](this['particlesRendering'][_0x372f69(0x180)])['forEach'](_0x33b959=>{const _0x494050=_0x372f69;this['particlesRendering']['framebuffers'][_0x33b959][_0x494050(0x1b5)]();}),this['context']=_0x2ee2bc,this['particlesComputing']=new ParticlesComputing(this['context'],this['data'],this[_0x372f69(0x13c)],this[_0x372f69(0x116)]),this['particlesRendering']=new ParticlesRendering(this['context'],this[_0x372f69(0x10d)],this['options'],this['viewerParameters'],this['particlesComputing']);}['clearFramebuffers'](){const _0x1071ad=_0x4418ae,_0x5d13b8=new Cesium$2[(_0x1071ad(0x131))]({'color':new Cesium$2['Color'](0x0,0x0,0x0,0x0),'depth':0x1,'framebuffer':undefined,'pass':Cesium$2[_0x1071ad(0x192)]['OPAQUE']});Object['keys'](this['particlesRendering']['framebuffers'])['forEach'](_0x4e08da=>{_0x5d13b8['framebuffer']=this['particlesRendering']['framebuffers'][_0x4e08da],_0x5d13b8['execute'](this['context']);});}['refreshParticles'](_0x43352b){const _0x4709f0=_0x4418ae;this['clearFramebuffers'](),this['particlesComputing']['destroyParticlesTextures'](),this['particlesComputing']['createParticlesTextures'](this['context'],this['options'],this['viewerParameters']);if(_0x43352b){var _0x3e4754;const _0x25bfc9=this['particlesRendering'][_0x4709f0(0x17c)](this['options']);this[_0x4709f0(0x188)]['primitives']['segments'][_0x4709f0(0x111)]=_0x25bfc9;const _0x1c591f=Cesium$2[_0x4709f0(0x173)][_0x4709f0(0x11f)]({'context':this['context'],'geometry':_0x25bfc9,'attributeLocations':this[_0x4709f0(0x188)]['primitives'][_0x4709f0(0x17a)][_0x4709f0(0x19b)],'bufferUsage':Cesium$2['BufferUsage'][_0x4709f0(0x146)]});(_0x3e4754=this[_0x4709f0(0x188)]['primitives'])!==null&&_0x3e4754!==void 0x0&&(_0x3e4754=_0x3e4754['segments'])!==null&&_0x3e4754!==void 0x0&&_0x3e4754[_0x4709f0(0x16c)]&&(this['particlesRendering'][_0x4709f0(0x1e1)]['segments']['commandToExecute'][_0x4709f0(0x19a)]=_0x1c591f);}}[_0x4418ae(0x167)](_0x287ae3){const _0x5886dc=_0x4418ae;let _0x59159b=![];this['options'][_0x5886dc(0x113)]!==_0x287ae3['maxParticles']&&(_0x59159b=!![]),Object['keys'](_0x287ae3)['forEach'](_0x203ef5=>{this['options'][_0x203ef5]=_0x287ae3[_0x203ef5];}),this['refreshParticles'](_0x59159b);}['applyViewerParameters'](_0x1c21f9){const _0x53ada2=_0x4418ae;Object[_0x53ada2(0x15e)](_0x1c21f9)['forEach'](_0x5b9f2d=>{this['viewerParameters'][_0x5b9f2d]=_0x1c21f9[_0x5b9f2d];}),this[_0x53ada2(0x1ce)](![]);}['destroy'](){const _0x38cd37=_0x4418ae;clearTimeout(this[_0x38cd37(0x1be)]),this[_0x38cd37(0x1c3)][_0x38cd37(0x15a)](),Object['keys'](this[_0x38cd37(0x1c3)]['windTextures'])[_0x38cd37(0x1a8)](_0x42a683=>{this['particlesComputing']['windTextures'][_0x42a683]['destroy']();}),this['particlesRendering']['textures']['colorTable']['destroy'](),Object[_0x38cd37(0x15e)](this['particlesRendering']['framebuffers'])['forEach'](_0x402913=>{const _0x4e8f15=_0x38cd37;this['particlesRendering'][_0x4e8f15(0x180)][_0x402913]['destroy']();});for(const _0x1fe53a in this){delete this[_0x1fe53a];}}}const Cesium$1=mars3d__namespace['Cesium'],BaseLayer$1=mars3d__namespace['layer'][_0x4418ae(0x1c7)],DEF_OPTIONS={'particlesNumber':0x1000,'fixedHeight':0x0,'fadeOpacity':0.996,'dropRate':0.003,'dropRateBump':0.01,'speedFactor':0.5,'lineWidth':0x2,'colors':['rgb(206,255,255)']};class WindLayer extends BaseLayer$1{constructor(_0x526e16={}){_0x526e16={...DEF_OPTIONS,..._0x526e16},super(_0x526e16),this['_setOptionsHook'](_0x526e16);}get['layer'](){return this['primitives'];}get['data'](){const _0x1efb89=_0x4418ae;return this[_0x1efb89(0x1a1)];}set['data'](_0x36ffb0){this['setData'](_0x36ffb0);}get['colors'](){const _0x3302d3=_0x4418ae;return this['options'][_0x3302d3(0x14e)];}set['colors'](_0x2165ff){const _0x38d39c=_0x4418ae;this[_0x38d39c(0x13c)]['colors']=_0x2165ff,this['particleSystem']&&this['particleSystem']['setOptions']({'colors':_0x2165ff}),this[_0x38d39c(0x119)]();}['_mountedHook'](){}[_0x4418ae(0x1ec)](){const _0x151085=_0x4418ae;this[_0x151085(0x1e8)]=this['_map']['scene'],this[_0x151085(0x1e0)]=this[_0x151085(0x16a)]['camera'],this['primitives']=new Cesium$1[(_0x151085(0x1a0))](),this['_map']['scene']['primitives']['add'](this[_0x151085(0x1e1)]),this[_0x151085(0x116)]={'lonRange':new Cesium$1['Cartesian2'](),'latRange':new Cesium$1['Cartesian2'](),'pixelSize':0x0},this['globeBoundingSphere']=new Cesium$1[(_0x151085(0x129))](Cesium$1['Cartesian3']['ZERO'],0.99*0x615299),this['updateViewerParameters'](),window['addEventListener']('resize',this[_0x151085(0x119)]['bind'](this),![]),this['mouse_down']=![],this['mouse_move']=![],this[_0x151085(0x16a)]['on'](mars3d__namespace['EventType']['wheel'],this['_onMapWhellEvent'],this),this['_map']['on'](mars3d__namespace[_0x151085(0x135)]['mouseDown'],this['_onMouseDownEvent'],this),this['_map']['on'](mars3d__namespace['EventType'][_0x151085(0x150)],this[_0x151085(0x1e7)],this),this[_0x151085(0x16a)]['on'](mars3d__namespace['EventType']['mouseMove'],this['_onMouseMoveEvent'],this),this[_0x151085(0x1a1)]&&this['setData'](this['_data']);}['_removedHook'](){const _0x239412=_0x4418ae;window[_0x239412(0x14d)]('resize',this['resize']),this['_map'][_0x239412(0x114)](mars3d__namespace['EventType'][_0x239412(0x170)],this['_onMap_preRenderEvent'],this),this['_map'][_0x239412(0x114)](mars3d__namespace['EventType']['wheel'],this['_onMapWhellEvent'],this),this[_0x239412(0x16a)]['off'](mars3d__namespace['EventType']['mouseDown'],this[_0x239412(0x1e5)],this),this['_map']['off'](mars3d__namespace[_0x239412(0x135)][_0x239412(0x150)],this['_onMouseUpEvent'],this),this['_map']['off'](mars3d__namespace[_0x239412(0x135)][_0x239412(0x13d)],this['_onMouseMoveEvent'],this),this[_0x239412(0x1e1)]['removeAll'](),this[_0x239412(0x16a)]['scene']['primitives']['remove'](this['primitives']);}['resize'](){const _0x263271=_0x4418ae;if(!this[_0x263271(0x125)]||!this['particleSystem'])return;this['primitives']['show']=![],this['primitives']['removeAll'](),this['_map']['once'](mars3d__namespace[_0x263271(0x135)]['preRender'],this['_onMap_preRenderEvent'],this);}['_onMap_preRenderEvent'](_0x251e7e){const _0x533f8e=_0x4418ae;this['particleSystem']['canvasResize'](this['scene']['context']),this['addPrimitives'](),this['primitives'][_0x533f8e(0x125)]=!![];}['_onMapWhellEvent'](_0x5f1bdf){const _0x33626b=_0x4418ae;clearTimeout(this[_0x33626b(0x199)]);if(!this['show']||!this[_0x33626b(0x1da)])return;this['primitives']['show']=![],this['refreshTimer']=setTimeout(()=>{if(!this['show'])return;this['redraw']();},0xc8);}['_onMouseDownEvent'](_0x3710e8){this['mouse_down']=!![];}['_onMouseMoveEvent'](_0x9c45db){const _0x364101=_0x4418ae;if(!this[_0x364101(0x125)]||!this['particleSystem'])return;this['mouse_down']&&(this['primitives']['show']=![],this[_0x364101(0x154)]=!![]);}['_onMouseUpEvent'](_0x56e284){const _0x177036=_0x4418ae;if(!this['show']||!this['particleSystem'])return;this['mouse_down']&&this['mouse_move']&&this['redraw'](),this['primitives'][_0x177036(0x125)]=!![],this['mouse_down']=![],this['mouse_move']=![];}[_0x4418ae(0x17b)](){if(!this['_map']||!this['show'])return;this['updateViewerParameters'](),this['particleSystem']['applyViewerParameters'](this['viewerParameters']),this['primitives']['show']=!![];}['setData'](_0x121d58){const _0x3ce49f=_0x4418ae;this['_data']=_0x121d58,this['particleSystem']&&this['particleSystem']['destroy'](),this[_0x3ce49f(0x1da)]=new ParticleSystem(this['scene']['context'],_0x121d58,this['getOptions'](),this['viewerParameters']),this['addPrimitives']();}['_setOptionsHook'](_0x55b438,_0x2ce7f1){if(_0x55b438)for(const _0x38034d in _0x55b438){this[_0x38034d]=_0x55b438[_0x38034d];}this['particleSystem']&&this['particleSystem']['setOptions'](this['getOptions']());}['getOptions'](){const _0x2177dd=_0x4418ae,_0x295081=Math[_0x2177dd(0x1d5)](Math[_0x2177dd(0x1dd)](this['particlesNumber']));return this['particlesNumber']=_0x295081*_0x295081,{'particlesTextureSize':_0x295081,'maxParticles':this['particlesNumber'],'particleHeight':this['fixedHeight'],'fadeOpacity':this['fadeOpacity'],'dropRate':this['dropRate'],'dropRateBump':this['dropRateBump'],'speedFactor':this['speedFactor'],'lineWidth':this['lineWidth'],'colors':this[_0x2177dd(0x14e)]};}['addPrimitives'](){const _0x4faf9e=_0x4418ae;this[_0x4faf9e(0x1e1)][_0x4faf9e(0x120)](this['particleSystem'][_0x4faf9e(0x1c3)]['primitives'][_0x4faf9e(0x168)]),this['primitives']['add'](this['particleSystem']['particlesComputing']['primitives']['updateSpeed']),this['primitives']['add'](this[_0x4faf9e(0x1da)]['particlesComputing']['primitives']['updatePosition']),this['primitives']['add'](this['particleSystem']['particlesComputing']['primitives']['postProcessingPosition']),this['primitives']['add'](this['particleSystem'][_0x4faf9e(0x1c3)]['primitives'][_0x4faf9e(0x1d9)]),this['primitives']['add'](this['particleSystem'][_0x4faf9e(0x188)]['primitives']['segments']),this['primitives']['add'](this[_0x4faf9e(0x1da)]['particlesRendering']['primitives']['trails']),this[_0x4faf9e(0x1e1)]['add'](this['particleSystem'][_0x4faf9e(0x188)][_0x4faf9e(0x1e1)]['screen']);}['updateViewerParameters'](){const _0x18b208=_0x4418ae;let _0x2cd281=this['camera'][_0x18b208(0x179)](this[_0x18b208(0x1e8)][_0x18b208(0x153)][_0x18b208(0x10e)]);if(!_0x2cd281){const _0x4d9619=this['_map']['getExtent']();_0x2cd281=Cesium$1['Rectangle'][_0x18b208(0x121)](_0x4d9619['xmin'],_0x4d9619[_0x18b208(0x12d)],_0x4d9619['xmax'],_0x4d9619['ymax']);}const _0x5dadcb=Util[_0x18b208(0x1b2)](_0x2cd281);this['viewerParameters']['lonRange']['x']=_0x5dadcb[_0x18b208(0x10f)]['min'],this[_0x18b208(0x116)]['lonRange']['y']=_0x5dadcb[_0x18b208(0x10f)]['max'],this['viewerParameters'][_0x18b208(0x1ef)]['x']=_0x5dadcb['lat'][_0x18b208(0x1c0)],this[_0x18b208(0x116)]['latRange']['y']=_0x5dadcb[_0x18b208(0x176)]['max'];const _0x3a8e84=this[_0x18b208(0x1e0)]['getPixelSize'](this['globeBoundingSphere'],this['scene']['drawingBufferWidth'],this['scene']['drawingBufferHeight']);_0x3a8e84>0x0&&(this['viewerParameters']['pixelSize']=_0x3a8e84);}}mars3d__namespace['LayerUtil']['register']('wind',WindLayer),mars3d__namespace[_0x4418ae(0x140)][_0x4418ae(0x14a)]=WindLayer;class CanvasParticle{constructor(){const _0x4ecaa0=_0x4418ae;this['lng']=null,this['lat']=null,this['tlng']=null,this[_0x4ecaa0(0x1ea)]=null,this[_0x4ecaa0(0x112)]=null,this['speed']=null;}['destroy'](){for(const _0x5f91cb in this){delete this[_0x5f91cb];}}}class CanvasWindField{constructor(_0x1f7544){const _0x19ab1a=_0x4418ae;this[_0x19ab1a(0x167)](_0x1f7544);}get[_0x4418ae(0x124)](){return this['_speedRate'];}set['speedRate'](_0x2f3243){const _0x406262=_0x4418ae;this[_0x406262(0x18d)]=(0x64-(_0x2f3243>0x63?0x63:_0x2f3243))*0x64,this['_calc_speedRate']=[(this[_0x406262(0x1db)]-this['xmin'])/this['_speedRate'],(this['ymax']-this['ymin'])/this[_0x406262(0x18d)]];}get['maxAge'](){return this['_maxAge'];}set['maxAge'](_0x387acd){this['_maxAge']=_0x387acd;}['setOptions'](_0x721db2){const _0x35f1b1=_0x4418ae;this['options']=_0x721db2,this['maxAge']=_0x721db2['maxAge']||0x78,this['speedRate']=_0x721db2['speedRate']||0x32,this[_0x35f1b1(0x1c4)]=[];const _0x21d6e1=_0x721db2['particlesNumber']||0x1000;for(let _0x3ee1d9=0x0;_0x3ee1d9<_0x21d6e1;_0x3ee1d9++){const _0x2546b1=this['_randomParticle'](new CanvasParticle());this['particles'][_0x35f1b1(0x126)](_0x2546b1);}}['setDate'](_0x3ed20c){const _0x2423f2=_0x4418ae;this[_0x2423f2(0x143)]=_0x3ed20c['rows'],this['cols']=_0x3ed20c['cols'],this['xmin']=_0x3ed20c['xmin'],this[_0x2423f2(0x1db)]=_0x3ed20c['xmax'],this['ymin']=_0x3ed20c[_0x2423f2(0x12d)],this['ymax']=_0x3ed20c[_0x2423f2(0x187)],this['grid']=[];const _0x560f9c=_0x3ed20c[_0x2423f2(0x1e2)],_0x2c9c15=_0x3ed20c['vdata'];let _0x15713=![];_0x560f9c['length']===this['rows']&&_0x560f9c[0x0]['length']===this['cols']&&(_0x15713=!![]);let _0x32d8a4=0x0,_0x3e7b55=null,_0xc2bb20=null;for(let _0x40f5bc=0x0;_0x40f5bc<this['rows'];_0x40f5bc++){_0x3e7b55=[];for(let _0x5a72ee=0x0;_0x5a72ee<this['cols'];_0x5a72ee++,_0x32d8a4++){_0x15713?_0xc2bb20=this['_calcUV'](_0x560f9c[_0x40f5bc][_0x5a72ee],_0x2c9c15[_0x40f5bc][_0x5a72ee]):_0xc2bb20=this['_calcUV'](_0x560f9c[_0x32d8a4],_0x2c9c15[_0x32d8a4]),_0x3e7b55['push'](_0xc2bb20);}this['grid']['push'](_0x3e7b55);}this['options'][_0x2423f2(0x193)]&&this[_0x2423f2(0x1cc)][_0x2423f2(0x166)]();}[_0x4418ae(0x155)](){delete this['rows'],delete this['cols'],delete this['xmin'],delete this['xmax'],delete this['ymin'],delete this['ymax'],delete this['grid'],delete this['particles'];}['toGridXY'](_0x248d46,_0x4dd234){const _0x5eef96=_0x4418ae,_0x5b1e26=(_0x248d46-this[_0x5eef96(0x181)])/(this['xmax']-this['xmin'])*(this['cols']-0x1),_0x2a5814=(this['ymax']-_0x4dd234)/(this[_0x5eef96(0x187)]-this['ymin'])*(this[_0x5eef96(0x143)]-0x1);return[_0x5b1e26,_0x2a5814];}['getUVByXY'](_0x1cce5a,_0x2bd7e2){const _0x4e86e9=_0x4418ae;if(_0x1cce5a<0x0||_0x1cce5a>=this['cols']||_0x2bd7e2>=this['rows'])return[0x0,0x0,0x0];const _0x563bf8=Math['floor'](_0x1cce5a),_0x31b1e8=Math['floor'](_0x2bd7e2);if(_0x563bf8===_0x1cce5a&&_0x31b1e8===_0x2bd7e2)return this[_0x4e86e9(0x1cc)][_0x2bd7e2][_0x1cce5a];const _0x4c3dce=_0x563bf8+0x1,_0x23c11b=_0x31b1e8+0x1,_0x55fd51=this['getUVByXY'](_0x563bf8,_0x31b1e8),_0x2160d9=this['getUVByXY'](_0x4c3dce,_0x31b1e8),_0x4030b1=this['getUVByXY'](_0x563bf8,_0x23c11b),_0x457e28=this[_0x4e86e9(0x1e9)](_0x4c3dce,_0x23c11b);let _0x2b20c1=null;try{_0x2b20c1=this['_bilinearInterpolation'](_0x1cce5a-_0x563bf8,_0x2bd7e2-_0x31b1e8,_0x55fd51,_0x2160d9,_0x4030b1,_0x457e28);}catch(_0x23f547){console[_0x4e86e9(0x1a7)](_0x1cce5a,_0x2bd7e2);}return _0x2b20c1;}['_bilinearInterpolation'](_0x491542,_0x455d2e,_0x1c4176,_0x428c8a,_0x50bf4b,_0x51ab71){const _0x47c985=0x1-_0x491542,_0x4720a4=0x1-_0x455d2e,_0x14d672=_0x47c985*_0x4720a4,_0x12ab92=_0x491542*_0x4720a4,_0x27a0ab=_0x47c985*_0x455d2e,_0x5527c0=_0x491542*_0x455d2e,_0x587a94=_0x1c4176[0x0]*_0x14d672+_0x428c8a[0x0]*_0x12ab92+_0x50bf4b[0x0]*_0x27a0ab+_0x51ab71[0x0]*_0x5527c0,_0x341579=_0x1c4176[0x1]*_0x14d672+_0x428c8a[0x1]*_0x12ab92+_0x50bf4b[0x1]*_0x27a0ab+_0x51ab71[0x1]*_0x5527c0;return this['_calcUV'](_0x587a94,_0x341579);}[_0x4418ae(0x18a)](_0x6c1090,_0x4f6339){return[+_0x6c1090,+_0x4f6339,Math['sqrt'](_0x6c1090*_0x6c1090+_0x4f6339*_0x4f6339)];}[_0x4418ae(0x1ab)](_0x34fb47,_0x223380){const _0x300527=_0x4418ae;if(!this[_0x300527(0x1df)](_0x34fb47,_0x223380))return null;const _0x7e4a87=this['toGridXY'](_0x34fb47,_0x223380),_0x1f7a9d=this['getUVByXY'](_0x7e4a87[0x0],_0x7e4a87[0x1]);return _0x1f7a9d;}['isInExtent'](_0x43136b,_0x129091){return _0x43136b>=this['xmin']&&_0x43136b<=this['xmax']&&_0x129091>=this['ymin']&&_0x129091<=this['ymax']?!![]:![];}['getRandomLatLng'](){const _0x498aad=_0x4418ae,_0x563ac1=fRandomByfloat(this[_0x498aad(0x181)],this[_0x498aad(0x1db)]),_0x44e128=fRandomByfloat(this['ymin'],this['ymax']);return{'lat':_0x44e128,'lng':_0x563ac1};}['getParticles'](){const _0x49d7d6=_0x4418ae;let _0x58ebf3,_0x4aaef6,_0x2d0c1a;for(let _0x14239a=0x0,_0x33b7be=this['particles']['length'];_0x14239a<_0x33b7be;_0x14239a++){let _0x6758d=this[_0x49d7d6(0x1c4)][_0x14239a];_0x6758d['age']<=0x0&&(_0x6758d=this[_0x49d7d6(0x128)](_0x6758d));if(_0x6758d['age']>0x0){const _0x165051=_0x6758d['tlng'],_0x51ec61=_0x6758d['tlat'];_0x2d0c1a=this['getUVByPoint'](_0x165051,_0x51ec61),_0x2d0c1a?(_0x58ebf3=_0x165051+this[_0x49d7d6(0x11a)][0x0]*_0x2d0c1a[0x0],_0x4aaef6=_0x51ec61+this[_0x49d7d6(0x11a)][0x1]*_0x2d0c1a[0x1],_0x6758d['lng']=_0x165051,_0x6758d['lat']=_0x51ec61,_0x6758d['tlng']=_0x58ebf3,_0x6758d['tlat']=_0x4aaef6,_0x6758d['speed']=_0x2d0c1a[0x2],_0x6758d['age']--):_0x6758d[_0x49d7d6(0x112)]=0x0;}}return this['particles'];}['_randomParticle'](_0x4ecee1){const _0x3aa313=_0x4418ae;let _0x4c9672,_0xc8a62;for(let _0xc1bc05=0x0;_0xc1bc05<0x1e;_0xc1bc05++){_0x4c9672=this['getRandomLatLng'](),_0xc8a62=this['getUVByPoint'](_0x4c9672['lng'],_0x4c9672[_0x3aa313(0x176)]);if(_0xc8a62&&_0xc8a62[0x2]>0x0)break;}if(!_0xc8a62)return _0x4ecee1;const _0x1c9743=_0x4c9672[_0x3aa313(0x19f)]+this[_0x3aa313(0x11a)][0x0]*_0xc8a62[0x0],_0x1e1abe=_0x4c9672['lat']+this['_calc_speedRate'][0x1]*_0xc8a62[0x1];return _0x4ecee1[_0x3aa313(0x19f)]=_0x4c9672['lng'],_0x4ecee1['lat']=_0x4c9672['lat'],_0x4ecee1['tlng']=_0x1c9743,_0x4ecee1['tlat']=_0x1e1abe,_0x4ecee1['age']=Math[_0x3aa313(0x1bb)](Math['random']()*this['maxAge']),_0x4ecee1['speed']=_0xc8a62[0x2],_0x4ecee1;}['destroy'](){for(const _0x13fd43 in this){delete this[_0x13fd43];}}}function fRandomByfloat(_0x360186,_0x4ef8c6){const _0x146f00=_0x4418ae;return _0x360186+Math[_0x146f00(0x1eb)]()*(_0x4ef8c6-_0x360186);}const Cesium=mars3d__namespace[_0x4418ae(0x11b)],BaseLayer=mars3d__namespace[_0x4418ae(0x140)]['BaseLayer'];class CanvasWindLayer extends BaseLayer{constructor(_0x593d09={}){const _0xa77cb2=_0x4418ae;super(_0x593d09),this['_setOptionsHook'](_0x593d09),this['canvas']=null,_0x593d09[_0xa77cb2(0x14e)]&&_0x593d09[_0xa77cb2(0x171)]&&(this['_colorRamp']=new mars3d__namespace['ColorRamp'](_0x593d09));}['_setOptionsHook'](_0x2d77b6,_0x37c9bd){const _0x3a8bb9=_0x4418ae;this['frameTime']=0x3e8/(_0x2d77b6['frameRate']||0xa),this['_pointerEvents']=this['options']['pointerEvents']??![],this['color']=_0x2d77b6['color']||'#ffffff',this[_0x3a8bb9(0x1c6)]=_0x2d77b6[_0x3a8bb9(0x1c6)]||0x1,this[_0x3a8bb9(0x1a9)]=_0x2d77b6['fixedHeight']??0x0,this[_0x3a8bb9(0x193)]=_0x2d77b6['reverseY']??![],this['windField']&&this[_0x3a8bb9(0x186)]['setOptions'](_0x2d77b6);}get['layer'](){return this['canvas'];}get[_0x4418ae(0x18c)](){const _0x499700=_0x4418ae;return this['_map'][_0x499700(0x1e8)]['canvas']['clientWidth'];}get['canvasHeight'](){const _0x5dcbfe=_0x4418ae;return this['_map'][_0x5dcbfe(0x1e8)]['canvas']['clientHeight'];}get['pointerEvents'](){return this['_pointerEvents'];}set[_0x4418ae(0x183)](_0x306f17){const _0x144520=_0x4418ae;this['_pointerEvents']=_0x306f17;if(!this['canvas'])return;_0x306f17?this['canvas']['style']['pointer-events']='all':this['canvas']['style']['pointer-events']=_0x144520(0x15b);}get['particlesNumber'](){return this['options']['particlesNumber'];}set['particlesNumber'](_0xf0cb34){const _0xf6d3bb=_0x4418ae;this['options']['particlesNumber']=_0xf0cb34,clearTimeout(this[_0xf6d3bb(0x178)]),this['_canrefresh']=setTimeout(()=>{const _0x1f4063=_0xf6d3bb;this[_0x1f4063(0x17b)]();},0x1f4);}get['speedRate'](){const _0x51435a=_0x4418ae;return this[_0x51435a(0x13c)]['speedRate'];}set['speedRate'](_0x12c11b){const _0x2a6cd0=_0x4418ae;this[_0x2a6cd0(0x13c)][_0x2a6cd0(0x124)]=_0x12c11b,this['windField']&&(this['windField']['speedRate']=_0x12c11b);}get['maxAge'](){const _0x3ddc85=_0x4418ae;return this[_0x3ddc85(0x13c)][_0x3ddc85(0x141)];}set['maxAge'](_0x326ed6){const _0x1b8bfb=_0x4418ae;this[_0x1b8bfb(0x13c)]['maxAge']=_0x326ed6,this['windField']&&(this['windField']['maxAge']=_0x326ed6);}get[_0x4418ae(0x10d)](){return this['windData'];}set['data'](_0x1618bf){this['setData'](_0x1618bf);}['_showHook'](_0x1a79f7){const _0x144300=_0x4418ae;_0x1a79f7?this[_0x144300(0x1ec)]():(this['windData']&&(this['options']['data']=this[_0x144300(0x169)]),this['_removedHook']());}[_0x4418ae(0x15c)](){const _0x10f525=_0x4418ae;this['options']['worker']?this['initWorker']():this[_0x10f525(0x186)]=new CanvasWindField(this[_0x10f525(0x13c)]);}['_addedHook'](){const _0xd28528=_0x4418ae;this['canvas']=this[_0xd28528(0x1d6)](),this[_0xd28528(0x1d8)]=this[_0xd28528(0x182)]['getContext']('2d',{'willReadFrequently':!![]}),this['bindEvent'](),this['options'][_0xd28528(0x10d)]&&this['setData'](this[_0xd28528(0x13c)][_0xd28528(0x10d)]);}[_0x4418ae(0x177)](){const _0xb7afb7=_0x4418ae;this[_0xb7afb7(0x155)](),this[_0xb7afb7(0x165)](),this['canvas']&&(this[_0xb7afb7(0x16a)]['container']['removeChild'](this[_0xb7afb7(0x182)]),delete this['canvas']);}['_createCanvas'](){const _0x9cf7c5=_0x4418ae,_0x1b98b5=mars3d__namespace['DomUtil']['create'](_0x9cf7c5(0x182),'mars3d-canvasWind',this[_0x9cf7c5(0x16a)]['container']);return _0x1b98b5['style']['position']=_0x9cf7c5(0x184),_0x1b98b5[_0x9cf7c5(0x142)][_0x9cf7c5(0x1cf)]=_0x9cf7c5(0x175),_0x1b98b5['style']['left']='0px',_0x1b98b5['style']['width']=this[_0x9cf7c5(0x16a)][_0x9cf7c5(0x1e8)]['canvas'][_0x9cf7c5(0x1dc)]+'px',_0x1b98b5['style'][_0x9cf7c5(0x11d)]=this['_map']['scene']['canvas']['clientHeight']+'px',_0x1b98b5['style']['pointerEvents']=this['_pointerEvents']?'auto':'none',_0x1b98b5['style']['zIndex']=this['options']['zIndex']??0x9,_0x1b98b5[_0x9cf7c5(0x136)]=this['_map']['scene']['canvas']['clientWidth'],_0x1b98b5['height']=this['_map'][_0x9cf7c5(0x1e8)]['canvas']['clientHeight'],_0x1b98b5;}[_0x4418ae(0x119)](){const _0x501fb4=_0x4418ae;this['canvas']&&(this['canvas'][_0x501fb4(0x142)]['width']=this['_map'][_0x501fb4(0x1e8)]['canvas']['clientWidth']+'px',this['canvas'][_0x501fb4(0x142)]['height']=this['_map'][_0x501fb4(0x1e8)]['canvas']['clientHeight']+'px',this['canvas']['width']=this['_map']['scene']['canvas'][_0x501fb4(0x1dc)],this['canvas']['height']=this['_map'][_0x501fb4(0x1e8)]['canvas']['clientHeight']);}['bindEvent'](){const _0x254da6=_0x4418ae,_0x5ca6bb=this;let _0x1b403b=Date['now']();(function _0x431f17(){const _0x594ef=_0x38bd;_0x5ca6bb['animateFrame']=window['requestAnimationFrame'](_0x431f17);if(_0x5ca6bb['show']&&_0x5ca6bb['windField']){const _0x4c4524=Date['now'](),_0x4f0724=_0x4c4524-_0x1b403b;_0x4f0724>_0x5ca6bb['frameTime']&&(_0x1b403b=_0x4c4524-_0x4f0724%_0x5ca6bb['frameTime'],_0x5ca6bb[_0x594ef(0x1c5)]());}}(),window['addEventListener']('resize',this['resize']['bind'](this),![]),this['mouse_down']=![],this[_0x254da6(0x154)]=![],this['options']['mouseHidden']&&(this['_map']['on'](mars3d__namespace['EventType'][_0x254da6(0x1b0)],this['_onMapWhellEvent'],this),this['_map']['on'](mars3d__namespace['EventType']['mouseDown'],this['_onMouseDownEvent'],this),this['_map']['on'](mars3d__namespace['EventType']['mouseUp'],this[_0x254da6(0x1e7)],this)));}[_0x4418ae(0x165)](){const _0x136329=_0x4418ae;window['cancelAnimationFrame'](this['animateFrame']),delete this['animateFrame'],window['removeEventListener'](_0x136329(0x119),this['resize']),this[_0x136329(0x13c)][_0x136329(0x13e)]&&(this['_map'][_0x136329(0x114)](mars3d__namespace[_0x136329(0x135)]['wheel'],this['_onMapWhellEvent'],this),this[_0x136329(0x16a)]['off'](mars3d__namespace['EventType']['mouseDown'],this['_onMouseDownEvent'],this),this[_0x136329(0x16a)][_0x136329(0x114)](mars3d__namespace['EventType'][_0x136329(0x150)],this['_onMouseUpEvent'],this),this['_map'][_0x136329(0x114)](mars3d__namespace['EventType']['mouseMove'],this['_onMouseMoveEvent'],this));}['_onMapWhellEvent'](_0x583667){const _0x498ec6=_0x4418ae;clearTimeout(this['refreshTimer']);if(!this[_0x498ec6(0x125)]||!this['canvas'])return;this['canvas']['style']['visibility']='hidden',this['refreshTimer']=setTimeout(()=>{const _0x503185=_0x498ec6;if(!this[_0x503185(0x125)])return;this['redraw'](),this['canvas']['style']['visibility']='visible';},0xc8);}['_onMouseDownEvent'](_0x586d2e){const _0x5be092=_0x4418ae;this['mouse_down']=!![],this['_map'][_0x5be092(0x114)](mars3d__namespace[_0x5be092(0x135)]['mouseMove'],this[_0x5be092(0x1a6)],this),this['_map']['on'](mars3d__namespace['EventType']['mouseMove'],this['_onMouseMoveEvent'],this);}['_onMouseMoveEvent'](_0x3fe8f1){const _0x3f12d4=_0x4418ae;if(!this[_0x3f12d4(0x125)]||!this['canvas'])return;this[_0x3f12d4(0x1ad)]&&(this['canvas']['style']['visibility']=_0x3f12d4(0x1cd),this[_0x3f12d4(0x154)]=!![]);}['_onMouseUpEvent'](_0x51fe4c){const _0x55f121=_0x4418ae;if(!this['show']||!this['canvas'])return;this[_0x55f121(0x16a)]['off'](mars3d__namespace[_0x55f121(0x135)]['mouseMove'],this['_onMouseMoveEvent'],this),this['mouse_down']&&this['mouse_move']&&this['redraw'](),this['canvas']['style']['visibility']='visible',this['mouse_down']=![],this[_0x55f121(0x154)]=![];}[_0x4418ae(0x123)](_0x47a4c8){const _0x5b69e3=_0x4418ae;this[_0x5b69e3(0x155)](),this['windData']=_0x47a4c8,this['windField']['setDate'](_0x47a4c8),this['redraw']();}[_0x4418ae(0x17b)](){const _0xb96034=_0x4418ae;if(!this['show'])return;this[_0xb96034(0x186)]['setOptions'](this[_0xb96034(0x13c)]),this['update']();}['update'](){const _0x49eb7b=_0x4418ae;if(this[_0x49eb7b(0x147)])return;this['_updateIng']=!![];if(this['worker'])this['windField'][_0x49eb7b(0x1c5)]();else{const _0x422062=this[_0x49eb7b(0x186)]['getParticles']();this['_drawLines'](_0x422062);}this['_updateIng']=![];}['_drawLines'](_0x4c1c4b){const _0x257597=_0x4418ae;this['canvasContext']['globalCompositeOperation']='destination-in',this[_0x257597(0x1d8)]['fillRect'](0x0,0x0,this['canvasWidth'],this['canvasHeight']),this['canvasContext']['globalCompositeOperation']=_0x257597(0x139),this['canvasContext'][_0x257597(0x160)]=0.9;const _0x50a5c3=this[_0x257597(0x16a)][_0x257597(0x1e8)]['mode']!==Cesium['SceneMode']['SCENE3D'],_0x9e9fb1=this['canvasWidth']*0.25;if(this['_colorRamp'])for(let _0x524bef=0x0,_0x1fc5ab=_0x4c1c4b['length'];_0x524bef<_0x1fc5ab;_0x524bef++){const _0x1f21ef=_0x4c1c4b[_0x524bef],_0x38eb60=this['_tomap'](_0x1f21ef[_0x257597(0x19f)],_0x1f21ef['lat'],_0x1f21ef),_0x2096c0=this['_tomap'](_0x1f21ef[_0x257597(0x164)],_0x1f21ef['tlat'],_0x1f21ef);if(!_0x38eb60||!_0x2096c0)continue;if(_0x50a5c3&&Math['abs'](_0x38eb60[0x0]-_0x2096c0[0x0])>=_0x9e9fb1)continue;this[_0x257597(0x1d8)][_0x257597(0x118)](),this['canvasContext']['lineWidth']=this[_0x257597(0x1c6)],this['canvasContext']['strokeStyle']=this['_colorRamp']['getColor'](_0x1f21ef['speed']),this['canvasContext']['moveTo'](_0x38eb60[0x0],_0x38eb60[0x1]),this['canvasContext']['lineTo'](_0x2096c0[0x0],_0x2096c0[0x1]),this['canvasContext']['stroke']();}else{this['canvasContext']['beginPath'](),this['canvasContext'][_0x257597(0x1c6)]=this[_0x257597(0x1c6)],this['canvasContext']['strokeStyle']=this['color'];for(let _0x3e77f7=0x0,_0x3c37d4=_0x4c1c4b['length'];_0x3e77f7<_0x3c37d4;_0x3e77f7++){const _0x1b27af=_0x4c1c4b[_0x3e77f7],_0x1b547c=this['_tomap'](_0x1b27af[_0x257597(0x19f)],_0x1b27af['lat'],_0x1b27af),_0x2237c5=this['_tomap'](_0x1b27af[_0x257597(0x164)],_0x1b27af['tlat'],_0x1b27af);if(!_0x1b547c||!_0x2237c5)continue;if(_0x50a5c3&&Math['abs'](_0x1b547c[0x0]-_0x2237c5[0x0])>=_0x9e9fb1)continue;this['canvasContext']['moveTo'](_0x1b547c[0x0],_0x1b547c[0x1]),this['canvasContext'][_0x257597(0x18b)](_0x2237c5[0x0],_0x2237c5[0x1]);}this[_0x257597(0x1d8)]['stroke']();}}[_0x4418ae(0x1d0)](_0xeecbfe,_0x3009e5,_0x401cf4){const _0x17bd4a=_0x4418ae,_0xa91910=Cesium[_0x17bd4a(0x1e3)]['fromDegrees'](_0xeecbfe,_0x3009e5,this[_0x17bd4a(0x1a9)]),_0x27abb8=this['_map']['scene'];if(_0x27abb8['mode']===Cesium['SceneMode'][_0x17bd4a(0x156)]){const _0x1ff4bb=new Cesium['EllipsoidalOccluder'](_0x27abb8[_0x17bd4a(0x153)][_0x17bd4a(0x10e)],_0x27abb8['camera']['positionWC']),_0x5626ca=_0x1ff4bb[_0x17bd4a(0x132)](_0xa91910);if(!_0x5626ca)return _0x401cf4['age']=0x0,null;}const _0x2c756e=Cesium['SceneTransforms']['wgs84ToWindowCoordinates'](this['_map']['scene'],_0xa91910);return _0x2c756e?[_0x2c756e['x'],_0x2c756e['y']]:null;}[_0x4418ae(0x155)](){this['windField']['clear'](),delete this['windData'];}['initWorker'](){const _0x2707b1=_0x4418ae;this['worker']=new Worker(this['options']['worker']),this[_0x2707b1(0x191)]['onmessage']=_0x3197e0=>{this['_drawLines'](_0x3197e0['data']['particles']),this['_updateIng2']=![];},this['windField']={'init':_0x88bff2=>{this['worker']['postMessage']({'type':'init','options':_0x88bff2});},'setOptions':_0x6e8b00=>{this['worker']['postMessage']({'type':'setOptions','options':_0x6e8b00});},'setDate':_0x15b852=>{const _0x31cfd7=_0x2707b1;this['worker']['postMessage']({'type':_0x31cfd7(0x174),'data':_0x15b852});},'update':()=>{const _0x3af494=_0x2707b1;if(this['_updateIng2'])return;this[_0x3af494(0x15d)]=!![],this['worker'][_0x3af494(0x1ee)]({'type':'update'});},'clear':()=>{const _0x24ae15=_0x2707b1;this['worker'][_0x24ae15(0x1ee)]({'type':_0x24ae15(0x155)});}},this[_0x2707b1(0x186)][_0x2707b1(0x1b3)](this['options']);}}mars3d__namespace[_0x4418ae(0x161)]['register']('canvasWind',CanvasWindLayer),mars3d__namespace['layer'][_0x4418ae(0x1c1)]=CanvasWindLayer,mars3d__namespace['CanvasWindField']=CanvasWindField,mars3d__namespace[_0x4418ae(0x1d3)]=WindUtil,exports['CanvasWindField']=CanvasWindField,exports['CanvasWindLayer']=CanvasWindLayer,exports[_0x4418ae(0x14a)]=WindLayer,exports['WindUtil']=WindUtil,Object['defineProperty'](exports,'__esModule',{'value':!![]});
14
+ 'use strict';const _0xf860f5=_0xdac7;(function(_0x422564,_0x5177ff){const _0x41e0d8=_0xdac7,_0x154d8e=_0x422564();while(!![]){try{const _0x3211ac=-parseInt(_0x41e0d8(0x1e7))/0x1*(parseInt(_0x41e0d8(0x1e6))/0x2)+parseInt(_0x41e0d8(0x242))/0x3*(-parseInt(_0x41e0d8(0x228))/0x4)+parseInt(_0x41e0d8(0x24a))/0x5+parseInt(_0x41e0d8(0x2b0))/0x6+-parseInt(_0x41e0d8(0x2dc))/0x7*(-parseInt(_0x41e0d8(0x222))/0x8)+parseInt(_0x41e0d8(0x238))/0x9*(parseInt(_0x41e0d8(0x219))/0xa)+-parseInt(_0x41e0d8(0x207))/0xb;if(_0x3211ac===_0x5177ff)break;else _0x154d8e['push'](_0x154d8e['shift']());}catch(_0x283ca0){_0x154d8e['push'](_0x154d8e['shift']());}}}(_0x4980,0xe479e));function _interopNamespace(_0xd66430){const _0x5a626e=_0xdac7;if(_0xd66430&&_0xd66430[_0x5a626e(0x215)])return _0xd66430;var _0x43b578=Object[_0x5a626e(0x27a)](null);return _0xd66430&&Object[_0x5a626e(0x28c)](_0xd66430)['forEach'](function(_0x12a5a4){if(_0x12a5a4!=='default'){var _0x4f793f=Object['getOwnPropertyDescriptor'](_0xd66430,_0x12a5a4);Object['defineProperty'](_0x43b578,_0x12a5a4,_0x4f793f['get']?_0x4f793f:{'enumerable':!![],'get':function(){return _0xd66430[_0x12a5a4];}});}}),_0x43b578[_0x5a626e(0x212)]=_0xd66430,_0x43b578;}var mars3d__namespace=_interopNamespace(mars3d);const Cesium$7=mars3d__namespace['Cesium'];function getU(_0x83e115,_0x4b82be){const _0x599efd=_0xdac7,_0x4e5c2d=_0x83e115*Math['cos'](Cesium$7[_0x599efd(0x1ed)]['toRadians'](_0x4b82be));return _0x4e5c2d;}function getV(_0x2df9f1,_0x5b68b0){const _0x3d14d0=_0x2df9f1*Math['sin'](Cesium$7['Math']['toRadians'](_0x5b68b0));return _0x3d14d0;}function getSpeed(_0x835d95,_0x18b427){const _0x19372b=Math['sqrt'](Math['pow'](_0x835d95,0x2)+Math['pow'](_0x18b427,0x2));return _0x19372b;}function getDirection(_0x2431d8,_0x1f4763){const _0x55bc45=_0xdac7;let _0x47a365=Cesium$7['Math'][_0x55bc45(0x2b7)](Math['atan2'](_0x1f4763,_0x2431d8));return _0x47a365+=_0x47a365<0x0?0x168:0x0,_0x47a365;}var WindUtil={'__proto__':null,'getU':getU,'getV':getV,'getSpeed':getSpeed,'getDirection':getDirection};const Cesium$6=mars3d__namespace['Cesium'];class CustomPrimitive{constructor(_0x189695){const _0x738a05=_0xdac7;this[_0x738a05(0x296)]=_0x189695['commandType'],this[_0x738a05(0x20e)]=_0x189695[_0x738a05(0x20e)],this[_0x738a05(0x20d)]=_0x189695['attributeLocations'],this['primitiveType']=_0x189695[_0x738a05(0x1ea)],this['uniformMap']=_0x189695['uniformMap'],this['vertexShaderSource']=_0x189695['vertexShaderSource'],this['fragmentShaderSource']=_0x189695['fragmentShaderSource'],this['rawRenderState']=_0x189695[_0x738a05(0x233)],this['framebuffer']=_0x189695['framebuffer'],this['outputTexture']=_0x189695[_0x738a05(0x202)],this['autoClear']=_0x189695[_0x738a05(0x2c1)]??![],this[_0x738a05(0x24d)]=_0x189695[_0x738a05(0x24d)],this['show']=!![],this[_0x738a05(0x1e9)]=undefined,this['clearCommand']=undefined,this[_0x738a05(0x2c1)]&&(this[_0x738a05(0x22a)]=new Cesium$6[(_0x738a05(0x236))]({'color':new Cesium$6['Color'](0x0,0x0,0x0,0x0),'depth':0x1,'framebuffer':this['framebuffer'],'pass':Cesium$6['Pass'][_0x738a05(0x248)]}));}[_0xf860f5(0x2be)](_0x525751){const _0x3899d6=_0xf860f5;switch(this['commandType']){case _0x3899d6(0x243):{const _0x4de1cf=Cesium$6['VertexArray'][_0x3899d6(0x1f2)]({'context':_0x525751,'geometry':this['geometry'],'attributeLocations':this[_0x3899d6(0x20d)],'bufferUsage':Cesium$6['BufferUsage']['STATIC_DRAW']}),_0x455e61=Cesium$6[_0x3899d6(0x260)]['fromCache']({'context':_0x525751,'attributeLocations':this[_0x3899d6(0x20d)],'vertexShaderSource':this['vertexShaderSource'],'fragmentShaderSource':this['fragmentShaderSource']}),_0x190fc3=Cesium$6['RenderState']['fromCache'](this['rawRenderState']);return new Cesium$6[(_0x3899d6(0x245))]({'primitiveType':this['primitiveType'],'shaderProgram':_0x455e61,'vertexArray':_0x4de1cf,'modelMatrix':Cesium$6['Matrix4']['IDENTITY'],'renderState':_0x190fc3,'uniformMap':this['uniformMap'],'castShadows':![],'receiveShadows':![],'framebuffer':this['framebuffer'],'pass':Cesium$6['Pass']['OPAQUE'],'pickOnly':!![],'owner':this});}case'Compute':{return new Cesium$6['ComputeCommand']({'owner':this,'fragmentShaderSource':this['fragmentShaderSource'],'uniformMap':this['uniformMap'],'outputTexture':this[_0x3899d6(0x202)],'persists':!![]});}}}['setGeometry'](_0x7c89b8,_0x3d7ffd){const _0x32f0fb=_0xf860f5;this['geometry']=_0x3d7ffd;const _0x592795=Cesium$6['VertexArray']['fromGeometry']({'context':_0x7c89b8,'geometry':this['geometry'],'attributeLocations':this[_0x32f0fb(0x20d)],'bufferUsage':Cesium$6[_0x32f0fb(0x249)]['STATIC_DRAW']});this['commandToExecute']['vertexArray']=_0x592795;}['update'](_0x59093e){const _0x35222c=_0xf860f5;if(!this['show'])return;if(_0x59093e[_0x35222c(0x22b)]!==Cesium$6[_0x35222c(0x1ee)]['SCENE3D'])return;!Cesium$6['defined'](this[_0x35222c(0x1e9)])&&(this['commandToExecute']=this['createCommand'](_0x59093e['context'])),Cesium$6['defined'](this['preExecute'])&&this['preExecute'](),Cesium$6['defined'](this[_0x35222c(0x22a)])&&_0x59093e['commandList']['push'](this['clearCommand']),_0x59093e[_0x35222c(0x1f3)][_0x35222c(0x2c6)](this['commandToExecute']);}['isDestroyed'](){return![];}['destroy'](){const _0x361fde=_0xf860f5;if(this[_0x361fde(0x22a)]){var _0x25f3d3,_0x9f0ee9;(_0x25f3d3=this[_0x361fde(0x22a)])!==null&&_0x25f3d3!==void 0x0&&_0x25f3d3['vertexArray']&&this['clearCommand'][_0x361fde(0x1ec)]['destroy'](),(_0x9f0ee9=this['clearCommand'])!==null&&_0x9f0ee9!==void 0x0&&_0x9f0ee9[_0x361fde(0x271)]&&this[_0x361fde(0x22a)]['shaderProgram']['destroy'](),delete this[_0x361fde(0x22a)];}return this['commandToExecute']&&(this[_0x361fde(0x1e9)]['vertexArray']&&this['commandToExecute']['vertexArray']['destroy'](),this['commandToExecute'][_0x361fde(0x271)]&&this['commandToExecute']['shaderProgram']['destroy'](),delete this['commandToExecute']),Cesium$6['destroyObject'](this);}}const Cesium$5=mars3d__namespace['Cesium'],Util=(function(){const _0x360489=function(){const _0x10213c=_0xdac7,_0x3ab927=new Cesium$5[(_0x10213c(0x22e))]({'attributes':new Cesium$5['GeometryAttributes']({'position':new Cesium$5['GeometryAttribute']({'componentDatatype':Cesium$5['ComponentDatatype']['FLOAT'],'componentsPerAttribute':0x3,'values':new Float32Array([-0x1,-0x1,0x0,0x1,-0x1,0x0,0x1,0x1,0x0,-0x1,0x1,0x0])}),'st':new Cesium$5[(_0x10213c(0x261))]({'componentDatatype':Cesium$5['ComponentDatatype'][_0x10213c(0x241)],'componentsPerAttribute':0x2,'values':new Float32Array([0x0,0x0,0x1,0x0,0x1,0x1,0x0,0x1])})}),'indices':new Uint32Array([0x3,0x2,0x0,0x0,0x2,0x1])});return _0x3ab927;},_0x2d84f2=function(_0x177f0d,_0x269690){const _0x15431a=_0xdac7;if(Cesium$5[_0x15431a(0x20c)](_0x269690)){const _0x1996d2={};_0x1996d2['arrayBufferView']=_0x269690,_0x177f0d['source']=_0x1996d2;}const _0x2de1b9=new Cesium$5['Texture'](_0x177f0d);return _0x2de1b9;},_0x165752=function(_0x251e6b,_0x9892c1,_0x3431df){const _0x380c41=new Cesium$5['Framebuffer']({'context':_0x251e6b,'colorTextures':[_0x9892c1],'depthTexture':_0x3431df});return _0x380c41;},_0x5e42be=function(_0x542652){const _0x1c35b5=_0xdac7,_0x210846=!![],_0xad1a81=![],_0x23b902={'viewport':_0x542652[_0x1c35b5(0x293)],'depthTest':_0x542652[_0x1c35b5(0x2ca)],'depthMask':_0x542652['depthMask'],'blending':_0x542652[_0x1c35b5(0x284)]},_0x1b557c=Cesium$5['Appearance']['getDefaultRenderState'](_0x210846,_0xad1a81,_0x23b902);return _0x1b557c;},_0x4af3d6=function(_0x4a882a){const _0x51ecfe=_0xdac7,_0x1b264f={},_0x3c8ef7=Cesium$5[_0x51ecfe(0x1ed)][_0x51ecfe(0x28b)](_0x4a882a[_0x51ecfe(0x25d)],Cesium$5[_0x51ecfe(0x1ed)]['TWO_PI']),_0x284b9f=Cesium$5['Math']['mod'](_0x4a882a['east'],Cesium$5[_0x51ecfe(0x1ed)][_0x51ecfe(0x291)]),_0x1aebda=_0x4a882a['width'];let _0x389198,_0x41a761;_0x1aebda>Cesium$5['Math']['THREE_PI_OVER_TWO']?(_0x389198=0x0,_0x41a761=Cesium$5['Math']['TWO_PI']):_0x284b9f-_0x3c8ef7<_0x1aebda?(_0x389198=_0x3c8ef7,_0x41a761=_0x3c8ef7+_0x1aebda):(_0x389198=_0x3c8ef7,_0x41a761=_0x284b9f);_0x1b264f['lon']={'min':Cesium$5[_0x51ecfe(0x1ed)][_0x51ecfe(0x2b7)](_0x389198),'max':Cesium$5['Math']['toDegrees'](_0x41a761)};const _0xe1af90=_0x4a882a[_0x51ecfe(0x231)],_0x1daca0=_0x4a882a[_0x51ecfe(0x21a)],_0x4c0dc9=_0x4a882a[_0x51ecfe(0x2c2)],_0x3dc637=_0x4c0dc9>Cesium$5[_0x51ecfe(0x1ed)]['PI']/0xc?_0x4c0dc9/0x2:0x0;let _0x56ba62=Cesium$5[_0x51ecfe(0x1ed)][_0x51ecfe(0x2cd)](_0xe1af90-_0x3dc637),_0x29b1e9=Cesium$5['Math']['clampToLatitudeRange'](_0x1daca0+_0x3dc637);return _0x56ba62<-Cesium$5[_0x51ecfe(0x1ed)]['PI_OVER_THREE']&&(_0x56ba62=-Cesium$5['Math']['PI_OVER_TWO']),_0x29b1e9>Cesium$5[_0x51ecfe(0x1ed)]['PI_OVER_THREE']&&(_0x29b1e9=Cesium$5['Math'][_0x51ecfe(0x214)]),_0x1b264f['lat']={'min':Cesium$5['Math'][_0x51ecfe(0x2b7)](_0x56ba62),'max':Cesium$5['Math'][_0x51ecfe(0x2b7)](_0x29b1e9)},_0x1b264f;};return{'getFullscreenQuad':_0x360489,'createTexture':_0x2d84f2,'createFramebuffer':_0x165752,'createRawRenderState':_0x5e42be,'viewRectangleToLonLatRange':_0x4af3d6};}());var segmentDraw_vert='in\x20vec2\x20st;\x0a//\x20it\x20is\x20not\x20normal\x20itself,\x20but\x20used\x20to\x20control\x20normal\x0ain\x20vec3\x20normal;\x20//\x20(point\x20to\x20use,\x20offset\x20sign,\x20not\x20used\x20component)\x0a\x0auniform\x20sampler2D\x20currentParticlesPosition;\x0auniform\x20sampler2D\x20postProcessingPosition;\x0auniform\x20sampler2D\x20postProcessingSpeed;\x0a\x0auniform\x20float\x20particleHeight;\x0a\x0auniform\x20float\x20aspect;\x0auniform\x20float\x20pixelSize;\x0auniform\x20float\x20lineWidth;\x0a\x0aout\x20float\x20speedNormalization;\x0a\x0avec3\x20convertCoordinate(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20WGS84\x20(lon,\x20lat,\x20lev)\x20->\x20ECEF\x20(x,\x20y,\x20z)\x0a\x20\x20\x20\x20//\x20see\x20https://en.wikipedia.org/wiki/Geographic_coordinate_conversion#From_geodetic_to_ECEF_coordinates\x20for\x20detail\x0a\x0a\x20\x20\x20\x20//\x20WGS\x2084\x20geometric\x20constants\x0a\x20\x20\x20\x20float\x20a\x20=\x206378137.0;\x20//\x20Semi-major\x20axis\x0a\x20\x20\x20\x20float\x20b\x20=\x206356752.3142;\x20//\x20Semi-minor\x20axis\x0a\x20\x20\x20\x20float\x20e2\x20=\x206.69437999014e-3;\x20//\x20First\x20eccentricity\x20squared\x0a\x0a\x20\x20\x20\x20float\x20latitude\x20=\x20radians(lonLatLev.y);\x0a\x20\x20\x20\x20float\x20longitude\x20=\x20radians(lonLatLev.x);\x0a\x0a\x20\x20\x20\x20float\x20cosLat\x20=\x20cos(latitude);\x0a\x20\x20\x20\x20float\x20sinLat\x20=\x20sin(latitude);\x0a\x20\x20\x20\x20float\x20cosLon\x20=\x20cos(longitude);\x0a\x20\x20\x20\x20float\x20sinLon\x20=\x20sin(longitude);\x0a\x0a\x20\x20\x20\x20float\x20N_Phi\x20=\x20a\x20/\x20sqrt(1.0\x20-\x20e2\x20*\x20sinLat\x20*\x20sinLat);\x0a\x20\x20\x20\x20float\x20h\x20=\x20particleHeight;\x20//\x20it\x20should\x20be\x20high\x20enough\x20otherwise\x20the\x20particle\x20may\x20not\x20pass\x20the\x20terrain\x20depth\x20test\x0a\x0a\x20\x20\x20\x20vec3\x20cartesian\x20=\x20vec3(0.0);\x0a\x20\x20\x20\x20cartesian.x\x20=\x20(N_Phi\x20+\x20h)\x20*\x20cosLat\x20*\x20cosLon;\x0a\x20\x20\x20\x20cartesian.y\x20=\x20(N_Phi\x20+\x20h)\x20*\x20cosLat\x20*\x20sinLon;\x0a\x20\x20\x20\x20cartesian.z\x20=\x20((b\x20*\x20b)\x20/\x20(a\x20*\x20a)\x20*\x20N_Phi\x20+\x20h)\x20*\x20sinLat;\x0a\x20\x20\x20\x20return\x20cartesian;\x0a}\x0a\x0avec4\x20calcProjectedCoordinate(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20the\x20range\x20of\x20longitude\x20in\x20Cesium\x20is\x20[-180,\x20180]\x20but\x20the\x20range\x20of\x20longitude\x20in\x20the\x20NetCDF\x20file\x20is\x20[0,\x20360]\x0a\x20\x20\x20\x20//\x20[0,\x20180]\x20is\x20corresponding\x20to\x20[0,\x20180]\x20and\x20[180,\x20360]\x20is\x20corresponding\x20to\x20[-180,\x200]\x0a\x20\x20\x20\x20lonLatLev.x\x20=\x20mod(lonLatLev.x\x20+\x20180.0,\x20360.0)\x20-\x20180.0;\x0a\x20\x20\x20\x20vec3\x20particlePosition\x20=\x20convertCoordinate(lonLatLev);\x0a\x20\x20\x20\x20vec4\x20projectedCoordinate\x20=\x20czm_modelViewProjection\x20*\x20vec4(particlePosition,\x201.0);\x0a\x20\x20\x20\x20return\x20projectedCoordinate;\x0a}\x0a\x0avec4\x20calcOffset(vec4\x20currentProjectedCoordinate,\x20vec4\x20nextProjectedCoordinate,\x20float\x20offsetSign)\x20{\x0a\x20\x20\x20\x20vec2\x20aspectVec2\x20=\x20vec2(aspect,\x201.0);\x0a\x20\x20\x20\x20vec2\x20currentXY\x20=\x20(currentProjectedCoordinate.xy\x20/\x20currentProjectedCoordinate.w)\x20*\x20aspectVec2;\x0a\x20\x20\x20\x20vec2\x20nextXY\x20=\x20(nextProjectedCoordinate.xy\x20/\x20nextProjectedCoordinate.w)\x20*\x20aspectVec2;\x0a\x0a\x20\x20\x20\x20float\x20offsetLength\x20=\x20lineWidth\x20/\x202.0;\x0a\x20\x20\x20\x20vec2\x20direction\x20=\x20normalize(nextXY\x20-\x20currentXY);\x0a\x20\x20\x20\x20vec2\x20normalVector\x20=\x20vec2(-direction.y,\x20direction.x);\x0a\x20\x20\x20\x20normalVector.x\x20=\x20normalVector.x\x20/\x20aspect;\x0a\x20\x20\x20\x20normalVector\x20=\x20offsetLength\x20*\x20normalVector;\x0a\x0a\x20\x20\x20\x20vec4\x20offset\x20=\x20vec4(offsetSign\x20*\x20normalVector,\x200.0,\x200.0);\x0a\x20\x20\x20\x20return\x20offset;\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec2\x20particleIndex\x20=\x20st;\x0a\x0a\x20\x20\x20\x20vec3\x20currentPosition\x20=\x20texture(currentParticlesPosition,\x20particleIndex).rgb;\x0a\x20\x20\x20\x20vec4\x20nextPosition\x20=\x20texture(postProcessingPosition,\x20particleIndex);\x0a\x0a\x20\x20\x20\x20vec4\x20currentProjectedCoordinate\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20vec4\x20nextProjectedCoordinate\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20if\x20(nextPosition.w\x20>\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20currentProjectedCoordinate\x20=\x20calcProjectedCoordinate(currentPosition);\x0a\x20\x20\x20\x20\x20\x20\x20\x20nextProjectedCoordinate\x20=\x20calcProjectedCoordinate(currentPosition);\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20currentProjectedCoordinate\x20=\x20calcProjectedCoordinate(currentPosition);\x0a\x20\x20\x20\x20\x20\x20\x20\x20nextProjectedCoordinate\x20=\x20calcProjectedCoordinate(nextPosition.xyz);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20float\x20pointToUse\x20=\x20normal.x;\x20//\x20-1\x20is\x20currentProjectedCoordinate\x20and\x20+1\x20is\x20nextProjectedCoordinate\x0a\x20\x20\x20\x20float\x20offsetSign\x20=\x20normal.y;\x0a\x0a\x20\x20\x20\x20vec4\x20offset\x20=\x20pixelSize\x20*\x20calcOffset(currentProjectedCoordinate,\x20nextProjectedCoordinate,\x20offsetSign);\x0a\x20\x20\x20\x20if\x20(pointToUse\x20<\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20gl_Position\x20=\x20currentProjectedCoordinate\x20+\x20offset;\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20gl_Position\x20=\x20nextProjectedCoordinate\x20+\x20offset;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20speedNormalization\x20=\x20texture(postProcessingSpeed,\x20particleIndex).a;\x0a}\x0a',segmentDraw_frag=_0xf860f5(0x2b8),fullscreen_vert='in\x20vec3\x20position;\x0ain\x20vec2\x20st;\x0a\x0aout\x20vec2\x20textureCoordinate;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20textureCoordinate\x20=\x20st;\x0a\x20\x20\x20\x20gl_Position\x20=\x20vec4(position,\x201.0);\x0a}\x0a',trailDraw_frag=_0xf860f5(0x2d2),screenDraw_frag=_0xf860f5(0x2a4);function _0xdac7(_0x3811bf,_0x216756){const _0x4980d5=_0x4980();return _0xdac7=function(_0xdac760,_0x3cc0bf){_0xdac760=_0xdac760-0x1e4;let _0xf74fb3=_0x4980d5[_0xdac760];return _0xf74fb3;},_0xdac7(_0x3811bf,_0x216756);}const Cesium$4=mars3d__namespace['Cesium'];class ParticlesRendering{constructor(_0x1e3f5f,_0x176b5b,_0x314c5b,_0x3fcf5f,_0x19cbfa){this['createRenderingTextures'](_0x1e3f5f,_0x176b5b,_0x314c5b['colors']),this['createRenderingFramebuffers'](_0x1e3f5f),this['createRenderingPrimitives'](_0x1e3f5f,_0x314c5b,_0x3fcf5f,_0x19cbfa);}[_0xf860f5(0x25c)](_0x441186,_0x38d57b,_0x4a4a3f){const _0x5afafe=_0xf860f5,_0x45cfea={'context':_0x441186,'width':_0x441186['drawingBufferWidth'],'height':_0x441186[_0x5afafe(0x289)],'pixelFormat':Cesium$4['PixelFormat']['RGBA'],'pixelDatatype':Cesium$4['PixelDatatype']['UNSIGNED_BYTE']},_0xeb0962={'context':_0x441186,'width':_0x441186['drawingBufferWidth'],'height':_0x441186['drawingBufferHeight'],'pixelFormat':Cesium$4['PixelFormat']['DEPTH_COMPONENT'],'pixelDatatype':Cesium$4[_0x5afafe(0x237)]['UNSIGNED_INT']},_0x54be72=_0x4a4a3f['length'],_0x1cbb93=new Float32Array(_0x54be72*0x3);for(let _0x4176bb=0x0;_0x4176bb<_0x54be72;_0x4176bb++){const _0x573389=Cesium$4[_0x5afafe(0x21e)][_0x5afafe(0x2bc)](_0x4a4a3f[_0x4176bb]);_0x1cbb93[0x3*_0x4176bb]=_0x573389['red'],_0x1cbb93[0x3*_0x4176bb+0x1]=_0x573389[_0x5afafe(0x206)],_0x1cbb93[0x3*_0x4176bb+0x2]=_0x573389[_0x5afafe(0x2a9)];}const _0x4dd735={'context':_0x441186,'width':_0x54be72,'height':0x1,'pixelFormat':Cesium$4['PixelFormat'][_0x5afafe(0x2d6)],'pixelDatatype':Cesium$4['PixelDatatype']['FLOAT'],'sampler':new Cesium$4['Sampler']({'minificationFilter':Cesium$4['TextureMinificationFilter']['LINEAR'],'magnificationFilter':Cesium$4[_0x5afafe(0x276)]['LINEAR']})};this['textures']={'segmentsColor':Util['createTexture'](_0x45cfea),'segmentsDepth':Util[_0x5afafe(0x24e)](_0xeb0962),'currentTrailsColor':Util['createTexture'](_0x45cfea),'currentTrailsDepth':Util['createTexture'](_0xeb0962),'nextTrailsColor':Util[_0x5afafe(0x24e)](_0x45cfea),'nextTrailsDepth':Util['createTexture'](_0xeb0962),'colorTable':Util[_0x5afafe(0x24e)](_0x4dd735,_0x1cbb93)};}['createRenderingFramebuffers'](_0x210046){const _0x2bdde4=_0xf860f5;this['framebuffers']={'segments':Util['createFramebuffer'](_0x210046,this['textures'][_0x2bdde4(0x22f)],this['textures'][_0x2bdde4(0x26e)]),'currentTrails':Util[_0x2bdde4(0x2b9)](_0x210046,this['textures']['currentTrailsColor'],this['textures']['currentTrailsDepth']),'nextTrails':Util['createFramebuffer'](_0x210046,this['textures'][_0x2bdde4(0x226)],this['textures'][_0x2bdde4(0x278)])};}[_0xf860f5(0x1e8)](_0x54700d){const _0x55ccbf=_0xf860f5,_0x292816=0x4;let _0x13fefc=[];for(let _0x2c4e88=0x0;_0x2c4e88<_0x54700d['particlesTextureSize'];_0x2c4e88++){for(let _0x4ac061=0x0;_0x4ac061<_0x54700d['particlesTextureSize'];_0x4ac061++){for(let _0x5e77af=0x0;_0x5e77af<_0x292816;_0x5e77af++){_0x13fefc['push'](_0x2c4e88/_0x54700d[_0x55ccbf(0x26c)]),_0x13fefc[_0x55ccbf(0x2c6)](_0x4ac061/_0x54700d['particlesTextureSize']);}}}_0x13fefc=new Float32Array(_0x13fefc);let _0x472a5a=[];const _0x4791fe=[-0x1,0x1],_0x16d575=[-0x1,0x1];for(let _0x38db7f=0x0;_0x38db7f<_0x54700d[_0x55ccbf(0x23e)];_0x38db7f++){for(let _0x147372=0x0;_0x147372<_0x292816/0x2;_0x147372++){for(let _0x15d238=0x0;_0x15d238<_0x292816/0x2;_0x15d238++){_0x472a5a['push'](_0x4791fe[_0x147372]),_0x472a5a['push'](_0x16d575[_0x15d238]),_0x472a5a['push'](0x0);}}}_0x472a5a=new Float32Array(_0x472a5a);const _0x429643=0x6*_0x54700d[_0x55ccbf(0x23e)],_0x13e149=new Uint32Array(_0x429643);for(let _0x411254=0x0,_0x59d3a4=0x0,_0x93431c=0x0;_0x411254<_0x54700d['maxParticles'];_0x411254++){_0x13e149[_0x59d3a4++]=_0x93431c+0x0,_0x13e149[_0x59d3a4++]=_0x93431c+0x1,_0x13e149[_0x59d3a4++]=_0x93431c+0x2,_0x13e149[_0x59d3a4++]=_0x93431c+0x2,_0x13e149[_0x59d3a4++]=_0x93431c+0x1,_0x13e149[_0x59d3a4++]=_0x93431c+0x3,_0x93431c+=0x4;}const _0x3a1e4d=new Cesium$4['Geometry']({'attributes':new Cesium$4['GeometryAttributes']({'st':new Cesium$4[(_0x55ccbf(0x261))]({'componentDatatype':Cesium$4[_0x55ccbf(0x2d0)]['FLOAT'],'componentsPerAttribute':0x2,'values':_0x13fefc}),'normal':new Cesium$4[(_0x55ccbf(0x261))]({'componentDatatype':Cesium$4['ComponentDatatype'][_0x55ccbf(0x241)],'componentsPerAttribute':0x3,'values':_0x472a5a})}),'indices':_0x13e149});return _0x3a1e4d;}['createRenderingPrimitives'](_0x34ab6b,_0x5ec266,_0x4f3b23,_0x5f408a){const _0xa704ca=_0xf860f5,_0x332f63=this;this['primitives']={'segments':new CustomPrimitive({'commandType':'Draw','attributeLocations':{'st':0x0,'normal':0x1},'geometry':this['createSegmentsGeometry'](_0x5ec266),'primitiveType':Cesium$4['PrimitiveType']['TRIANGLES'],'uniformMap':{'currentParticlesPosition':function(){const _0x3c9d5e=_0xdac7;return _0x5f408a['particlesTextures'][_0x3c9d5e(0x2ae)];},'postProcessingPosition':function(){const _0x355b32=_0xdac7;return _0x5f408a[_0x355b32(0x230)][_0x355b32(0x1ff)];},'postProcessingSpeed':function(){return _0x5f408a['particlesTextures']['postProcessingSpeed'];},'colorTable':function(){const _0x10c21f=_0xdac7;return _0x332f63[_0x10c21f(0x2a5)]['colorTable'];},'aspect':function(){return _0x34ab6b['drawingBufferWidth']/_0x34ab6b['drawingBufferHeight'];},'pixelSize':function(){return _0x4f3b23['pixelSize'];},'lineWidth':function(){const _0xc6a80c=_0xdac7;return _0x5ec266[_0xc6a80c(0x26f)];},'particleHeight':function(){return _0x5ec266['particleHeight'];}},'vertexShaderSource':new Cesium$4[(_0xa704ca(0x2c7))]({'sources':[segmentDraw_vert]}),'fragmentShaderSource':new Cesium$4['ShaderSource']({'sources':[segmentDraw_frag]}),'rawRenderState':Util['createRawRenderState']({'viewport':undefined,'depthTest':{'enabled':!![]},'depthMask':!![]}),'framebuffer':this[_0xa704ca(0x252)]['segments'],'autoClear':!![]}),'trails':new CustomPrimitive({'commandType':_0xa704ca(0x243),'attributeLocations':{'position':0x0,'st':0x1},'geometry':Util[_0xa704ca(0x217)](),'primitiveType':Cesium$4['PrimitiveType'][_0xa704ca(0x2d1)],'uniformMap':{'segmentsColorTexture':function(){const _0x24d30e=_0xa704ca;return _0x332f63['textures'][_0x24d30e(0x22f)];},'segmentsDepthTexture':function(){return _0x332f63['textures']['segmentsDepth'];},'currentTrailsColor':function(){return _0x332f63['framebuffers']['currentTrails']['getColorTexture'](0x0);},'trailsDepthTexture':function(){const _0x276876=_0xa704ca;return _0x332f63['framebuffers']['currentTrails'][_0x276876(0x2aa)];},'fadeOpacity':function(){return _0x5ec266['fadeOpacity'];}},'vertexShaderSource':new Cesium$4['ShaderSource']({'defines':['DISABLE_GL_POSITION_LOG_DEPTH'],'sources':[fullscreen_vert]}),'fragmentShaderSource':new Cesium$4['ShaderSource']({'defines':['DISABLE_LOG_DEPTH_FRAGMENT_WRITE'],'sources':[trailDraw_frag]}),'rawRenderState':Util['createRawRenderState']({'viewport':undefined,'depthTest':{'enabled':!![],'func':Cesium$4['DepthFunction']['ALWAYS']},'depthMask':!![]}),'framebuffer':this['framebuffers'][_0xa704ca(0x2dd)],'autoClear':!![],'preExecute':function(){const _0x571ad2=_0xa704ca,_0x3fbc10=_0x332f63[_0x571ad2(0x252)]['currentTrails'];_0x332f63['framebuffers']['currentTrails']=_0x332f63['framebuffers']['nextTrails'],_0x332f63['framebuffers']['nextTrails']=_0x3fbc10,_0x332f63['primitives']['trails']['commandToExecute'][_0x571ad2(0x1e4)]=_0x332f63['framebuffers']['nextTrails'],_0x332f63['primitives']['trails']['clearCommand'][_0x571ad2(0x1e4)]=_0x332f63['framebuffers']['nextTrails'];}}),'screen':new CustomPrimitive({'commandType':'Draw','attributeLocations':{'position':0x0,'st':0x1},'geometry':Util['getFullscreenQuad'](),'primitiveType':Cesium$4['PrimitiveType']['TRIANGLES'],'uniformMap':{'trailsColorTexture':function(){const _0x357b7d=_0xa704ca;return _0x332f63['framebuffers']['nextTrails'][_0x357b7d(0x247)](0x0);},'trailsDepthTexture':function(){return _0x332f63['framebuffers']['nextTrails']['depthTexture'];}},'vertexShaderSource':new Cesium$4['ShaderSource']({'defines':['DISABLE_GL_POSITION_LOG_DEPTH'],'sources':[fullscreen_vert]}),'fragmentShaderSource':new Cesium$4[(_0xa704ca(0x2c7))]({'defines':['DISABLE_LOG_DEPTH_FRAGMENT_WRITE'],'sources':[screenDraw_frag]}),'rawRenderState':Util[_0xa704ca(0x2b4)]({'viewport':undefined,'depthTest':{'enabled':![]},'depthMask':!![],'blending':{'enabled':!![]}}),'framebuffer':undefined})};}}var getWind_frag=_0xf860f5(0x2a7),updateSpeed_frag=_0xf860f5(0x287),updatePosition_frag='uniform\x20sampler2D\x20currentParticlesPosition;\x20//\x20(lon,\x20lat,\x20lev)\x0auniform\x20sampler2D\x20currentParticlesSpeed;\x20//\x20(u,\x20v,\x20w,\x20normalization)\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0avec2\x20lengthOfLonLat(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20unit\x20conversion:\x20meters\x20->\x20longitude\x20latitude\x20degrees\x0a\x20\x20\x20\x20//\x20see\x20https://en.wikipedia.org/wiki/Geographic_coordinate_system#Length_of_a_degree\x20for\x20detail\x0a\x0a\x20\x20\x20\x20//\x20Calculate\x20the\x20length\x20of\x20a\x20degree\x20of\x20latitude\x20and\x20longitude\x20in\x20meters\x0a\x20\x20\x20\x20float\x20latitude\x20=\x20radians(lonLatLev.y);\x0a\x0a\x20\x20\x20\x20float\x20term1\x20=\x20111132.92;\x0a\x20\x20\x20\x20float\x20term2\x20=\x20559.82\x20*\x20cos(2.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20term3\x20=\x201.175\x20*\x20cos(4.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20term4\x20=\x200.0023\x20*\x20cos(6.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20latLength\x20=\x20term1\x20-\x20term2\x20+\x20term3\x20-\x20term4;\x0a\x0a\x20\x20\x20\x20float\x20term5\x20=\x20111412.84\x20*\x20cos(latitude);\x0a\x20\x20\x20\x20float\x20term6\x20=\x2093.5\x20*\x20cos(3.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20term7\x20=\x200.118\x20*\x20cos(5.0\x20*\x20latitude);\x0a\x20\x20\x20\x20float\x20longLength\x20=\x20term5\x20-\x20term6\x20+\x20term7;\x0a\x0a\x20\x20\x20\x20return\x20vec2(longLength,\x20latLength);\x0a}\x0a\x0avoid\x20updatePosition(vec3\x20lonLatLev,\x20vec3\x20speed)\x20{\x0a\x20\x20\x20\x20vec2\x20lonLatLength\x20=\x20lengthOfLonLat(lonLatLev);\x0a\x20\x20\x20\x20float\x20u\x20=\x20speed.x\x20/\x20lonLatLength.x;\x0a\x20\x20\x20\x20float\x20v\x20=\x20speed.y\x20/\x20lonLatLength.y;\x0a\x20\x20\x20\x20float\x20w\x20=\x200.0;\x0a\x20\x20\x20\x20vec3\x20windVectorInLonLatLev\x20=\x20vec3(u,\x20v,\x20w);\x0a\x0a\x20\x20\x20\x20vec3\x20nextParticle\x20=\x20lonLatLev\x20+\x20windVectorInLonLatLev;\x0a\x0a\x20\x20\x20\x20out_FragColor\x20=\x20vec4(nextParticle,\x200.0);\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20//\x20texture\x20coordinate\x20must\x20be\x20normalized\x0a\x20\x20\x20\x20vec3\x20lonLatLev\x20=\x20texture(currentParticlesPosition,\x20v_textureCoordinates).rgb;\x0a\x20\x20\x20\x20vec3\x20speed\x20=\x20texture(currentParticlesSpeed,\x20v_textureCoordinates).rgb;\x0a\x0a\x20\x20\x20\x20updatePosition(lonLatLev,\x20speed);\x0a}\x0a',postProcessingPosition_frag=_0xf860f5(0x28e),postProcessingSpeed_frag=_0xf860f5(0x201);const Cesium$3=mars3d__namespace['Cesium'];class ParticlesComputing{constructor(_0x3a4504,_0x3bb34e,_0xba7fdf,_0x4520a5){const _0x2836b1=_0xf860f5;this['data']=_0x3bb34e,this[_0x2836b1(0x2a0)](_0x3a4504,_0x3bb34e),this[_0x2836b1(0x2a6)](_0x3a4504,_0xba7fdf,_0x4520a5),this['createComputingPrimitives'](_0x3bb34e,_0xba7fdf,_0x4520a5);}['createWindTextures'](_0x2cffb0,_0x2876b3){const _0x307a9e=_0xf860f5,_0x44e6a6={'context':_0x2cffb0,'width':_0x2876b3['dimensions']['lon'],'height':_0x2876b3['dimensions']['lat']*(_0x2876b3['dimensions']['lev']||0x1),'pixelFormat':Cesium$3['PixelFormat']['LUMINANCE'],'pixelDatatype':Cesium$3['PixelDatatype']['FLOAT'],'flipY':![],'sampler':new Cesium$3[(_0x307a9e(0x2a3))]({'minificationFilter':Cesium$3['TextureMinificationFilter']['NEAREST'],'magnificationFilter':Cesium$3['TextureMagnificationFilter']['NEAREST']})};this['windTextures']={'U':Util['createTexture'](_0x44e6a6,_0x2876b3['U'][_0x307a9e(0x267)]),'V':Util[_0x307a9e(0x24e)](_0x44e6a6,_0x2876b3['V']['array'])};}['createParticlesTextures'](_0x1ab62f,_0x8d9829,_0x5b359b){const _0x261a6b=_0xf860f5,_0x237cab={'context':_0x1ab62f,'width':_0x8d9829['particlesTextureSize'],'height':_0x8d9829[_0x261a6b(0x26c)],'pixelFormat':Cesium$3['PixelFormat']['RGBA'],'pixelDatatype':Cesium$3[_0x261a6b(0x237)]['FLOAT'],'flipY':![],'sampler':new Cesium$3['Sampler']({'minificationFilter':Cesium$3['TextureMinificationFilter']['NEAREST'],'magnificationFilter':Cesium$3['TextureMagnificationFilter'][_0x261a6b(0x24f)]})},_0x4ae511=this['randomizeParticles'](_0x8d9829['maxParticles'],_0x5b359b),_0x1d5736=new Float32Array(0x4*_0x8d9829[_0x261a6b(0x23e)])[_0x261a6b(0x259)](0x0);this['particlesTextures']={'particlesWind':Util['createTexture'](_0x237cab),'currentParticlesPosition':Util[_0x261a6b(0x24e)](_0x237cab,_0x4ae511),'nextParticlesPosition':Util['createTexture'](_0x237cab,_0x4ae511),'currentParticlesSpeed':Util[_0x261a6b(0x24e)](_0x237cab,_0x1d5736),'nextParticlesSpeed':Util[_0x261a6b(0x24e)](_0x237cab,_0x1d5736),'postProcessingPosition':Util[_0x261a6b(0x24e)](_0x237cab,_0x4ae511),'postProcessingSpeed':Util['createTexture'](_0x237cab,_0x1d5736)};}['randomizeParticles'](_0x36d2d7,_0x40a96f){const _0x2518f4=_0xf860f5,_0x373299=new Float32Array(0x4*_0x36d2d7);for(let _0x390a8a=0x0;_0x390a8a<_0x36d2d7;_0x390a8a++){_0x373299[0x4*_0x390a8a]=Cesium$3[_0x2518f4(0x1ed)]['randomBetween'](_0x40a96f['lonRange']['x'],_0x40a96f['lonRange']['y']),_0x373299[0x4*_0x390a8a+0x1]=Cesium$3['Math'][_0x2518f4(0x265)](_0x40a96f[_0x2518f4(0x299)]['x'],_0x40a96f['latRange']['y']),_0x373299[0x4*_0x390a8a+0x2]=Cesium$3['Math'][_0x2518f4(0x265)](this[_0x2518f4(0x258)][_0x2518f4(0x290)]['min'],this[_0x2518f4(0x258)]['lev']['max']),_0x373299[0x4*_0x390a8a+0x3]=0x0;}return _0x373299;}['destroyParticlesTextures'](){Object['keys'](this['particlesTextures'])['forEach'](_0x10a5f7=>{this['particlesTextures'][_0x10a5f7]['destroy']();});}[_0xf860f5(0x221)](_0x400d28,_0x306d69,_0x2f9483){const _0x4c8da0=_0xf860f5,_0x167fdb=new Cesium$3[(_0x4c8da0(0x2b1))](_0x400d28[_0x4c8da0(0x2ce)][_0x4c8da0(0x2a2)],_0x400d28[_0x4c8da0(0x2ce)]['lat'],_0x400d28['dimensions']['lev']),_0x5f4658=new Cesium$3['Cartesian3'](_0x400d28['lon'][_0x4c8da0(0x23c)],_0x400d28[_0x4c8da0(0x2c0)]['min'],_0x400d28['lev']['min']),_0x5deaa0=new Cesium$3['Cartesian3'](_0x400d28[_0x4c8da0(0x2a2)]['max'],_0x400d28['lat']['max'],_0x400d28['lev']['max']),_0x55f68b=new Cesium$3['Cartesian3']((_0x5deaa0['x']-_0x5f4658['x'])/(_0x167fdb['x']-0x1),(_0x5deaa0['y']-_0x5f4658['y'])/(_0x167fdb['y']-0x1),_0x167fdb['z']>0x1?(_0x5deaa0['z']-_0x5f4658['z'])/(_0x167fdb['z']-0x1):0x1),_0x5ec2e9=new Cesium$3['Cartesian2'](_0x400d28['U']['min'],_0x400d28['U']['max']),_0x4fd070=new Cesium$3[(_0x4c8da0(0x2cf))](_0x400d28['V']['min'],_0x400d28['V']['max']),_0x336c0c=this;this['primitives']={'getWind':new CustomPrimitive({'commandType':'Compute','uniformMap':{'U':function(){return _0x336c0c['windTextures']['U'];},'V':function(){return _0x336c0c['windTextures']['V'];},'currentParticlesPosition':function(){return _0x336c0c['particlesTextures']['currentParticlesPosition'];},'dimension':function(){return _0x167fdb;},'minimum':function(){return _0x5f4658;},'maximum':function(){return _0x5deaa0;},'interval':function(){return _0x55f68b;}},'fragmentShaderSource':new Cesium$3[(_0x4c8da0(0x2c7))]({'sources':[getWind_frag]}),'outputTexture':this['particlesTextures'][_0x4c8da0(0x26a)],'preExecute':function(){const _0x14591a=_0x4c8da0;_0x336c0c['primitives']['getWind'][_0x14591a(0x1e9)]['outputTexture']=_0x336c0c['particlesTextures']['particlesWind'];}}),'updateSpeed':new CustomPrimitive({'commandType':'Compute','uniformMap':{'currentParticlesSpeed':function(){const _0x6d92d7=_0x4c8da0;return _0x336c0c['particlesTextures'][_0x6d92d7(0x275)];},'particlesWind':function(){return _0x336c0c['particlesTextures']['particlesWind'];},'uSpeedRange':function(){return _0x5ec2e9;},'vSpeedRange':function(){return _0x4fd070;},'pixelSize':function(){const _0x4b3a7a=_0x4c8da0;return _0x2f9483[_0x4b3a7a(0x28f)];},'speedFactor':function(){const _0x46f5b8=_0x4c8da0;return _0x306d69[_0x46f5b8(0x1f7)];}},'fragmentShaderSource':new Cesium$3[(_0x4c8da0(0x2c7))]({'sources':[updateSpeed_frag]}),'outputTexture':this[_0x4c8da0(0x230)]['nextParticlesSpeed'],'preExecute':function(){const _0x4f56bb=_0x4c8da0,_0xb1b564=_0x336c0c['particlesTextures'][_0x4f56bb(0x275)];_0x336c0c['particlesTextures']['currentParticlesSpeed']=_0x336c0c[_0x4f56bb(0x230)]['postProcessingSpeed'],_0x336c0c['particlesTextures'][_0x4f56bb(0x29e)]=_0xb1b564,_0x336c0c['primitives']['updateSpeed'][_0x4f56bb(0x1e9)][_0x4f56bb(0x202)]=_0x336c0c['particlesTextures']['nextParticlesSpeed'];}}),'updatePosition':new CustomPrimitive({'commandType':'Compute','uniformMap':{'currentParticlesPosition':function(){const _0x194206=_0x4c8da0;return _0x336c0c[_0x194206(0x230)]['currentParticlesPosition'];},'currentParticlesSpeed':function(){return _0x336c0c['particlesTextures']['currentParticlesSpeed'];}},'fragmentShaderSource':new Cesium$3['ShaderSource']({'sources':[updatePosition_frag]}),'outputTexture':this['particlesTextures']['nextParticlesPosition'],'preExecute':function(){const _0x535be8=_0x4c8da0,_0x2e3638=_0x336c0c[_0x535be8(0x230)][_0x535be8(0x2ae)];_0x336c0c['particlesTextures']['currentParticlesPosition']=_0x336c0c['particlesTextures']['postProcessingPosition'],_0x336c0c[_0x535be8(0x230)]['postProcessingPosition']=_0x2e3638,_0x336c0c['primitives'][_0x535be8(0x21b)]['commandToExecute'][_0x535be8(0x202)]=_0x336c0c[_0x535be8(0x230)]['nextParticlesPosition'];}}),'postProcessingPosition':new CustomPrimitive({'commandType':_0x4c8da0(0x227),'uniformMap':{'nextParticlesPosition':function(){return _0x336c0c['particlesTextures']['nextParticlesPosition'];},'nextParticlesSpeed':function(){const _0x34b2c8=_0x4c8da0;return _0x336c0c[_0x34b2c8(0x230)]['nextParticlesSpeed'];},'lonRange':function(){const _0x16c0da=_0x4c8da0;return _0x2f9483[_0x16c0da(0x224)];},'latRange':function(){return _0x2f9483['latRange'];},'randomCoefficient':function(){const _0x3b2593=_0x4c8da0,_0x5faff6=Math[_0x3b2593(0x2da)]();return _0x5faff6;},'dropRate':function(){const _0x221c84=_0x4c8da0;return _0x306d69[_0x221c84(0x270)];},'dropRateBump':function(){return _0x306d69['dropRateBump'];}},'fragmentShaderSource':new Cesium$3[(_0x4c8da0(0x2c7))]({'sources':[postProcessingPosition_frag]}),'outputTexture':this['particlesTextures'][_0x4c8da0(0x1ff)],'preExecute':function(){const _0x5f4e88=_0x4c8da0;_0x336c0c['primitives'][_0x5f4e88(0x1ff)][_0x5f4e88(0x1e9)][_0x5f4e88(0x202)]=_0x336c0c[_0x5f4e88(0x230)][_0x5f4e88(0x1ff)];}}),'postProcessingSpeed':new CustomPrimitive({'commandType':_0x4c8da0(0x227),'uniformMap':{'postProcessingPosition':function(){const _0x30ccda=_0x4c8da0;return _0x336c0c[_0x30ccda(0x230)][_0x30ccda(0x1ff)];},'nextParticlesSpeed':function(){return _0x336c0c['particlesTextures']['nextParticlesSpeed'];}},'fragmentShaderSource':new Cesium$3['ShaderSource']({'sources':[postProcessingSpeed_frag]}),'outputTexture':this['particlesTextures']['postProcessingSpeed'],'preExecute':function(){const _0xde6ca6=_0x4c8da0;_0x336c0c['primitives']['postProcessingSpeed'][_0xde6ca6(0x1e9)]['outputTexture']=_0x336c0c[_0xde6ca6(0x230)]['postProcessingSpeed'];}})};}}const Cesium$2=mars3d__namespace['Cesium'];class ParticleSystem{constructor(_0x1e210a,_0xb1ee8f,_0xf2c370,_0x117e56){const _0x27600a=_0xf860f5;this['context']=_0x1e210a,_0xb1ee8f={..._0xb1ee8f},_0xb1ee8f['udata']&&_0xb1ee8f['vdata']&&(_0xb1ee8f['dimensions']={},_0xb1ee8f[_0x27600a(0x2ce)]['lon']=_0xb1ee8f['cols'],_0xb1ee8f['dimensions']['lat']=_0xb1ee8f['rows'],_0xb1ee8f['dimensions'][_0x27600a(0x290)]=_0xb1ee8f['lev']||0x1,_0xb1ee8f[_0x27600a(0x2a2)]={},_0xb1ee8f['lon'][_0x27600a(0x23c)]=_0xb1ee8f['xmin'],_0xb1ee8f['lon']['max']=_0xb1ee8f[_0x27600a(0x2b6)],_0xb1ee8f[_0x27600a(0x2c0)]={},_0xb1ee8f['lat']['min']=_0xb1ee8f[_0x27600a(0x286)],_0xb1ee8f[_0x27600a(0x2c0)]['max']=_0xb1ee8f[_0x27600a(0x251)],_0xb1ee8f['lev']={},_0xb1ee8f[_0x27600a(0x290)]['min']=_0xb1ee8f['levmin']??0x1,_0xb1ee8f['lev']['max']=_0xb1ee8f['levmax']??0x1,_0xb1ee8f['U']={},_0xb1ee8f['U']['array']=new Float32Array(_0xb1ee8f['udata']),_0xb1ee8f['U'][_0x27600a(0x23c)]=_0xb1ee8f[_0x27600a(0x263)]??Math['min'](..._0xb1ee8f['udata']),_0xb1ee8f['U']['max']=_0xb1ee8f[_0x27600a(0x2d4)]??Math['max'](..._0xb1ee8f['udata']),_0xb1ee8f['V']={},_0xb1ee8f['V']['array']=new Float32Array(_0xb1ee8f['vdata']),_0xb1ee8f['V']['min']=_0xb1ee8f['vmin']??Math[_0x27600a(0x23c)](..._0xb1ee8f['vdata']),_0xb1ee8f['V']['max']=_0xb1ee8f[_0x27600a(0x20a)]??Math['max'](..._0xb1ee8f['vdata'])),this['data']=_0xb1ee8f,this['options']=_0xf2c370,this['viewerParameters']=_0x117e56,this[_0x27600a(0x204)]=new ParticlesComputing(this['context'],this['data'],this[_0x27600a(0x209)],this['viewerParameters']),this[_0x27600a(0x273)]=new ParticlesRendering(this['context'],this[_0x27600a(0x258)],this['options'],this[_0x27600a(0x272)],this['particlesComputing']);}['canvasResize'](_0x5dfd4b){const _0x59679c=_0xf860f5;this['particlesComputing']['destroyParticlesTextures'](),Object['keys'](this[_0x59679c(0x204)][_0x59679c(0x1ef)])['forEach'](_0x3e2b1d=>{const _0x52df13=_0x59679c;this['particlesComputing']['windTextures'][_0x3e2b1d][_0x52df13(0x21c)]();}),this['particlesRendering']['textures'][_0x59679c(0x1fa)][_0x59679c(0x21c)](),Object['keys'](this['particlesRendering']['framebuffers'])['forEach'](_0x57782f=>{this['particlesRendering']['framebuffers'][_0x57782f]['destroy']();}),this['context']=_0x5dfd4b,this['particlesComputing']=new ParticlesComputing(this['context'],this['data'],this['options'],this['viewerParameters']),this['particlesRendering']=new ParticlesRendering(this['context'],this['data'],this['options'],this['viewerParameters'],this[_0x59679c(0x204)]);}[_0xf860f5(0x2c9)](){const _0x21fe26=_0xf860f5,_0x4d29e0=new Cesium$2['ClearCommand']({'color':new Cesium$2[(_0x21fe26(0x21e))](0x0,0x0,0x0,0x0),'depth':0x1,'framebuffer':undefined,'pass':Cesium$2['Pass']['OPAQUE']});Object['keys'](this['particlesRendering']['framebuffers'])[_0x21fe26(0x22c)](_0x2bf749=>{const _0x574b83=_0x21fe26;_0x4d29e0[_0x574b83(0x1e4)]=this['particlesRendering'][_0x574b83(0x252)][_0x2bf749],_0x4d29e0['execute'](this['context']);});}['refreshParticles'](_0x2eb341){const _0x20da42=_0xf860f5;this['clearFramebuffers'](),this['particlesComputing']['destroyParticlesTextures'](),this['particlesComputing'][_0x20da42(0x2a6)](this[_0x20da42(0x255)],this[_0x20da42(0x209)],this['viewerParameters']);if(_0x2eb341){var _0x4d04cc;const _0x18c175=this['particlesRendering']['createSegmentsGeometry'](this['options']);this['particlesRendering'][_0x20da42(0x2d7)]['segments']['geometry']=_0x18c175;const _0x83cbb5=Cesium$2[_0x20da42(0x24b)]['fromGeometry']({'context':this[_0x20da42(0x255)],'geometry':_0x18c175,'attributeLocations':this['particlesRendering']['primitives']['segments']['attributeLocations'],'bufferUsage':Cesium$2[_0x20da42(0x249)][_0x20da42(0x28d)]});(_0x4d04cc=this['particlesRendering']['primitives'])!==null&&_0x4d04cc!==void 0x0&&(_0x4d04cc=_0x4d04cc[_0x20da42(0x292)])!==null&&_0x4d04cc!==void 0x0&&_0x4d04cc['commandToExecute']&&(this[_0x20da42(0x273)]['primitives']['segments'][_0x20da42(0x1e9)]['vertexArray']=_0x83cbb5);}}['setOptions'](_0x4ce85b){const _0x1627de=_0xf860f5;let _0x581ca4=![];this['options'][_0x1627de(0x23e)]!==_0x4ce85b[_0x1627de(0x23e)]&&(_0x581ca4=!![]),Object['keys'](_0x4ce85b)['forEach'](_0x2e4e7d=>{const _0x58eb60=_0x1627de;this[_0x58eb60(0x209)][_0x2e4e7d]=_0x4ce85b[_0x2e4e7d];}),this['refreshParticles'](_0x581ca4);}['applyViewerParameters'](_0x37704b){const _0x15e837=_0xf860f5;Object['keys'](_0x37704b)[_0x15e837(0x22c)](_0x185ca8=>{const _0x52c5dd=_0x15e837;this[_0x52c5dd(0x272)][_0x185ca8]=_0x37704b[_0x185ca8];}),this['refreshParticles'](![]);}[_0xf860f5(0x21c)](){const _0x1e55f8=_0xf860f5;clearTimeout(this['canrefresh']),this['particlesComputing'][_0x1e55f8(0x20f)](),Object['keys'](this[_0x1e55f8(0x204)]['windTextures'])['forEach'](_0x209a9d=>{const _0x5615d8=_0x1e55f8;this[_0x5615d8(0x204)]['windTextures'][_0x209a9d][_0x5615d8(0x21c)]();}),this['particlesRendering']['textures']['colorTable']['destroy'](),Object['keys'](this['particlesRendering'][_0x1e55f8(0x252)])['forEach'](_0x10be53=>{const _0x522ac7=_0x1e55f8;this['particlesRendering']['framebuffers'][_0x10be53][_0x522ac7(0x21c)]();});for(const _0x573ec3 in this){delete this[_0x573ec3];}}}const Cesium$1=mars3d__namespace['Cesium'],BaseLayer$1=mars3d__namespace['layer']['BaseLayer'],DEF_OPTIONS={'particlesNumber':0x1000,'fixedHeight':0x0,'fadeOpacity':0.996,'dropRate':0.003,'dropRateBump':0.01,'speedFactor':0.5,'lineWidth':0x2,'colors':[_0xf860f5(0x244)]};class WindLayer extends BaseLayer$1{constructor(_0x43c51f={}){_0x43c51f={...DEF_OPTIONS,..._0x43c51f},super(_0x43c51f),this['_setOptionsHook'](_0x43c51f);}get['layer'](){return this['primitives'];}get[_0xf860f5(0x258)](){return this['_data'];}set['data'](_0x1f3b47){this['setData'](_0x1f3b47);}get['colors'](){return this['options']['colors'];}set['colors'](_0x13144e){const _0x11bfde=_0xf860f5;this['options'][_0x11bfde(0x2e2)]=_0x13144e,this[_0x11bfde(0x211)]&&this['particleSystem'][_0x11bfde(0x29a)]({'colors':_0x13144e}),this['resize']();}['_mountedHook'](){}[_0xf860f5(0x21f)](){const _0x2d687c=_0xf860f5;this['scene']=this['_map']['scene'],this['camera']=this[_0x2d687c(0x1f8)]['camera'],this['primitives']=new Cesium$1['PrimitiveCollection'](),this['_map']['scene'][_0x2d687c(0x2d7)]['add'](this[_0x2d687c(0x2d7)]),this['viewerParameters']={'lonRange':new Cesium$1['Cartesian2'](),'latRange':new Cesium$1['Cartesian2'](),'pixelSize':0x0},this['globeBoundingSphere']=new Cesium$1['BoundingSphere'](Cesium$1['Cartesian3']['ZERO'],0.99*0x615299),this[_0x2d687c(0x29b)](),window[_0x2d687c(0x239)]('resize',this['resize']['bind'](this),![]),this['mouse_down']=![],this['mouse_move']=![],this['_map']['on'](mars3d__namespace[_0x2d687c(0x294)][_0x2d687c(0x27c)],this['_onMapWhellEvent'],this),this['_map']['on'](mars3d__namespace['EventType']['mouseDown'],this['_onMouseDownEvent'],this),this['_map']['on'](mars3d__namespace['EventType']['mouseUp'],this['_onMouseUpEvent'],this),this['_map']['on'](mars3d__namespace['EventType']['mouseMove'],this['_onMouseMoveEvent'],this),this[_0x2d687c(0x257)]&&this['setData'](this['_data']);}['_removedHook'](){const _0x593051=_0xf860f5;window['removeEventListener']('resize',this['resize']),this[_0x593051(0x1f8)][_0x593051(0x246)](mars3d__namespace['EventType']['preRender'],this['_onMap_preRenderEvent'],this),this['_map'][_0x593051(0x246)](mars3d__namespace[_0x593051(0x294)]['wheel'],this['_onMapWhellEvent'],this),this['_map']['off'](mars3d__namespace['EventType'][_0x593051(0x1e5)],this['_onMouseDownEvent'],this),this[_0x593051(0x1f8)]['off'](mars3d__namespace['EventType'][_0x593051(0x250)],this['_onMouseUpEvent'],this),this['_map']['off'](mars3d__namespace['EventType']['mouseMove'],this['_onMouseMoveEvent'],this),this['primitives']['removeAll'](),this['_map']['scene']['primitives']['remove'](this['primitives']);}['resize'](){const _0x1220c3=_0xf860f5;if(!this['show']||!this['particleSystem'])return;this[_0x1220c3(0x2d7)]['show']=![],this[_0x1220c3(0x2d7)][_0x1220c3(0x2ac)](),this['_map'][_0x1220c3(0x2b2)](mars3d__namespace['EventType'][_0x1220c3(0x2d3)],this[_0x1220c3(0x281)],this);}['_onMap_preRenderEvent'](_0xc5ebb0){const _0x17b8ca=_0xf860f5;this[_0x17b8ca(0x211)]['canvasResize'](this['scene']['context']),this[_0x17b8ca(0x266)](),this[_0x17b8ca(0x2d7)]['show']=!![];}['_onMapWhellEvent'](_0x33e852){const _0x109f40=_0xf860f5;clearTimeout(this[_0x109f40(0x27f)]);if(!this['show']||!this[_0x109f40(0x211)])return;this[_0x109f40(0x2d7)][_0x109f40(0x25e)]=![],this[_0x109f40(0x27f)]=setTimeout(()=>{const _0x53dcec=_0x109f40;if(!this['show'])return;this[_0x53dcec(0x200)]();},0xc8);}['_onMouseDownEvent'](_0x4ed0a9){this['mouse_down']=!![];}['_onMouseMoveEvent'](_0x51911c){const _0x4613f0=_0xf860f5;if(!this['show']||!this['particleSystem'])return;this['mouse_down']&&(this['primitives'][_0x4613f0(0x25e)]=![],this['mouse_move']=!![]);}['_onMouseUpEvent'](_0x291577){const _0x53094f=_0xf860f5;if(!this[_0x53094f(0x25e)]||!this['particleSystem'])return;this['mouse_down']&&this['mouse_move']&&this['redraw'](),this[_0x53094f(0x2d7)][_0x53094f(0x25e)]=!![],this['mouse_down']=![],this['mouse_move']=![];}['redraw'](){const _0x142216=_0xf860f5;if(!this[_0x142216(0x1f8)]||!this[_0x142216(0x25e)])return;this[_0x142216(0x29b)](),this[_0x142216(0x211)]['applyViewerParameters'](this['viewerParameters']),this[_0x142216(0x2d7)][_0x142216(0x25e)]=!![];}['setData'](_0x4a8c9e){const _0x4b85a6=_0xf860f5;this['_data']=_0x4a8c9e,this['particleSystem']&&this['particleSystem']['destroy'](),this['particleSystem']=new ParticleSystem(this['scene']['context'],_0x4a8c9e,this['getOptions'](),this[_0x4b85a6(0x272)]),this[_0x4b85a6(0x266)]();}[_0xf860f5(0x2c3)](_0x2c4143,_0x183954){if(_0x2c4143)for(const _0x57ca0f in _0x2c4143){this[_0x57ca0f]=_0x2c4143[_0x57ca0f];}this['particleSystem']&&this['particleSystem']['setOptions'](this['getOptions']());}['getOptions'](){const _0x22f7e3=_0xf860f5,_0x59fcca=Math[_0x22f7e3(0x2b3)](Math['sqrt'](this['particlesNumber']));return this['particlesNumber']=_0x59fcca*_0x59fcca,{'particlesTextureSize':_0x59fcca,'maxParticles':this['particlesNumber'],'particleHeight':this['fixedHeight'],'fadeOpacity':this['fadeOpacity'],'dropRate':this['dropRate'],'dropRateBump':this[_0x22f7e3(0x253)],'speedFactor':this['speedFactor'],'lineWidth':this['lineWidth'],'colors':this[_0x22f7e3(0x2e2)]};}['addPrimitives'](){const _0x23a232=_0xf860f5;this['primitives']['add'](this['particleSystem']['particlesComputing']['primitives']['getWind']),this['primitives'][_0x23a232(0x1f0)](this['particleSystem']['particlesComputing']['primitives'][_0x23a232(0x2a1)]),this[_0x23a232(0x2d7)]['add'](this[_0x23a232(0x211)][_0x23a232(0x204)]['primitives']['updatePosition']),this['primitives']['add'](this[_0x23a232(0x211)]['particlesComputing']['primitives']['postProcessingPosition']),this['primitives']['add'](this['particleSystem']['particlesComputing']['primitives'][_0x23a232(0x29e)]),this[_0x23a232(0x2d7)]['add'](this[_0x23a232(0x211)][_0x23a232(0x273)]['primitives']['segments']),this['primitives']['add'](this['particleSystem'][_0x23a232(0x273)][_0x23a232(0x2d7)][_0x23a232(0x2e3)]),this['primitives'][_0x23a232(0x1f0)](this['particleSystem']['particlesRendering']['primitives']['screen']);}[_0xf860f5(0x29b)](){const _0x14f5c1=_0xf860f5;let _0xecb9b6=this['camera']['computeViewRectangle'](this[_0x14f5c1(0x20b)][_0x14f5c1(0x1f6)][_0x14f5c1(0x225)]);if(!_0xecb9b6){const _0x8184b4=this[_0x14f5c1(0x1f8)]['getExtent']();_0xecb9b6=Cesium$1['Rectangle']['fromDegrees'](_0x8184b4['xmin'],_0x8184b4['ymin'],_0x8184b4['xmax'],_0x8184b4['ymax']);}const _0x5404a4=Util['viewRectangleToLonLatRange'](_0xecb9b6);this['viewerParameters']['lonRange']['x']=_0x5404a4['lon'][_0x14f5c1(0x23c)],this[_0x14f5c1(0x272)]['lonRange']['y']=_0x5404a4['lon']['max'],this['viewerParameters']['latRange']['x']=_0x5404a4['lat']['min'],this['viewerParameters'][_0x14f5c1(0x299)]['y']=_0x5404a4[_0x14f5c1(0x2c0)]['max'];const _0x346954=this['camera']['getPixelSize'](this[_0x14f5c1(0x21d)],this[_0x14f5c1(0x20b)]['drawingBufferWidth'],this['scene']['drawingBufferHeight']);_0x346954>0x0&&(this['viewerParameters'][_0x14f5c1(0x28f)]=_0x346954);}}mars3d__namespace['LayerUtil']['register'](_0xf860f5(0x262),WindLayer),mars3d__namespace[_0xf860f5(0x29c)][_0xf860f5(0x280)]=WindLayer;class CanvasParticle{constructor(){const _0xbce162=_0xf860f5;this['lng']=null,this['lat']=null,this['tlng']=null,this['tlat']=null,this['age']=null,this[_0xbce162(0x26d)]=null;}['destroy'](){for(const _0x2c1ade in this){delete this[_0x2c1ade];}}}class CanvasWindField{constructor(_0x1b721d){const _0x3e0255=_0xf860f5;this[_0x3e0255(0x29a)](_0x1b721d);}get[_0xf860f5(0x1fc)](){return this['_speedRate'];}set[_0xf860f5(0x1fc)](_0x35caf4){const _0x309689=_0xf860f5;this[_0x309689(0x220)]=(0x64-(_0x35caf4>0x63?0x63:_0x35caf4))*0x64,this['_calc_speedRate']=[(this['xmax']-this['xmin'])/this['_speedRate'],(this['ymax']-this['ymin'])/this['_speedRate']];}get[_0xf860f5(0x277)](){const _0x35083b=_0xf860f5;return this[_0x35083b(0x23a)];}set['maxAge'](_0x4d2a52){this['_maxAge']=_0x4d2a52;}['setOptions'](_0x1bae44){const _0xefed3e=_0xf860f5;this['options']=_0x1bae44,this['maxAge']=_0x1bae44[_0xefed3e(0x277)]||0x78,this['speedRate']=_0x1bae44['speedRate']||0x32,this['particles']=[];const _0xd7edea=_0x1bae44[_0xefed3e(0x298)]||0x1000;for(let _0x4cc9bf=0x0;_0x4cc9bf<_0xd7edea;_0x4cc9bf++){const _0x13f39a=this['_randomParticle'](new CanvasParticle());this['particles']['push'](_0x13f39a);}}['setDate'](_0x3534d7){const _0x3b207e=_0xf860f5;this['rows']=_0x3534d7[_0x3b207e(0x269)],this[_0x3b207e(0x254)]=_0x3534d7['cols'],this['xmin']=_0x3534d7[_0x3b207e(0x2c5)],this['xmax']=_0x3534d7['xmax'],this['ymin']=_0x3534d7['ymin'],this['ymax']=_0x3534d7['ymax'],this['grid']=[];const _0x328899=_0x3534d7['udata'],_0xde1a52=_0x3534d7['vdata'];let _0x3cd851=![];_0x328899[_0x3b207e(0x283)]===this[_0x3b207e(0x269)]&&_0x328899[0x0][_0x3b207e(0x283)]===this['cols']&&(_0x3cd851=!![]);let _0xb6b4f1=0x0,_0x402e54=null,_0x4639b=null;for(let _0x3d3be3=0x0;_0x3d3be3<this['rows'];_0x3d3be3++){_0x402e54=[];for(let _0x39b0bc=0x0;_0x39b0bc<this['cols'];_0x39b0bc++,_0xb6b4f1++){_0x3cd851?_0x4639b=this['_calcUV'](_0x328899[_0x3d3be3][_0x39b0bc],_0xde1a52[_0x3d3be3][_0x39b0bc]):_0x4639b=this['_calcUV'](_0x328899[_0xb6b4f1],_0xde1a52[_0xb6b4f1]),_0x402e54['push'](_0x4639b);}this['grid']['push'](_0x402e54);}this['options']['reverseY']&&this['grid']['reverse']();}['clear'](){const _0x47e628=_0xf860f5;delete this['rows'],delete this[_0x47e628(0x254)],delete this['xmin'],delete this['xmax'],delete this[_0x47e628(0x286)],delete this[_0x47e628(0x251)],delete this[_0x47e628(0x240)],delete this['particles'];}[_0xf860f5(0x2db)](_0x13b1c8,_0x3825e6){const _0x42cf62=_0xf860f5,_0x1ca47d=(_0x13b1c8-this[_0x42cf62(0x2c5)])/(this['xmax']-this['xmin'])*(this[_0x42cf62(0x254)]-0x1),_0x5c01a9=(this['ymax']-_0x3825e6)/(this['ymax']-this['ymin'])*(this['rows']-0x1);return[_0x1ca47d,_0x5c01a9];}['getUVByXY'](_0x47c243,_0x4eaecb){const _0x2803d1=_0xf860f5;if(_0x47c243<0x0||_0x47c243>=this['cols']||_0x4eaecb>=this['rows'])return[0x0,0x0,0x0];const _0x52a31d=Math[_0x2803d1(0x2a8)](_0x47c243),_0x3d91f4=Math['floor'](_0x4eaecb);if(_0x52a31d===_0x47c243&&_0x3d91f4===_0x4eaecb)return this['grid'][_0x4eaecb][_0x47c243];const _0x3dc6d0=_0x52a31d+0x1,_0x4791e2=_0x3d91f4+0x1,_0xbcadc7=this['getUVByXY'](_0x52a31d,_0x3d91f4),_0x3a408c=this['getUVByXY'](_0x3dc6d0,_0x3d91f4),_0x4913f3=this['getUVByXY'](_0x52a31d,_0x4791e2),_0x31d30e=this['getUVByXY'](_0x3dc6d0,_0x4791e2);let _0x251949=null;try{_0x251949=this[_0x2803d1(0x2d5)](_0x47c243-_0x52a31d,_0x4eaecb-_0x3d91f4,_0xbcadc7,_0x3a408c,_0x4913f3,_0x31d30e);}catch(_0x22635a){console[_0x2803d1(0x27e)](_0x47c243,_0x4eaecb);}return _0x251949;}['_bilinearInterpolation'](_0x3b2fe4,_0x2b8940,_0x462ff8,_0xf245e1,_0x3b60b2,_0xca2623){const _0x11f944=0x1-_0x3b2fe4,_0x72ec6c=0x1-_0x2b8940,_0x32a386=_0x11f944*_0x72ec6c,_0x313f5c=_0x3b2fe4*_0x72ec6c,_0x5498f2=_0x11f944*_0x2b8940,_0x290e11=_0x3b2fe4*_0x2b8940,_0x3df253=_0x462ff8[0x0]*_0x32a386+_0xf245e1[0x0]*_0x313f5c+_0x3b60b2[0x0]*_0x5498f2+_0xca2623[0x0]*_0x290e11,_0x3c736c=_0x462ff8[0x1]*_0x32a386+_0xf245e1[0x1]*_0x313f5c+_0x3b60b2[0x1]*_0x5498f2+_0xca2623[0x1]*_0x290e11;return this['_calcUV'](_0x3df253,_0x3c736c);}[_0xf860f5(0x2d9)](_0x423918,_0xbefc7d){const _0x451e42=_0xf860f5;return[+_0x423918,+_0xbefc7d,Math[_0x451e42(0x2df)](_0x423918*_0x423918+_0xbefc7d*_0xbefc7d)];}['getUVByPoint'](_0x2f8061,_0xdeb59b){const _0x2072f7=_0xf860f5;if(!this['isInExtent'](_0x2f8061,_0xdeb59b))return null;const _0x51b7d3=this['toGridXY'](_0x2f8061,_0xdeb59b),_0x53390b=this[_0x2072f7(0x2d8)](_0x51b7d3[0x0],_0x51b7d3[0x1]);return _0x53390b;}['isInExtent'](_0x552d07,_0x1aeac7){return _0x552d07>=this['xmin']&&_0x552d07<=this['xmax']&&_0x1aeac7>=this['ymin']&&_0x1aeac7<=this['ymax']?!![]:![];}['getRandomLatLng'](){const _0x3e4bd4=fRandomByfloat(this['xmin'],this['xmax']),_0x1de2f4=fRandomByfloat(this['ymin'],this['ymax']);return{'lat':_0x1de2f4,'lng':_0x3e4bd4};}['getParticles'](){const _0x3aefe6=_0xf860f5;let _0xfe24a1,_0x324b70,_0x3e9675;for(let _0x5a3789=0x0,_0x3bb526=this[_0x3aefe6(0x2bf)][_0x3aefe6(0x283)];_0x5a3789<_0x3bb526;_0x5a3789++){let _0xb37f3f=this['particles'][_0x5a3789];_0xb37f3f['age']<=0x0&&(_0xb37f3f=this['_randomParticle'](_0xb37f3f));if(_0xb37f3f['age']>0x0){const _0x5c0d12=_0xb37f3f['tlng'],_0x329837=_0xb37f3f['tlat'];_0x3e9675=this['getUVByPoint'](_0x5c0d12,_0x329837),_0x3e9675?(_0xfe24a1=_0x5c0d12+this['_calc_speedRate'][0x0]*_0x3e9675[0x0],_0x324b70=_0x329837+this['_calc_speedRate'][0x1]*_0x3e9675[0x1],_0xb37f3f['lng']=_0x5c0d12,_0xb37f3f['lat']=_0x329837,_0xb37f3f[_0x3aefe6(0x297)]=_0xfe24a1,_0xb37f3f['tlat']=_0x324b70,_0xb37f3f['speed']=_0x3e9675[0x2],_0xb37f3f['age']--):_0xb37f3f['age']=0x0;}}return this['particles'];}['_randomParticle'](_0x54f828){const _0x3ac049=_0xf860f5;let _0x23cc3b,_0x5cf6bf;for(let _0x368349=0x0;_0x368349<0x1e;_0x368349++){_0x23cc3b=this[_0x3ac049(0x2ab)](),_0x5cf6bf=this['getUVByPoint'](_0x23cc3b['lng'],_0x23cc3b[_0x3ac049(0x2c0)]);if(_0x5cf6bf&&_0x5cf6bf[0x2]>0x0)break;}if(!_0x5cf6bf)return _0x54f828;const _0x1ef30d=_0x23cc3b['lng']+this['_calc_speedRate'][0x0]*_0x5cf6bf[0x0],_0xb4c976=_0x23cc3b['lat']+this[_0x3ac049(0x2c8)][0x1]*_0x5cf6bf[0x1];return _0x54f828[_0x3ac049(0x29d)]=_0x23cc3b['lng'],_0x54f828[_0x3ac049(0x2c0)]=_0x23cc3b['lat'],_0x54f828[_0x3ac049(0x297)]=_0x1ef30d,_0x54f828['tlat']=_0xb4c976,_0x54f828[_0x3ac049(0x23f)]=Math['round'](Math[_0x3ac049(0x2da)]()*this['maxAge']),_0x54f828['speed']=_0x5cf6bf[0x2],_0x54f828;}['destroy'](){for(const _0x37b1a4 in this){delete this[_0x37b1a4];}}}function fRandomByfloat(_0x32b42c,_0x4c7b2f){const _0x13b321=_0xf860f5;return _0x32b42c+Math[_0x13b321(0x2da)]()*(_0x4c7b2f-_0x32b42c);}const Cesium=mars3d__namespace['Cesium'],BaseLayer=mars3d__namespace['layer']['BaseLayer'];class CanvasWindLayer extends BaseLayer{constructor(_0x359050={}){const _0xaf732e=_0xf860f5;super(_0x359050),this[_0xaf732e(0x2c3)](_0x359050),this['canvas']=null,_0x359050['colors']&&_0x359050['steps']&&(this['_colorRamp']=new mars3d__namespace[(_0xaf732e(0x234))](_0x359050));}['_setOptionsHook'](_0x3778ef,_0x2c6ef2){const _0xb9cec1=_0xf860f5;this[_0xb9cec1(0x2cc)]=0x3e8/(_0x3778ef['frameRate']||0xa),this[_0xb9cec1(0x27d)]=this[_0xb9cec1(0x209)][_0xb9cec1(0x2e0)]??![],this['color']=_0x3778ef['color']||'#ffffff',this[_0xb9cec1(0x26f)]=_0x3778ef['lineWidth']||0x1,this['fixedHeight']=_0x3778ef['fixedHeight']??0x0,this['reverseY']=_0x3778ef[_0xb9cec1(0x2e1)]??![],this['windField']&&this['windField'][_0xb9cec1(0x29a)](_0x3778ef);}get['layer'](){return this['canvas'];}get['canvasWidth'](){const _0x496415=_0xf860f5;return this['_map']['scene'][_0x496415(0x2ba)]['clientWidth'];}get[_0xf860f5(0x256)](){const _0x13881a=_0xf860f5;return this[_0x13881a(0x1f8)][_0x13881a(0x20b)]['canvas']['clientHeight'];}get['pointerEvents'](){return this['_pointerEvents'];}set['pointerEvents'](_0x3d86f6){const _0x44a111=_0xf860f5;this['_pointerEvents']=_0x3d86f6;if(!this['canvas'])return;_0x3d86f6?this[_0x44a111(0x2ba)][_0x44a111(0x268)][_0x44a111(0x232)]=_0x44a111(0x210):this['canvas']['style']['pointer-events']='none';}get['particlesNumber'](){const _0x42b478=_0xf860f5;return this['options'][_0x42b478(0x298)];}set['particlesNumber'](_0x11cf03){const _0x570cea=_0xf860f5;this['options']['particlesNumber']=_0x11cf03,clearTimeout(this[_0x570cea(0x288)]),this['_canrefresh']=setTimeout(()=>{const _0x2fc32b=_0x570cea;this[_0x2fc32b(0x200)]();},0x1f4);}get['speedRate'](){const _0x6cd6ba=_0xf860f5;return this[_0x6cd6ba(0x209)]['speedRate'];}set['speedRate'](_0x46e947){const _0x2844af=_0xf860f5;this['options']['speedRate']=_0x46e947,this[_0x2844af(0x1fd)]&&(this['windField']['speedRate']=_0x46e947);}get[_0xf860f5(0x277)](){const _0x1a73ae=_0xf860f5;return this[_0x1a73ae(0x209)]['maxAge'];}set['maxAge'](_0x2279f1){const _0x3b10cc=_0xf860f5;this[_0x3b10cc(0x209)][_0x3b10cc(0x277)]=_0x2279f1,this[_0x3b10cc(0x1fd)]&&(this['windField']['maxAge']=_0x2279f1);}get['data'](){const _0x381303=_0xf860f5;return this[_0x381303(0x1f5)];}set[_0xf860f5(0x258)](_0x10faa5){this['setData'](_0x10faa5);}['_showHook'](_0x296eeb){const _0x521900=_0xf860f5;_0x296eeb?this['_addedHook']():(this[_0x521900(0x1f5)]&&(this[_0x521900(0x209)]['data']=this['windData']),this[_0x521900(0x25f)]());}[_0xf860f5(0x218)](){this['options']['worker']?this['initWorker']():this['windField']=new CanvasWindField(this['options']);}['_addedHook'](){const _0x1742fb=_0xf860f5;this[_0x1742fb(0x2ba)]=this['_createCanvas'](),this['canvasContext']=this['canvas'][_0x1742fb(0x1fe)]('2d',{'willReadFrequently':!![]}),this['bindEvent'](),this['options'][_0x1742fb(0x258)]&&this['setData'](this[_0x1742fb(0x209)]['data']);}['_removedHook'](){const _0x3ed6f5=_0xf860f5;this['clear'](),this['unbindEvent'](),this[_0x3ed6f5(0x2ba)]&&(this['_map']['container']['removeChild'](this['canvas']),delete this['canvas']);}['_createCanvas'](){const _0x15cd88=_0xf860f5,_0x17bd91=mars3d__namespace['DomUtil']['create']('canvas','mars3d-canvasWind',this['_map']['container']);return _0x17bd91[_0x15cd88(0x268)]['position']='absolute',_0x17bd91['style']['top']='0px',_0x17bd91['style']['left']=_0x15cd88(0x223),_0x17bd91['style']['width']=this['_map']['scene']['canvas']['clientWidth']+'px',_0x17bd91[_0x15cd88(0x268)][_0x15cd88(0x2c2)]=this['_map'][_0x15cd88(0x20b)]['canvas']['clientHeight']+'px',_0x17bd91['style']['pointerEvents']=this['_pointerEvents']?'auto':'none',_0x17bd91['style'][_0x15cd88(0x24c)]=this['options']['zIndex']??0x9,_0x17bd91[_0x15cd88(0x205)]=this['_map']['scene']['canvas']['clientWidth'],_0x17bd91['height']=this['_map'][_0x15cd88(0x20b)][_0x15cd88(0x2ba)][_0x15cd88(0x2af)],_0x17bd91;}[_0xf860f5(0x2cb)](){const _0x3bf136=_0xf860f5;this['canvas']&&(this['canvas']['style']['width']=this['_map'][_0x3bf136(0x20b)]['canvas']['clientWidth']+'px',this[_0x3bf136(0x2ba)]['style']['height']=this[_0x3bf136(0x1f8)]['scene']['canvas']['clientHeight']+'px',this['canvas'][_0x3bf136(0x205)]=this['_map']['scene']['canvas']['clientWidth'],this['canvas'][_0x3bf136(0x2c2)]=this['_map']['scene']['canvas']['clientHeight']);}['bindEvent'](){const _0x5bf950=_0xf860f5,_0x4180ff=this;let _0xfb467b=Date[_0x5bf950(0x29f)]();(function _0x394c01(){const _0xdd2dd9=_0x5bf950;_0x4180ff[_0xdd2dd9(0x1fb)]=window['requestAnimationFrame'](_0x394c01);if(_0x4180ff['show']&&_0x4180ff[_0xdd2dd9(0x1fd)]){const _0x485914=Date[_0xdd2dd9(0x29f)](),_0x5948ba=_0x485914-_0xfb467b;_0x5948ba>_0x4180ff['frameTime']&&(_0xfb467b=_0x485914-_0x5948ba%_0x4180ff[_0xdd2dd9(0x2cc)],_0x4180ff['update']());}}(),window['addEventListener']('resize',this['resize']['bind'](this),![]),this['mouse_down']=![],this[_0x5bf950(0x2b5)]=![],this[_0x5bf950(0x209)]['mouseHidden']&&(this['_map']['on'](mars3d__namespace['EventType'][_0x5bf950(0x27c)],this['_onMapWhellEvent'],this),this['_map']['on'](mars3d__namespace['EventType']['mouseDown'],this[_0x5bf950(0x295)],this),this['_map']['on'](mars3d__namespace['EventType']['mouseUp'],this['_onMouseUpEvent'],this)));}['unbindEvent'](){const _0x30f7c8=_0xf860f5;window[_0x30f7c8(0x26b)](this['animateFrame']),delete this['animateFrame'],window[_0x30f7c8(0x25b)]('resize',this['resize']),this[_0x30f7c8(0x209)][_0x30f7c8(0x2ad)]&&(this['_map']['off'](mars3d__namespace[_0x30f7c8(0x294)]['wheel'],this['_onMapWhellEvent'],this),this['_map'][_0x30f7c8(0x246)](mars3d__namespace[_0x30f7c8(0x294)][_0x30f7c8(0x1e5)],this[_0x30f7c8(0x295)],this),this['_map']['off'](mars3d__namespace[_0x30f7c8(0x294)]['mouseUp'],this[_0x30f7c8(0x2e4)],this),this['_map']['off'](mars3d__namespace['EventType']['mouseMove'],this[_0x30f7c8(0x2de)],this));}['_onMapWhellEvent'](_0x1bf4b8){const _0x3ff651=_0xf860f5;clearTimeout(this['refreshTimer']);if(!this['show']||!this['canvas'])return;this['canvas']['style']['visibility']='hidden',this[_0x3ff651(0x27f)]=setTimeout(()=>{const _0x469f9e=_0x3ff651;if(!this['show'])return;this[_0x469f9e(0x200)](),this['canvas'][_0x469f9e(0x268)]['visibility']='visible';},0xc8);}[_0xf860f5(0x295)](_0xb317c1){const _0x3e7166=_0xf860f5;this['mouse_down']=!![],this[_0x3e7166(0x1f8)]['off'](mars3d__namespace['EventType'][_0x3e7166(0x235)],this['_onMouseMoveEvent'],this),this['_map']['on'](mars3d__namespace['EventType']['mouseMove'],this['_onMouseMoveEvent'],this);}['_onMouseMoveEvent'](_0x315f56){const _0x451f5a=_0xf860f5;if(!this['show']||!this[_0x451f5a(0x2ba)])return;this[_0x451f5a(0x216)]&&(this['canvas']['style']['visibility']=_0x451f5a(0x213),this['mouse_move']=!![]);}['_onMouseUpEvent'](_0x1f117c){const _0x2fa561=_0xf860f5;if(!this['show']||!this[_0x2fa561(0x2ba)])return;this[_0x2fa561(0x1f8)][_0x2fa561(0x246)](mars3d__namespace['EventType']['mouseMove'],this['_onMouseMoveEvent'],this),this['mouse_down']&&this['mouse_move']&&this['redraw'](),this['canvas'][_0x2fa561(0x268)]['visibility']='visible',this[_0x2fa561(0x216)]=![],this[_0x2fa561(0x2b5)]=![];}['setData'](_0x1cb982){this['clear'](),this['windData']=_0x1cb982,this['windField']['setDate'](_0x1cb982),this['redraw']();}['redraw'](){const _0x8a8bf8=_0xf860f5;if(!this[_0x8a8bf8(0x25e)])return;this['windField'][_0x8a8bf8(0x29a)](this['options']),this['update']();}['update'](){const _0x822404=_0xf860f5;if(this['_updateIng'])return;this['_updateIng']=!![];if(this['worker'])this['windField']['update']();else{const _0x38bf15=this[_0x822404(0x1fd)]['getParticles']();this[_0x822404(0x25a)](_0x38bf15);}this['_updateIng']=![];}['_drawLines'](_0x35f88a){const _0x26271d=_0xf860f5;this['canvasContext']['globalCompositeOperation']='destination-in',this[_0x26271d(0x229)][_0x26271d(0x22d)](0x0,0x0,this['canvasWidth'],this['canvasHeight']),this[_0x26271d(0x229)]['globalCompositeOperation']='lighter',this['canvasContext']['globalAlpha']=0.9;const _0x3ed105=this['_map'][_0x26271d(0x20b)]['mode']!==Cesium['SceneMode'][_0x26271d(0x285)],_0x3cdf6c=this['canvasWidth']*0.25;if(this['_colorRamp'])for(let _0x4b4b82=0x0,_0x284c05=_0x35f88a['length'];_0x4b4b82<_0x284c05;_0x4b4b82++){const _0x3c02d3=_0x35f88a[_0x4b4b82],_0x5acfea=this[_0x26271d(0x264)](_0x3c02d3['lng'],_0x3c02d3['lat'],_0x3c02d3),_0x4ca6b4=this['_tomap'](_0x3c02d3[_0x26271d(0x297)],_0x3c02d3['tlat'],_0x3c02d3);if(!_0x5acfea||!_0x4ca6b4)continue;if(_0x3ed105&&Math['abs'](_0x5acfea[0x0]-_0x4ca6b4[0x0])>=_0x3cdf6c)continue;this['canvasContext']['beginPath'](),this['canvasContext']['lineWidth']=this[_0x26271d(0x26f)],this[_0x26271d(0x229)][_0x26271d(0x274)]=this['_colorRamp']['getColor'](_0x3c02d3['speed']),this[_0x26271d(0x229)][_0x26271d(0x1eb)](_0x5acfea[0x0],_0x5acfea[0x1]),this['canvasContext']['lineTo'](_0x4ca6b4[0x0],_0x4ca6b4[0x1]),this['canvasContext'][_0x26271d(0x2bb)]();}else{this[_0x26271d(0x229)]['beginPath'](),this[_0x26271d(0x229)][_0x26271d(0x26f)]=this['lineWidth'],this['canvasContext'][_0x26271d(0x274)]=this[_0x26271d(0x279)];for(let _0x48f5c6=0x0,_0x5492a4=_0x35f88a['length'];_0x48f5c6<_0x5492a4;_0x48f5c6++){const _0x4793b2=_0x35f88a[_0x48f5c6],_0x538f6f=this['_tomap'](_0x4793b2[_0x26271d(0x29d)],_0x4793b2[_0x26271d(0x2c0)],_0x4793b2),_0x5bca4c=this['_tomap'](_0x4793b2['tlng'],_0x4793b2[_0x26271d(0x28a)],_0x4793b2);if(!_0x538f6f||!_0x5bca4c)continue;if(_0x3ed105&&Math['abs'](_0x538f6f[0x0]-_0x5bca4c[0x0])>=_0x3cdf6c)continue;this['canvasContext'][_0x26271d(0x1eb)](_0x538f6f[0x0],_0x538f6f[0x1]),this['canvasContext']['lineTo'](_0x5bca4c[0x0],_0x5bca4c[0x1]);}this['canvasContext']['stroke']();}}['_tomap'](_0x1c0826,_0x43aafd,_0x48b294){const _0x25fca2=_0xf860f5,_0x4028ed=Cesium['Cartesian3']['fromDegrees'](_0x1c0826,_0x43aafd,this['fixedHeight']),_0x3ef3cb=this['_map']['scene'];if(_0x3ef3cb[_0x25fca2(0x22b)]===Cesium['SceneMode']['SCENE3D']){const _0x37937d=new Cesium[(_0x25fca2(0x2bd))](_0x3ef3cb['globe']['ellipsoid'],_0x3ef3cb['camera'][_0x25fca2(0x1f9)]),_0x25d433=_0x37937d['isPointVisible'](_0x4028ed);if(!_0x25d433)return _0x48b294['age']=0x0,null;}const _0x54d933=Cesium['SceneTransforms'][_0x25fca2(0x1f4)](this[_0x25fca2(0x1f8)]['scene'],_0x4028ed);return _0x54d933?[_0x54d933['x'],_0x54d933['y']]:null;}['clear'](){this['windField']['clear'](),delete this['windData'];}['initWorker'](){const _0x1318bf=_0xf860f5;this['worker']=new Worker(this['options'][_0x1318bf(0x282)]),this['worker'][_0x1318bf(0x23b)]=_0x316fab=>{const _0x5a0b43=_0x1318bf;this[_0x5a0b43(0x25a)](_0x316fab['data']['particles']),this[_0x5a0b43(0x1f1)]=![];},this[_0x1318bf(0x1fd)]={'init':_0x293336=>{this['worker']['postMessage']({'type':'init','options':_0x293336});},'setOptions':_0x4ac87b=>{this['worker']['postMessage']({'type':'setOptions','options':_0x4ac87b});},'setDate':_0x458279=>{const _0x40f565=_0x1318bf;this['worker']['postMessage']({'type':_0x40f565(0x208),'data':_0x458279});},'update':()=>{const _0x572629=_0x1318bf;if(this['_updateIng2'])return;this[_0x572629(0x1f1)]=!![],this['worker']['postMessage']({'type':_0x572629(0x2c4)});},'clear':()=>{const _0x31ea83=_0x1318bf;this[_0x31ea83(0x282)][_0x31ea83(0x23d)]({'type':_0x31ea83(0x203)});}},this['windField']['init'](this[_0x1318bf(0x209)]);}}mars3d__namespace['LayerUtil']['register']('canvasWind',CanvasWindLayer),mars3d__namespace['layer']['CanvasWindLayer']=CanvasWindLayer,mars3d__namespace['CanvasWindField']=CanvasWindField,mars3d__namespace['WindUtil']=WindUtil,exports['CanvasWindField']=CanvasWindField,exports['CanvasWindLayer']=CanvasWindLayer,exports[_0xf860f5(0x280)]=WindLayer,exports['WindUtil']=WindUtil,Object[_0xf860f5(0x27b)](exports,_0xf860f5(0x215),{'value':!![]});function _0x4980(){const _0x157a82=['DrawCommand','off','getColorTexture','OPAQUE','BufferUsage','8282580oSqITf','VertexArray','zIndex','preExecute','createTexture','NEAREST','mouseUp','ymax','framebuffers','dropRateBump','cols','context','canvasHeight','_data','data','fill','_drawLines','removeEventListener','createRenderingTextures','west','show','_removedHook','ShaderProgram','GeometryAttribute','wind','umin','_tomap','randomBetween','addPrimitives','array','style','rows','particlesWind','cancelAnimationFrame','particlesTextureSize','speed','segmentsDepth','lineWidth','dropRate','shaderProgram','viewerParameters','particlesRendering','strokeStyle','currentParticlesSpeed','TextureMagnificationFilter','maxAge','nextTrailsDepth','color','create','defineProperty','wheel','_pointerEvents','log','refreshTimer','WindLayer','_onMap_preRenderEvent','worker','length','blending','SCENE3D','ymin','uniform\x20sampler2D\x20currentParticlesSpeed;\x20//\x20(u,\x20v,\x20w,\x20normalization)\x0auniform\x20sampler2D\x20particlesWind;\x0a\x0a//\x20used\x20to\x20calculate\x20the\x20wind\x20norm\x0auniform\x20vec2\x20uSpeedRange;\x20//\x20(min,\x20max);\x0auniform\x20vec2\x20vSpeedRange;\x0auniform\x20float\x20pixelSize;\x0auniform\x20float\x20speedFactor;\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0afloat\x20calculateWindNorm(vec3\x20speed)\x20{\x0a\x20\x20\x20\x20vec3\x20percent\x20=\x20vec3(0.0);\x0a\x20\x20\x20\x20percent.x\x20=\x20(speed.x\x20-\x20uSpeedRange.x)\x20/\x20(uSpeedRange.y\x20-\x20uSpeedRange.x);\x0a\x20\x20\x20\x20percent.y\x20=\x20(speed.y\x20-\x20vSpeedRange.x)\x20/\x20(vSpeedRange.y\x20-\x20vSpeedRange.x);\x0a\x20\x20\x20\x20float\x20normalization\x20=\x20length(percent);\x0a\x0a\x20\x20\x20\x20return\x20normalization;\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20//\x20texture\x20coordinate\x20must\x20be\x20normalized\x0a\x20\x20\x20\x20//\x20vec3\x20currentSpeed\x20=\x20texture(currentParticlesSpeed,\x20v_textureCoordinates).rgb;\x0a\x20\x20\x20\x20vec3\x20windVector\x20=\x20texture(particlesWind,\x20v_textureCoordinates).rgb;\x0a\x0a\x20\x20\x20\x20vec4\x20nextSpeed\x20=\x20vec4(speedFactor\x20*\x20pixelSize\x20*\x20windVector,\x20calculateWindNorm(windVector));\x0a\x20\x20\x20\x20out_FragColor\x20=\x20nextSpeed;\x0a}\x0a','_canrefresh','drawingBufferHeight','tlat','mod','keys','STATIC_DRAW','uniform\x20sampler2D\x20nextParticlesPosition;\x0auniform\x20sampler2D\x20nextParticlesSpeed;\x20//\x20(u,\x20v,\x20w,\x20normalization)\x0a\x0a//\x20range\x20(min,\x20max)\x0auniform\x20vec2\x20lonRange;\x0auniform\x20vec2\x20latRange;\x0a\x0auniform\x20float\x20randomCoefficient;\x20//\x20use\x20to\x20improve\x20the\x20pseudo-random\x20generator\x0auniform\x20float\x20dropRate;\x20//\x20drop\x20rate\x20is\x20a\x20chance\x20a\x20particle\x20will\x20restart\x20at\x20random\x20position\x20to\x20avoid\x20degeneration\x0auniform\x20float\x20dropRateBump;\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0a//\x20pseudo-random\x20generator\x0aconst\x20vec3\x20randomConstants\x20=\x20vec3(12.9898,\x2078.233,\x204375.85453);\x0aconst\x20vec2\x20normalRange\x20=\x20vec2(0.0,\x201.0);\x0afloat\x20rand(vec2\x20seed,\x20vec2\x20range)\x20{\x0a\x20\x20\x20\x20vec2\x20randomSeed\x20=\x20randomCoefficient\x20*\x20seed;\x0a\x20\x20\x20\x20float\x20temp\x20=\x20dot(randomConstants.xy,\x20randomSeed);\x0a\x20\x20\x20\x20temp\x20=\x20fract(sin(temp)\x20*\x20(randomConstants.z\x20+\x20temp));\x0a\x20\x20\x20\x20return\x20temp\x20*\x20(range.y\x20-\x20range.x)\x20+\x20range.x;\x0a}\x0a\x0avec3\x20generateRandomParticle(vec2\x20seed,\x20float\x20lev)\x20{\x0a\x20\x20\x20\x20//\x20ensure\x20the\x20longitude\x20is\x20in\x20[0,\x20360]\x0a\x20\x20\x20\x20float\x20randomLon\x20=\x20mod(rand(seed,\x20lonRange),\x20360.0);\x0a\x20\x20\x20\x20float\x20randomLat\x20=\x20rand(-seed,\x20latRange);\x0a\x0a\x20\x20\x20\x20return\x20vec3(randomLon,\x20randomLat,\x20lev);\x0a}\x0a\x0abool\x20particleOutbound(vec3\x20particle)\x20{\x0a\x20\x20\x20\x20return\x20particle.y\x20<\x20-90.0\x20||\x20particle.y\x20>\x2090.0;\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec3\x20nextParticle\x20=\x20texture(nextParticlesPosition,\x20v_textureCoordinates).rgb;\x0a\x20\x20\x20\x20vec4\x20nextSpeed\x20=\x20texture(nextParticlesSpeed,\x20v_textureCoordinates);\x0a\x20\x20\x20\x20float\x20particleDropRate\x20=\x20dropRate\x20+\x20dropRateBump\x20*\x20nextSpeed.a;\x0a\x0a\x20\x20\x20\x20vec2\x20seed1\x20=\x20nextParticle.xy\x20+\x20v_textureCoordinates;\x0a\x20\x20\x20\x20vec2\x20seed2\x20=\x20nextSpeed.xy\x20+\x20v_textureCoordinates;\x0a\x20\x20\x20\x20vec3\x20randomParticle\x20=\x20generateRandomParticle(seed1,\x20nextParticle.z);\x0a\x20\x20\x20\x20float\x20randomNumber\x20=\x20rand(seed2,\x20normalRange);\x0a\x0a\x20\x20\x20\x20if\x20(randomNumber\x20<\x20particleDropRate\x20||\x20particleOutbound(nextParticle))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20vec4(randomParticle,\x201.0);\x20//\x201.0\x20means\x20this\x20is\x20a\x20random\x20particle\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20vec4(nextParticle,\x200.0);\x0a\x20\x20\x20\x20}\x0a}\x0a','pixelSize','lev','TWO_PI','segments','viewport','EventType','_onMouseDownEvent','commandType','tlng','particlesNumber','latRange','setOptions','updateViewerParameters','layer','lng','postProcessingSpeed','now','createWindTextures','updateSpeed','lon','Sampler','uniform\x20sampler2D\x20trailsColorTexture;\x0auniform\x20sampler2D\x20trailsDepthTexture;\x0a\x0ain\x20vec2\x20textureCoordinate;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec4\x20trailsColor\x20=\x20texture(trailsColorTexture,\x20textureCoordinate);\x0a\x20\x20\x20\x20float\x20trailsDepth\x20=\x20texture(trailsDepthTexture,\x20textureCoordinate).r;\x0a\x20\x20\x20\x20float\x20globeDepth\x20=\x20czm_unpackDepth(texture(czm_globeDepthTexture,\x20textureCoordinate));\x0a\x0a\x20\x20\x20\x20if\x20(trailsDepth\x20<\x20globeDepth)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20trailsColor;\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20}\x0a}\x0a','textures','createParticlesTextures','//\x20the\x20size\x20of\x20UV\x20textures:\x20width\x20=\x20lon,\x20height\x20=\x20lat*lev\x0auniform\x20sampler2D\x20U;\x20//\x20eastward\x20wind\x0auniform\x20sampler2D\x20V;\x20//\x20northward\x20wind\x0a\x0auniform\x20sampler2D\x20currentParticlesPosition;\x20//\x20(lon,\x20lat,\x20lev)\x0a\x0auniform\x20vec3\x20dimension;\x20//\x20(lon,\x20lat,\x20lev)\x0auniform\x20vec3\x20minimum;\x20//\x20minimum\x20of\x20each\x20dimension\x0auniform\x20vec3\x20maximum;\x20//\x20maximum\x20of\x20each\x20dimension\x0auniform\x20vec3\x20interval;\x20//\x20interval\x20of\x20each\x20dimension\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0avec2\x20mapPositionToNormalizedIndex2D(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20ensure\x20the\x20range\x20of\x20longitude\x20and\x20latitude\x0a\x20\x20\x20\x20lonLatLev.x\x20=\x20mod(lonLatLev.x,\x20360.0);\x0a\x20\x20\x20\x20lonLatLev.y\x20=\x20clamp(lonLatLev.y,\x20-90.0,\x2090.0);\x0a\x0a\x20\x20\x20\x20vec3\x20index3D\x20=\x20vec3(0.0);\x0a\x20\x20\x20\x20index3D.x\x20=\x20(lonLatLev.x\x20-\x20minimum.x)\x20/\x20interval.x;\x0a\x20\x20\x20\x20index3D.y\x20=\x20(lonLatLev.y\x20-\x20minimum.y)\x20/\x20interval.y;\x0a\x20\x20\x20\x20index3D.z\x20=\x20(lonLatLev.z\x20-\x20minimum.z)\x20/\x20interval.z;\x0a\x0a\x20\x20\x20\x20//\x20the\x20st\x20texture\x20coordinate\x20corresponding\x20to\x20(col,\x20row)\x20index\x0a\x20\x20\x20\x20//\x20example\x0a\x20\x20\x20\x20//\x20data\x20array\x20is\x20[0,\x201,\x202,\x203,\x204,\x205],\x20width\x20=\x203,\x20height\x20=\x202\x0a\x20\x20\x20\x20//\x20the\x20content\x20of\x20texture\x20will\x20be\x0a\x20\x20\x20\x20//\x20t\x201.0\x0a\x20\x20\x20\x20//\x20\x20\x20\x20|\x20\x203\x204\x205\x0a\x20\x20\x20\x20//\x20\x20\x20\x20|\x0a\x20\x20\x20\x20//\x20\x20\x20\x20|\x20\x200\x201\x202\x0a\x20\x20\x20\x20//\x20\x20\x200.0------1.0\x20s\x0a\x0a\x20\x20\x20\x20vec2\x20index2D\x20=\x20vec2(index3D.x,\x20index3D.z\x20*\x20dimension.y\x20+\x20index3D.y);\x0a\x20\x20\x20\x20vec2\x20normalizedIndex2D\x20=\x20vec2(index2D.x\x20/\x20dimension.x,\x20index2D.y\x20/\x20(dimension.y\x20*\x20dimension.z));\x0a\x20\x20\x20\x20return\x20normalizedIndex2D;\x0a}\x0a\x0afloat\x20getWind(sampler2D\x20windTexture,\x20vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20vec2\x20normalizedIndex2D\x20=\x20mapPositionToNormalizedIndex2D(lonLatLev);\x0a\x20\x20\x20\x20float\x20result\x20=\x20texture(windTexture,\x20normalizedIndex2D).r;\x0a\x20\x20\x20\x20return\x20result;\x0a}\x0a\x0aconst\x20mat4\x20kernelMatrix\x20=\x20mat4(\x0a\x20\x20\x20\x200.0,\x20-1.0,\x202.0,\x20-1.0,\x20//\x20first\x20column\x0a\x20\x20\x20\x202.0,\x200.0,\x20-5.0,\x203.0,\x20//\x20second\x20column\x0a\x20\x20\x20\x200.0,\x201.0,\x204.0,\x20-3.0,\x20//\x20third\x20column\x0a\x20\x20\x20\x200.0,\x200.0,\x20-1.0,\x201.0\x20//\x20fourth\x20column\x0a);\x0afloat\x20oneDimensionInterpolation(float\x20t,\x20float\x20p0,\x20float\x20p1,\x20float\x20p2,\x20float\x20p3)\x20{\x0a\x20\x20\x20\x20vec4\x20tVec4\x20=\x20vec4(1.0,\x20t,\x20t\x20*\x20t,\x20t\x20*\x20t\x20*\x20t);\x0a\x20\x20\x20\x20tVec4\x20=\x20tVec4\x20/\x202.0;\x0a\x20\x20\x20\x20vec4\x20pVec4\x20=\x20vec4(p0,\x20p1,\x20p2,\x20p3);\x0a\x20\x20\x20\x20return\x20dot((tVec4\x20*\x20kernelMatrix),\x20pVec4);\x0a}\x0a\x0afloat\x20calculateB(sampler2D\x20windTexture,\x20float\x20t,\x20float\x20lon,\x20float\x20lat,\x20float\x20lev)\x20{\x0a\x20\x20\x20\x20float\x20lon0\x20=\x20floor(lon)\x20-\x201.0\x20*\x20interval.x;\x0a\x20\x20\x20\x20float\x20lon1\x20=\x20floor(lon);\x0a\x20\x20\x20\x20float\x20lon2\x20=\x20floor(lon)\x20+\x201.0\x20*\x20interval.x;\x0a\x20\x20\x20\x20float\x20lon3\x20=\x20floor(lon)\x20+\x202.0\x20*\x20interval.x;\x0a\x0a\x20\x20\x20\x20float\x20p0\x20=\x20getWind(windTexture,\x20vec3(lon0,\x20lat,\x20lev));\x0a\x20\x20\x20\x20float\x20p1\x20=\x20getWind(windTexture,\x20vec3(lon1,\x20lat,\x20lev));\x0a\x20\x20\x20\x20float\x20p2\x20=\x20getWind(windTexture,\x20vec3(lon2,\x20lat,\x20lev));\x0a\x20\x20\x20\x20float\x20p3\x20=\x20getWind(windTexture,\x20vec3(lon3,\x20lat,\x20lev));\x0a\x0a\x20\x20\x20\x20return\x20oneDimensionInterpolation(t,\x20p0,\x20p1,\x20p2,\x20p3);\x0a}\x0a\x0afloat\x20interpolateOneTexture(sampler2D\x20windTexture,\x20vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20float\x20lon\x20=\x20lonLatLev.x;\x0a\x20\x20\x20\x20float\x20lat\x20=\x20lonLatLev.y;\x0a\x20\x20\x20\x20float\x20lev\x20=\x20lonLatLev.z;\x0a\x0a\x20\x20\x20\x20float\x20lat0\x20=\x20floor(lat)\x20-\x201.0\x20*\x20interval.y;\x0a\x20\x20\x20\x20float\x20lat1\x20=\x20floor(lat);\x0a\x20\x20\x20\x20float\x20lat2\x20=\x20floor(lat)\x20+\x201.0\x20*\x20interval.y;\x0a\x20\x20\x20\x20float\x20lat3\x20=\x20floor(lat)\x20+\x202.0\x20*\x20interval.y;\x0a\x0a\x20\x20\x20\x20vec2\x20coefficient\x20=\x20lonLatLev.xy\x20-\x20floor(lonLatLev.xy);\x0a\x20\x20\x20\x20float\x20b0\x20=\x20calculateB(windTexture,\x20coefficient.x,\x20lon,\x20lat0,\x20lev);\x0a\x20\x20\x20\x20float\x20b1\x20=\x20calculateB(windTexture,\x20coefficient.x,\x20lon,\x20lat1,\x20lev);\x0a\x20\x20\x20\x20float\x20b2\x20=\x20calculateB(windTexture,\x20coefficient.x,\x20lon,\x20lat2,\x20lev);\x0a\x20\x20\x20\x20float\x20b3\x20=\x20calculateB(windTexture,\x20coefficient.x,\x20lon,\x20lat3,\x20lev);\x0a\x0a\x20\x20\x20\x20return\x20oneDimensionInterpolation(coefficient.y,\x20b0,\x20b1,\x20b2,\x20b3);\x0a}\x0a\x0avec3\x20bicubic(vec3\x20lonLatLev)\x20{\x0a\x20\x20\x20\x20//\x20https://en.wikipedia.org/wiki/Bicubic_interpolation#Bicubic_convolution_algorithm\x0a\x20\x20\x20\x20float\x20u\x20=\x20interpolateOneTexture(U,\x20lonLatLev);\x0a\x20\x20\x20\x20float\x20v\x20=\x20interpolateOneTexture(V,\x20lonLatLev);\x0a\x20\x20\x20\x20float\x20w\x20=\x200.0;\x0a\x20\x20\x20\x20return\x20vec3(u,\x20v,\x20w);\x0a}\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20//\x20texture\x20coordinate\x20must\x20be\x20normalized\x0a\x20\x20\x20\x20vec3\x20lonLatLev\x20=\x20texture(currentParticlesPosition,\x20v_textureCoordinates).rgb;\x0a\x20\x20\x20\x20vec3\x20windVector\x20=\x20bicubic(lonLatLev);\x0a\x20\x20\x20\x20out_FragColor\x20=\x20vec4(windVector,\x200.0);\x0a}\x0a','floor','blue','depthTexture','getRandomLatLng','removeAll','mouseHidden','currentParticlesPosition','clientHeight','2367228gtkbWi','Cartesian3','once','ceil','createRawRenderState','mouse_move','xmax','toDegrees','uniform\x20sampler2D\x20colorTable;\x0a\x0ain\x20float\x20speedNormalization;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20out_FragColor\x20=\x20texture(colorTable,\x20vec2(speedNormalization,\x200.0));\x0a}\x0a','createFramebuffer','canvas','stroke','fromCssColorString','EllipsoidalOccluder','createCommand','particles','lat','autoClear','height','_setOptionsHook','update','xmin','push','ShaderSource','_calc_speedRate','clearFramebuffers','depthTest','resize','frameTime','clampToLatitudeRange','dimensions','Cartesian2','ComponentDatatype','TRIANGLES','uniform\x20sampler2D\x20segmentsColorTexture;\x0auniform\x20sampler2D\x20segmentsDepthTexture;\x0a\x0auniform\x20sampler2D\x20currentTrailsColor;\x0auniform\x20sampler2D\x20trailsDepthTexture;\x0a\x0auniform\x20float\x20fadeOpacity;\x0a\x0ain\x20vec2\x20textureCoordinate;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec4\x20pointsColor\x20=\x20texture(segmentsColorTexture,\x20textureCoordinate);\x0a\x20\x20\x20\x20vec4\x20trailsColor\x20=\x20texture(currentTrailsColor,\x20textureCoordinate);\x0a\x0a\x20\x20\x20\x20trailsColor\x20=\x20floor(fadeOpacity\x20*\x20255.0\x20*\x20trailsColor)\x20/\x20255.0;\x20//\x20make\x20sure\x20the\x20trailsColor\x20will\x20be\x20strictly\x20decreased\x0a\x0a\x20\x20\x20\x20float\x20pointsDepth\x20=\x20texture(segmentsDepthTexture,\x20textureCoordinate).r;\x0a\x20\x20\x20\x20float\x20trailsDepth\x20=\x20texture(trailsDepthTexture,\x20textureCoordinate).r;\x0a\x20\x20\x20\x20float\x20globeDepth\x20=\x20czm_unpackDepth(texture(czm_globeDepthTexture,\x20textureCoordinate));\x0a\x0a\x20\x20\x20\x20out_FragColor\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20if\x20(pointsDepth\x20<\x20globeDepth)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20out_FragColor\x20+\x20pointsColor;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(trailsDepth\x20<\x20globeDepth)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20out_FragColor\x20+\x20trailsColor;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20gl_FragDepth\x20=\x20min(pointsDepth,\x20trailsDepth);\x0a}\x0a','preRender','umax','_bilinearInterpolation','RGB','primitives','getUVByXY','_calcUV','random','toGridXY','119aXZsvK','nextTrails','_onMouseMoveEvent','sqrt','pointerEvents','reverseY','colors','trails','_onMouseUpEvent','framebuffer','mouseDown','915794Wkhcer','3julzTx','createSegmentsGeometry','commandToExecute','primitiveType','moveTo','vertexArray','Math','SceneMode','windTextures','add','_updateIng2','fromGeometry','commandList','wgs84ToWindowCoordinates','windData','globe','speedFactor','_map','positionWC','colorTable','animateFrame','speedRate','windField','getContext','postProcessingPosition','redraw','uniform\x20sampler2D\x20postProcessingPosition;\x0auniform\x20sampler2D\x20nextParticlesSpeed;\x0a\x0ain\x20vec2\x20v_textureCoordinates;\x0a\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20vec4\x20randomParticle\x20=\x20texture(postProcessingPosition,\x20v_textureCoordinates);\x0a\x20\x20\x20\x20vec4\x20particleSpeed\x20=\x20texture(nextParticlesSpeed,\x20v_textureCoordinates);\x0a\x0a\x20\x20\x20\x20if\x20(randomParticle.a\x20>\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20vec4(0.0);\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20out_FragColor\x20=\x20particleSpeed;\x0a\x20\x20\x20\x20}\x0a}\x0a','outputTexture','clear','particlesComputing','width','green','10856120bFUZUz','setDate','options','vmax','scene','defined','attributeLocations','geometry','destroyParticlesTextures','all','particleSystem','default','hidden','PI_OVER_TWO','__esModule','mouse_down','getFullscreenQuad','_mountedHook','69810TqnkiO','north','updatePosition','destroy','globeBoundingSphere','Color','_addedHook','_speedRate','createComputingPrimitives','667192vIMMex','0px','lonRange','ellipsoid','nextTrailsColor','Compute','404eXKzVs','canvasContext','clearCommand','mode','forEach','fillRect','Geometry','segmentsColor','particlesTextures','south','pointer-events','rawRenderState','ColorRamp','mouseMove','ClearCommand','PixelDatatype','999ndrQxK','addEventListener','_maxAge','onmessage','min','postMessage','maxParticles','age','grid','FLOAT','28137TwxeZZ','Draw','rgb(206,255,255)'];_0x4980=function(){return _0x157a82;};return _0x4980();}
15
15
  }));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mars3d-wind",
3
- "version": "3.7.5",
3
+ "version": "3.7.7",
4
4
  "description": "Mars3D平台插件,支持气象 风向图 功能插件",
5
5
  "main": "dist/mars3d-wind.js",
6
6
  "files": [
@@ -8,7 +8,7 @@
8
8
  ],
9
9
  "peerDependencies": {},
10
10
  "devDependencies": {
11
- "mars3d": "~3.7.5"
11
+ "mars3d": "~3.7.7"
12
12
  },
13
13
  "scripts": {
14
14
  "lint": "eslint ./src/**/*.{js,ts} --fix"