【obj To 3DTiles 格式转换】 可以自定义经纬高、属性表等参数 (一)

news2024/12/25 12:22:13

目录

  • 0 引言
  • 1 3DTiles数据
  • 2 objTo3DTiles
    • 2.1 工具的安装
      • 2.1.1 拓展:Node.js 和 npm
    • 2.2 工具的使用
      • 2.2.1 输出成瓦片数据
      • 2.2.2 输出带有坐标参数的瓦片数据
  • 3 查看3DTiles数据

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:CesiumforUnreal专栏
  • 💥 标题:【obj To 3DTiles 格式转换】 可以自定义经纬高、属性表等参数。
  • ❣️ 寄语:书到用时方恨少,事非经过不知难!
  • 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正,同时有问题的话,欢迎大家留言讨论。

0 引言

其实我之前也写过两篇博客,分别是介绍 3DTiles格式数据、objTo3DTiles 的文章。但是之前储备的知识还不够,所以今天就重新起稿一份。

  • 最近使用Cesium插件需要加载很多三维模型数据,如果直接将传统的三维模型格式导入的话,模型还需要制作LOD,通知需要地理配准等一系列工作。
  • 然后最近发现3DTiles格式就是为了解决这些问题被创造出来的。所以研究了一下如何将obj格式数据转换成3DTiles格式。

本文将分为三个部分开始讲解:

  • 3DTiles数据格式介绍
  • 格式转换
  • 转换后查看3DTiles格式数据

1 3DTiles数据

3DTiles格式数据是 OGC 组织进行规范的,显然他们的官网就有对这个数据格式的介绍。只不过是全英的,比较磨人,当然国内也有很多大佬进行翻译总结,这里我就不再赘述,直接上网址:

  • 3DTiles官方文档:https://docs.ogc.org/cs/22-025r4/22-025r4.html#toc5
  • 国内翻译链接:https://blog.csdn.net/weixin_45782925/article/details/124360642?spm=1001.2014.3001.5506
  • 我的文章:https://blog.csdn.net/hhw_hhw/article/details/135103914?spm=1001.2014.3001.5502

2 objTo3DTiles

我试了很多工具,发现还是GitHub上的大佬做的好用,这里就直接放出链接:objTo3d-tiles工具链接。

在这里插入图片描述

2.1 工具的安装

  • 其实我之前使用GitHub的频率很少,而且也不知道怎么部署GitHub上面的工具,所以还是自己摸索了一阵。今天我就手把手教学。
  • 然后这个工具的作者也做了一个中文版的文档,我们直接看:

在这里插入图片描述

  • 文档中写了,开始使用前,确保安装了Node.js。然后运行命令:
npm install -g obj23dtiles

Node.js直接去官网下载即可,然后下载完成后打开 Windows 操作系统的 命令行解释器 也就是 cmd 。然后输入刚才的命令,然后再点击回车,就开始安装了。

  • -g 参数的意思是将工具安装到系统的全局目录,也就是说不管在哪里启动 cmd 命令都可以访问 obj23dtiles 工具。
    在这里插入图片描述

2.1.1 拓展:Node.js 和 npm

Node.js 和 npm(Node Package Manager)是两个紧密相关的工具,通常一起使用,但它们有不同的作用。

  1. Node.js:

    • Node.js 是一个基于Chrome V8引擎的 JavaScript 运行时环境,使 JavaScript 具备了在服务器端运行的能力。
    • 它允许开发者使用 JavaScript 来编写服务器端应用程序,而不仅仅是在浏览器中运行的前端脚本语言。
    • Node.js 提供了一种事件驱动的、非阻塞的 I/O 模型,使其非常适合处理大量并发连接的应用程序。
  2. npm(Node Package Manager):

    • npm 是 Node.js 的包管理工具,用于安装、分享和管理 Node.js 模块。
    • Node.js 模块是可重用的代码单元,可以通过 npm 进行安装,以便在应用程序中使用。
    • npm 还允许开发者将自己的模块发布到 npm 的仓库中,供其他开发者使用。

关系:

  • Node.js 本身提供了一个运行 JavaScript 代码的环境,但它并没有涉及到模块的管理。
  • npm 则是用于管理 Node.js 模块的工具,通过 npm 可以方便地安装、升级、卸载模块,并管理项目所依赖的模块。
  • 当你安装 Node.js 时,npm 通常也会随之安装,因此在大多数情况下,你可以直接使用 npm。

总的来说,Node.js 是提供 JavaScript 运行时环境的工具,而 npm 是用于管理 Node.js 模块的工具,二者一同构成了 Node.js 生态系统的基础。


总结:GitHub 上很多开源的工具,会将工具上传到 npm 上,然后我们可以下载 npm 工具,然后直接安装别人上传的工具。也就是说 npm 相当于一个中间站。然后在安装 Node.js 的时候会帮我们安装 npm 工具。

2.2 工具的使用

2.2.1 输出成瓦片数据

我们直接看如何将 .obj 转换为 .b3dm 格式的瓦片数据。

