PLY模型格式详解【3D】

这篇具有很好参考价值的文章主要介绍了PLY模型格式详解【3D】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文介绍PLY 多边形文件格式,这是一种用于存储被描述为多边形集合的图形对象。 PLY文件格式的目标是提供一种简单且易于实现但通用的格式足以适用于各种模型。 PLY有两种子格式:易于入门的 ASCII 表示形式和用于紧凑存储和快速保存和加载的二进制格式。 我们希望这种格式将促进程序之间以及人群之间的图形对象的交换。

PLY模型格式详解【3D】,3d
如果需要将gltf、fbx、obj、dae等格式的3D模型转换到PLY格式,可以使用这个在线的 3D模型格式转换 工具。

1、PLY格式概述

任何在计算机图形领域工作过一段时间的人时间知道图形存储格式的令人眼花缭乱的阵列对象。 似乎每个程序员、每个新的编程项目都创建一种新的文件格式。

走出这个泥沼的出路是创建一个足够灵活的单一文件格式预测未来的需求,这很简单,以免被赶走潜在用户。 一旦定义了这样的格式,就会出现一套实用程序可以围绕这个格式编写。 添加到套件中的每个新实用程序都可以利用其他人的成果。

PLY 格式将对象描述为顶点、面和其他元素,以及颜色和法线方向等可以附加到这些元素上的属性。PLY 文件包含恰好是一个对象的以下描述。

此类对象的来源包括:手工数字化对象,来自建模程序的多边形对象、范围数据、行进立方体三角化(体积数据的等值面)、地形数据、光能传递模型等。

可能与对象一起存储的属性包括:颜色、表面法线、纹理坐标、透明度、范围数据置信度,以及多边形正面和背面的不同属性。

PLY 格式并非旨在作为一般场景描述语言、着色语言或包罗万象的建模格式。 这意味着它不包括变换矩阵、对象实例化、建模层次结构或对象子部分。

典型的 PLY 对象定义只是 (x,y,z) 三元组的顶点列表和面列表,由列表中的索引描述顶点。 大多数 PLY 文件都包含此核心信息。 顶点和面是“元素”的两个示例,PLY 文件的大部分内容是其列表元素。 给定文件中的每个元素都有固定数量的“属性”
为每个元素指定。

PLY 文件中的典型信息只包含两个元素,顶点的 (x,y,z) 三元组和每个面的顶点索引。 应用程序可以创建附加到对象元素的新属性。 例如,红色、绿色和蓝色的属性通常与顶点元素相关。 添加新的属性时,旧程序不应被中断,解释不了的可以被丢弃。

此外,还可以创建一个新元素类型并定义与该元素关联的属性。 新元素的例子是边、单元(指向面的指针列表)和材质(环境、漫反射和镜面反射颜色和系数)。 新元素还可以被不理解它们的程序携带或丢弃。

2、PLY文件结构

这是典型 PLY 文件的结构:

  • 标头
  • 顶点列表
  • 面列表
  • 其他元素的列表

标头是一系列以回车符结尾的文本行,描述文件的其余部分。 标头包含每个的描述
元素类型,包括元素的名称(例如 edge),有多少个这样的元素位于对象中,以及关联的各种属性的列表与元素。 标头还表明该文件是二进制文件还是 ASCII 文件。标头后面是每种元素类型的元素列表,按照表头中描述的顺序出现。

以下是一个立方体模型的完整 ASCII 描述。 同一对象的二进制文件的标头
仅仅是用 binary_little_endian或 binary_big_endian 代表单词 ascii。 这
括号中的注释不是文件的一部分,它们是对此示例的注释。 文件中的注释是普通的关键字标识行,以 comment 开头。

ply
format ascii 1.0           { ascii/binary, format version number }
comment made by anonymous  { comments keyword specified, like all lines }
comment this file is a cube
element vertex 8           { define "vertex" element, 8 of them in file }
property float32 x         { vertex contains float "x" coordinate }
property float32 y         { y coordinate is also a vertex property }
property float32 z         { z coordinate, too }
element face 6             { there are 6 "face" elements in the file }
property list uint8 int32 vertex_index { "vertex_indices" is a list of ints }
end_header                 { delimits the end of the header }
0 0 0                      { start of vertex list }
0 0 1
0 1 1
0 1 0
1 0 0
1 0 1
1 1 1
1 1 0
4 0 1 2 3                  { start of face list }
4 7 6 5 4
4 0 4 5 1
4 1 5 6 2
4 2 6 7 3
4 3 7 4 0

这个示例演示了标头的基本组成部分。 各部分标头是一个以关键词开头、以回车符结尾的 ASCII 字符串,甚至标题的开始和结束( ply和 end_header)也采用这种形式。

字符 ply必须是文件的前四个字符,因为它们是文件的魔力数字。 标题开头之后是关键字 format和ASCII 或二进制格式的规范,后跟版本数字。 接下来是多边形中各个元素的描述,并且在每个元素描述中是规范特性。 通用元素描述具有以下形式:

element <element-name> <number-in-file>
property <data-type> <property-name-1>
property <data-type> <property-name-2>
property <data-type> <property-name-3>
...

element行后面列出的属性定义了属性的数据类型以及该属性在每个元素中出现的顺序。属性可能具有三种数据类型:标量、字符串和列表。 以下是属性可能具有的标量数据类型的列表:

name type number of bytes
int8 character 1
uint8 unsigned character 1
int16 short integer 2
uint16 unsigned short integer 2
int32 integer 4
uint32 unsigned integer 4
float32 single-precision float 4
float64 double-precision float 8

这些字节数很重要,并且在不同的实现中不得有所不同以保证这些文件可移植。 有一种特殊形式的属性定义使用列表数据类型:

  property list <numerical-type> <numerical-type> <property-name>

上面的立方体数据集文件中的一个示例:

  property list uint8 int32 vertex_index

这意味着属性 vertex_index 首先包含一个无符号字符标识属性包含多少个索引,后跟一个包含的证书列表。 这个可变长度列表中的每个整数都是一个顶点的索引。

3、PLY文件的另一个例子

这是另一个立方体定义:

ply
format ascii 1.0
comment author: anonymous
comment object: another cube
element vertex 8
property float32 x
property float32 y
property float32 z
property red uint8                     { start of vertex color }
property green uint8
property blue uint8
element face 7
property list uint8 int32 vertex_index { number of vertices for each face }
element edge 5                         { five edges in object }
property int32 vertex1                 { index to first vertex of edge }
property int32 vertex2                 { index to second vertex }
property uint8 red                     { start of edge color }
property uint8 green
property uint8 blue
end_header
0 0 0 255 0 0                          { start of vertex list }
0 0 1 255 0 0
0 1 1 255 0 0
0 1 0 255 0 0
1 0 0 0 0 255
1 0 1 0 0 255
1 1 1 0 0 255
1 1 0 0 0 255
3 0 1 2                           { start of face list, begin with a triangle }
3 0 2 3                           { another triangle }
4 7 6 5 4                         { now some quadrilaterals }
4 0 4 5 1
4 1 5 6 2
4 2 6 7 3
4 3 7 4 0
0 1 255 255 255                   { start of edge list, begin with white edge }
1 2 255 255 255
2 3 255 255 255
3 0 255 255 255
2 0 0 0 0                         { end with a single black line }

该文件为每个顶点指定红色、绿色和蓝色值。 为说明 vertex_index 的可变长度性质,对象的前两个面是三角形而不是正方形。 这意味着对象的面数为 7。

该对象还包含一个边的列表。 每条边都包含两个指向边的顶点的指针。 每个边也有一种颜色。 上面定义的五个边突出显示文件中的两个三角形。 前4条边是白色的,它们围绕着两个三角形。 最终的边是黑色,它是分隔三角形的边。

4、PLY自定义元素

上面的例子展示了三个元素的使用:顶点、面和边。 PLY 格式还允许用户定义自己的元素。

定义新元素的格式与定义顶点、边和面完全相同。 这是定义材质属性的标头:

element material 6
property ambient_red uint8               { ambient color }
property ambient_green uint8
property ambient_blue uint8
property ambient_coeff float32
property diffuse_red uint8               { diffuse color }
property diffuse_green uint8
property diffuse_blue uint8
property diffuse_coeff float32
property specular_red uint8              { specular color }
property specular_green uint8
property specular_blue uint8
property specular_coeff float32
property specular_power float32          { Phong power }

这些行将直接出现在标题中的顶点、面和边的规范之后。 如果我们希望每个顶点都有一个材质,我们可以将此行添加到顶点属性的末尾:

property material_index int32

这个整数是文件中包含的材质列表的索引。对于一个新应用程序的作者来说,发明几个要存储在 PLY 文件中的元素可能很吸引人。这种做法应该保持克制。 更好的方法是尝试调整常见元素(顶点、面、边、材质)到新用途,以便其他理解这些的程序elements 可能有助于操作这些元素。

