三维模型文件格式解读

news/2025/2/11 17:00:17/文章来源:https://www.cnblogs.com/gshang/p/18580764

最近接触到三维模型文件,发现格式五花八门的,这里做一个汇总和解读。

STL

简介

STL,全称为STereoLithography,译作:立体光刻,由3D System软件公司创立。但因三角网格形式的其特点,又可以翻译为“标准三角语言(Standard Triangle Language)”,“标准曲面细分语言(Standard Tessellation Language)”。

STL文件使用若干个非结构化的三角网格来记录三维实体信息。在笛卡尔坐标系中,每一个三角网格由三个顶点按照右手定则排序方式构成,同时按照右手定则记录一个与之对应的表面单位法线信息。文件记录的坐标信息是没有尺度的,计量单位为任意的。

文件格式

solid name
facet normal ni nj nk
outer loop
vertex v1x v1y v1z
vertex v2x v2y v2z
vertex v3x v3y v3z
endloop
endfacet
endsolid name

在stl中,允许存在多个实体对象。通过 solid nameendsolid name 这一对关键词来描述一个实体对象。其中 name 是实体对象的名称,可以省略,因为通常一个stl文件只存一个实体对象。

solid name
……
endsolid name

在实体对象中,一般存在若干个面片(facet),通过facetendfacet 这一对关键词来描述一个面片。而面片描述信息包括法向量(normal)信息,以及构成面片的三个顶点(vertex)。其中法向量使用 facet normal ,后接 nj nj nk 三个浮点数,表示法向量(\(n_i\), \(n_j\), \(n_k\))。面片的三个顶点通常要成组出现,使用outer loopendloop 这对关键词来分割。顶点的坐标使用vertex来描述,后接v1x v1y v1z 三个浮点数,表示坐标(\(v_{1x},v_{1y},v_{1z}\)) 。

facet normal ni nj nk
outer loop
vertex v1x v1y v1z
vertex v2x v2y v2z
vertex v3x v3y v3z
endloop
endfacet

值得注意的是,在stl文件中,相邻的三角面片必须共享两个公共顶点。

430f22fd17fbf4f2831392fc3efafa1f_stl1

上图左侧这种情形则违反了上述原则,应该表示为右侧这种。

PLY

简介

PLY, 全称为 Polygon file format,即使用多边形来记录三维模型的一种文件格式。其主要存储的是构成面片的多边形顶点三维坐标。可以存储颜色、透明度、表面法向量、材质等信息。

文件格式

 plyformat ascii 1.0comment这是一个正四面体element vertex 4property float xproperty float yproperty float zelement face 4property list uchar int vertex_indexend_header0 3 02.449 -1.0 -1.4140 -1 2.828-2.449 -1.0 -1.4143 0 1 33 0 2 13 0 3 23 1 2 3

在ply文件中,内容可以分为档头和内容两部分,在档头中描述了当前文件所使用的格式、自定义元素类型和数量等信息。在内容中则根据档头所描述的类型进行数据记录。通常ply分成三部分:

  • 档头
  • 顶点元素列表
  • 面元素列表

首先,以ply作为识别ply文件的标识

ply

然后,声明当前文件格式,以下三种都可以

 format ascii 1.0format binary_little_endian 1.0format binary_big_endian 1.0

档头还支持一些注解,通过关键词 comment 定义:

comment This is a comment!

接着定义内容区中的元素。格式如下,即先通过element关键词声明元素名称和数量,然后定义元素中各成员变量的类型和名称。

 element <element name> <number in file>property <data_type> <property name 1>property <data_type> <property name 2>property <data_type> <property name 3>

内定的成员变量类型包括:

  • char、uchar
  • short、ushort
  • int、uint
  • float、double
  • list

如,定义一个包含12个顶点的物体,每个顶点使用3个单精度浮点数 (x,y,z)代表点的座标,使用3个unsigned char代表顶点颜色,颜色顺序为 (B, G, R),则档头的写法为:

 element vertex 12property float xproperty float yproperty float zproperty uchar blueproperty uchar greenproperty uchar red

再如,定义一个具有10个面的物体,写法为:

 element face 10property list uchar int vertex_indices

最后结束档头:

end_header

STP

to be continued ……

IGS

OBJ

DXF

参考资料

  • https://zh.wikipedia.org/wiki/STL_(檔案格式)

  • https://windsong.top/STL与蒙特卡罗/#stl文件

  • https://zh.wikipedia.org/wiki/PLY

  • https://en.wikipedia.org/wiki/ISO_10303-21

  • 如何理解STP格式和STL格式?

  • 3D软件格式及转换

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源 - Ideal库 - Excel帮助类,TableHelper实现(三)

