详解 Cesium的地形格式terrain

1 详解 Cesium .terrain 格式

在 3D 地理信息系统(GIS)和虚拟地球应用中,地形数据的处理至关重要。Cesium 作为一个强大的开源 JavaScript 库,支持多种地形数据格式,其中 .terrain 格式(量化网格)是最常用的格式之一。本文将深入解析 .terrain 格式,探讨其特点、工作原理及如何在 Cesium 中使用该格式。

生成地形工具

TilesBuilderTilesBuilder提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。

请添加图片描述

2 什么是 .terrain 格式?

.terrain 是一种专门为 Cesium 设计的地形数据格式,基于 量化网格(Quantized Mesh)技术。该格式通过将地形数据进行压缩和量化处理,大大减少了地形数据的存储空间,提升了加载和渲染性能。Cesium 使用这种格式来处理大型地形数据集,尤其是需要高效流式加载的地形切片(Tiles)。

3 量化网格(Quantized Mesh)简介

量化网格是一种高效的地形数据存储方式,它将地形高度数据(如 DEM 或数字高程模型)进行空间分割,将高程值通过量化压缩到较小的整数范围。这样做的好处是,减少了数据存储的大小,提升了处理速度。量化网格利用层次化的切片结构,使得系统可以根据用户的视图动态加载需要的地形部分。

请添加图片描述

3.1.terrain 格式的特点
  1. 高效的存储方式
    .terrain 格式通过量化和压缩技术将地形数据存储为二进制文件,使得大规模的地形数据能够高效地存储和传输。相比传统的地形数据格式(如高度图),.terrain 格式的文件体积较小,加载速度较快。

  2. 层次化切片结构
    .terrain 格式的数据被分成多个切片(tiles),每个切片代表地球表面某个区域的地形数据。每个切片的数据进一步被细分为更小的网格,每个网格包含多个地形点。切片的层次结构确保了在不同的缩放级别下,Cesium 只加载与视图相关的切片,进一步提高了性能。

  3. 适用于大规模数据集
    量化网格支持大范围、高精度的地形数据,例如,全球范围内的地形数据或某个大区域的详细地形模型。由于数据被切分为多个小块,它能够在不同的分辨率下进行渲染,适应不同级别的视图需求。

  4. 支持动态加载和流式传输
    .terrain 格式支持按需加载数据。这意味着当用户缩放或平移地图时,Cesium 会根据视图位置和缩放级别动态加载相应的地形切片,无需一次性加载整个地形数据集,从而减少了初始加载时间和内存占用。

3.2.terrain 格式的工作原理
  1. 地形数据的切片
    .terrain 格式通过将大范围的地形数据分割为许多小块(即切片),每个切片包含一个固定区域的地形数据。每个切片都有不同的细节级别(LOD,Level of Detail),当用户视角距离地形较近时,Cesium 会加载更高分辨率的切片;当视角较远时,加载较低分辨率的切片。
  2. 量化和压缩
    在每个切片内,地形高度值(如DEM数据)通过量化压缩为整数值,减小了数据的存储和传输开销。量化过程通常会使地形精度有所降低,但这种精度损失在大多数应用场景下是可以接受的,尤其是在大范围的地形渲染中,地形细节不会因为量化而明显丧失。
  3. 切片的传输和渲染
    Cesium 在客户端通过 TerrainProvider 来请求和加载 .terrain 文件中的切片数据。当用户浏览地图时,Cesium 会根据视图范围请求适当的切片进行渲染。随着用户视角的变化,Cesium 会动态加载新的切片,并卸载不再需要的切片,从而实现高效的地形加载。

4 Cesium .terrain 格式的二进制文件结构

Cesium 的 .terrain 格式是基于 量化网格(Quantized Mesh) 技术的,采用了一种高效的二进制文件结构来存储地形数据。这个结构通过将高程数据进行量化和压缩,使得数据体积大大缩小,同时确保渲染性能。

