资讯详情

资讯详情

CesiumJS 地下可视化实操手册:4 步搭出透明地层

CesiumJS 地下可视化实操手册4 步搭出透明地层【免费下载链接】cesiumAn open-source JavaScript library for world-class 3D globes and maps :earth_americas:项目地址: https://gitcode.com/GitHub_Trending/ce/cesium方案评审会上你转动屏幕想展示地下 20 米的管线客户却指着黑漆漆的画面问为什么看不见。浏览器里的三维地球默认会用地形挡住镜头任何埋在地下的模型都会被地表盖住。CesiumJS 是一个用于渲染 3D 地球与地图的开源 JavaScript 库靠内置的地表半透明、地下着色和裁剪平面机制地下可视化只需要几行配置。看穿地表地下可视化能力图谱把地面调成玻璃让相机看进地下输入一个NearFarScalar近处距离、近处透明度、远处距离、远处透明度输出是一块按相机距离渐变的半透明地表。你在 800 米外看到的是正常地形飞到 400 米内时地面逐渐消失底下的管线模型直接露出来。用颜色铺满地下告别纯黑背景输入一个Color加距离渐变输出是相机进入地表下方后看到的背景色。CesiumJS 的 globe.undergroundColor 会把原本漆黑的地下空间填上任意颜色配合透明度渐变地层剖面的层次感一下就出来了。用裁剪平面把地形切成剖面输入一个ClippingPlaneCollection若干法线 距离输出是被削掉一块的地表切面边缘还能描边。想展示隧道口、矿区范围这种局部剖面时四到六个平面就能切出一个规整的盒状窗口。把屏幕一分为二地表地下同屏对照输入一个 0–1 的分割位置scene.splitPosition输出是左右两屏渲染同一场景但各自裁剪。评审时左边保留完整地表做参照右边放剖切后的地下视图客户一眼就能对上位置关系。跟着做4 步搭出可用的地下场景第 1 步让相机能沉到地表以下默认相机控制器会做碰撞检测碰到地形就走不动。关掉它相机才能往地下俯冲const viewer new Cesium.Viewer(cesiumContainer, { terrain: Cesium.Terrain.fromWorldTerrain(), }); // 允许相机穿过地形 viewer.scene.screenSpaceCameraController.enableCollisionDetection false;做完后滚轮下推视角应该能一直压到地面以下而不被顶住。第 2 步调出半透明地面放进地下模型透明度按距离线性变化远处保持正常地形、近处透出地下内容模型用负高度放到地下const globe viewer.scene.globe; // 400m 内全透明800m 外完全不透明 globe.translucency.frontFaceAlphaByDistance new Cesium.NearFarScalar( 400, 0.0, 800, 1.0 ); // 管线模型放在地下 200 米 viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(-3.83, 53.12, -200), model: { uri: models/pipeline.glb }, });做完后从高空俯冲地面会先变透明随后露出你的模型。第 3 步给地下铺一层背景色相机一旦进入地表以下没有背景色就是一整片黑。两行配置补上// 地下背景色 按距离的透明度渐变 globe.undergroundColor Cesium.Color.LIGHTSLATEGRAY; globe.undergroundColorAlphaByDistance new Cesium.NearFarScalar( 1000, 0.0, 1000000, 1.0 );做完后视角穿入地下看到的是一片柔和的灰蓝而不是黑洞。第 4 步用裁剪平面切出剖面窗口想要规整的盒子剖面给地表挂上裁剪平面并开启背脸剔除和裙边globe.depthTestAgainstTerrain true; globe.clippingPlanes new Cesium.ClippingPlaneCollection({ planes: [ new Cesium.ClippingPlane(new Cesium.Cartesian3(1, 0, 0), -700), new Cesium.ClippingPlane(new Cesium.Cartesian3(0, 1, 0), -700), ], edgeWidth: 1.0, edgeColor: Cesium.Color.WHITE, });做完后指定区域的地表被削掉切面带白色描边地下模型完整暴露。踩坑地图地下渲染高频问题速查相机下潜时卡在地表越压越弹回来现象滚轮往下推视角刚贴地就被弹回。根因碰撞检测默认开启相机高度被钳制在地表之上。解法scene.screenSpaceCameraController.enableCollisionDetection false;钻到地下后一片纯黑模型像悬在虚空中现象视角穿过地表后背景全黑看不清模型和地层的相对位置。根因没设置地下背景色WebGL 清屏色透了出来。解法globe.undergroundColor Cesium.Color.LIGHTSLATEGRAY;大面积地形反复加载进地下时卡顿掉帧现象大范围下潜时画面一顿一顿首次加载特别慢。根因地形瓦片走网络请求且没有命中本地缓存每帧都在等瓦片。解法开启 Cesium 的瓦片缓存见 性能测试指南。剖切边缘出现锯齿和破面现象裁剪平面切出的地表边缘参差甚至露出地形瓦片的背面。根因背脸剔除和裙边没开切面处瓦片边缘裸露。解法globe.backFaceCulling true; globe.showSkirts true;往上走进阶方向与源码入口剖切 半透明组合出分层地层效果单独用裁剪平面只能切一个窗口把translucency的透明度按距离拉开再叠加裁剪就能做出近处剖切、远处半透明的地层分层展示。相关交互逻辑可参考 splitdirection 示例其中滑杆驱动scene.splitPosition的写法可以直接搬到剖面工具里。给地下模型换材质、加高亮模型进场景后走的是 Model 的管线分级pipeline stages颜色、透明度、自定义着色器都挂在上面。要改管线行为入口在 packages/engine/Source/Scene/Model/里面每个*PipelineStage.js都是可单独观察的渲染环节。深究半透明与裁剪的实现细节地表半透明和裁剪平面的核心状态分别落在 GlobeTranslucency.js 和 Globe.js搜索clippingPlanes即可定位赋值链对应着色器逻辑在 packages/engine/Source/Shaders/GlobeFS.glsl。对照这三处读一遍能搞清透明度渐变和裁剪边描边是怎么在片元着色器里合成的。一句话带走下一步行动清单地下可视化的核心就三条关碰撞、地表半透明、裁剪切剖面。透明地表 地下模型完整示例translucency与NearFarScalar的标准用法地下背景色示例undergroundColor和距离透明度的调参面板地形裁剪平面示例盒状、多边形、区域三类剖切方案Globe 源码clippingPlanes、undergroundColor属性定义处性能测试指南地形瓦片缓存与帧率排查方法【免费下载链接】cesiumAn open-source JavaScript library for world-class 3D globes and maps :earth_americas:项目地址: https://gitcode.com/GitHub_Trending/ce/cesium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →