可视化/数字孪生专业社区
资源中心
问答
文章
实用工具
ByteVCharts
开源中台
申请建模
申请帮助
登录
注册
申请协助
此单为
付费
协助
×
为协助帮威客用户快速入门,帮威客平台可损供用户特定项目的框架代码开发服务。该服务可为用户快速构建符合项目基本需求的3D可视化框架代码资源(包括源码、3D模型、贴图、数据等),用户的技术团队可在此基础上快速上手,大幅提高3D可视化项目成功基础。
预算金额
公司名称
联系人
微信号
手机号码
提交申请
申请协助
此单为
付费
协助
×
为协助帮威客用户快速入门,帮威客平台可损供用户特定项目的框架代码开发服务。该服务可为用户快速构建符合项目基本需求的3D可视化框架代码资源(包括源码、3D模型、贴图、数据等),用户的技术团队可在此基础上快速上手,大幅提高3D可视化项目成功基础。
预算金额
公司名称
联系人
微信号
手机号码
提交申请
业务咨询
开发咨询
微信咨询
杜老师
黄老师
熊老师
支付信息
×
购买文章
Cesium数据(五)3D Tiles之i3dm 和 cmpt
订单金额
¥
0
实付金额
¥
0
我已阅读并同意ByteV组件购买协议
取消
提交订单
支付宝支付
微信支付
提交订单
0
点赞
0
评论
收藏
分享
举报
Cesium数据(五)3D Tiles之i3dm 和 cmpt
小白
关注
已关注
0
0
0
4173
发表于 2020-05-11 21:06:18
### i3dm cesium支持的Instanced 3D Model(实例化三维模型)后缀是 .i3dm,实例3D模型是一种平铺格式,用于有效地流传输和渲染大量模型(称为实例),但会有微小的变化。 在最简单的情况下,例如,相同的树模型可能会在多个位置定位或建立实例。 每个实例都引用相同的模型,并具有每个实例的属性,例如位置。 使用核心3D Tiles规范语言,每个实例都是一个功能。 除树木外,实例3D模型还可用于外部特征(例如消火栓,下水道盖,灯和交通信号灯)以及内部CAD特征(例如螺栓,阀门和电源插座)。 简单来说,就是如果你场景中有很多重复的物体,比如很多电线杆、交通灯、消防栓之类的,就可以考虑这个格式 ### cmpt 复合图块格式可将不同格式的图块串联为一个图块。 3D切片和“合成”切片可灵活地传输异构数据集。 例如,建筑物和树木可以存储在两个单独的批处理3D模型图块和实例化3D模型图块中,或者可以使用“合成”图块进行组合。 支持图块间(同一图块集中不同格式的不同图块)和图块内(同一复合图块中不同格式的图块)选项的异构数据集,使转换工具可以在请求数量之间进行权衡 ,特定于类型的最佳细分以及可见/隐藏层的流式传输方式。 ### 如何加载i3dm数据 var tileset = scene.primitives.add( new Cesium.Cesium3DTileset({ url: "../../../Specs/Data/Cesium3DTiles/Instanced/InstancedWithBatchTableBinary/tileset.json" }) ); tileset.readyPromise.then(function(tileset) { viewer.zoomTo(tileset, new Cesium.HeadingPitchRange(0.5, -0.2, tileset.boundingSphere.radius * 4.0)); }).otherwise(function(error) { console.log(error); }); 字段可以参考[格式说明](vscode-resource://file///d%3A/code/cesium-study/cesium-i3dm-and- cmpt-data.md#type) ### 如何获取 i3dm和cmpt格式用的比较少,测试使用的是官方提供的数据 ### i3dm格式说明 i3dm格式的网址:[地址](https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/specification/TileFormats/Instanced3DModel) 每个 *.i3dm文件都是二进制文件,各个字节表示的内容如图: ![文件头](http://develop.cesium.xin/3dtiles/i3dm.png)![文件头](data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20%20%22%3E%3C/svg%3E) 用个json来表述就是这样的: { "magic":"i3dm", "version":1, "byteLength":0, "featureTableJSONByteLength":0, "featureTableBinaryByteLength":0, "batchTableJSONByteLength":0, "batchTableBinaryByteLength":0, "gltfFormat":0 // 0是url 1是gltf二进制 } "batchTableJSON":{}//不一定有 ### cmpt格式说明 i3dm格式的网址:[地址](https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/specification/TileFormats/Composite) 每个 *.cmpt文件都是二进制文件,各个字节表示的内容如图: ![文件头](http://develop.cesium.xin/3dtiles/cmpt.png)![文件头](data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20%20%22%3E%3C/svg%3E) 用个json来表述就是这样的: { "magic":"b3dm", "version":1, "byteLength":0, "tilesLength":0, "tiles":[ { "magic":"",//枚举 b3dm i3dm pnts "version":1, "byteLength":0, },{} ] } 怕说的不清楚,补充点[官方源码](https://github.com/AnalyticalGraphicsInc/3d-tiles-tools) /** * Create an Instanced 3D Model (i3dm) tile from a feature table, batch table, and gltf buffer or uri. * * @param {Object} options An object with the following properties: * @param {Object} options.featureTableJson The feature table JSON. * @param {Buffer} options.featureTableBinary The feature table binary. * @param {Object} [options.batchTableJson] Batch table describing the per-feature metadata. * @param {Buffer} [options.batchTableBinary] The batch table binary. * @param {Buffer} [options.glb] The binary glTF buffer. * @param {String} [options.uri] Uri to an external glTF model when options.glb is not specified. * @returns {Buffer} The generated i3dm tile buffer. */ function createI3dm(options) { var featureTableJson = getJsonBufferPadded(options.featureTableJson); var featureTableBinary = getBufferPadded(options.featureTableBinary); var batchTableJson = getJsonBufferPadded(options.batchTableJson); var batchTableBinary = getBufferPadded(options.batchTableBinary); var gltfFormat = defined(options.glb) ? 1 : 0; var gltfBuffer = defined(options.glb) ? options.glb : getGltfUriBuffer(options.uri); var version = 1; var headerByteLength = 32; var featureTableJsonByteLength = featureTableJson.length; var featureTableBinaryByteLength = featureTableBinary.length; var batchTableJsonByteLength = batchTableJson.length; var batchTableBinaryByteLength = batchTableBinary.length; var gltfByteLength = gltfBuffer.length; var byteLength = headerByteLength + featureTableJsonByteLength + featureTableBinaryByteLength + batchTableJsonByteLength + batchTableBinaryByteLength + gltfByteLength; var header = Buffer.alloc(headerByteLength); header.write('i3dm', 0); header.writeUInt32LE(version, 4); header.writeUInt32LE(byteLength, 8); header.writeUInt32LE(featureTableJsonByteLength, 12); header.writeUInt32LE(featureTableBinaryByteLength, 16); header.writeUInt32LE(batchTableJsonByteLength, 20); header.writeUInt32LE(batchTableBinaryByteLength, 24); header.writeUInt32LE(gltfFormat, 28); return Buffer.concat([header, featureTableJson, featureTableBinary, batchTableJson, batchTableBinary, gltfBuffer]); } function getGltfUriBuffer(uri) { uri = uri.replace(/\\/g, '/'); return Buffer.from(uri); } /** * Create a Composite (cmpt) tile from a set of tiles. * * @param {Buffer[]} tiles An array of buffers holding tile data. * @returns {Buffer} The generated cmpt tile buffer. */ function createCmpt(tiles) { var byteLength = 0; var buffers = []; var tilesLength = tiles.length; for (var i = 0; i < tilesLength; i++) { var tile = getBufferPadded(tiles[i]); var tileByteLength = tile.length; tile.writeUInt32LE(tileByteLength, 8); // Edit the tile's byte length buffers.push(tile); byteLength += tileByteLength; } var version = 1; var headerByteLength = 16; byteLength += headerByteLength; var header = Buffer.alloc(headerByteLength); header.write('cmpt', 0); header.writeUInt32LE(version, 4); header.writeUInt32LE(byteLength, 8); header.writeUInt32LE(tilesLength, 12); buffers.unshift(header); // Add header first return Buffer.concat(buffers); }
点击查看更多
全部评论
登录
|
注册
关于作者
小白
TA的个人主页
关注
已关注
文章
5942
粉丝
14
获赞
21
评论
26
访问
560376
(3)、React中使用ECharts——柱状图
31个惊艳的数据可视化作品,让你感受“数据之美”!
《Google软件测试之道》读书笔记
Cesium数据(五)3D Tiles之i3dm 和 cmpt
cesium实战(三)设置地球颜色为任意纯色
推荐文章
ThreeJS 轮廓线特效 OutLinePath
(3)、React中使用ECharts——柱状图
31个惊艳的数据可视化作品,让你感受“数据之美”!
防抖节流
创建海洋特效组件 THREEJS 海洋效果 Shader实现
文章目录
文章分享
×
扫一扫分享
复制链接