还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信(gis-dajianshi),一起交流。
文章目录
一,着色器和后处理的基本设置
CesiumJS 支持通过自定义着色器(Shaders)和后处理阶段(Post-Processing Stages)来增强可视化效果。这些功能允许你修改场景的渲染方式,添加特效,比如模糊、辉光等,或者对特定对象应用特殊的材质效果。
(1)自定义着色器
在 Cesium 中,你可以使用 CustomShader
来为 3D Tiles 或者实体(Entities)添加自定义着色器逻辑。以下是一个简单的例子,演示如何为一个 3D Tileset 应用自定义着色器:
// 加载 3D Tileset
const tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
url: Cesium.IonResource.fromAssetId(YourTilesetId)
}));
// 创建自定义着色器
const customShader = new Cesium.CustomShader({
fragmentShaderText: `
void fragmentMain(FragmentInput input, inout czm_modelMaterial material) {
// 示例:将模型颜色设置为红色
material.diffuse = vec3(1.0, 0.0, 0.0);
}
`
});
// 将自定义着色器应用到 3D Tileset
tileset.customShader = customShader;
(2)后处理阶段
Cesium 的后处理阶段允许你在最终图像输出前对其进行修改。这可以用来实现各种视觉效果,如景深、边缘检测等。要使用后处理阶段,你需要先创建一个 PostProcessStage
实例,然后将其添加到场景中。
以下是一个简单的示例,演示如何添加一个基本的亮度/对比度调整的后处理阶段:
// 创建亮度/对比度调整的后处理阶段
const postProcessStage = new Cesium.PostProcessStage({
fragmentShader: `
uniform sampler2D colorTexture;
in vec2 v_textureCoordinates;
out vec4 fragColor;
void main() {
vec4 color = texture(colorTexture, v_textureCoordinates);
// 调整亮度和对比度
float brightness = 0.1; // 亮度值
float contrast = 1.5; // 对比度值
fragColor = vec4(((color.rgb - 0.5) * contrast + 0.5 + brightness), color.a);
}
`,
uniforms: {
colorTexture: function() {
return viewer.scene.frameState.commandList[0].pass === Cesium.Pass.GLOBE ? viewer.scene.globe.depthTexture : undefined;
}
}
});
// 将后处理阶段添加到场景中
viewer.scene.postProcessStages.add(postProcessStage);
请注意,上述代码仅为示例,实际应用中可能需要根据具体需求进行适当调整。例如,后处理阶段的 uniforms
可能需要动态更新以响应用户输入或时间变化等。
二,Cesium 实际示例(含源代码)
01.vue+cesium:加载json数据,使用shader绘制省边界线
https://dajianshi.blog.csdn.net/article/details/146037787
02.vue+cesium: 使用后处理来绘制轮廓线
https://dajianshi.blog.csdn.net/article/details/146017088

03.vue+cesium: 实现下雨效果
https://dajianshi.blog.csdn.net/article/details/129238682
04.vue+cesium: 实现下雪效果
https://dajianshi.blog.csdn.net/article/details/136403498
05.vue+cesium: 实现大雾效果
https://dajianshi.blog.csdn.net/article/details/136451486
三、Cesium 入门教程 -系列文章列表
- Cesium 入门教程(一):应该如何学习Cesium
- Cesium 入门教程(二):界面的基础配置
- Cesium 入门教程(三):加载不同的地图底图
- Cesium 入门教程(四):利用entity显示图形
- Cesium 入门教程(五):利用Primitive生成图形
- Cesium 入门教程(六):不同的材质设置
- Cesium 入门教程(七):加载、导出2D文件数据
- Cesium 入门教程(八):加载3D瓦片及模型
- Cesium 入门教程(九):通过鼠标绘制图形
- Cesium 入门教程(十):利用shader、后处理重构图形
- Cesium 入门教程(十一):camera相机功能展示
- Cesium 入门教程(十二):时间动画实例
- Cesium 入门教程(十三):粒子系统实例
- Cesium 入门教程(十四):鼠标键盘交互
- Cesium 入门教程(十五):插件与扩展