了解 .terrain 文件的二进制结构对于深度定制 Cesium 地形加载和理解底层实现是非常重要的。以下将详细解析 .terrain 格式的二进制文件结构。

4.1 .terrain 文件的整体结构

Cesium .terrain 文件的结构通常包括以下几个主要部分:

  1. 头部(Header)
  2. 切片信息(Tile Data)
  3. 顶点数据(Vertex Data)
  4. 索引数据(Index Data)
  5. 其他附加数据(如颜色、纹理、属性数据等)
4.1.1 头部(Header)

头部包含文件的基本信息,如瓦片的中心位置、海拔范围、包围球信息以及地平线遮挡点的坐标。

头部结构
struct QuantizedMeshHeader {
    double CenterX;  // 瓦片的中心点在地心固定坐标系中的 X 坐标。
    double CenterY;  // 瓦片的中心点在地心固定坐标系中的 Y 坐标。
    double CenterZ;  // 瓦片的中心点在地心固定坐标系中的 Z 坐标。
    float MinimumHeight;  // 瓦片区域内的最小高度。
    float MaximumHeight;  // 瓦片区域内的最大高度。
    double BoundingSphereCenterX;  // 瓦片的包围球中心点的 X 坐标。
    double BoundingSphereCenterY;  // 瓦片的包围球中心点的 Y 坐标。
    double BoundingSphereCenterZ;  // 瓦片的包围球中心点的 Z 坐标。
    double BoundingSphereRadius;  // 包围球的半径(单位:米)。
    double HorizonOcclusionPointX;  // 地平线遮挡点的 X 坐标(地心固定坐标系)。
    double HorizonOcclusionPointY;  // 地平线遮挡点的 Y 坐标。
    double HorizonOcclusionPointZ;  // 地平线遮挡点的 Z 坐标。
};
4.1.2 顶点数据(Vertex Data)

每个地形切片的顶点数据包含了地形的高度信息。Cesium 将地形分成多个网格,每个网格包含一个高度值。为了减少文件大小,Cesium 使用量化和压缩方法对高度数据进行处理。

顶点数据结构
  • 顶点数据包含描述瓦片三角网格中顶点位置的坐标和高度信息。顶点的坐标和高度值通过增量编码和 ZigZag 编码方式进行存储,以减少所需存储空间。

    顶点数据的结构如下:

    struct VertexData {
        unsigned int vertexCount;  // 顶点数量。
        unsigned short u[vertexCount];  // 水平方向坐标(经度)。
        unsigned short v[vertexCount];  // 垂直方向坐标(纬度)。
        unsigned short height[vertexCount];  // 顶点高度。
    };
    
    • uvheight 数组分别表示顶点的经度、纬度和高度。
    • 这些值使用 ZigZag 编码进行存储,以便高效表示小整数。

    解码这些数组的 JavaScript 示例代码如下:

    var u = 0, v = 0, height = 0;
    
    function zigZagDecode(value) {
        return (value >> 1) ^ (-(value & 1));
    }
    
    for (i = 0; i < vertexCount; ++i) {
        u += zigZagDecode(uBuffer[i]);
        v += zigZagDecode(vBuffer[i]);
        height += zigZagDecode(heightBuffer[i]);
    
        uBuffer[i] = u;
        vBuffer[i] = v;
        heightBuffer[i] = height;
    }
    

    每个解码后的 uv 值表示瓦片相对于边缘的水平和垂直位置,而 height 则表示该顶点的海拔。

4.1.3 索引数据(Index Data)

索引数据用于表示如何连接地形网格的顶点。Cesium 将每个切片的顶点数据分成三角形网格,这些三角形通过索引来定义。

索引数据结构
  • 索引数据定义了顶点如何连接成三角形。每个三角形由三个顶点组成,顶点通过索引连接。若瓦片包含超过 65536 个顶点,则使用 IndexData32 结构编码索引数据,否则使用 IndexData16 结构。

示例索引数据结构:

struct IndexData16 {
    unsigned int triangleCount;  // 三角形数量。
    unsigned short indices[triangleCount * 3];  // 构成三角形的顶点索引。
};

