cesium加载气象数据
通过cesium的postProcessStages接口改变fragmentShader来实现这些效果
addsnow() {
//删除
if (this.snow) this.viewer.scene.postProcessStages.remove(this.snow)
this.snow = new Cesium.PostProcessStage({
name: 'czm_snow',
fragmentShader:
'\n\
uniform sampler2D colorTexture;\n\
varying vec2 v_textureCoordinates;\n\
float snow(vec2 uv,float scale)\n\
{\n\
float time = czm_frameNumber / 60.0;\n\
float w=smoothstep(1.,0.,-uv.y*(scale/10.));if(w<.1)return 0.;\n\
uv+=time/scale;uv.y+=time*2./scale;uv.x+=sin(uv.y+time*.5)/scale;\n\
uv*=scale;vec2 s=floor(uv),f=fract(uv),p;float k=3.,d;\n\
p=.5+.35*sin(11.*fract(sin((s+p+scale)*mat2(7,3,6,5))*5.))-f;d=length(p);k=min(d,k);\n\
k=smoothstep(0.,k,sin(f.x+f.y)*0.01);\n\
return k*w;\n\
}\n\
void main(void){\n\
vec2 resolution = czm_viewport.zw;\n\
vec2 uv=(gl_FragCoord.xy*2.-resolution.xy)/min(resolution.x,resolution.y);\n\
vec3 finalColor=vec3(0);\n\
float c = 0.0;\n\
c+=snow(uv,30.)*.0;\n\
c+=snow(uv,20.)*.0;\n\
c+=snow(uv,15.)*.0;\n\
c+=snow(uv,10.);\n\
c+=snow(uv,8.);\n\
c+=snow(uv,6.);\n\
c+=snow(uv,5.);\n\
finalColor=(vec3(c)); \n\
gl_FragColor = mix(texture2D(colorTexture, v_textureCoordinates), vec4(finalColor,1), 0.5); \n\
}'
})
this.viewer.scene.postProcessStages.add(this.snow)
},
Shader
//雨
'\n\
uniform sampler2D colorTexture;\n\
varying vec2 v_textureCoordinates;\n\
float hash(float x)\n\
{\n\
return fract(sin(x*133.3)*13.13);\n\
}\n\
void main(void){\n\
float time = czm_frameNumber / 60.0;\n\
vec2 resolution = czm_viewport.zw;\n\
vec2 uv=(gl_FragCoord.xy*2.-resolution.xy)/min(resolution.x,resolution.y);\n\
vec3 c=vec3(.6,.7,.8);\n\
float a=-.4;\n\
float si=sin(a),co=cos(a);\n\
uv*=mat2(co,-si,si,co);\n\
uv*=length(uv+vec2(0,4.9))*.3+1.;\n\
float v=1.-sin(hash(floor(uv.x*100.))*2.);\n\
float b=clamp(abs(sin(20.*time*v+uv.y*(5./(2.+v))))-.95,0.,1.)*20.;\n\
c*=v*b;\n\
gl_FragColor = mix(texture2D(colorTexture, v_textureCoordinates), vec4(c,1), 0.5);\n\
}'
//雪
'\n\
uniform sampler2D colorTexture;\n\
varying vec2 v_textureCoordinates;\n\
float snow(vec2 uv,float scale)\n\
{\n\
float time = czm_frameNumber / 60.0;\n\
float w=smoothstep(1.,0.,-uv.y*(scale/10.));if(w<.1)return 0.;\n\
uv+=time/scale;uv.y+=time*2./scale;uv.x+=sin(uv.y+time*.5)/scale;\n\
uv*=scale;vec2 s=floor(uv),f=fract(uv),p;float k=3.,d;\n\
p=.5+.35*sin(11.*fract(sin((s+p+scale)*mat2(7,3,6,5))*5.))-f;d=length(p);k=min(d,k);\n\
k=smoothstep(0.,k,sin(f.x+f.y)*0.01);\n\
return k*w;\n\
}\n\
void main(void){\n\
vec2 resolution = czm_viewport.zw;\n\
vec2 uv=(gl_FragCoord.xy*2.-resolution.xy)/min(resolution.x,resolution.y);\n\
vec3 finalColor=vec3(0);\n\
float c = 0.0;\n\
c+=snow(uv,30.)*.0;\n\
c+=snow(uv,20.)*.0;\n\
c+=snow(uv,15.)*.0;\n\
c+=snow(uv,10.);\n\
c+=snow(uv,8.);\n\
c+=snow(uv,6.);\n\
c+=snow(uv,5.);\n\
finalColor=(vec3(c)); \n\
gl_FragColor = mix(texture2D(colorTexture, v_textureCoordinates), vec4(finalColor,1), 0.5); \n\
}'
//雾
'\n\
uniform sampler2D colorTexture;\n\
uniform sampler2D depthTexture;\n\
varying vec2 v_textureCoordinates;\n\
void main(void)\n\
{\n\
vec4 origcolor=texture2D(colorTexture, v_textureCoordinates);\n\
vec4 fogcolor=vec4(0.8,0.8,0.8,0.5);\n\
float depth = czm_readDepth(depthTexture, v_textureCoordinates);\n\
vec4 depthcolor=texture2D(depthTexture, v_textureCoordinates);\n\
float f=(depthcolor.r-0.7)/0.2;\n\
if(f<0.0) f=0.0;\n\
else if(f>1.0) f=1.0;\n\
gl_FragColor = mix(origcolor,fogcolor,f);\n\
}'
————————————————
原文链接:https://blog.csdn.net/skr_Rany/article/details/112601036
cesium加载气象数据相关推荐
- 首次使用Cesium加载3D数据不成功
接此: https://blog.csdn.net/bcbobo21cn/article/details/110454547 参阅相关教程:Cesium加载3D数据是通过3D Tiles进行: 3D ...
- Cesium加载大数据量地下管线
Cesium加载大数据量地下管线 Cesium优化加载 管线加载 管井.摄像头.交通信号灯等模型加载 与倾斜摄影模型结合加载 Cesium优化加载 管线.管井.路灯.交通信号灯.接电箱等模型使用Pri ...
- 首次使用Cesium加载3D数据成功
接此: https://blog.csdn.net/bcbobo21cn/article/details/111305160 `代码同前文:加载不同的数据,都不能加载出来: var palaceTil ...
- Cesium加载GeoJson数据(shp转化的json数据)
1.shp转换成json格式 此处整理了两种shp转为json格式的方式:一是使用工具:二是使用ArcGIS进行转换. 1.1.ArcGIS转换 1.使用ArcGIS将shp文件的地理坐标设置为WGS ...
- vite+cesium加载3DTile数据
Cesium 3D Tile是Cesium的一种特有的3D模型格式,其文件名后缀为.b3dm,而要在自己开发的平台上调用这些3D Tile,一般为通过后缀为.json格式的文件来调用.b3dm格式的3 ...
- 自己写的Cesium加载天地图数据服务的方法(亲测可用)
前提条件 1.首先需要了解天地图都有哪些数据服务,具体详见天地图API介绍,如下图所示: 如下地址我将加粗的"vec_c"成为图层标签. http://t0.tianditu.go ...
- cesium采用primitive方式加载geojson数据
cesium采用primitive方式加载geojson数据 cesium加载geojson数据有自带的接口GeoJsonDataSource和演示 示例,使用的是entity方式来加载数据,而ent ...
- ceisum 加载geojson,使用 Cesium 动态加载 GeoJSON 数据
前言 需求是这样的,我需要在地图中显示 08 年到现在的地震情况,地震都是发生在具体的时间点的,那么问题就来了,如何实现地震情况按照时间动态渲染而不是一次全部加载出来. 一. 方案分析 这里面牵扯到两 ...
- Cesium开发基础篇 | 02加载地形数据
Cesium中的地形图层类 前面我们主要学习了cesium内置接口如何操作影像数据,但是在一些应用场景中我们需要操作地形数据,例如模拟逼真的三维场景.与高程相关的一些空间分析和计算等.Cesium提供 ...
最新文章
- 【控制】《多智能体系统一致性协同演化控制理论与技术》纪良浩老师-第7章-二阶时滞多智能体系统分组一致性
- 网易云信给您拜年啦!
- HDU 4430 amp; ZOJ 3665 Yukari#39;s Birthday(二分法+枚举)
- 哈密顿路径_检查图形是否为哈密顿量(哈密顿路径)
- disp语句怎么格式 matlab_Matlab使用技巧总结-1
- [codevs2597]团伙并查集
- Tomcat Post请求参数长度限制
- C语言经典算法100例-002-数轴的使用
- 比尔·盖茨推荐2020年度五本好书 你想读哪本?
- 【DataOps】- 数据开发治理一体化之网易数帆数据治理2.0实践分享
- linux目录结构全解,Linux目录结构详解(最全最详细版)
- 算法训练 - 黑色星期五 有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是“诸事不宜”。请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是13号又
- android o bln-al10,bln-al10是什么手机型号 bln-al10是啥手机型号
- 运用“孤独九剑”解决项目实际问题(三)
- java 从已知日期计算干支纪日_天干地支纪日怎么计算?
- apk 进行系统签名
- linux远程端口查看
- python内建函数是什么意思_python、什么是内建函数?
- 为什么电脑QQ的字体突然变小了
- 求e的近似值B-Python123编程题库答案-Python从入门到精通挑战台