讲解对象集合与DataTable相互转换,包括表格转对象集合需校验类型、列名对应,及解决结构体赋值问题;对象集合转表格、一维数组转表格、行列转置的方法及示例代码,测试源码已上传。书接上回,我们今天继续讲解实现对象集合与DataTable的相互转换。01、把表格转换为对象集合 该…

信息安全概论复习3

保密与安全文档保密密级术语密码体制 单钥密码体制(对称密码体制)加密方式双钥密码体制(非对称密码体制)(公钥体制)特点

优化企业博客内容:策略与ai工具的应用

在数字化营销日益重要的今天,企业博客不仅是品牌传播的重要渠道,也是吸引潜在客户、建立品牌权威性的关键工具。然而,要让企业博客真正发挥作用,关键在于内容的优化。本文将探讨优化企业博客内容的策略,并详细介绍如何利用HelpLook平台来实施这些策略,以提升博客的吸引力…

攻防世界-Decrypt-the-Message

一、题目 收到一首英文诗歌和一段密文,要求很简单,就是解密这个密文二、解题 1、背景知识PoemCode参考文章:https://blog.csdn.net/xiao__1bai/article/details/1202504522、解密 了解加密原理即可,解密过程很复杂,可以直接用现成的脚本脚本地址:https://github.com/abpoly…

请问PbootCMS 登录失败及表单提交校验失败的解决方案

在使用 PbootCMS 时,可能会遇到登录失败、表单提交校验失败等问题。以下是针对这些常见问题的详细解决方案。 一、登录失败或表单提交校验失败 描述:用户尝试登录时失败。 表单提交时校验失败。解决方案:检查服务器环境:确保服务器环境满足 PbootCMS 的最低要求。 检查 PHP 版…

# 学期(2024-2025-1) 学号(20241420) 《计算机基础与程序设计》第10周学习总结

学期(2024-2025-1) 学号(20241420) 《计算机基础与程序设计》第10周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目…

关于用户反馈到产品需求的思考

1 前言 在数字产品的世界中,用户反馈不仅是检验产品成功与否的试金石,更是推动产品迭代与创新的关键驱动力。作为项目负责人,我们深知每一个反馈背后蕴含的用户需求与期望。最近刚好看到了@玉伯大佬写的文章从用户反馈到产品需求的思考,深受启发,结合这一年半的工作经验,…

2024年11月文章一览

2024年11月编程人总共更新了21篇文章: 1.2024年10月文章一览 2.《使用Gin框架构建分布式应用》阅读笔记:p307-p392 3.《使用Gin框架构建分布式应用》阅读笔记:p393-p437 4.《使用Gin框架构建分布式应用》读后感 5.《Django 5 By Example》阅读笔记:p1-p16 6.《Django 5 By …

请问帝国CMS动态页面生成静态页面失败怎么办

检查生成设置:进入后台的“系统设置” -> “生成设置”,检查静态页面生成设置是否正确。 确保生成模式选择正确,例如“只生成首页”、“生成所有页面”等。检查模板文件:确保模板文件中没有语法错误,特别是PHP代码部分。 检查模板文件路径是否正确。检查文件权限:确保…

请问宝塔安装好后网址打不开的可能原因及解决方法

检查域名解析确认域名是否正确解析到服务器的IP地址。 使用 ping 命令测试域名解析是否正确,例如:ping yourdomain.com。检查服务器网络确认服务器的网络连接是否正常。 尝试从服务器内部访问外部网站,确保网络畅通。检查防火墙设置确认服务器的防火墙设置是否允许HTTP/HTTP…

宝塔系统安装网站后打不开的解决方法及排查步骤

1. 检查网络连接确认服务器网络是否正常:从服务器上尝试 ping 外部网站,确保网络畅通。 例如:ping 域名 或 ping 你的网址2. 检查宝塔面板状态登录服务器,检查面板是否正常运行:使用命令 bt 进入宝塔面板管理界面。 如果面板未运行,尝试启动面板:bt start3. 检查网站配置…

2.C基础

1.注释单行注释 // 多行注释 /* */ 程序运行后生成的 .obj文件里不带注释的内容/*include 表示包含 std :标准的 i: 输入Input o:输出Output */ #include <stdio.h> //预处理//int 表示程序运行的结果是整数 与return 0相呼应 //main() 函数是程序的主入口 固定指定为…