struct IndexData32 {
    unsigned int triangleCount;  // 三角形数量。
    unsigned int indices[triangleCount * 3];  // 构成三角形的顶点索引。
};
4.1.4 边缘索引(Edge Indices)

边缘索引用于描述瓦片边缘上的顶点,这些顶点对邻接瓦片的无缝连接非常重要。边缘索引分为两种类型:

  • 16 位边缘索引:适用于顶点数量小于 65536 的瓦片。
  • 32 位边缘索引:适用于顶点数量超过 65536 的瓦片。
struct EdgeIndices16 {
    unsigned int westVertexCount;
    unsigned short westIndices[westVertexCount];
    unsigned int southVertexCount;
    unsigned short southIndices[southVertexCount];
    unsigned int eastVertexCount;
    unsigned short eastIndices[eastVertexCount];
    unsigned int northVertexCount;
    unsigned short northIndices[northVertexCount];
};

struct EdgeIndices32 {
    unsigned int westVertexCount;
    unsigned int westIndices[westVertexCount];
    unsigned int southVertexCount;
    unsigned int southIndices[southVertexCount];
    unsigned int eastVertexCount;
    unsigned int eastIndices[eastVertexCount];
    unsigned int northVertexCount;
    unsigned int northIndices[northVertexCount];
};

这些边缘索引能够帮助渲染过程中处理瓦片之间的接缝,尤其是在拼接不同层次的瓦片时,避免出现可见的缝隙。

4.1.5 可选扩展(Optional Extensions)

Quantized Mesh 格式支持扩展,允许为地形数据增加额外的信息,例如每个顶点的法线、海岸线水域数据、或瓦片的元数据。扩展数据以特定的结构格式追加到瓦片文件的末尾:

  • 扩展类型包括:
    • Oct-Encoded Per-Vertex Normals:每个顶点的法线,用 16 位编码表示。
    • Water Mask:用于表示瓦片中的水域(0 表示陆地,255 表示水域)。
    • Metadata:附加的 JSON 元数据,描述瓦片的其他信息
struct ExtensionHeader {
    unsigned char extensionId;  // 扩展的唯一标识符。
    unsigned int extensionLength;  // 扩展数据的长度。
};
4.2 二进制结构总结

以下是 .terrain 文件典型二进制结构的详细,包含字段和对应的字节数:

结构字段类型字节数说明
1. 头部信息 (QuantizedMeshHeader)CenterXdouble8 bytes瓦片中心的地心固定坐标系 X 坐标
CenterYdouble8 bytes瓦片中心的地心固定坐标系 Y 坐标
CenterZdouble8 bytes瓦片中心的地心固定坐标系 Z 坐标
MinimumHeightfloat4 bytes瓦片区域的最小高度
MaximumHeightfloat4 bytes瓦片区域的最大高度
BoundingSphereCenterXdouble8 bytes包围球中心的 X 坐标
BoundingSphereCenterYdouble8 bytes包围球中心的 Y 坐标
BoundingSphereCenterZdouble8 bytes包围球中心的 Z 坐标
BoundingSphereRadiusdouble8 bytes包围球的半径
HorizonOcclusionPointXdouble8 bytes地平线遮挡点的 X 坐标
HorizonOcclusionPointYdouble8 bytes地平线遮挡点的 Y 坐标
HorizonOcclusionPointZdouble8 bytes地平线遮挡点的 Z 坐标
2. 顶点数据 (VertexData)vertexCountunsigned int4 bytes顶点数量
u[vertexCount]unsigned short[]2 bytes/值顶点的水平坐标(经度),每个顶点 2 字节
v[vertexCount]unsigned short[]2 bytes/值顶点的垂直坐标(纬度),每个顶点 2 字节
height[vertexCount]unsigned short[]2 bytes/值顶点的高度,每个顶点 2 字节
3. 索引数据 (Index Data)triangleCountunsigned int4 bytes三角形的数量
indices[triangleCount * 3]unsigned short[] (16位)2 bytes/索引16 位的三角形顶点索引,每个索引 2 字节
indices[triangleCount * 3]unsigned int[] (32位)4 bytes/索引32 位的三角形顶点索引,每个索引 4 字节
4. 边缘索引 (Edge Indices)westVertexCountunsigned int4 bytes西边顶点数量
westIndices[westVertexCount]unsigned short[] (16位)2 bytes/索引西边顶点索引,每个索引 2 字节
southVertexCountunsigned int4 bytes南边顶点数量
southIndices[southVertexCount]unsigned short[] (16位)2 bytes/索引南边顶点索引,每个索引 2 字节
eastVertexCountunsigned int4 bytes东边顶点数量
eastIndices[eastVertexCount]unsigned short[] (16位)2 bytes/索引东边顶点索引,每个索引 2 字节
northVertexCountunsigned int4 bytes北边顶点数量
northIndices[northVertexCount]unsigned short[] (16位)2 bytes/索引北边顶点索引,每个索引 2 字节
5. 扩展数据 (Extension Data)extensionIdunsigned char1 byte扩展标识符
extensionLengthunsigned int4 bytes扩展数据长度
扩展数据示例OctEncodedVertexNormalsunsigned char[]2 bytes/值每个顶点的法线(16 位 xy 编码),每个法线 2 字节
WaterMaskunsigned char[256 * 256]256 * 256 bytes水域掩模数据,0 为陆地,255 为水域,256x256 像素,每个像素 1 字节
Metadataunsigned int, char[]4 bytes + jsonLength存储元数据的 JSON 数据,JSON 长度为 jsonLength,4 字节用于存储 JSON 长度,后跟 JSON 数据

5.如何在 Cesium 中使用 .terrain 格式

在 Cesium 中,.terrain 格式的地形数据通常通过 CesiumTerrainProvider 来加载。这个提供者可以连接到远程的 Cesium 服务器或加载本地的 .terrain 文件。以下是如何在 Cesium 中加载 .terrain 数据的示例代码:

// 创建Cesium Viewer
const viewer = new Cesium.Viewer('cesiumContainer', {
    terrainProvider: Cesium.createWorldTerrain() // 使用Cesium官方的地形服务
});

// 设置本地地形数据
const terrainProvider = new Cesium.CesiumTerrainProvider({
    url : './path/to/terrain'  // .terrain文件所在的路径
});

viewer.terrainProvider = terrainProvider;

在这个示例中,Cesium.createWorldTerrain() 是 Cesium 提供的默认地形服务,它使用 .terrain 格式的数据。你也可以使用本地的 .terrain 文件,或者通过指定 URL 来加载自定义的地形数据。

.terrain 格式的应用场景

  1. 全球地形渲染
    .terrain 格式非常适合处理全球范围的地形数据。通过量化网格技术,Cesium 可以在不牺牲性能的情况下展示全球地形,支持流式加载不同区域的地形数据。

  2. 高精度地形建模
    对于需要高精度地形细节的应用,例如城市建模、灾难模拟、科学可视化等,.terrain 格式提供了有效的存储和加载机制,可以在保证性能的前提下,展示高质量的地形数据。

  3. 地理信息系统(GIS)
    .terrain 格式适用于大规模地理信息系统中的地形数据展示。例如,城市规划、环境监测和交通模拟等领域的 GIS 应用可以从中受益。

总结

Cesium 的 .terrain 格式(量化网格)是一个高效的地形数据存储和加载解决方案。通过量化压缩、层次化切片和动态加载等技术,它能够处理大规模地形数据,并保证高效的加载和渲染性能。对于需要全球范围或大区域、高精度地形数据的应用,.terrain 格式提供了理想的支持。

随着 Cesium 的发展,.terrain 格式将继续在地理信息系统、3D 地图和虚拟现实等领域发挥重要作用。了解和掌握 .terrain 格式的使用,可以帮助开发者更好地构建高效的地形渲染应用,提升用户体验。

