三维数据模型(3D data models)是用于表示三维空间中的物体和场景的计算机数据结构。常见的三维数据模型包括以下几种:
这里仅做简单的科普介绍,如要深入了解可以看我之前的这篇笔记https://www.luxd.space/posts/%E5%87%A0%E4%BD%95.html,或者虎皮书Fundamenttals of Computer Graphs的第十二章Data structures for Graphis也有相关知识的深入讲解
多边形网格是一种常见的三维模型表示方法,通常采用三角形或四边形作为基本元素。多边形网格由顶点(vertices)、边(edges)和面(faces)组成。顶点记录三维坐标信息,边连接顶点,而面则由边围成。多边形网格可以表示各种复杂的三维物体,例如在计算机图形学和游戏开发中广泛使用
大多数现实世界的模型都由共享顶点的三角形组成。这些通常被称为三角形网格或三角不规则网(TIN),有效处理它们对许多图形程序的性能至关重要。
体素模型是一种将三维空间离散化为规则的体素(Voxels,体素即Volume Pixels)格子的表示方法。每个体素可以存储颜色、密度等属性数据。体素模型通常用于表示具有内部结构的物体,如医学影像(CT、MRI)和地质数据等领域。
参数化表面是通过数学函数或参数方程来定义的表面。常见的参数化表面有NURBS(非均匀有理B样条曲面)和Bezier曲面等。参数化表面具有良好的数学性质,便于精确控制几何形状。它们在计算机辅助设计(CAD)和建筑设计等领域得到了广泛应用。
隐式表面是通过隐式方程定义的三维表面,例如 f ( x , y , z ) = 0 f(x, y, z) = 0 f(x,y,z)=0。隐式表面可以表示复杂数学形状,如球体、圆锥体、超平面等。在计算机图形学中,隐式表面用于实现柔和的物体融合、建模和形状变形等效果。
点云是由大量离散的三维点组成的数据结构。每个点包含了位置信息,可能还包含颜色、法向量等属性。点云通常来源于三维扫描仪或者深度相机,用于表示实际环境中的物体和场景。点云数据可以被进一步处理,生成多边形网格等其他类型的三维模型。
三维模型数据格式多种多样,常见的有OSGB,DAE,OBJ,STL,3DS,CLM,IFC,PLY等数据格式。这些主要是桌面软件所支持的数据格式,结构较为复杂,不适于网络传输,也就是意味着如果要在web端使用这些模型一般需要进行转换压缩。
OSGB(OpenSceneGraph Binary):OSGB是一种基于OpenSceneGraph(OSG)的二进制文件格式。OSGB文件可以存储三维模型的几何信息、嵌入式链接纹理数据(.jpg)和场景图层信息。OSGB格式的优点是加载速度快,支持分层级细节(LOD)技术,适用于大规模三维场景的实时渲染。(在桌面端适用的很好)
优点:
缺点:
还有就是需要构建索引才能在ContextCapture Viewer中预览所有数据块,没有索引只能一块一块的查看。
OBJ文件格式是一种常用的三维模型文件格式,它是一种人类可读的文本格式,可以包含三角形、四边形、多边形和其他几何体的描述信息。OBJ文件格式最初由 Alias|Wavefront 公司开发,用于创建三维图形和动画。
很适合用于3D软件模型之间的互导,比如Smart3D里面生成的模型需要修饰,可以输出OBJ格式,之后就可以导入到3dsMax进行处理;或者在3dsMax中建了一个模型,想把它调到Maya里面渲染或动画,导出OBJ文件就是一种很好的选择。
目前几乎所有知名的3D软件都支持OBJ文件的读写,OBJ文件还是一种文本文件,可以直接用写字板打开进行查看和编辑修改。
OBJ文件格式通常由多个文件组成,其中包括OBJ文件(模型文件)、MTL文件和图片文件。这些文件通常被放在同一目录下,以方便引用和管理。
# 一个简单的OBJ文件格式示例
v 0.0 0.0 0.0 # 第一个顶点的位置
v 1.0 0.0 0.0 # 第二个顶点的位置
v 1.0 1.0 0.0 # 第三个顶点的位置
f 1 2 3 # 三角形面的顶点索引
OBJ文件格式的具体格式如下:
v 0.0 0.0 0.0
v 1.0 0.0 0.0
v 1.0 1.0 0.0
vn 0.0 0.0 1.0
vn 0.0 0.0 1.0
vn 0.0 0.0 1.0
vt 0.0 0.0
vt 1.0 0.0
vt 1.0 1.0
f 1/1/1 2/2/1 3/3/1
f 1/1/1 3/3/1 4/4/1
在这个例子中,顶点索引的格式是“v/vt/vn”,分别表示顶点、纹理坐标和法向量在各自列表中的索引。如果某个属性不存在,则用“-”代替。例如,如果没有纹理坐标,则格式为“v//vn”。
此外,OBJ文件格式还支持一些其他命令,例如:
# 一个MTL文件示例
newmtl material1 # 定义一个新的材质
Ka 0.2 0.2 0.2 # 环境光颜色
Kd 0.8 0.8 0.8 # 漫反射颜色
Ks 1.0 1.0 1.0 # 镜面反射颜色
map_Kd texture.jpg # 漫反射纹理贴图
示例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CQcPgYsP-1691561372691)(%E4%B8%89%E7%BB%B4%E6%B8%B2%E6%9F%93%E7%9B%B8%E5%85%B3.assets/image-20230504164123038.png#id=zbqce&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)]
FBX是一种通用的三维模型格式,由Autodesk公司开发和维护。它是一种二进制文件格式,旨在支持不同3D软件之间的数据交换和互操作性。FBX文件可以包含几何体、材质、动画、灯光、相机、约束等多种类型的数据。
FBX格式的优点之一是在不同的3D软件之间转换时的高度兼容性。许多3D软件都支持导入和导出FBX文件,包括3ds Max、Maya、Blender、Cinema 4D等。这使得FBX成为一种常见的数据交换格式,可以在不同的软件之间轻松地共享3D模型和相关的数据。
FBX还支持动画数据的存储和传输,包括关键帧动画和骨骼动画。这使得FBX成为游戏开发、影视制作等行业中常用的格式之一。在游戏开发中,开发人员可以使用FBX格式将3D模型和动画从艺术家或外部制作公司导入到游戏引擎中。
示例:https://sketchfab.com/3d-models/placeholder-cube-1-7b56b13a97df40c48d678c799d6e7231
STL是一种常用的三维模型数据格式,它是由3D Systems公司在1987年开发的。STL代表“STereoLithography”,是一种用于快速原型制造的文件格式。STL文件以二进制或ASCII格式存储,其中包含物体的表面几何信息
STL文件由一系列三角形组成,每个三角形都由三个顶点和一个法线向量定义。STL文件中的三角形数量决定了物体的精度和细节程度。STL文件中不包含材质、纹理、颜色、动画等其他信息。因此,STL文件通常用于制造原型或快速建模,而不是用于渲染或动画等高级应用。
优点:
简单性和通用性。几乎所有3D软件都支持导入和导出STL文件,因此可以在不同的软件之间轻松共享3D模型。此外,STL文件非常小,可以快速加载和处理,这使得它们在快速原型制造和3D打印等应用中非常有用。
局限性:
由于STL文件只包含表面几何信息,因此无法描述内部结构、孔洞、壳厚度等特性。另外,STL文件的精度受到三角形数量的限制,当三角形数量不足时,模型的曲面会出现锯齿状或平滑度不足的问题
3DS是3dsMax建模软件的衍生文件格式,做完MAX的场景文件后可导出成3DS格式,可与其他建模软件兼容,也可用于渲染。
优点:
局限性:
由于其二进制格式,3DS文件不容易进行版本控制和修改。此外,3DS文件的文件大小通常很大,因为它们包含了大量的数据类型和细节。另外,3DS文件的精度受到三角形数量的限制,当三角形数量不足时,模型的曲面会出现锯齿状或平滑度不足的问题。
DAE(Digital Asset Exchange)是一种基于XML的开放式三维模型交换格式,由Collada工作组开发。DAE文件包含了三维模型、材质、动画、灯光等信息,可以在不同的3D软件之间进行导入和导出。
优点:
局限性:
PLY(Polygon File Format)是一种用于存储三维模型的文件格式,由斯坦福大学图形实验室开发。PLY文件格式既可以存储三角形网格模型,也可以存储点云模型,是一种非常灵活和通用的三维模型数据格式。
优点:
局限性:
以下是常见的Web渲染引擎(Cesium、Three.js、Babylon.js、deck.gl、Mapbox GL JS)支持的三维数据格式:
Cesium:
Three.js:
Babylon.js:
deck.gl:
Mapbox GL JS:
对于Web端,因为网络传输性能的瓶颈,是不太适合直接使用桌面端常见的三维数据格式的,因为其文件通常很大,还有一些兼容性的问题,常见的Web渲染引擎也不支持。
glTF(全称为GL Transmission Format)是一种基于JSON的开放标准的三维模型文件格式,由Khronos Group开发,旨在提供一种在WebGL、OpenGL和Vulkan等3D图形API中高效传输和加载三维模型的标准格式。glTF支持几何体、材质、纹理、动画、骨骼和节点层次结构等多种三维模型和场景元素。
glTF 1.0和glTF 2.0是glTF规范的两个版本,它们之间有很多的区别和改进。下面是它们的主要区别:
.gltf是一种开放标准的三维模型文件格式,它使用JSON格式来描述三维模型的几何形状、材质、动画和其他相关信息。.gltf文件可以包含多个文件,例如二进制文件、纹理文件和其他资源文件。.gltf文件可以在WebGL和OpenGL等图形API中使用,可以在Web浏览器中直接加载和渲染。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OnHYRGvW-1691561372692)(%E4%B8%89%E7%BB%B4%E6%B8%B2%E6%9F%93%E7%9B%B8%E5%85%B3.assets/image-20230504181927988.png#id=r6Hkh&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)]
.glb是.gltf的二进制版本,它将所有的模型数据存储在一个二进制文件中,包括几何形状、材质、动画和其他相关信息。.glb文件比.gltf文件更紧凑,因为它们不需要加载多个文件
cesium示例中的glb模型:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bbj0xwjk-1691561372693)(%E4%B8%89%E7%BB%B4%E6%B8%B2%E6%9F%93%E7%9B%B8%E5%85%B3.assets/image-20230504182917773.png#id=JxpTY&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)]
3D Tiles 是 Cesium 提出的处理三维地理大数据的数据格式,从结构关系上看,3DTiles 归属于Primitive,具有很高的数据加载效率。
3D Tiles 是 Cesium 于2016 年3月定义的一种三维模型瓦片数据结构。3DTiles 将海量三维数据以分块、分层的形式组织起来,这样就大大减轻了浏览器和图形处理单元(GPU)的负担。3D Tiles数据的特点如下:
3D Tiles数据结构由两部分组成,一个是JSON格式的数据组织文件tileset.json,另外是每个瓦片节点对应的模型文件,3Dtiles支持的模型文件格式有.b3dm、.i3dm、.pnts、.vctr、.cmpt五种:
在1.0 版本的规范中,瓦片所引用的二进制的瓦片数据文件,有四种类型:.b3dm、.i3dm、.pnts、.cmpt
格式名称 | 说明 |
---|---|
Batched 3D Model( * . b3dm) | 用于具有不同几何、材质或贴图的异质模型网格 |
Instanced 3D Model( * . i3dm) | 实例化的模型,应用同一个三维模型,用于树木等相同的地物可视化 |
Point Cloud ( * . pnts) | 用于点云数据的可视化 |
Vector Data ( * . vctr) | 用手矢量数据的可视化 |
Composite( * . cmpt) | 上述几种格式的组合 |
一个tielset.json文件中最层级的对象中通常有这四个属性:
- 瓦片对象记录的就是瓦片的元数据,真正瓦片的本体数据在content所引用的二进制文件中
- 瓦片还可以再引用 3dTiles 数据集(套娃)
这里重点说说root瓦片及其children:
树结构对于三维空间数据的组织有很大的优势。3dTiles在空间上允许数据集使用如下几种树结构:
目前主要将四类三维数据格式模型 BIM、3ds Max 模型、倾斜摄影数据模型、简易三维模型生成为3D Tiles以在web端使用
3dTiles采用的是WGS84椭球,但是并未采用经纬度记录数据:因为相对于精细三维模型来说,经纬度不足以提供足够精确的空间分割(要照顾图形显示问题)。所以,同样是那个形状,3dTiles使用了同一个WGS84椭球,但是更方便计算的坐标:空间直角坐标。(三维笛卡尔坐标)
用经纬度记录数据的WGS84坐标系,WKID是4326,用地心为坐标原点的空间直角坐标来记录数据的坐标系,WKID是4979.
3dTiles 用的就是4979坐标系。
体积渲染(Volume Rendering)是一种用于可视化三维数据的技术,它通过对数据的密度、颜色和透明度进行处理,将数据转换为图像或动画。与表面渲染不同,体积渲染不需要先将数据转换为表面网格,而是直接对数据进行处理,从而能够更全面地呈现数据的内部结构。
体积渲染的原理是基于光线追踪和体积光学的原理。在渲染过程中,光线从视点出发,经过数据中的每个点,并在每个点处计算出颜色、透明度等属性,最终形成一幅图像或动画。由于数据通常是非常大的,因此需要使用高性能计算机和专用的体积渲染软件来实现。
体积渲染在医学、科学、工程、地质和气象等领域都有广泛的应用,能够帮助人们更好地理解和分析数据,以便做出更好的决策。
它原是摄影测量软件开发商 Acute3D 的主打产品,后来 Acute3D 被 Bentley 公司(没错,就是和汽车品牌宾利一个名字,但不是同一家公司)收购,更名为 ContextCapture。
它可以通过使用不同的图像和激光扫描数据,创建高精度的三维模型。ContextCapture软件可以将从无人机、航空或地面扫描仪中获取的图像和激光扫描数据进行处理,从而生成高度准确的模型。
ContextCapture具有多种功能和特点,包括:
OSGB
、OBJ
、FBX
、COLLADA
和STL
等,以便在其他软件中使用。Pix4Dmapper是一款由瑞士公司Pix4D开发的专业无人机影像处理软件,是一款专门用做测绘的软件,从数据采集(pix4Dcapture)到DOM、DSM及三维模型生产都有涉及。但是三维效果相对于samrt3D来说还是有些差距,但DOM正射影像生成更胜一筹。它可以将无人机采集的航拍图像、激光雷达数据和其他传感器数据转换为高精度的3D模型和地图。该软件的主要功能包括图像处理、点云生成和三维建模等。
Pix4Dmapper的主要特点和优势包括:
PhotoScan是由Agisoft LLC研发生产,是一款全自动生产三维模型的建模软件。我用这款软件较少,处理过少量的数据,把结果分项给大家,效果一目了然。这款软件操作简单,无特殊和难理解的参数需要设置,但是对于数据处理的容错率较低,易报错
文章浏览阅读3k次,点赞3次,收藏13次。root@server ~]# vim /etc/named.rfc1912.zones #添加如下内容,也可直接更改模板。[root@server ~]# vim /etc/named.conf #打开主配置文件,将如下两处地方修改为。注意:ip地址必须反向书写,这里文件名需要和反向解析数据文件名相同。新建或者拷贝一份进行修改。nslookup命令。_dns反向解析
文章浏览阅读2.5w次,点赞16次,收藏103次。这个函数TIM_SetCompare1,这个函数有四个,分别是TIM_SetCompare1,TIM_SetCompare2,TIM_SetCompare3,TIM_SetCompare4。位于CH1那一行的GPIO口使用TIM_SetCompare1这个函数,位于CH2那一行的GPIO口使用TIM_SetCompare2这个函数。使用stm32f103的除了tim6和tim7没有PWM..._tim_setcompare1
文章浏览阅读950次,点赞33次,收藏19次。多线程_进程和线程,并发与并行,线程优先级,守护线程,实现线程的四种方式,线程周期;线程同步,线程中的锁,Lock类,死锁,生产者和消费者案例
文章浏览阅读2.9k次。ifort 编译器的安装ifort 编译器可以在 intel 官网上下载。打开https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/fortran-compiler.html#gs.7iqrsm点击网页中下方处的 Download, 选择 Intel Fortran Compiler Classic and Intel Fortran Compiler(Beta) 下方对应的版本。我选择的是 l_在linux系统的用户目录下安装ifort和mkl库并配置
文章浏览阅读689次,点赞7次,收藏8次。些项目时需要一个生成图片的方法,我在网上找到比较方便且适合我去设置一些样式的生成方式之一就是使用Freemarker,在对应位置上先写好一个html格式的ftl文件,在对应位置用${参数名}填写上。还记得当时为了解决图片大小设置不上,搜索了好久资料,不记得是在哪看到的需要在里面使用width与height直接设置,而我当时用style去设置,怎么都不对。找不到,自己测试链接,准备将所有含有中文的图片链接复制一份,在服务器上存储一份不带中文的文件。突然发现就算无中文,有的链接也是打不开的。_ftl格式pdf的样式调整
文章浏览阅读1.5k次,点赞6次,收藏12次。拉取librealsense。_opt/ros/noetic/lib/nodelet/nodelet: symbol lookup error: /home/admin07/reals
文章浏览阅读3.4k次,点赞3次,收藏29次。一.单选题二.填空题三.判断题一.单选题静态链接是在( )进行的。A、编译某段程序时B、装入某段程序时C、紧凑时D、装入程序之前Pentium处理器(32位)最大可寻址的虚拟存储器地址空间为( )。A、由内存的容量而定B、4GC、2GD、1G分页系统中,主存分配的单位是( )。A、字节B、物理块C、作业D、段在段页式存储管理中,当执行一段程序时,至少访问()次内存。A、1B、2C、3D、4在分段管理中,( )。A、以段为单位分配,每._系统抖动现象的发生由什么引起的
文章浏览阅读2.4k次。在实际的工作生产中,零件的加工制造一般都需要二维工程图来辅助设计。UG NX 的工程图主要是为了满足二维出图需要。在绘制工程图时,需要先确定所绘制图形要表达的内容,然后根据需要并按照视图的选择原则,绘制工程图的主视图、其他视图以及某些特殊视图,最后标注图形的尺寸、技术说明等信息,即可完成工程图的绘制。1.视图选择原则工程图合理的表达方案要综合运用各种表达方法,清晰完整地表达出零件的结构形状,并便于看图。确定工程图表达方案的一般步骤如下:口分析零件结构形状由于零件的结构形状以及加工位置或工作位置的不._ug-nx工程图
文章浏览阅读920次,点赞29次,收藏18次。原文《智能制造数字化工厂智慧供应链大数据解决方案》PPT格式主要从智能制造数字化工厂智慧供应链大数据解决方案框架图、销量预测+S&OP大数据解决方案、计划统筹大数据解决方案、订单履约大数据解决方案、库存周转大数据解决方案、采购及供应商管理大数据模块、智慧工厂大数据解决方案、设备管理大数据解决方案、质量管理大数据解决方案、仓储物流与网络优化大数据解决方案、供应链决策分析大数据解决方案进行建设。适用于售前项目汇报、项目规划、领导汇报。
文章浏览阅读2w次,点赞38次,收藏102次。在服务器端,socket()返回的套接字用于监听(listen)和接受(accept)客户端的连接请求。这个套接字不能用于与客户端之间发送和接收数据。 accept()接受一个客户端的连接请求,并返回一个新的套接字。所谓“新的”就是说这个套接字与socket()返回的用于监听和接受客户端的连接请求的套接字不是同一个套接字。与本次接受的客户端的通信是通过在这个新的套接字上发送和接收数_当在函数 'main' 中调用 'open_socket_accept'时.line: 8. connection request fa
文章浏览阅读4.3k次。对象销毁对象销毁的标准语法Close和Stop何时销毁对象销毁对象时清除字段对象销毁的标准语法Framework在销毁对象的逻辑方面遵循一套规则,这些规则并不限用于.NET Framework或C#语言;这些规则的目的是定义一套便于使用的协议。这些协议如下:一旦销毁,对象不可恢复。对象不能被再次激活,调用对象的方法或者属性抛出ObjectDisposedException异常重复地调用对象的Disposal方法会导致错误如果一个可销毁对象x 包含或包装或处理另外一个可销毁对象y,那么x的Disp_c# 销毁对象及其所有引用
文章浏览阅读1.1w次。这是记录,在中项、高项过程中的错题笔记;https://www.zenwu.site/post/2b6d.html1. 信息系统的规划工具在制订计划时,可以利用PERT图和甘特图;访谈时,可以应用各种调查表和调查提纲;在确定各部门、各层管理人员的需求,梳理流程时,可以采用会谈和正式会议的方法。为把企业组织结构与企业过程联系起来,说明每个过程与组织的联系,指出过程决策人,可以采用建立过程/组织(Process/Organization,P/O)矩阵的方法。例如,一个简单的P/O矩阵示例,其中._大型设备可靠性测试可否拆解为几个部分进行测试