osgb转3dtiles之数据篇

article/2025/11/7 0:06:09

前不久,终于对osgb以及3dtiles的数据结构有了足够的了解,成功地利用FME将osgb数据转换成了3dtiles数据。于是,我开心地决定先来写一下如何将osgb转换成3dtiles数据。

为了让大家能够比较详细的了解这两个数据格式,该系列文章一共分为上下两篇,我将会从osgb与3dtiles的数据结构以及层级构建两个方面对其进行介绍。下篇仍在酝酿中,所以我们可以先将此篇作为单篇来看。

本篇文章,仅讲解osgb与3dtiles的数据结构,不会涉及到层级等等的介绍,但为了能够成功的看到我们最终转换出来的数据效果,因此我们仅挑选osgb中的一个层级进行转换,这样能有效地排除层级渲染的时候对数据最终效果的影响。

osgb数据与3dtiles数据粗讲

要想正确的对这两个数据进行转换,我们需要对这两个数据进行一些初步的了解。

首先什么是osgb数据?什么是3dtiles数据?他们两个数据之间有什么差异?

不知道大家有没有想过,为什么市面上能够找到osgb数据向3dtiles数据格式转换,却鲜有能够将3dtiles转换成osgb数据的?是否是这两个数据格式之间存在着很大的差异?

我也一头雾水,后来请教了一个3dtiles数据的大佬。

他跟我说:“理论上,3dtiles是可以转换成osgb数据的,不过成本很大。因为诸如osgb数据转3dtiles本质上是将对人类友好的对象型数据,裂解为对GPU友好的图形编程型数据;以3dtiles、gltf等格式的数据,是为了怎么渲染快怎么来,从来没有考虑过往回倒的余地。

嗯,了然,就是说这类型数据就不是创建出来给人看的而是给计算机看的,可二次利用率很低。

好了,明白了这个道理,我就不再纠结回转了。

现在我们看一下,这两个数据的区别。

坐标转换

osgb数据,通常渲染在平面坐标场景上,其数据使用的是ENU坐标系。我更习惯叫它相对坐标,在其数据本身的坐标数值上,再加入坐标原点的值,即是正常的载体坐标(通常为2000平面坐标)。其坐标原点及坐标系定义存储在名为“metadata.xml”的xml文件内,长宽高单位为米。

而3dtiles数据格式,则是渲染在球面场景上,坐标常为wgs84经纬度坐标,(也可能为2000经纬度坐标),其长宽为经纬度,高为米。

图片

如前文所说,这次转换不涉及层级,因此我只提取了其中一个层级的数据,如下图所示。

图片

废话了那么多,我想说的是,osgb数据要转3dtiles,必须要经过坐标转换。

坐标转换非常简单,利用Offsetter给模型添加上坐标原点的偏移量将其转换为正常的载体坐标,然后Reprojector转换成wgs84的经纬度坐标就完了。

(一般在已经定义了原始数据的坐标系的情况下,FME写出3dtiles的时候会自动将其转换到经纬度坐标上,之所以加上这一步,是为了让大家对数据转换过程中到底发生了哪些变换有一个了解)

图片

转换完成后,如果在datainspecter里面查看数据,你会发现你什么都看不到。

遇到这个问题不要慌,FME并不能渲染球面场景的数据,因此出现这样的问题是正常的,我们暂且不去管它,先写出成osgb数据看一下。

数据纹理修改

在写出的时候,参数如下设置,这表示,我要将每一个osgb文件生成一个单独的b3dm文件,并汇总到一个叫做“Tile+001+010_L22”的文件夹中,由FME自己创建层级tileset.json文件

图片