生成地形工具

TilesBuilderTilesBuilder提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。

请添加图片描述

相关推荐

探索 Cesium 的未来:3D Tiles Next 标准解析

是由 Cesium 和其他合作伙伴共同推动的全新 3D 空间数据标准,是对传统 3D Tiles 格式的升级和扩展。它旨在支持更高效的渲染、更丰富的应用场景以及更强的数据可扩展性。通过对 3D Tiles 的性能优化和灵活性增强,3DTiles Next 将大大提升大规模三维数据的存储、传输与渲染效率,满足未来更为复杂的空间数据需求。3D Tiles Next 标准的出现标志着 Cesium 在大规模三维数据渲染领域迈出了重要一步。

ismartcube的博客 1871

优化你的 3D Tiles:性能与质量的平衡

优化 3D Tiles 是一个不断权衡的过程,需要在性能与质量之间找到平衡点。通过合理的数据组织、高效的压缩技术、智能的渲染策略和用户体验优化,可以显著提升三维场景的交互性和流畅性。希望本文提供的技巧能帮助你更好地掌控 3D Tiles 的优化,创造出令人惊叹的三维应用场景。

ismartcube的博客 1915

Cesium PBR增强(一)

Cesium 1.123的更新引入了一种全新的“程序化”光照系统,基于 CesiumJS 的图像基照明(Image-Based Lighting,IBL)方法,旨在显著提升默认光照环境的真实感和视觉质量。通过动态生成环境贴图和相关光照值,该系统能够实时响应场景中的位置和光源变化,为模型和 3D 瓦片(3D Tilesets)提供更加真实的渲染效果。

ismartcube的博客 1842

Cesium 给大量建筑贴上PBR纹理

是一个非常强大的工具,它能够将SHP文件中的建筑物数据转化为3D Tiles格式,并支持贴上PBR纹理。通过合理的配置和优化,你可以在Cesium中高效地展示大量带有PBR纹理的建筑物模型,并确保在不同设备上都能获得流畅的渲染体验。

ismartcube的博客 1871

Cesium 实例化绘制教程

实例化绘制是一种 GPU 渲染技术,它允许在一次绘制调用中渲染多个对象,而无需为每个对象单独发起绘制调用。每个实例可以共享同一个几何形状,同时具有各自独立的变换(位置、旋转、缩放)和属性。在 Cesium 中,这种技术被用于优化大量同类图元(如箱体、圆柱、球体等)的绘制。Cesium 的和提供了对实例化的支持。实例化绘制是提升 Cesium 性能的重要技术,尤其适用于大规模场景中渲染重复几何体的需求。通过合理使用和Primitive,不仅能有效提高渲染效率,还能保持良好的用户体验。

ismartcube的博客 1621

Cesium Primitive 旋转、缩放与移动操作

通过使用Matrix4变换矩阵,Cesium 提供了强大的工具来旋转、缩放和移动Primitive对象。旋转:使用Matrix3或Matrix4的旋转函数来创建旋转矩阵。缩放:使用来创建缩放矩阵。平移:使用来创建平移矩阵。组合变换:通过将多个变换矩阵组合在一起,按顺序应用到物体上。这些变换操作可以帮助开发者灵活地控制和展示 3D 地图上的物体,提升用户体验。提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。

ismartcube的博客 1799

Cesium 获取某点地形高度

是一个用于获取多个地理位置精确地形高度的函数,非常适合用于需要高精度地形数据的场景。它通过提供对地形数据源的精确访问,帮助开发者实现更精细的地理信息分析。提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。

ismartcube的博客 3084

Cesium 当前位置矩阵的获取

在 Cesium 中,获取位置矩阵是一个关键步骤,通常用于将物体从地球的经纬度坐标转换为三维场景中的位置。通过上述步骤,我们可以根据地球上的经纬度坐标生成对应的变换矩阵,并使用该矩阵进行坐标转换。Cesium 提供了强大的 API,帮助开发者轻松处理地球坐标系到世界坐标系的转换,极大地方便了 3D 地图和地理信息系统的开发。Cesium 提供了强大的 API 来处理这些坐标系之间的转换,最常用的转换方法是将经纬度转换为。,它返回的是一个 4x4 矩阵,表示从 ENU 坐标系到 ECEF 坐标系的转换。