例如,一个将分子描述为球体和柱体集合的应用程序, 为PLY增加包含分子的 球体和圆柱体元素的定义是很诱人的。 但是,如果我们使用顶点和边为此目的的元素(为每个元素添加半径属性),我们可以继续这些旧的程序。 显然不应为三角形和四边形创建特殊元素,而是使用face 元素。


原文链接:原文链接 — BimAnt文章来源地址https://www.toymoban.com/news/detail-644180.html

到了这里,关于PLY模型格式详解【3D】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity】模型文件格式、常见3D模型格式

    Unity 支持多种标准和专有模型文件格式。Unity 内部使用 .fbx 文件格式作为其导入链。最佳做法尽可能使用 .fbx 文件格式,并且不应在生产中使用专有文件格式。 标准文件格式 Unity 可读取以下标准 3D 文件格式: .fbx .dae (Collada) .dxf .obj 这些文件格式受到广泛支持。这些类型的文

    2024年01月17日
    浏览(45)
  • open3d操作.ply文件(点云)

    读取.ply文件

    2024年02月14日
    浏览(31)
  • Open3d读写ply点云文件

    本文为博主原创文章,未经博主允许不得转载。 本文为专栏《python三维点云从基础到深度学习》系列文章,地址为“https://blog.csdn.net/suiyingy/article/details/124017716”。         Open3d是由Intel发布的一个开源库,支持快速开发和处理3D数据。Open3D在c++和Python中公开了一组精心选

    2023年04月08日
    浏览(39)
  • 3D模型格式转换工具HOOPS Exchange:如何将3D PDF转换为STEP格式?

    3D CAD数据在制造、工程和设计等各个领域都扮演着重要的角色。为了促进不同软件应用程序之间的协作和互操作性,它通常以不同的格式进行交换。 HOOPS Exchange是一个强大的软件开发工具包,提供了处理和将3D CAD数据从一种格式转换为另一种格式的解决方案。 在本文中,我们

    2024年02月04日
    浏览(47)
  • 3D模型在线查看利器【多种格式】

    BimAnt 3DViewer网站可以 打开多种 3D 文件格式并在你的浏览器中可视化展示3D模型,支持 obj、3ds、stl、ply、gltf、glb、off、 3dm、fbx 等等。 BimAnt 3DViewer网站支持多种文件格式的导入和导出。 如果文件格式有文本和二进制版本,通常建议使用二进制版本。 格式 后缀 类型 导入 导出

    2024年02月04日
    浏览(46)
  • three.js加载3D模型,在网页上展示3D模型(.glb.gltf.fbx格式)

    Three.js是一款开源的主流3D绘图JS引擎,简单点,可以将它理解为three+js就可以了,three表示3D,js表示JavaScript的意思。 结构  .glb.gltf文件最好放在服务器上 放在本地容易报找不到的错 .fbx格式文件可以在本地用3d看图(win10自带)打开另存为.glb格式 index.html代码 js代码 项目案例

    2024年02月11日
    浏览(54)
  • STL文件格式详解【3D】

    STL(StereoLithography:立体光刻)文件是 3 维表面几何形状的三角形表示。 表面被逻辑地细分或分解为一系列小三角形(面)。 每个面由垂直方向和代表三角形顶点(角)的三个点来描述。 切片算法使用这些数据来确定制造商要构建的 3 维形状的横截面。 本文描述了 STL 文件

    2024年02月13日
    浏览(44)
  • qt加载obj格式的3D模型

    在 Qt 中加载 obj 格式的 3D 模型可以使用 Qt 3D 模块。 首先,你需要在你的工程文件中包含 Qt 3D 模块,方法是在工程文件的顶部添加以下行: 然后,在你的代码中包含 Qt 3D 的头文件: 接下来,你可以使用 Qt3DRender::QObjLoader 类来加载 obj 格式的 3D 模型。首先,创建一个 Qt3DRen

    2024年02月16日
    浏览(64)
  • cesium加载glb格式的3d模型

    官方示例: Cesium Sandcastle https://sandcastle.cesium.com/?src=3D%20Models.htmllabel=Tutorials glb模型下载:https://sandcastle.cesium.com/SampleData/models/CesiumAir/Cesium_Air.glb   

    2024年02月11日
    浏览(34)
  • 3D模型格式转换工具HOOPS Exchange对工业级3D产品HOOPS的支持与应用

    一、概述 HOOPS Exchange是一套高性能模型转换软件库,可以给软件提供强大的模型的导入和导出功能,我们可以将其单独作为转换工具使用,也可以将其集成到自己的软件中。 同样,HOOPS 的其它产品,也离不开HOOPS Exchange的支持,它们也需要HOOPS Exchange为其提供模型的导入和导

    2024年02月07日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包