免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

CesiumJS 体素渲染怎么做?5 分钟让体数据动起来

CesiumJS 体素渲染怎么做?5 分钟让体数据动起来 CesiumJS 体素渲染怎么做5 分钟让体数据动起来【免费下载链接】cesiumAn open-source JavaScript library for world-class 3D globes and maps :earth_americas:项目地址: https://gitcode.com/GitHub_Trending/ce/cesiumCesiumJS 的体素渲染Voxel Rendering可以把 CT、地质网格这类体积数据直接画进三维地球场景不用手写 WebGL几行代码即可出效果。先说清楚它解决什么问题传统三维渲染只画表面而体素渲染把数据当成一个个三维小方块体素voxel逐点存储、逐点采样直接呈现内部结构。就像看蛋糕表面网格只给你看外壳体素渲染则能把每一层的夹心切开给你看。它的核心是一条跑在 GPU 上的光线步进ray marching管线从相机视线出发在体数据里逐点采样合成颜色和透明度。CesiumJS 用VoxelPrimitive体素图元封装了这条管线你只需要提供数据和一个 provider。5 分钟上手路径准备什么数据体素数据有两种来源3D Tiles 数据集仓库自带示例在Apps/SampleData/Cesium3DTiles/Voxel/包含 Box、Cylinder、Ellipsoid 三套 tileset入口都是tileset.json程序生成数据自定义一个VoxelProvider实现requestData把属性打包成 TypedArray 后用VoxelContent.fromMetadataArray返回。最小可运行示例用仓库示例数据只需一个 provider 加一个图元const provider await Cesium.Cesium3DTilesVoxelProvider.fromUrl( SampleData/Cesium3DTiles/Voxel/VoxelBox3DTiles/tileset.json ); viewer.scene.primitives.add( new Cesium.VoxelPrimitive({ provider }) ); viewer.camera.flyToBoundingSphere(provider.boundingSphere);看到什么效果一个半透明的体积块出现在地球上空可自由旋转、缩放、切片观察内部。想换风格时给VoxelPrimitive传一个CustomShader在片元着色器里通过fsInput.metadata读属性例如用透明度通道按行进距离做指数衰减就能模拟光散射的体积雾效果。写法可参考packages/sandcastle/gallery/voxels/示例。参数速查VoxelPrimitive 与 Provider 关键配置参数所属作用建议值 / 说明providerVoxelPrimitive数据来源Cesium3DTilesVoxelProvider或自定义实现shapeProvider体数据形状控制网格如何映射到三维空间BOX/ELLIPSOID/CYLINDERminBounds/maxBoundsProvider体积的边界物理单位值非形状空间值dimensionsProvider每个瓦片的体素个数示例用 8×8×8、4×4×4越小越流畅paddingBefore/paddingAfterProvider瓦片四周冗余采样多瓦片数据集设 1避免接缝采样断裂availableLevelsProvider层级深度超出层级时requestData返回 rejectcustomShaderVoxelPrimitive用着色器控制颜色与透明度不传则按 metadata 类型走默认着色nearestSamplingVoxelPrimitive最近邻采样边界更锐利色块数据置true连续数据保持默认modelMatrixVoxelPrimitive整体变换默认单位矩阵实战避坑这些细节别踩现象体素完全没渲染控制台报上下文错误。原因体素渲染依赖 WebGL2。对策确保初始化时contextOptions里没把requestWebGl1设为true。现象体积位置或大小完全不对。原因minBounds/maxBounds已改为物理值而不是形状空间值。对策按世界坐标给边界椭球体的 z 边界记得从 0 开始往上给。现象颜色错乱、纹理偏移。原因metadata 是按 X → Y → Z 顺序平铺的一维数组长度必须严格等于dimensions.x * y * z * 通道数。对策用(z*dy y)*dx x公式核对索引多算一个体素就会全错位。现象数据边缘发虚、有毛边。原因默认线性采样把相邻体素混色了。对策对离散分类数据设置voxelPrimitive.nearestSampling true。还能组合出什么玩法地下地质体数据可视化柱状或盒状体素很适合表达钻孔柱状层和地下岩体用CYLINDER形状加自定义传输函数把深度、密度映射成颜色逐层剖开看构造。医学影像三维重建CT、MRI 天然是逐层体数据装进体素渲染后可以做 MPR 多平面切片、等值面观察灰度值直接当传输函数输入。气象网格动态展示温度、湿度这类网格场数据可以体数据流式加载配合时钟属性做时间序列动画观察锋面移动。体素相关 API 目前标注为 experimental升级 CesiumJS 版本时留意版本变更日志。想动手的话从源码 packages/sandcastle/gallery/voxels/ 这个示例读起是理解整条管线最快的入口。【免费下载链接】cesiumAn open-source JavaScript library for world-class 3D globes and maps :earth_americas:项目地址: https://gitcode.com/GitHub_Trending/ce/cesium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表