Cesium三维地形渲染

// 复制代码
viewer.terrainProvider = Cesium.createWorldTerrain({
    requestWaterMask: true,   // 请求海岸线水效果
    requestVertexNormals: true // 请求光照法线数据
});

离线地形:通过CesiumTerrainProvider加载本地切片(如CTB工具生成的terrain文件夹)

viewer.terrainProvider = new Cesium.CesiumTerrainProvider({ url: './local_terrain_tiles' }); 2.场景初始化

const 复制代码
    terrainProvider: Cesium.createWorldTerrain(),
    baseLayerPicker: false // 简化基础图层选择
});

3.地形夸张效果(可选)

viewer.scene.terrainExaggeration 复制代码

二、关键技术点

  1. 地形精度优化

LOD控制 :通过viewer.scene.globe.maxScreenSpaceError降低远距离地形精度(默认2.0,值越低越精细) 裁剪优化 :启用viewer.scene.globe.depthTestAgainstTerrain确保实体与地形精准贴合 2.地形水面融合

viewer.scene.globe.oceanNormalMapUrl 复制代码
viewer.scene.globe.enableLighting = true; // 开启光照增强立体感

3.自定义地形着色器

通过CustomShader修改地形渲染效果(如夜间热力图):

const 复制代码
    uniforms: {
        u_time: { value: 0 }
    },
    fragmentShaderText: `
        void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) {
            float height = fsInput.attributes.positionMC.z;
            material.diffuse = mix(vec3(0,0,1), vec3(1,0,0), height/1000.0);
        }`
});
viewer.scene.globe.customShaders = [terrainShader];

三、性能优化方案

策略 | 实现方式

| 地形预加载 | viewer.scene.globe.preloadSiblings = true 提前加载相邻瓦片 | | 动态分辨率适配 | viewer.scene.dynamicScreenSpaceError = true 根据帧率自动调整细节层次 | | 地形剔除优化 | viewer.scene.camera.frustumSplits = [0.01, 0.1, 0.5, 1.0] 分级裁剪远距离地形

四、常见问题解决

  • 地形闪烁问题 :
    启用viewer.scene.farToNear = true 优化深度缓冲区冲突

  • 白膜地形(无纹理) :
    检查地形服务是否包含availability属性,确保瓦片范围正确

  • 坐标偏移问题 :
    使用Cesium.Transforms.headingPitchRollToFixedFrame校正局部坐标系

    五、扩展应用

  1. 地形挖洞分析
    使用ClippingPlane切割地形剖面:
const 复制代码
viewer.scene.globe.clippingPlanes = new Cesium.ClippingPlaneCollection({ planes: [clippingPlane] });

2.动态地形修改

通过GeometryInstance实时修改地形高程:

const 复制代码
    position: Cesium.Cartesian3.fromDegrees(116.39, 39.9),
    ellipse: {
        semiMinorAxis: 5000,
        semiMajorAxis: 5000,
        height: -50 // 下压地形50米
    }
});
相关推荐
lyz24685942 分钟前
vue3页面因参数未声明而报错的常犯错误
前端·javascript·vue.js
miss2 小时前
给规则引擎加一个拖拽画布:Vue Flow 单向投影 + 布局语义分离
javascript·vue.js·canvas
溪语流沙2 小时前
Django + Vue电商项目第005讲:后端骨架|Django初始化、配置分层与DRF接入
vue.js·后端·python·django
Gu0Qiang2 小时前
从 0 到 1 打造 AI 提示流编排器:别把大模型当机械拼图!Case #7 字段冻结陷阱与代码回滚复盘(开源系列 15)
人工智能·github
u1301302 小时前
GitHub 热榜项目:日榜(2026-09-29)
github
用户837133200762 小时前
AI 写的发布流程 CI 全绿,为什么仍没通过需求验收?
ci/cd·github
miss2 小时前
从零做一个可视化规则引擎:Vue3 递归条件树 + 双引擎结果对比
前端·vue.js·typescript
SL_staff2 小时前
JVS-Rules vs Drools:金融风控团队为何转向业务可编辑的决策平台
java·spring cloud·github
天天喝旺仔2 小时前
CI/CD 实战:GitHub Actions 自动化构建、测试与发布流水线
ci/cd·自动化·github·devops·持续集成
用户83134859306983 小时前
Vue3 v-bind 使用指南,从基础到高阶
前端·javascript·vue.js