精华内容
下载资源
问答
  • java实现obj模型转换成支持cesium支持的gltf文件和b3dm文件,生成tileset.json,和为b3dm模型添加属性信息。https://pan.baidu.com/s/10S5VKVehrI6Ozc-8yINvwA 提取码:fdwk
  • java实现obj模型转换成支持cesium支持的gltf文件和b3dm文件,生成tileset.json,和为b3dm模型添加属性信息。https://pan.baidu.com/s/1aC_jhAI4i769F8FhZiLadg 提取码:5d5l
  • b3dm的组成:

    2021-06-04 15:51:48
    b3dm的组成: (1)前28-byte的头部信息: magic - b3dm; version - 1 byteLength - 整个tile的长度,包括头部,单位是字节bytes。 featureTableJsonByteLength - featue table json 部分的bytes长度。 ...

    b3dm的组成:

    (1)前28-byte的头部信息:
        magic - b3dm;
        version - 1
        byteLength - 整个tile的长度,包括头部,单位是字节bytes。
        featureTableJsonByteLength - featue table json 部分的bytes长度。
        featureTableBianaryByteLength - featue table 二进制部分的bytes长度。 0
        batchTableJSONByteLength - batch table json部分的bytes长度。
        batchTableBianaryByteLength - batch table 二进制部分的bytes长度。  0
    (3)featureTable   - e.g. {"BATCH_LENGTH":63} 
    (4)batchTable  -  包含每个模型的属性。能够根据属性进行样式渲染。

        e.g.  {"batchId":[0,1,2,3,4],"name":["","","","",""]}  

    (5)Binary glTF

    展开全文
  • 用于将3D几何图形从PostGIS转换为 / b3dm tile的工具。 该软件最初是py3dtiles( )的端口,用于生成b3dm tile。 可以在Cesium JS或MapBox GL JS中可视化生成的3D Tiles。 与py3dtiles的区别: 性能改善; 内存...
  • nginx开启.b3dm压缩

    2020-05-26 18:24:49
    开启.b3dm压缩。可优化cesium加载模型卡慢问题。 方式: appl gzipon; gzip_min_length1k; gzip_buffers416k; gzip_comp_level3; #gzip_typestext/plaintext/cssapplication/xmlapplication/...

    开启.b3dm压缩。可优化cesium加载模型卡慢问题。

    方式:

    appl

            gzip  on;

            gzip_min_length 1k;

            gzip_buffers 4 16k;

            gzip_comp_level 3;

            # gzip_types text/plain text/css application/xml application/javascript application/x-javascript text/javascript;

       gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php image/jpeg image/gif image/png application/octet-stream;

    # application/octet-stream开启b3dm文件压缩

     

    展开全文
  • 如何给B3dm添加属性信息,实际研究过程,并最终实现了,感觉还是挺困难的。如果有需要的朋友,可以看看,不知道能否有帮助哦
  • 它还包括一个packcmpt工具,用于将一个或多个i3dm / b3dm模型组合到单个cmpt文件中。 用法 gltf2glb $ ./gltf2glb.py -h usage: gltf2glb.py [-h] [-e] [-c] [-i I3DM] [-b B3DM] [-o OUTPUT] filename Converts ...
  • gltf转换器 用于将B3DM文件从GLTF1.0转换为GLTF2.0的自动化脚本。
  • 上篇文章我们知道了什么叫gltf,不知道的可以去看一看 这篇文章来了解一下什么是b3dm。 首先,b3dm是一个缩写,它的全称是:Batched 3D Mode(批量化3d模型),顾名思义,批量化指的是一定有很多个,不止一个。 ...

    上篇文章我们知道了什么叫gltf,不知道的可以去看一看

    这篇文章来了解一下什么是b3dm。

    首先,b3dm是一个缩写,它的全称是:Batched 3D Mode(批量化3d模型),顾名思义,批量化指的是一定有很多个,不止一个。

    Batched 3D Model allows offline batching of heterogeneous 3D models, such as different buildings in a city, for efficient streaming to a web client for rendering and interaction. Efficiency comes from transferring multiple models in a single request and rendering them in the least number of WebGL draw calls necessary. Using the core 3D Tiles spec language, each model is a feature.

    Per-model properties, such as IDs, enable individual models to be identified and updated at runtime, e.g., show/hide, highlight color, etc. Properties may be used, for example, to query a web service to access metadata, such as passing a building's ID to get its address. Or a property might be referenced on the fly for changing a model's appearance, e.g., changing highlight color based on a property value.

    A Batched 3D Model tile is a binary blob in little endian.


    译文:b3dm允许不同类型的3d模型,例如城市里不同的建筑,组织成高效的数据流到web端渲染和交互,这种高效率来自于一次请求转化多个模型并且用最少的webGL消耗。在3d tiles特殊的语言中,每一个模型都是一个要素。

    每一个模型的属性,例如ID能够将模型分离成单个的个体,同样也能对这些模型做更新,颜色变化,是否展示等这样的操作,模型的属性也会有所使用,举个例子来说,通过网络服务去访问元数据,通过建筑的id去访问它的地址,或者动态的属性决定模型外观,根据属性值来改变颜色高度。

    b3dm瓦片是一个二进制的blob

     

    好,看完了官方的介绍以后,基本可以理解为,b3dm也是一种数据格式,这种格式符合3d tiles规范,能够做一些操作,比如说查询,分层设色等。b3dm格式的数据通常都是城市的批量化的建筑模型,例如倾斜摄影模型。在实际的生产应用中,倾斜摄影(或者别的格式的大批量模型)的格式并不是b3dm格式的,绝大多数的倾斜摄影模型格式是osgb,还有一部分是obj,所以我们需要把它转化成b3dm格式的数据,才能进行进一步的操作。

    b3dm格式的数据结构有两部分组成,header和body(有点像html)header部分主要记录了一些例如版本,字节长度之类的信息。body部分主要由3个文件构成feature table  batchtable 和binary gltf

     

    首先 feature table记录了模型的语义信息,包括每个模型的特征值信息。

    batch table 记录了模型的样式以及rest请求,还有一些属性信息。

    特别值得注意的是。b3dm数据也是基于gltf的,也就是说批量的模型中的单个模型的模型格式还是gltf,并且数据组织方式也和之前讲到过的gltf是一样的。说白了b3dm就是在原来gltf小模型,单个模型的基础之上,做了批量化的数据组织方式,多了feature table和batch table两个文件。

     

    展开全文
  • b3dm格式数据结构说明

    2017-10-23 12:37:25
    Batched 3D Model格式介绍,头文件信息,数据体格式、字节长度等信息说明,是Batched 3D Model数据转换的辅助信息
  • Cesium之b3dm格式

    千次阅读 2021-05-05 01:08:24
    //作者:迷途的小书童 //微信公众号:g0415shenweri b3dm格式 参考文档: https://github.com/CesiumGS/3d-tiles/blob/master/specification/TileFormats/Batched3DModel/README.md 工具设计 计划写一个工具来查看B3...

    //作者:迷途的小书童

    //微信公众号:g0415shenweri

    b3dm格式

    参考文档:

    https://github.com/CesiumGS/3d-tiles/blob/master/specification/TileFormats/Batched3DModel/README.md

    工具设计

    计划写一个工具来查看B3dm的格式,顺便了解其原理。主要分为两部分,一部分是对属性参数的解析,一部分是对gltf的解析。

    网址一:https://github.com/daniel-hilton/gltf-b3dm-convertor

    实现gltf-b3dm-convertor的互相转换。

    这个库无法使用,而且缺少问题

    网址二:https://github.com/CesiumGS/3d-tiles-validator

    这里的工具可以验证自己导出的3dtiles的格式是否正确

    网址三:https://github.com/KhronosGroup/glTF-Validator

    这个工具可以验证gltf的格式是否正确

    网址四:https://github.com/CesiumGS/3d-tiles-validator/tree/master/samples-generator

    这个工具可以自动生成3dtiles格式

    网址五:https://www.cnblogs.com/onsummer/p/13252896.html

    发现一个同行,有不少研究心得

    由于有了这些轮子,基本上不需要再自己设计了,我们只需要加工即可。

    B3dm格式验证

    文件名:lib\validateB3dm.js

    B3dm例子解读

    这里推荐一个json格式化的工具:

    https://www.bejson.com/explore/index_new/0

    featureTableJson:

    {
        "BATCH_LENGTH": 10,
        "RTC_CENTER": [
            1214914.5525041146,
            -4736388.031625768,
            4081548.0407588882
        ]
    }
    
    • BATCH_LENGTH:模型的个数,即这个B3dm的文件里面有10个模型

    • RTC_CENTER:模型中心点的坐标,即下面所有模型的坐标都是以这个中心点为原点的坐标。

    batchTableJson:

    
    
    
    
    {
        "id": [
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9
        ],
        "Longitude": [
            -1.3197004795898053,
            -1.3197036065852055,
            -1.319708772296242,
            -1.3197052536661238,
            -1.3197012996975566,
            -1.3197180493677987,
            -1.3197058762367364,
            -1.3196853243969762,
            -1.3196881546957797,
            -1.3197161145487923
        ],
        "Latitude": [
            0.6988582109,
            0.6988621128191176,
            0.698870582386204,
            0.6988575056044288,
            0.6988603596248432,
            0.6988530761634713,
            0.6988687144359211,
            0.6988698975892317,
            0.6988569944876143,
            0.6988651780819983
        ],
        "Height": [
            11.721514919772744,
            12.778013898059726,
            9.500697679817677,
            8.181250356137753,
            10.231159372255206,
            12.68863015063107,
            6.161747192963958,
            7.122806219384074,
            12.393268510699272,
            11.431036269292235
        ]
    }
    

    这里的id、Longitude、Latitude和Height都拥有10个元素的数组,这里其实是和上面的BATCH_LENGTH为10是一一对应的。也就是说这个字符串保存的是每个模型对应的属性信息。

    接下来我,我们来研究gltf的json如下:

      
      "scenes": [
            {
                "nodes": [
                    0
                ]
            }
        ]
    

    scenes场景引用了nodes数组下标为0的对象。

    
    
    
    
        "nodes": [
            {
                "matrix": [
                    1,
                    0,
                    0,
                    0,
                    0,
                    0,
                    -1,
                    0,
                    0,
                    1,
                    0,
                    0,
                    0,
                    0,
                    0,
                    1
                ],
                "mesh": 0,
                "name": "rootNode"
            }
    

    matrix是矩阵变换,这里的变化矩阵是为了使gltf的进行Z轴向上的翻转,具体参考官网介绍

    https://github.com/CesiumGS/3d-tiles/blob/master/specification/README.md#gltf-transforms

    nodes节点又引用了meshs数组下标为0的节点。

    
    
    
    
        "meshes": [
            {
                "primitives": [
                    {
                        "attributes": {
                            "POSITION": 0,
                            "NORMAL": 1,
                            "_BATCHID": 2
                        },
                        "indices": 3,
                        "material": 0,
                        "mode": 4
                    }
                ]
            }
        ]
    

    POSITION、NORMAL、_BATCHID、indices和material对于的值,都对于与accessors的数组的索引,mode表示网格体的类型,这里4表示是三角网。其他详细描述参考下面网址:

    https://github.com/KhronosGroup/glTF/tree/master/specification/2.0/#primitivemode

      
      "accessors": [
            {
                "bufferView": 0,
                "byteOffset": 0,
                "componentType": 5126,
                "count": 240,
                "type": "VEC3",
                "min": [
                    -69.262685040012,
                    -63.42564369086176,
                    -51.21932876482606
                ],
                "max": [
                    84.98775890329853,
                    61.14907375629991,
                    46.49423664715141
                ]
            },
            {
                "bufferView": 1,
                "byteOffset": 0,
                "componentType": 5126,
                "count": 240,
                "type": "VEC3",
                "min": [
                    -0.9686407230533828,
                    -0.7415693003175017,
                    -0.7655772493024053
                ],
                "max": [
                    0.9686407230533828,
                    0.7415693003175017,
                    0.7655772493024053
                ]
            },
            {
                "bufferView": 2,
                "byteOffset": 0,
                "componentType": 5126,
                "count": 240,
                "type": "SCALAR",
                "min": [
                    0
                ],
                "max": [
                    9
                ]
            },
            {
                "bufferView": 3,
                "byteOffset": 0,
                "componentType": 5123,
                "count": 360,
                "type": "SCALAR",
                "min": [
                    0
                ],
                "max": [
                    239
                ]
            }
        ]
    

    accessors定义了4个bufferview。刚好和上面的索引可以对应上。我们研究第一个就可以了

         
       {
                "bufferView": 0,
                "byteOffset": 0,
                "componentType": 5126,
                "count": 240,
                "type": "VEC3",
                "min": [
                    -69.262685040012,
                    -63.42564369086176,
                    -51.21932876482606
                ],
                "max": [
                    84.98775890329853,
                    61.14907375629991,
                    46.49423664715141
                ]
            }
    
    • bufferView:引用了bufferviews数组的索引为0

    • byteOffset:bufferviews数据偏移0字节

    • componentType:5126 代表数值类型为float

    • count:代表由240个vec3数据

    • type:数据类型为三维向量 VEC3

    • min:max:表示240个vec3的最小和最大值

     "bufferViews": [
            {
                "buffer": 0,
                "byteLength": 2880,
                "byteOffset": 0,
                "target": 34962,
                "byteStride": 12
            },
            {
                "buffer": 0,
                "byteLength": 2880,
                "byteOffset": 2880,
                "target": 34962,
                "byteStride": 12
            },
            {
                "buffer": 0,
                "byteLength": 960,
                "byteOffset": 5760,
                "target": 34962,
                "byteStride": 4
            },
            {
                "buffer": 0,
                "byteLength": 720,
                "byteOffset": 6720,
                "target": 34963
            }
        ]
    

    bufferviews我们也研究第一个数据,如下:

    具体可以参考下面网址:

    https://github.com/KhronosGroup/glTF-Tutorials/blob/master/gltfTutorial/gltfTutorial_005_BuffersBufferViewsAccessors.md

        
        {
                "buffer": 0,
                "byteLength": 2880,
                "byteOffset": 0,
                "target": 34962,
                "byteStride": 12
            }
    
    
    
    
    

    buffer:引用buffer数组索引的为0

    byteLength:字节的长度

    byteOffset:buffer数据偏移0个字节开始

    target:34962, 表示  ARRAY_BUFFER  表示这个数据是顶点属性,另外还可以表示顶点索引  通34963

    byteStride:表示每个元素实际上占用12个字节,可以通过下图有个直观的了解byteStride的作用。

                   

    接下来就是buffer了

       
     "buffers": [
            {
                "name": "buffer",
                "byteLength": 7440
            }
        ]
    

    这里buffer为7440大小保存了上面所有引用的数据。

    完整的json格式如下:

    {
        "accessors": [
            {
                "bufferView": 0,
                "byteOffset": 0,
                "componentType": 5126,
                "count": 240,
                "type": "VEC3",
                "min": [
                    -69.262685040012,
                    -63.42564369086176,
                    -51.21932876482606
                ],
                "max": [
                    84.98775890329853,
                    61.14907375629991,
                    46.49423664715141
                ]
            },
            {
                "bufferView": 1,
                "byteOffset": 0,
                "componentType": 5126,
                "count": 240,
                "type": "VEC3",
                "min": [
                    -0.9686407230533828,
                    -0.7415693003175017,
                    -0.7655772493024053
                ],
                "max": [
                    0.9686407230533828,
                    0.7415693003175017,
                    0.7655772493024053
                ]
            },
            {
                "bufferView": 2,
                "byteOffset": 0,
                "componentType": 5126,
                "count": 240,
                "type": "SCALAR",
                "min": [
                    0
                ],
                "max": [
                    9
                ]
            },
            {
                "bufferView": 3,
                "byteOffset": 0,
                "componentType": 5123,
                "count": 360,
                "type": "SCALAR",
                "min": [
                    0
                ],
                "max": [
                    239
                ]
            }
        ],
        "asset": {
            "generator": "3d-tiles-samples-generator",
            "version": "2.0"
        },
        "buffers": [
            {
                "name": "buffer",
                "byteLength": 7440
            }
        ],
        "bufferViews": [
            {
                "buffer": 0,
                "byteLength": 2880,
                "byteOffset": 0,
                "target": 34962,
                "byteStride": 12
            },
            {
                "buffer": 0,
                "byteLength": 2880,
                "byteOffset": 2880,
                "target": 34962,
                "byteStride": 12
            },
            {
                "buffer": 0,
                "byteLength": 960,
                "byteOffset": 5760,
                "target": 34962,
                "byteStride": 4
            },
            {
                "buffer": 0,
                "byteLength": 720,
                "byteOffset": 6720,
                "target": 34963
            }
        ],
        "materials": [
            {
                "pbrMetallicRoughness": {
                    "baseColorFactor": [
                        1,
                        1,
                        1,
                        1
                    ],
                    "roughnessFactor": 1,
                    "metallicFactor": 0
                },
                "alphaMode": "OPAQUE",
                "doubleSided": false,
                "emissiveFactor": [
                    0,
                    0,
                    0
                ]
            }
        ],
        "meshes": [
            {
                "primitives": [
                    {
                        "attributes": {
                            "POSITION": 0,
                            "NORMAL": 1,
                            "_BATCHID": 2
                        },
                        "indices": 3,
                        "material": 0,
                        "mode": 4
                    }
                ]
            }
        ],
        "nodes": [
            {
                "matrix": [
                    1,
                    0,
                    0,
                    0,
                    0,
                    0,
                    -1,
                    0,
                    0,
                    1,
                    0,
                    0,
                    0,
                    0,
                    0,
                    1
                ],
                "mesh": 0,
                "name": "rootNode"
            }
        ],
        "scene": 0,
        "scenes": [
            {
                "nodes": [
                    0
                ]
            }
        ]
    }
    

    buffer数据获取

    这里决定取出buffer内部的一些数据对我们上述的理解进行验证

    展开全文
  • """ py3dtiles的安装: pip3 install py3dtiles 详见:...""" from py3dtiles import TileReader from py3dtiles import B3dm # RuntimeError: Unsupported...
  • 1.SkylineGlobeServer 将三维模型(3dml)发布成B3DM服务,访问格式如下: http://localhost/SG/b3dm/name.id/tileset.json 2.SkylineGlobeServer 将三维地形MPT(由高程数据和影像数据生成)发布成OGC标注服务,访问...
  • 根据3dtiles标准规定,Glb是以二进制方式压缩在b3dm中的。但是针对glb中存在的图像的情况,则应特别注意图像的存储方式,否则可能导致生成的3dtiles在cesium中将无法正常访问。 众所周知,Glb中图像可以支持两种方式...
  • 说明 使用3d-tiles-renderer渲染器加载解析3dtiles 加载3dtiles和b3dm文件 启动场景 效果
  • b3dm翻译和跨域问题

    2017-11-28 22:43:49
    CesiumTerrainBuilder 是使用exe程序直接调用执行,简单、方便易用
  • 访问json文件中的数据时出现404错误,有以下几种可能: (1)路径 检测访问路径是否正确,提供一种比较笨的... json.b3dm文件 a,直接打开 控制面板 > 系统和安全 > 管理工具 > Internet信息服务器(IIS)
  • vs2017 gltf draco c++ x64 release for cesium
  • 数字沙盘电子沙盘开发教程第27课:3DMAX 3DS BIM B3DM三维模型数据的导入 上一节我们实现了模型的移动控制。这次我们来实现模型的材质控制,首先我们找一个模型。在3dmax中如下: 可以看到这个模型很复杂。分成...
  • 白模处理成b3dm格式数据

    千次阅读 2019-09-05 21:30:25
    1、首先在arcgis中制作相应的矢量面文件(注意投影坐标信息),并且要给矢量面赋予相应的高程值。制作完成保存文件以备后用。 2、使用cesiumlab导出3dtile文件,找到建筑物矢量面处理工具,单击。...
  • 002.3-b3dm的终极优化

    2021-06-06 15:37:24
    前言 一、16栋建筑包含447个纹理图片 其中clamp的纹理可以用纹理合并重分配纹理坐标到各个geometry的方式,不过对于repeat的纹理坐标经常都是大于1.0的,所以无法映射到合并的大纹理区间当中,而建筑的墙体大部分都...
  • cesium obj转b3dm转换及加载

    千次阅读 2019-06-15 14:10:00
    3、cd至程序执行的目录下,./代表当前目录,前面的路径为obj路径,后面的路径为json路径,生成tileset.json及b3dm文件  obj23dtiles -i ./east/east.obj --tileset -p ./east/eastoptions.json 4、将生成的文件导入...
  • Cesium 加载Cesium3DTileset(b3dm

    千次阅读 2019-12-13 11:02:56
    Cesium.Ion.defaultAccessToken="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIyMzc2ZWEzNS01MTUxLTQ4MDctYjA2OC00ZGNlNjVmZmY3MjAiLCJpZCI6MTExNjAsInNjb3BlcyI6WyJhc3IiLCJnYyJdLCJpYXQiOjE1NTgzMjg1MjV9....
  • 项目:b3dm工具 功能:用于处理3D Tiles b3dm文件的全局工具。支持以下操作:获取有关b3dm的信息(信息);从b3dm解压缩到glb(解压缩);从glb文件(打包)创建b3dm。 网址:...
  • C++学习(七十一)3Dtiles glTF b3dm

    千次阅读 2019-09-30 22:11:11
    一、glTF glTF表示了渲染一个模型的几何数据、纹理数据、材质数据、元数据等...Cesium的Batched 3D Tiles Data的简称,它是3DTiles规范的一部分,本质上b3dm也是使用glTF来存放数据的。用于表示3DTiles的每个瓦片( ...
  • 基于osg开发的工具,理论上osg能读取的都可以转 OConv.exe {\"function\":\"obj23dtiles\",\"filename\":\"G:/model01.IVE\",\"offset\":\"113.39123 29.90691 0 \",\"localOffset\":true,\"writeGltf\":false,\...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,186
精华内容 1,674
关键字:

b3dm