ismartcube的博客 1291

Cesium CZML绘制Entity

Cesium 提供了一个强大的API,支持渲染地球、地图以及许多地理空间数据,适用于实时数据可视化、地理信息系统(GIS)和航天工程等领域。Entity 是Cesium中的基本绘制单元,表示场景中的一项物体,可以是点、线、面,甚至是更复杂的 3D 模型或路径。通过 CZML 文件,你可以以时间序列的形式描述Entity的属性,如位置、颜色、大小等。通过使用CZML格式,Cesium能够高效地渲染复杂的时间序列数据,使得地理空间可视化更加生动和富有表现力。

ismartcube的博客 1436

Cesium 绘制大长度线时避免变成弧线

在 Cesium 中,ArcType是一个枚举类型,定义了线段(Polyline)的绘制方式。(默认):默认的弧线类型,绘制的是大圆弧线,即最短路径的弯曲线路。:绘制的是等航线(Rhumb Line),是一种恒定角度的路径,适用于航海和航空等场景。:不使用弧线,而是直接绘制两点之间的直线,忽略地球的曲率。在 Cesium 中,使用ArcType设置可以灵活控制如何绘制两点之间的线段。通过设置为,可以避免大长度线段变成弯曲的弧线,直接绘制直线,特别适用于需要精确表示两点直线连接的场景。相反,使用或。

ismartcube的博客 1791

Cesium 动态 Polygon 编写教程(使用 Primitive)

Cesium 是一个功能强大的 3D 地球引擎,提供了多种可视化方式,包括纹理、地形、矢量图层等。Cesium 支持 WebGL,可以在现代浏览器中运行。

ismartcube的博客 1839

Cesium K-means自动聚合点的原理

在 Cesium 中,K-means 聚类可以用来自动将密集的地理坐标点聚合成较少的代表性点,减少需要渲染的点数,提高性能并改善用户体验。具体来说,Cesium 使用 K-means 聚类算法将地理坐标点聚合成多个代表性的点,渲染时只显示聚合后的结果,从而提高浏览器的渲染效率。每个聚合点代表该簇内的所有点的“中心”,使得聚合后的点比原始点集合更少,同时保留了大部分的空间分布信息。在聚合点的渲染过程中,Cesium 可以提供交互功能,允许用户点击或鼠标悬停在某个聚合点上时,展示该点代表的原始数据。

ismartcube的博客 1055

cesium体渲染概述(一)

初始化与着色器更新:检查并初始化来自 provider 的数据,并更新自定义着色器。形状更新与检查:检查和更新体素形状、变换及边界框。遍历更新:更新遍历信息,判断是否需要重新渲染。调试绘制与裁剪:在调试模式下绘制边界框,并根据 NDC 空间的 AABB 判断对象是否超出视口。计算与更新渲染矩阵:更新视图和投影矩阵、方向矩阵、摄像机矩阵等。选择并推送渲染命令:根据渲染模式选择合适的绘制命令并推入渲染命令队列。Cesium中的体渲染是一个复杂但高度优化的过程,涉及从数据加载到渲染命令生成的各个环节。

ismartcube的博客 2348

Cesium RTree空间索引建立

RTree是一种非常有效的空间数据索引结构,能够处理大规模空间数据并支持高效的查询操作。通过将空间对象的包围盒组织成树形结构,RTree可以大幅提高范围查询和邻近查询的性能。在Cesium中,RTree可以作为空间索引的一部分,用于加速地理数据的查询,尤其是在处理大量的三维模型和地理信息时。通过在Cesium中实现RTree,开发者可以显著提高地理数据查询的效率,改善用户体验。提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。

ismartcube的博客 1040