这样转换后,是否就搞定了呢?其实不一定。这里先略过如何加载3dtiles数据不谈,我们直接看结果。(如何在浏览器里面查看3dtiles数据格式,可以参考另外一篇博客https://blog.csdn.net/fmechina/article/details/109383801?spm=1001.2014.3001.5501)

在转换后有一些osgb数据(如我现在用的这个)当你将转换后如果你将数据加载到cesium里面去看,会看到如下场景。

图片

没错,五彩斑斓的黑(其实还是能看到模型的颜色的,只是因为截图被压缩的缘故,整体会显得更暗一点点)。

不过,有一点可以肯定的是,转坐标这个思路肯定是没有问题的。

然后我翻了网上的资料,影响一个模型数据的光亮程度,除了渲染引擎之间的区别、渲染场景的光照等因素;剩下的就只有数据本身的纹理了。

在FME打开osgb数据,查看数据的纹理结构,你会发现存在这样几个属性

图片

这里,就要插一点题外话了,FME对几何的的分类。

可以看到,在FME中,是将单个.osgb数据当作一个三维的IFMEAggregate,这个聚合体(IFMEAggregate),分为多个部分,每一个部分下都是一个IFMEMesh,而每一个IFMEMesh都存在对应的几何和纹理。

纹理一般分为正面纹理(FrontAppearance Reference)和背面纹理(Back Appearance Reference)。

正面纹理则是我们看到的一个物体的表面,既外部的纹理特征,背面纹理则是物体的内部,在转3dtiles中,意义不大。

影响纹理的表现特征的几个属性,从上到下,依次分为:

•    Alpha:纹理的透明度级别

•    Ambient Color:环境反射颜色

•    Diffuse Color:漫反射颜色

•    Emissive Color:自发光颜色

•    Specular Color:镜面反射颜色

•    Shininess:光泽度

查找关于着色器的资料,大概是这么说的,“物体表面的颜色是自发光(放射 emissive)、环境反射(ambient)、漫反射(diffuse)和镜面反射(specular)等光照作用的总和。”然后罗列了一堆计算公式和专业术语……

呃……

看不懂……

首先去掉几个错误答案,肯定不是透明度和光泽度,白色光也肯定不会让纹理变黑。

剩下的就只有EmissiveColor(自发光颜色)和Specular Color(镜面反射颜色)均为0, 0, 0(黑色),经过我的细(hu)心(luan)验(chang)证(shi),造成模型变黑的罪魁祸首就是这两个属性。

其实不只是在转3dtiles格式,在转其他格式的时候,如果你发现自己的模型纹理变黑了,多半也是这两个属性造成的。

但是如何修改这个属性呢?你会发现这并不是一个通常意义下存储在attribute下面的属性,传统的修改方式并不能奏效。

一开始,我想的是通过PythonCaller调用FME Objects Python API来实现这个需求,不过官方文档实在是写的晦涩难懂,也没有实际案例,花了几天也没看懂如何操作FMELibrary。

后来无意之中,发现了SharedItemRetriever和SharedItemAdder这两个转换器,终于算是实现了这个需求。

修改模型的EmissiveColor步骤如下图所示。

图片

和修改普通的属性不同,我们需要先通过SharedItemRetriever提取到模型的SpecularColor属性,修改其值为1, 1, 1,然后再利用SharedItemAdder转换器将该属性添加回去,等待一切完成后,再将多余的属性要素删除即可。

这一步操作可能和平时的FME修改属性操作不太一样,理解就好。

然后再在FME中查看,我已经将该属性修改成了白色,完美。

图片

然后再次转换成3dtiles数据,就可以看到,整个模型的颜色已经变亮~~……咳咳咳,我再次重申,这是截图被压缩了的问题,好吧,它确实还是有那么一点点黑。

图片

为了尽善尽美,我们以同样的方式,再加上修改EmissiveColor(自发光颜色),如下图是值为0.01,0.01,0.01的样子

图片

再到0.02,0.02,0.02

图片

可以看出,模型已经明显亮了很多,欠缺的部分,可以通过渲染引擎调整光照等因素来弥补,以达到完美的表现形式。鉴于本人不会cesium,下一步操作略过。

果然,要想研究好三维数据,需要强大的知识储备,我还需要加倍努力。

至此,osgb转3dtiles数据篇的讲解已经告一段落,整体上其实还是比较简单的一个操作,只是网络上相关资料太少,和我们接触的常规的二维数据差别太大。下一篇我们讲层级,日期不定,请勿催更

图片


http://chatgpt.dhexx.cn/article/qOCe3cx4.shtml

相关文章

osgb转json_cesuim加载倾斜摄影OSGB三维数据完整过程(超详细)

1、得到正确原始.osgb格式数据; (1)倾斜摄影数据仅支持 smart3d 格式的 osgb 组织方式, 数据目录必须有一个 “Data” 目录的总入口, “Data” 目录同级放置一个 metadata.xml 文件用来记录模型的位置信息。 (2)每个瓦片目录下,必须有个和目录名同名的 osgb 文件,否则无法…

GIS数据处理-OSGB转换3dTiles

GIS数据处理-OSGB转换3dTiles 介绍 Open Scene Gragh Binary是OSGB的全称,这里的Binary是二进制的意思。 目前市面上生产的倾斜模型,尤其ContextCapture Cente处理的倾斜摄影三维模型数据的组织方式一般是二进制存贮的、带有嵌入式链接纹理数据&#x…

OSGB 倾斜摄影数据生产完成后裁剪模型问题

在OSGB生产完成后,可能想要裁剪模型,只要其中的一部分模型数据。这里介绍两种我了解到的方法。 1. 使用商业软件 据了解,大部分此类软件都是国产的软件,需要购买使用。例如模方,但是有一个月试用时间,优点…

OSGB数据文件解读

1、OSGB数据的组成 1.1 如上图所示倾斜模型分块构成。在Data目录下有编号000,001,002,003等。 每一个文件夹代表了一个分块。 1.2 每一个分块文件夹下有若干个.osgb文件构成 如上图所示第一个.osgb文件的文件名和文件夹名相同,代…

倾斜摄影OSGB转换为3DTiles

倾斜摄影OSGB转换为3DTiles 情深不寿,慧极必伤。谦谦君子,温润如玉。3DTiles validator 官方提供的3DTiles检验工具及相关工具箱。 feature table binary must be aligned to an 8-byte boundary 时代变迁,3DTiles b3dm 字节对齐由以前的…

OSG 读取OSGB倾斜数据

OSG 读取OSGB倾斜数据 OSGB数据是一个四叉树结构&#xff0c;本文测试使用OSG加载OSGB倾斜摄影测量数据。 示例数据 Code 1、遍历所有osgb数据文件生成空间索引 2、通过建立的空间索引加载数据 #include <iostream> #include <string> #include <filesystem…

osgb加载

背景 三维引擎 本文要介绍的three.js和cesium.js是web端三维引擎&#xff0c;基于WebGL开发的&#xff0c;WebGL又是OpenGL ES的B端API封装集&#xff0c;openGL ES是 openGL的一个子集&#xff0c;OpenGL是 Open Graphics Library 是个定义了一个跨编程语言、跨平台的编程接口…

实景三维的基石-osgb

前言 2022年2月24号&#xff0c;自然资源部办公厅印发《关于全面推进实景三维中国建设的通知》。 其中我们可以发现在城市级实景三维建设中提出了倾斜摄影影像&#xff0c;描述如下&#xff1a; 《二是城市级实景三维建设。国家层面将整合省级行政区域基础地理实体数据&#xf…

倾斜摄影三维模型OSGB格式简化(压缩、优化)

倾斜摄影三维模型OSGB格式简化&#xff08;压缩、优化&#xff09; 文章目录 倾斜摄影三维模型OSGB格式简化&#xff08;压缩、优化&#xff09;前言一、OSGB格式二、当前osgb简化/压缩的主要方式1.第一种 输出osgb格式2.第二种 输出其他格式 三、我的理解**有兴趣的同学可以加…

倾斜摄影测量数据osgb格式加载优化(以supermap为例)

一、OSGB格式介绍 1. osgb osgb全称为Open Scene Gragh Binary,是OSG引擎的一种支持三维数据的二进制存储格式。 2. cc软件生成osgb数据目录结构 其中metadata.xml为元数据文件&#xff0c;含倾斜摄影测量数据的坐标及原点等信息。Data为倾斜摄影测量数据的存储文件夹&…

OSGB格式解析

主要介绍倾斜摄影数据OSGB二进制数据的解析&#xff0c;首先简单介绍一下OpenSceneGraph相关技术&#xff0c;并介绍倾斜摄影数据的组织结构&#xff0c;着重分析OSGB格式的相关字段&#xff0c;最后逐字节对OSGB数据进行解析并通过OpenSceneGraph对数据进行可视化&#xff0c;…

如何介绍自己测试过的项目

测试人员在找工作的过程中&#xff0c;通常有一个问题是很难绕开的。就是要如何向别人介绍自己之前做过的项目。下面我们就这个问题简单的做一些分析。 要解决这个问题&#xff0c;大体上可以分为如下几个步骤&#xff1a; 1、对项目进行基本介绍 2、说明自己负责测试的模块…

分享一份接口测试项目(非常值得练手)

之前跟大家分享了一份适合练手的接口测试实战项目&#xff0c;算是一份接口测试的入门级项目。但这个项目有诸多局限&#xff0c;比如部署不便&#xff0c;接口有限&#xff0c;没有鉴权等等。 因此&#xff0c;趁着周末&#xff0c;小编又给大家找了一个接口测试项目&#xf…

1.性能测试项目实战

怎么开展性能测试 什么时候开始性能测试 1.先确定需不需要做 客户有明确的性能需求当没有明确需求时 如果市场用户访问量不大&#xff0c;时间允许就做一个基准测试&#xff0c;时间不允许就不做市场用户量比较大&#xff0c;需要先跟产品&#xff0c;需求人员确定好性能需求…

金融外包测试项目经验分享

金融项目外包 测试管理 经验 软件测试 首先确定项目外包测试的核心问题—对项目外包测试的定位。 项目外包测试是一种服务性工作&#xff0c;所以把服务放在第一位是做任何事情的出发点。作为项目经理&#xff0c;一定要把这种思想告诉给我们的测试团队成员&#xff0c;树立服务…

测试项目中的风险管理

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

测试人员如何在项目中开展测试

项目中角色分为&#xff1a;项目经理&#xff08;PM&#xff09;、QA、产品、UI、开发、测试&#xff0c;本文以测试人员视角展开谈谈如何开展测试。 目录 一、尽早介入测试 二、积极与产品人员核对需求 三、提前准备测试用例 四、交叉执行用例 五、提交缺陷注意要点 六…

项目如何提测?

如何提测? 今天是10月24日,一个只有互联网从业者才知道的节日,祝各位苦逼的程序猿节日快乐! 我们处在一个互联网爆发时代, 这个时代需要我们, 我们充满了责任感, 使命感, 我们为之努力奋斗一生的事业. 项目提测对测试工程师来说是再普通不过了. 开发在Dev环境联调, 功能开发…

WEB测试项目实战——1.WEB项目测试备战

项目介绍&#xff1a;B/S架构的web项目 #WEB项目测试备战 目录 文章目录 [toc] ##一、实战路线图 ###(一&#xff09;研发模型——瀑布模型 ###(二&#xff09;测试遵循的原则——W原则 ###(三&#xff09;项目实战课程路线图 ####前期准备-需求评审-设计评审-测试计划-测试架…

缺项目经验的看过来,真实的软件测试实战项目来了

1.web自动化项目 这是一个电商项目&#xff0c;你可以在网站上购买各种宠物。 常见的电商网站操作在这个项目中都可以找到&#xff0c;比如注册&#xff0c;登录&#xff0c;查找商品&#xff0c;选择商品&#xff0c;添加购物车&#xff0c;下单&#xff0c;查看定位&#xf…