news 2026/9/17 11:04:38

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/9/16 7:49:58

8款AI降AIGC率神器,赶due急救指南!

哈喽,大家好!我是小李(自称老李也行,毕竟32岁了��)。今天咱们来聊聊一个火爆话题——论文被AI检测卡住了?别慌!我亲身体验了8款AI工具,帮你赶due救急&#xf…

作者头像 李华
网站建设 2026/9/8 4:25:30

【YOLOv8多模态涨点改进】独家创新首发 | TGRS 2025 | 引入UMIS-YOLO中的RFF残差特征融合模块,通过残差连接和多尺度特征融合,优化了目标边界的精确度,适合实例分割、小目标检测

一、本文介绍 🔥本文给大家介绍使用 UMIS-YOLO中的RFF残差特征融合模块 改进 YOLOv8 多模态网络模型,能够有效增强低层和高层特征的融合,提升小目标检测精度,特别是在复杂背景下。通过残差连接和多尺度特征融合,RFF 模块优化了目标边界的精确度,减少了冗余信息,提升了…

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

Java毕设选题推荐:基于springboot的农村康养院敬老院平台的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

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

作者头像 李华
网站建设 2026/9/10 10:07:45

计算机Java毕设实战-基于SpringBoot+Vue+MySQL的足球俱乐部管理基于springboot的足球俱乐部青训管理系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

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

作者头像 李华
网站建设 2026/9/3 5:30:42

如何评估企业的垂直整合价值

如何评估企业的垂直整合价值 关键词:企业垂直整合、价值评估、产业链、协同效应、成本效益 摘要:本文旨在深入探讨如何评估企业的垂直整合价值。首先介绍了企业垂直整合的背景,包括目的、预期读者、文档结构和相关术语。接着阐述了垂直整合的核心概念及联系,通过示意图和流…

作者头像 李华