Cesium 后处理组合

Cesium 的后处理是通过机制实现的。一个是后处理效果的基本单元,它允许你在渲染管线中插入自定义的后处理操作。这些效果可以通过创建一个后处理阶段来实现,然后将其添加到中。纹理输入:后处理阶段的输入纹理,通常是场景的渲染结果。着色器:后处理阶段的核心部分,定义了如何处理输入纹理。混合模式:控制输入和输出的图像如何结合。通过组合多个后处理阶段,开发者可以创建丰富的视觉效果。

ismartcube的博客 1150

Cesium 自定义 Primitive 的实现与应用

Cesium 是一个强大的开源 3D 地球引擎,提供了高度可定制化的功能,用于显示地图、地理空间数据以及 3D 模型等。在 Cesium 中,Primitive是一个关键概念,它代表了对一个图形或地理对象的低级描述。默认的Primitive主要用于绘制标准几何体,如立方体、球体等,但 Cesium 还允许用户创建自定义Primitive,以满足复杂或特殊的需求。本文将介绍如何在 Cesium 中创建和使用自定义Primitive,以及一些实际应用场景。

ismartcube的博客 1598

体积云Shader编写思路

体积云的Shader编写涉及云层密度和法线的计算、光线步进、光照与阴影的处理以及透明度和颜色的合成。通过合理的步进和优化策略,能够实现真实而动态的云层效果。核心是通过不断步进计算每个点的密度和光照,逐步得到整体云层的表现。提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。

ismartcube的博客 1517

3D Tiles 之 Geometry Error 介绍

在 3D Tiles 数据格式中,几何错误(Geometry Error)是指由于几何体简化或分块(tiles)处理过程中,产生的可视差异。简而言之,几何错误是表示某个 Tile 的简化几何体与其源几何体之间的偏差,这种偏差通常会影响渲染效果。屏幕空间误差(Screen-Space Error, SSE)。提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。屏幕空间误差(SSE)是一种评估和度量3D Tiles 中几何简化的有效性和准确性的方法。

ismartcube的博客 1547

cesium特效扩散圆

今天主要和大家介绍一下cesium中怎么实现一个扩散圆的效果!

ismartcube的博客 764

3DTiles之使用customShader调整风格

允许你选择不同的光照模型。或者,你也可以选择 UNLIT 渲染,这样模型就没有光照效果。

ismartcube的博客 1878

如何编译 Cesium 源码

通过以上步骤,您可以成功地从 GitHub 上下载 Cesium 源代码并在本地进行编译。对于开发人员来说,编译 Cesium 源码有助于定制功能,或者调试某些问题。如果您只是想使用 Cesium 进行开发,而不需要编译源代码,您也可以直接从 CDN 或下载预构建版本进行使用。编译的 Cesium 版本可以直接在您的应用中引用,或者部署到 Web 服务器上,供其他用户访问。提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。

ismartcube的博客 1919

cesium 3DTiles之pnts格式详解

点云(Point Cloud)瓦片格式用于高效流式传输大规模点云数据,常用于 3D 可视化中。每个点由位置(Position)和可选的属性定义,这些属性用来描述点的外观(如颜色、法线等)或应用特定的元数据。在 3D Tiles 的术语中,每个点被称为一个“特征”(Feature)。Point Cloud 瓦片本身是一个二进制块,采用小端字节序(Little Endian)。

ismartcube的博客 2232

3DTiles之i3dm介绍

3D Tiles 是一种用于高效存储和传输三维城市、建筑、地形、点云等空间数据的开放标准格式。i3dm(Intel 3D Model)是 3D Tiles 中用于表示三维模型(如建筑物或其他对象)的一个子格式。i3dm 格式的出现,解决了大规模三维城市数据传输和渲染的性能瓶颈问题,使得开发者能够更加高效地展示和处理这些复杂的三维数据。本文将详细介绍 i3dm 格式的基本结构、特性、应用场景以及与其他 3D Tiles 格式的关系。

ismartcube的博客 1848

