十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

3步钻入地心|用CesiumJS让WebGL地球透出地下世界的完整指南

3步钻入地心|用CesiumJS让WebGL地球透出地下世界的完整指南 3步钻入地心用CesiumJS让WebGL地球透出地下世界的完整指南【免费下载链接】cesiumAn open-source JavaScript library for world-class 3D globes and maps :earth_americas:项目地址: https://gitcode.com/GitHub_Trending/ce/cesium想让浏览器里的地球翻个面把地核直接摆在眼前CesiumJS 的 WebGL 三维地下空间可视化不用魔改渲染器Globe.translucency把地表调成半透明再关掉碰撞检测让相机穿地飞行三层椭球体就能拼出地球内部结构。整套能力就藏在三个属性里读完本文你能自己搭一个可钻地的地球。能力全景Cesium地下可视化能做什么能力对应 API典型场景矩形区域地表透明globe.translucency.rectangle只在城市上空开窗看管线按距离渐变的透明度globe.translucency.frontFaceAlphaByDistance镜头靠近洞口才变透明按颜色掩码透明imageryLayer.colorToAlpha海洋变玻璃、陆地保留相机禁碰撞地下飞行screenSpaceCameraController.enableCollisionDetection隧道、矿井内漫游椭球/盒体图元建层Entity.ellipsoid地核、地幔分层展示glTF/GLB 加载地下设施Entity.model.uri真实矿井模型仓库自带 ParcLeadMine地下背景色globe.undergroundColor地底空间压暗提对比3D Tiles 流式加载Cesium3DTileset海量地下 BIM 分块加载三步克隆并启动Cesium开发环境git clone https://gitcode.com/GitHub_Trending/ce/cesium拿到源码。clone 下来的仓库自带 Sandcastle 在线示例平台本文所有代码都来自其中的现成示例。cd cesium npm install装依赖。prepare脚本会自动触发gulp prepare把引擎核心构建进 Build 目录。npm start起本地服务默认 8080 端口。浏览器打开http://localhost:8080/Build/Apps/Sandcastle/index.html找 Globe Interior 示例即可看到地心视图。如果打不开先补一条npm run build-apps把演示应用也构建出来。核心机制三块API撑起整个地下视图地表为什么能变成半透明现象在 Sandcastle 点 Translucency rectangle地表一块区域变成半透明内部的红色地幔椭球直接露出来。底层Globe.translucency把地表前向面的 alpha 写进地球着色器frontFaceAlpha控制整体透明度rectangle限定生效范围。globe.translucency.enabled true; globe.translucency.frontFaceAlpha 0.25; globe.translucency.rectangle Cesium.Rectangle.fromDegrees( -120.0, 0.0, -30.0, 45.0 );坑enabled true单独改没有视觉效果。frontFaceAlpha默认就是 1.0地表跟之前一模一样必须同步把 alpha 调小。相机为什么能飞进地面以下现象视点拖到地面以下相机跟着走不再被地表推回。底层screenSpaceCameraController默认每帧做地形碰撞把相机顶在表面上。关掉它就没有推回力了。scene.screenSpaceCameraController.enableCollisionDetection false;坑关掉后没有安全网相机可以一路穿到地心甚至地球另一侧。需要自己写高度钳制比如postUpdate监听里用globe.getHeight卡最低 -1000 米。海洋为什么能单独变透明现象掩码模式下大海像玻璃、陆地保持实体海下的地下模型看得一清二楚。底层ImageryLayer.colorToAlpha把某个指定 RGB 色转成透明colorToAlphaThreshold控制容差。官方示例对着 Bing 底图的海蓝色下手。baseLayer.colorToAlpha new Cesium.Color(0.0, 0.016, 0.059); baseLayer.colorToAlphaThreshold 0.2;坑色值必须从你实际用的底图上取。换个底图还留着这组色值掩码会整体偏掉轻则漏块重则全屏透明。效果升级清单让地下场景更真更快frontFaceAlphaByDistance接NearFarScalar近处全透远处不透明镜头钻入洞穴时有自然过渡适合矿井入口globe.undergroundColor Cesium.Color.BLACK压暗地底空间半透明地表下模型的对比度立刻上来scene.fog.density加小量雾化地底长廊有纵深感适合隧道漫游new Cesium.Viewer(..., { orderIndependentTranslucency: false })关闭排序透明多层半透明不再闪跳官方示例就是这么写的调Cesium3DTileset.maximumScreenSpaceError默认 16px地下 BIM 数据量大时拉高阈值控 LOD防掉帧用磁盘缓存看加载表现Cesium 会把瓦片落盘缓存二次打开明显更快模型对不准位置时用矩阵调试手段排查先确认模型矩阵再怪坐标系坑位预警先知道这三个反直觉行为⚠️ 症状开了 translucency 地表毫无变化。 原因frontFaceAlpha默认 1.0等于没调。 解法enabled和frontFaceAlpha必须一起改再用rectangle圈范围。症状相机钻进地形就出不来了。 原因禁碰撞后没有地形推回相机停在表面内部。 解法postUpdate监听里钳制camera.positionCartographic.height下限。viewer.scene.postUpdate.addEventListener(() { const camera viewer.camera; const h globe.getHeight(camera.positionCartographic); if (h -1000) { camera.positionCartographic.height -1000; } });症状半透明图层顺序错乱、偶尔闪烁。 原因排序透明orderIndependentTranslucency对多层半透明开销大且会抖。 解法Viewer 构造时传orderIndependentTranslucency: false。延伸地图示例与源码入口packages/sandcastle/gallery/globe-interior/main.js钻地心完整示例内核对地幔三层椭球加两种透明模式照着抄最快上手packages/sandcastle/gallery/globe-translucency/main.js距离渐变透明度示例还加载了真实的 ParcLeadMine 矿井 glb 模型packages/sandcastle/gallery/underground-color/main.js地下背景色调节示例适合做对比度调优packages/engine/Source/Scene/Globe.jsGlobe 类源码translucency、undergroundColor等属性全在这里定义Documentation/Contributors/PerformanceTestingGuide/README.md官方性能测试流程地下大数据量场景照着做【免费下载链接】cesiumAn open-source JavaScript library for world-class 3D globes and maps :earth_americas:项目地址: https://gitcode.com/GitHub_Trending/ce/cesium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表