obj23dtiles -i ./bin/barrel/barrel.obj --tileset
// 在模型目录导出 Batchedbarrel 文件夹

这是官方给的示例

  • obj23dtiles 表示调用的工具名称
  • -i 表示接下来的参数是输入的数据
  • ./bin/barrel/barrel.obj表示是输入数据的路径和文件名
  • –tileset表示输出的是瓦片数据格式

输出的瓦片数据格式如下:是带有 tileset.json 的数据。这是3DTiles数据加载的入口,定义了数据的一下基本信息,包括数据的坐标信息。
在这里插入图片描述

2.2.2 输出带有坐标参数的瓦片数据

源码中给出了一个 customTilesetOptions.json 数据,定义了瓦片的一些信息。

{
    "longitude":      -1.31968,     // 瓦片原点(模型原点 (0,0,0)) 经度的弧度值。
    "latitude":       0.698874,     // 瓦片原点维度的弧度值。
    "transHeight":    0.0,          // 瓦片原点所在高度,单位为米。
    "region":         true,         // 使用 region 作为外包体。
    "box":            false,        // 使用 box 作为外包体。
    "sphere":         false         // 使用 sphere 作为外包体。
}

3DTiles瓦片数据使用的是 WGS84 坐标系 。
可以在输出瓦片数据的同时,将 customTilesetOptions.json 数据作为瓦片的参数一起输入。

obj23dtiles -i ./bin/barrel/barrel.obj --tileset -p ./bin/barrel/customTilesetOptions.json

输出结果如下:还是这两个文件,不过现在的瓦片数据已经是带有经纬高信息的数据了。(那么我们如何验证数据的坐标是否正确呢,那就要看本文的第三部分,查看3DTiles瓦片数据)
在这里插入图片描述

3 查看3DTiles数据

查看3DTiles数据的方式有很多,我使用的是Cesium官方的Cesium ion工具。
网址:https://cesium.com/platform/cesium-ion/

在这里插入图片描述

  1. 登入后,进入 My Asset ,然后添加数据
    在这里插入图片描述
    在这里插入图片描述
  2. 选择 Add files。选择两个文件。
    在这里插入图片描述
    在这里插入图片描述
  3. 选择 3D Tiles 数据类型。然后点击左下角的 Upload 进行数据的上传。
    在这里插入图片描述
  4. 然后回到 My Assets 界面,点击刚才新添加的数据,即可在右侧窗口进行数据的查看。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1372565.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

强化学习9——免模型预测算法介绍(蒙特卡洛方法和时步差分方法)

对于大部分情况来说,环境是未知的,也就是说状态转移概率未知,对于这种情况的算法称为免模型预测算法。免模型算法与环境不断交互学习,但是需要大量的运算。 蒙特卡洛方法 蒙特卡罗方法通过重复随机抽选,之后运用统计…

条款21:必须返回对象时,别妄想返回其引用