3DTiles之cmpt介绍

3D Tiles是一个用于表示大规模 3D 地理空间数据的开放格式,它能够高效地处理和呈现地理空间场景中的各种复杂对象,如城市建模、地形和其它 3D 数据。为了进一步优化数据流式传输并支持异构数据集的结合,3D Tiles 引入了复合瓦片(Composite Tile,简称cmpt格式。该格式使得不同类型的瓦片可以组合成一个复合瓦片,从而减少请求次数并优化数据加载策略。提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。

ismartcube的博客 1774

3DTiles快速入门

3DTiles是一种针对大规模三维场景的优化格式,主要用于存储和传输高效的3D模型数据。建筑物:包括建筑的几何形状、纹理、材质等。地形数据:高精度的地形数据可以帮助提供更真实的虚拟世界。点云数据:如激光雷达(LiDAR)扫描数据,能够精确描述现实世界的几何形态。3D城市模型:高效存储大型城市区域的3D模型。3DTiles使用层级的方式组织数据,按需加载不同分辨率的瓦片,能够有效避免一次性加载大量数据带来的性能瓶颈。

ismartcube的博客 1867

3DTiles之b3dm介绍

b3dm(Binary 3D Model)文件是3DTiles标准中的一种用于存储三维模型的二进制格式。它的设计目的是为了高效地存储和传输包含几何数据、纹理、材料等内容的3D模型,特别适用于大规模的三维城市建模和地理信息系统(GIS)应用。与传统的基于文本的3D格式(如OBJ、FBX等)相比,b3dm文件提供了更加高效的存储和渲染性能,特别是在处理大量复杂数据时,能够显著减少加载时间和内存使用。b3dm文件是3DTiles标准中的一种重要格式,专为大规模的三维模型设计,能够高效地存储、传输和渲染3D数据。

ismartcube的博客 3325

如何在 Cesium 中批量种树(i3dm 转换)

在三维 GIS 可视化中,使用 Cesium 批量种树是一种常见的场景应用。例如,在数字城市项目中,需要在大面积区域内高效地展示树木。然而,由于树木数量巨大,直接加载单个树模型会导致性能问题。因此,使用 i3dm (Instanced 3D Model) 格式可以极大地提高渲染效率。本文将详细介绍如何在 Cesium 中通过 i3dm 转换实现批量种树。

ismartcube的博客 821

SHP转3D Tiles并在Cesium中加载

在三维地理信息系统(3D GIS)中,使用3D Tiles格式来展示大规模的地理数据已经成为一种标准。3D Tiles的主要优势在于其针对大数据量的高效存储和传输方式,适合在浏览器端展示复杂的三维场景。而SHP(Shapefile)作为传统的GIS数据格式,通常用于存储矢量地理数据。本文将介绍如何将SHP格式的数据转换为3D Tiles格式,并在Cesium中进行加载和展示。

ismartcube的博客 2260

生成Cesium地形数据

在地理信息系统(GIS)领域,地形数据的生成是构建三维地球应用的关键步骤。本文将介绍如何使用自定义开发的转换器软件,将高程数据转换为Cesium可用的地形格式。

ismartcube的博客 577

Cesium之Shader简介

Cesium 是一个强大的开源 JavaScript 库,广泛用于创建3D地球和地图应用。其图形渲染能力依赖于 WebGL,Shader 在这一过程中起着至关重要的作用。本文将对 Cesium 中的 Shader 进行简要介绍,包括其基本概念、类型以及在 Cesium 中的应用。在 Cesium 中,开发者可以通过自定义 Shader 来实现特定的视觉效果。创建着色器代码:编写顶点着色器和片段着色器的 GLSL 代码。将着色器附加到材质。

ismartcube的博客 908
上一篇: Cesium 自定义 Primitive 的实现与应用
下一篇: Cesium 后处理组合
智方科技
智方科技 三维图形技术、三维GIS引擎软件 三维图形技术、三维GIS引擎软件
博客等级 码龄4年 3037粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值