收藏 分销(赏)

b3dm翻译.doc

上传人:快乐****生活 文档编号:3562014 上传时间:2024-07-09 格式:DOC 页数:6 大小:48.50KB 下载积分:6 金币
下载 相关 举报
b3dm翻译.doc_第1页
第1页 / 共6页
b3dm翻译.doc_第2页
第2页 / 共6页


点击查看更多>>
资源描述
B3dm Batched 3D Model 允许批量的多样性的3D模型,比如在一个城市的不同建筑模型,高效地在web客户端渲染和交互并脱机显示。这高效性体现在用一个简单的请求就可以转移多个模型,用一些最简洁的webgl的必要的绘制请求就可以实现渲染。使用核心3D Tiles特定的规范语言,每个模型都是一个要素。 每一个模型属性,比如IDs,能够使单个模型在运行时被识别和更新,例如,显示/隐藏,高亮色等等属性。例如,为了查询一个访问元数据的web服务,比如通过得到一幢建筑的ID来得到它的地址。或者为了改变模型的外观,一个属性值会在运行中被引用,例如,根据属性值来改变高亮色彩。 Batched 3D Model,或仅仅是batch,是作为一个ArrayBuffer存储在JavaScript的从小到大的二进制文件。 Layerout(排列分布) 一个tile又两部分组成:一个紧跟着body(主体)的头文件(header) 一.头文件(Header): 这24-byte header包括如下字段: 字段 字段类型 描述 magic 4-byte ANSI string "b3dm". 这可以用来识别ArrayBuffer是否就是b3dm version uint32 B3dm的当前格式版本号. 当前版本为1. 字段 字段类型 描述 byteLength uint32 整个瓦片的长度, 包括头文件.用字节表示 batchTableJSONByteLength uint32 JSON部分的批量表的长度,还是用字节表示。零表示没有批处理表。 batchTableBinaryByteLength uint32 二进制部分的批量表的长度,用字节表示。如果batchtablejsonbytelength(就是上面那个熟悉)是零,这也是零 batchLength unit32 在一捆模型中具体的模型(有时候也叫要素)得个数 主体部分紧接头部分,由两个部分组成:Batch Table和Binary gltf。 阅读标题代码可以在3D切片实施batched3dmodeltilecontent发现Cesium。 二.包体(Batch Table): Batch Table包含了每个模型的特殊请求的元数据,用batchid作为索引,同时也可以用来作陈述性的描述和一些诸如“填充UI”或者“发行一个REST API请求”的特殊请求。在Binary glTF这个部分中,每个顶点都有一个batchid数值属性,这个数值是一个整数,范围在[0,number of models in the batch - 1]之间。Batchid这个属性可以说明这个我们选中的“顶点”是属于哪个模型的。这也成为了模型可以捆成一捆处理而依然能够分别出来的先决条件。 三.二进制gltf(Binary glTF): gltf是WebGL的运行资产格式。Binary glTF是gltf的一个用二进制定义的拓展模块。Batched 3D Model使用基于KHR_binary_extension拓展的gltf1.0格式。 Binart glTF是紧跟着batch table的。从数组缓冲区的开头20+batchTableByteLength的字节处开始,一直到数组缓冲区剩下的部分结束。Binary glTF可以嵌入它支持的所有的几何形状,纹理和动画,或适用于外部资源的部分或所有数据。 对于gltf内容必须8字节对齐,所以gltf的字节对齐也是必须的。这可以通过填充Batch Table来完成,如果它存在的话。 如上所述,每个顶点都有一个batchid属性来标明其所属的模型。例如,一个 拥有三个模型的模型束的顶点可能看起来像这样: batchId: [0, 0, 0, ..., 1, 1, 1, ..., 2, 2, 2, ...] position: [xyz, xyz, xyz, ..., xyz, xyz, xyz, ..., xyz, xyz, xyz, ...] normal: [xyz, xyz, xyz, ..., xyz, xyz, xyz, ..., xyz, xyz, xyz, ...] 顶点的顺序和batchid没啥关系,所以这样也行: batchId: [0, 1, 2, ..., 2, 1, 0, ..., 1, 2, 0, ...] position: [xyz, xyz, xyz, ..., xyz, xyz, xyz, ..., xyz, xyz, xyz, ...] normal: [xyz, xyz, xyz, ..., xyz, xyz, xyz, ..., xyz, xyz, xyz, ...] 需要指明的是,顶点不能同时属于一个以上模型;如果真的出现那样的情况了,顶点需要再重复声明一次,重复的顶点分别属于哪些模型。 batchid由gltf的_BATCHID技术参数确定。例如: "technique": { "attributes": { "a_batchId": "batchId" }, "parameters": { "batchId": { "semantic": "BATCHID", "type": 5123 } } } 就拿上面这个例子中“attributes”中的“a_batchid”来说吧,在顶点着色器中是这么写的 attribute float a_batchId; 通过使用存取在模型束中的单个模型的a_batchId熟悉,我们可以在运行中修改顶点着色器的属性,比如,我们就可以改变它的颜色 。 当Batch Table存在的时候,batchId属性(基于_BATCHGID的语义参数)是需要的。否则Batch Table就不存在了。 虽然不是特别需要,但是用户还是可以根据自己的喜好找一下glTF的CESIUM_RTC拓展,这对于高精度渲染大有裨益。 (注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服