考虑一个表示有理数的类,其中包含一个计算两个有理数相乘的函数: class Rational { public:Rational(int numerator 0, int denominator 1) :n{ numerator }, d{ denominator }{} private:int n, d; // 分子和分母friend const Rational& operator*(const R…

vue知识-03

购物车案例 要实现的功能&#xff1a; 1、计算商品总价格 2、全选框和取消全选框 3、商品数量的增加和减少 <body> <div id"app"><div class"row"><div class"col-md-6 col-md-offset-3"><h1 class"text-center…

C++模板——(4)C++泛型编程与标准模板库简介

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 勤奋&#xff0c;机会&#xff0c;乐观…

苍穹外卖Day01——解决总结1中存在的问题

前序章节&#xff1a; 苍穹外卖Day01——总结1 解决总结1中存在的问题 1. 什么是JWT2. POJO、Entity、VO、DTO3. Nginx&#xff08;反向代理&#xff09;4. Data注解 1. 什么是JWT JWT&#xff08;JSON Web Token&#xff09;是一种用于在网络应用间传递信息的开放标准&#…

智慧校园电子班牌管理系统源码 Java Android原生

智慧校园电子班牌系统源码是一种智能化的教育管理解决方案&#xff0c;它可以在学校内实现信息共享、教学管理、学生管理、家校互通等各个方面的协调与配合&#xff0c;帮助教师、学生和家长更加高效地开展教学活动、管理学生、协同合作&#xff0c;从而推动学校教育水平的提高…

【高等数学之泰勒公式】

一、从零开始 1.1、泰勒中值定理1 什么是泰勒公式?我们先看看权威解读: 那么我们从古至今到底是如何创造出泰勒公式的呢? 由上图可知&#xff0c;任一无穷小数均可以表示成用一系列数字的求和而得出的结果&#xff0c;我们称之为“无穷算法”。 那么同理我们想对任一曲线来…

Ubuntu启动Xming报错:cannot open display: :1.0

Ubuntu启动Xming报错&#xff1a;cannot open display: :1.0 1、问题描述&#xff1a;2、问题解决&#xff1a;3、实践结果&#xff1a; 叮嘟&#xff01;这里是小啊呜的学习课程资料整理。好记性不如烂笔头&#xff0c;今天也是努力进步的一天。一起加油进阶吧&#xff01; 1、…

Android 事件分发介绍

文章目录 一、目的二、环境三、相关概念3.1 事件分发 四、详细设计4.1应用布局4.1.1 应用布局结构4.1.2 LayoutInspector 4.2 关键View&方法4.2.1 相关View4.2.2 相关方法4.2.3 View与方法关系 4.3 事件分发概念图4.3.1 事件分发类图4.3.2 事件分发模型图 4.4 Activity组件…

C#编程-描述异常

描述异常 异常是在程序执行期间出现的错误。异常情况发生在运算不能正常完成的时候。当程序中出现异常是,系统会抛出错误。错误通过异常处理过程被处理。 例如,System.IO.IOException异常在试图访问非法流对象时抛出。同样,如果分母是0,整数除法运算抛出System.DivideByZ…

02.构建和使用的大型语言模型(LLMs)阶段

我们为什么要建立自己的LLMs?LLM从头开始编码是了解其机制和局限性的绝佳练习。此外,它还为我们提供了必要的知识,可以保留或微调现有的开源LLM架构,以适应我们自己的特定领域的数据集或任务。 研究表明,在建模性能方面,定制(LLMs为特定任务或领域量身定制的)可以胜过…

前端项目构建打包生成Git信息文件

系列文章目录 TypeScript 从入门到进阶专栏 文章目录 系列文章目录前言一、前端项目构建打包生成Git信息文件作用二、步骤1.引入相关的npm包1.1. **fs** 包1.2. **child_process** 包1.3. **os** 包 (非必须 如果你想生成的文件信息中包含当前电脑信息则可用)1.4. **path** 包…

Qt QCheckBox复选按钮控件

文章目录 1 属性和方法1.1 文本1.2 三态1.3 自动排他1.4 信号和槽 2 实例2.1 布局2.2 代码实现 Qt中的复选按钮类是QCheckBox它和单选按钮很相似&#xff0c;单选按钮常用在“多选一”的场景&#xff0c;而复选按钮常用在"多选多"的场景比如喜欢的水果选项中&#xf…

Python从入门到网络爬虫(控制语句详解)

前言 做任何事情都要遵循一定的原则。例如&#xff0c;到图书馆去借书&#xff0c;就需要有借书证&#xff0c;并且借书证不能过期&#xff0c;这两个条件缺一不可。程序设计亦是如此&#xff0c;需要使用流程控制实现与用户的交流&#xff0c;并根据用户需求决定程序“做什么…

特征工程:图像数据不足时的处理办法

在机器学习中&#xff0c;绝大部分模型都需要大量的数据进行训练和学习&#xff08;包括有监督学习和无监督学习&#xff09;&#xff0c;然而在实际应用中经常会遇到训练数据不足的问题。比如图像分类&#xff0c;作为计算机视觉最基本的任务之一&#xff0c;其目标是将每幅图…

Android学习(四):常用布局

Android学习&#xff08;四&#xff09;&#xff1a;常用布局 五种常用布局 线性布局&#xff1a;以水平或垂直方向排列相对布局&#xff1a;通过相对定位排列帧布局&#xff1a;开辟空白区域&#xff0c;帧里的控件(层)叠加表格布局&#xff1a;表格形式排列绝对布局&#x…

Linux的基本指令(5)

目录 bc指令 uname指令 压缩解压相关的指令 zip指令 unzip指令 tar打包压缩指令 tar解压解包指令 ​传输指令sz&rz 热键 关机命令 安装&#xff1a;yum install -y 指令 bc指令 bc命令可以很方便的进行浮点运算 Linux中的计算器 uname指令 语法&#xff1a;unam…

MySQL之导入以及导出远程备份v

目录 一.navact数据导入导出 1.1 导入 1.2 导出 二. mysqldump命令导入导出数据 2.1 导入 2.2 导出 三.load data file进行数据导入导出&#xff08;只限于单表&#xff09; 3.1 导入 3.2 导出 四.远程连接 好啦就到这里了哦!!!希望帮到你哦!!! 一.navact数据导入导…

RIP复习实验

条件: R1为外网&#xff0c;R8和r9的环回分别是172.16.1.0/24和172.16.2.0/24 中间使用78.1.1.0/24 剩下的路由器2-6使用172.16.0.0/16 要求: R1为运营商 r1远程登录r2实际登录r7 R2访问r7要求走r5去访问 全网可达 实现流程: 首先配置好各接口ip address 然后r2-r7使用rip…

Python Matplotlib 库使用基本指南

简介 Matplotlib 是一个广泛使用的 Python 数据可视化库&#xff0c;它可以创建各种类型的图表、图形和可视化效果。无论是简单的折线图还是复杂的热力图&#xff0c;Matplotlib 提供了丰富的功能来满足我们的数据可视化需求。本指南将详细介绍如何安装、基本绘图函数以及常见…