【数字孪生】Nginx发布数字孪生三维建模模型服务及调用方法
- 一、需求
- 二、实施步骤
- 2.1 准备模型文件
- 2.1.1 3D tiles模型
- 2.1.2 3D Tiles标准文件格式
- 2.2 配置nginx server块
- 2.2.1 Nginx能干啥
- 2.3 访问
- 三、实现效果
一、需求
利用三维渲染引擎Cesium加载3D tiles模型。
二、实施步骤
2.1 准备模型文件
2.1.1 3D tiles模型
3D tiles模型是一种用于三维地理信息系统(GIS)和建筑信息模型(BIM)的数据格式。这种模型被设计用来高效地存储和传输大量的3D空间数据,它能够支持高分辨率的3D地图和复杂的城市景观。
3D tiles模型主要包含以下几个关键的组成部分:
- 层次结构:3D tiles将一个大型的3D模型分解成许多小的、可管理的部分,称为瓦片(tiles)。每个瓦片代表模型中的一个较小区域。这种层次结构使得它能够处理非常庞大的三维数据集。
- 数据编码:瓦片中的数据通常以一种高效的方式进行编码,例如使用一种叫做“Point Cloud Compression”的压缩技术,这可以大大减少存储需求和加快传输速度。
- 灵活性:3D tiles模型支持多种类型的数据,包括点云、纹理、法线、颜色等。这使得它非常适合用于复杂的3D场景,如城市规划、建筑设计、环境监测等。
- 兼容性:该模型已经被多个标准和开源GIS和BIM软件支持,例如CesiumJS、Three.js、Blender等,这使得3D tiles模型具有很好的互操作性。
- 高效加载:3D tiles模型支持渐进式加载,这意味着可以先加载用户当前需要的部分,而不是整个模型。这大大提高了用户体验,特别是在网络条件有限的情况下。
总的来说,3D tiles模型提供了一种高效、灵活且易于使用的手段来处理和传输3D空间数据,这在今天越来越重视三维可视化和虚拟现实的世界中具有重要意义。
2.1.2 3D Tiles标准文件格式
3D Tiles标准是一种用于传输和存储大规模3D城市景观、地形和其他3D数据的文件格式和数据结构。它由几个不同的文件格式组成,这些格式协同工作以支持3D数据的加载、渲染和交互。3D Tiles标准文件格式主要包括以下几种:
- .b3dm (Binary 3D Model):
- 包含模型数据的二进制文件格式,通常用于存储复杂的3D模型,如建筑物、地形等。
.b3dm
文件可以直接被WebGL等图形API使用,不需要额外的解析步骤。
- 包含模型数据的二进制文件格式,通常用于存储复杂的3D模型,如建筑物、地形等。
- .i3dm (Instanced 3D Model):
- 包含实例化3D模型的数据,这种格式用于存储可以重复使用的3D对象,如城市中的建筑物或地形中的树木。
.i3dm
文件包含一个指向实际模型数据的引用(如.b3dm
文件)以及定义实例位置、旋转和缩放属性的数据。
- 包含实例化3D模型的数据,这种格式用于存储可以重复使用的3D对象,如城市中的建筑物或地形中的树木。
- .pntm (Point Cloud Metadata):
- 用于存储点云数据的文件格式。点云数据通常用于表示大量的点状对象,如城市中的灯柱或地形中的树木。
- .qtm (Quadtree Metadata):
- 用于存储瓦片索引数据的文件格式。瓦片是3D Tiles数据集的基本组织单位,
.qtm
文件包含瓦片的层级结构和引用。
- 用于存储瓦片索引数据的文件格式。瓦片是3D Tiles数据集的基本组织单位,
- .json (JSON):
- 用于存储3D Tiles集的元数据,如场景描述、瓦片配置、样式信息等。
.json
文件定义了整个3D场景的结构和内容。
- 用于存储3D Tiles集的元数据,如场景描述、瓦片配置、样式信息等。
- .glb (GLTF Binary):
- 虽然不是3D Tiles标准的一部分,但
.glb
文件格式常与3D Tiles一起使用。它是一种二进制格式的GLTF(Game Loading and Interaction Format)文件,用于存储3D模型数据。.glb
文件可以被.b3dm
文件引用,作为实际模型数据的一部分。
这些文件格式共同构成了3D Tiles数据集,支持大规模、高效的3D地理空间数据可视化。3D Tiles标准还定义了如何将这些文件组织成一个目录结构,以及如何通过HTTP协议进行数据的传输和加载。
- 虽然不是3D Tiles标准的一部分,但
2.2 配置nginx server块
server {
listen 80;
server_name 127.0.0.1;
#增加文件类型
types {
application/octet-stream b3dm;
}
#访问的路径
location /3dtiles {
#存放模型的文件夹
alias F:/mars3d-max-shihua-3dtiles-master;
autoindex on;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods "GET, OPTIONS";
add_header Access-Control-Allow-Headers "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type";
add_header Access-Control-Allow-Credentials true;
}
}
2.2.1 Nginx能干啥
Nginx的灵活性和模块化设计使得它能够适应多种不同的服务器角色,并且通过配置文件进行简单的修改就可以切换不同的服务类型。这使得Nginx成为了一个非常强大和多用途的网络服务器解决方案。
以下是Nginx可以充当的一些主要服务器类型:
- HTTP服务器:
- 这是Nginx最基本的角色,作为Web服务器直接为客户端提供HTTP服务。它可以提供静态资源,如网页、图片、CSS文件等。
- 反向代理服务器:
- 当Nginx作为反向代理服务器时,它接受客户端的请求,将请求转发给后端服务器,并将响应返回给客户端。这可以用于负载均衡、缓存静态内容、TLS终止(SSL Offload)等。
- 负载均衡器:
- Nginx可以通过分配请求到多个后端服务器来平衡负载,从而提高应用程序的性能和可靠性。它支持多种负载均衡算法,如轮询、最少连接、IP哈希等。
- 应用服务器:
- 虽然Nginx不是传统意义上的应用程序服务器,但它可以通过配置模块来支持各种应用程序服务,如提供PHP、Python、Node.js等语言的处理能力。
- 邮件代理服务器:
- Nginx可以配置为SMTP、IMAP和POP3邮件代理服务器,用于处理邮件传输和存储。
- 文件服务器:
- Nginx可以用来共享和管理文件,通过配置目录列表或提供文件下载功能。
- API服务器:
- Nginx可以作为API的网关,处理API请求,将请求转发到后端服务,并且可以进行权限校验、数据格式转换等。
- 视频流媒体服务器:
- 通过配置相应的模块,Nginx可以支持视频流媒体服务,如使用HLS(HTTP Live Streaming)或DASH(Dynamic Adaptive Streaming over HTTP)来传输视频内容。
2.3 访问
重启nginx后,修改cesium资源加载URL,
const tileset = new Cesium.Cesium3DTileset({
url: "http://127.0.0。1/3dtiles/shihua/tileset.json",
});
三、实现效果
一般地,3D Tiles数据文件夹下包含一个html文件,双击就可以看到模型渲染效果。