news 2026/4/26 8:36:19

Cesium进阶教程(2)线性高度雾

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cesium进阶教程(2)线性高度雾

本系列教程适合有前端基础以及一定三维GIS开发基础、想学习cesium高阶内容的同学,例如:WebGIS开发工程师、前端工程师、GIS专业学生和相关科研人员等。
视频版戳此处观看
文字版教程:
Cesium进阶教程(1)在cesium后处理中使用shadertoy的代码

高度雾:根据高度进行雾化的一种现象,可以增加场景的真实感与立体感,使渲染效果更加接近现实环境。

实现思路

  1. 获取像素点的世界坐标。
  2. 根据像素点的世界坐标计算高程。
  3. 根据高程计算雾化值。
  4. 根据雾化值混合场景原来的颜色和雾化颜色。

将前面的线性距离雾函数修改一下
这里我们得到像素点的世界坐标,并且减去当前位置的地球半径,得到当前像素点的高程。

float getDistance(sampler2D depthTexture, vec2 texCoords) { float depth = czm_unpackDepth(texture2D(depthTexture, texCoords)); vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, depth); vec3 eyeCoordinate3 = eyeCoordinate.xyz / eyeCoordinate.w; vec4 worldCoordinate4 = czm_inverseView * vec4(eyeCoordinate3, 1.); vec3 worldCoordinate = worldCoordinate4.xyz / worldCoordinate4.w; return length(worldCoordinate.xyz) - earthRadius; //当前高度 }

同步的,我们在js中获取当前的地球半径

earthRadius=Cesium.Cartesian3.magnitude(viewer.camera.positionWC)-viewer.camera.positionCartographic.height;

接下来,我们根据高程计算雾化因子
这里传入参数fogByHeight:new Cesium.Cartesian4(0, 0.7, 1000, 0.0)
含义为,最低的雾高度为0,雾的强度为0.7,最高的雾高度为1000,强度为0,0-1000m高度的雾,会呈现渐变效果。

float interpolateByDistance(vec4 nearFarScalar, float distance) { float startDistance = nearFarScalar.x; float startValue = nearFarScalar.y; float endDistance = nearFarScalar.z; float endValue = nearFarScalar.w; float t = clamp((distance - startDistance) / (endDistance - startDistance), 0.0, 1.0); return mix(startValue, endValue, t); }

然后将雾的透明度混合到当前的场景中

// alpha混合 vec4 alphaBlend(vec4 sourceColor, vec4 destinationColor) { return sourceColor * vec4(sourceColor.aaa, 1.0) + destinationColor * (1.0 - sourceColor.a); } void main(void) { // 获取当前地面到相机的距离 float distanceFog = getDistance(depthTexture, v_textureCoordinates); // 获取场景本身的颜色 vec4 col = texture2D(colorTexture, v_textureCoordinates); // 计算雾化因子 float fogRate = interpolateByDistance(fogByHeight, distanceFog); vec4 finalFogColor = vec4(fogColor.rgb, fogColor.a * fogRate); gl_FragColor = alphaBlend(finalFogColor, col); }

最终效果



看不明白没关系,需要上述视频教程+源码的同学可以直接
+下方小助手↓备注【cesium进阶】无偿获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:42:12

瑞幸咖啡 x 阿里云合作共创:AI 推荐让瑞幸咖啡“更懂你

在新零售不断演进的今天,用户走进瑞幸,要的不只是咖啡,更是一种“被真正理解”的体验——口味、习惯、场景,甚至那一刻的心情。作为国内领先的连锁咖啡品牌,瑞幸咖啡正从数字化迈入智能化新阶段,以人工智能…

作者头像 李华
网站建设 2026/4/23 23:38:10

医院电子病历如何用TinyMCE处理PDF签名跨平台Word导入?

集团 Word 导入产品项目全纪实:从寻觅到落地攻坚 需求初现:多行业适配的挑战 作为集团旗下软件子公司的项目负责人,我深知此次任务的复杂性与紧迫性。集团业务广泛,旗下多个子公司服务于教育、政府、银行等多个关键行业。集团总…

作者头像 李华
网站建设 2026/4/18 8:43:18

PostgreSQL:详解如何搭建流复制集群

文章目录一、前置知识1.1 流复制原理1.2 架构说明二、环境准备2.1 系统要求2.2 节点信息示例三、安装 PostgreSQL四、配置主节点(Primary)4.1 修改 postgresql.conf4.2 配置 pg_hba.conf4.3 创建复制用户4.4 重启主库五、配置备节点(Standby&…

作者头像 李华
网站建设 2026/4/25 17:03:24

【计算机毕业设计案例】基于Java+Vue+SpringBoot足球俱乐部管理系统的设计与实现基于springboot的足球俱乐部青训管理系统的设计与实现(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/25 14:56:27

计算机毕业设计springboot基于java的校园网络诈骗宣传网站 基于SpringBoot的高校电信安全教育与案例警示平台 Java驱动的校园反欺诈知识普及与互动预警系统

计算机毕业设计springboot基于java的校园网络诈骗宣传网站7gn069ia (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。近年来,随着互联网技术的飞速发展,高校…

作者头像 李华
网站建设 2026/4/24 21:16:28

Z世代语境下的春节营销:海外红人如何为出海品牌“重新定价”

在以Z世代为主导的全球社交媒体环境中,春节正在悄然脱离“只属于华人社群的传统节日”这一单一认知,转而成为一种被主动围观、参与和再创造的文化符号。与以往由中国品牌单向解释春节意义不同,越来越多海外内容创作者开始以“参与者”而非“旁…

作者头像 李华