Cesium Terrain Builder 非压缩瓦片

本文介绍了如何修改CesiumTerrainBuilder源代码,以支持输出非压缩的瓦片数据,并允许用户指定输出的瓦片坐标范围。通过新增参数和调整函数实现这一功能,使得在不需要压缩传输时,减轻浏览器的解压负担,同时提供更灵活的数据生成选项。

Cesium Terrain Builder
输出瓦片默认是zib压缩后的,在业务中如果传输不是问题,反而增加浏览器的解压处理,希望能支持输出非压缩瓦片。
针对此需求,修改代码并重新编译。

一、代码分析

1、输出数据对象
文件格式:主要为heightmap-1.0、quantized-mesh-1.0,其类图结构如下:

  • MeshTile为quantized-mesh-1.0格式数据对象。
  • TerrainTile为heightmap-1.0格式数据对象。

在这里插入图片描述
2、瓦片生成器

  • Meshtiler 用来生成MeshTile对象。
  • TerrainTiler 用来生成TerrainTile对象。
    在这里插入图片描述

3、迭代器和序列化器
在这里插入图片描述

4、ctb-tile.exe的主要流程
在这里插入图片描述

二、功能扩展

1、增加非压缩支持。

  1. ctb-tile.cpp中TerrainBuild类,增加参数
// 内部变量
bool gzib;

// 构造函数设置默认值
gzib(false)

// 设置压缩参数
static void setGzib(command_t* command) {
   
   
 static_cast<TerrainBuild *>(Command::self(command))->gzib = true;
}
  1. ctb-tile.cpp中main函数解析参数
command.option("-G", "--gzip", "use zib compress file(defalut uncompress)", TerrainBuild::setGzib);
  1. CTBFileTileSerializer.cpp中,serializeTile函数增加zibFlag参数。根据gzibFlag决定是否使用CTBZFileOutputStream(压缩)或者CTBFileOutputStream(非压缩)
/**
 * @details 
 * Serialize a MeshTile to the Directory store
 * 增加zibFlag,是否输出压缩格式文件
 */
bool
ctb::CTBFileTileSerializer::serializeTile(const ctb::MeshTile *tile, bool writeVertexNormals, bool gzibFlag) {
   
   
  const TileCoordinate *coordinate = tile;
  const string filename = getTileFilename(coordinate, moutputDir, "terrain");
  const string temp_filename = concat(filename, ".tmp");

  if (gzibFlag) {
   
   
	  CTBZFileOutputStream ostream(temp_filename.c_str());
	  tile->writeFile(ostream, writeVertexNormals);
	  ostream.close();
  } else {
   
   
	  FILE 
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值