1、物体文件格式(.off)文件

用于表示给定了表面多边形的模型的几何体。这里的多边形可以有任意数量的顶点。

普林斯顿形状Banchmark中的.off文件遵循以下标准。 
OFF文件全是以OFF关键字开始的ASCII文件。 
下一行说明顶点的数量、面片的数量、边的数量。 
边的数量可以安全地省略。 
顶点按每行一个列出x、y、z坐标。 
在顶点列表后,面片按照每行一个列表。对于每个面片,顶点的数量是指定的,接下来是顶点的索引列表。详见下面的例子。

OFF 
顶点数 面片数 边数 
x y z 
x y z 
… 
顶点个数N v1 v2 v3 … vn 
顶点个数M v1 v2 v3 … vm 

一个立方体的简单例子: 
OFF 
8 6 0 
-0.500000 -0.500000 0.500000 
0.500000 -0.500000 0.500000 
-0.500000 0.500000 0.500000 
0.500000 0.500000 0.500000 
-0.500000 0.500000 -0.500000 
0.500000 0.500000 -0.500000 
-0.500000 -0.500000 -0.500000 
0.500000 -0.500000 -0.500000 
4 0 1 3 2 
4 2 3 5 4 
4 4 5 7 6 
4 6 7 1 0 
4 1 7 5 3 
4 6 0 2 4

2、STL格式

全称是Stereolithographic,是3DSystem公司提出的3D模型文件格式,它采用三角形离散地近似表示三维模型,

目前已被工业界认为是快速成形领域的标准描述文件格式。

STL文件的最大特点也是其主要问题是,它是由一系列的三角形无序排列组合在一起的,没有反映三角形之间的拓扑关系。

目前的STL文件格式包括二进制和ASCII两种格式:

(1)STL的二进制格式

UINT8[80]         -   Header
UINT32            -   Number of triangles
foreach triangle
  REAL32[3]       -    Normal vector
  REAL32[3]       -    Vertex 1
  REAL32[3]       -    Vertex 2
  REAL32[3]       -    Vertex 3
  UINT16          -    Attribute byte count
end

文件起始的80个字节是文件头,用于存贮零件名;紧接着用4个字节的整数来描述模型的三角形个数,后面逐个给出

每个三角形的几何信息。每个三角形占用固定的50个字节,依次是3个4字节浮点数(三角形的法矢量),3个4字节浮点数

(1个顶点的坐标),3个4字节浮点数(2个顶点的坐标),3个4字节浮点数(3个顶点的坐标),最后2个字节用来描述三角形的

属性信息。一个完整二进制STL文件的大小为三角形面片数乘以50再加上84个字节。

(2)STL的ASCII格式

solid filename stl             //文件路径及文件名

facet normal x y z             //三角形法向量

outer loop

vertex x y z                    //三角形第一个顶点的坐标

vertex x y z                    //三角形第二个顶点的坐标

vertex x y z                    //三角形第三个顶点的坐标

endloop

endfacet                         //第一个三角形定义完毕

……

endsolid filename stl         //整个文件结束

每一行以1个或2个关键字开头,而3顶点沿指向实体外部的法矢量方向逆时针排列,所以其法向量N=(V1-V3)卷积(V2-V3)。

通过上面的分析可以知道,二进制格式文件较小,节省文件存储和处理的时间,而ASCII格式的文件可读性强,更容易做

进一步的数据处理

3、OBJ文件格式

OBJ文件是Alias|Wavefront公司为它的一套基于工作站的3D建模和动画软件"Advanced Visualizer"开发的一种

标准3D模型文件格式,很适合用于3D软件模型之间的互导,也可以通过Maya读写。比如你在3dsMax或LightWave中

建了一个模型,想把它调到Maya里面渲染或动画,导出OBJ文件就是一种很好的选择。目前几乎所有知名的3D软件

都支持OBJ文件的读写,不过其中很多需要通过插件才能实现。

OBJ文件是一种文本文件,可以直接用写字板打开进行查看和编辑修改。另外,有一种与此相关二进制文件格式(*.MOD),

其作为专利未公开,因此这里不作讨论。

3.1、OBJ文件的特点

OBJ3.0文件格式支持直线(Line)、多边形(Polygon)、表面(Surface)和自由形态曲线(Free-form Curve)。直线和

多角形通过它们的点来描述,曲线和表面则根据它们的控制点和依附于曲线类型的额外信息来定义,这些信息支持

规则和不规则的曲线,包括那些基于贝塞尔曲线(Bezier)、B样条(B-spline)、基数(Cardinal/Catmull-Rom)和泰勒

方程(Taylor equations)的曲线。其他特点如下:

(1)OBJ文件是一种3D模型文件。不包含动画、材质特性、贴图路径、动力学、粒子等信息。

(2)OBJ文件主要支持多边形(Polygons)模型。虽然也支持曲线(Curves)、表面(Surfaces)、点组材质(Point Group

Materials),但Maya导出的OBJ文件并不包括这些信息。

(3)OBJ文件支持三个点以上的面,这一点很有用。很多其它的模型文件格式只支持三个点的面,所以导入Maya的模型

经常被三角化了,这对于我们对模型进行再加工甚为不利。

(4)OBJ文件支持法线和贴图坐标。在其它软件中调整好贴图后,贴图坐标信息可以存入OBJ文件中,这样文件导入Maya

后只需指定一下贴图文件路径就行了,不需要再调整贴图坐标。

3.2、OBJ文件的基本结构

OBJ文件不需要任何种文件头(File Header),尽管经常使用几行文件信息的注释作为文件的开头。OBJ文件由一行行

文本组成,注释行以符号“#”为开头,空格和空行可以随意加到文件中以增加文件的可读性。有字的行都由一两个

标记字母也就是关键字(Keyword)开头,关键字可以说明这一行是什么样的数据。多行可以逻辑地连接在一起表示一

行,方法是在每一行最后添加一个连接符(\)。 注意连接符(\)后面不能出现空格或Tab格,否则将导致文件出错。

下列关键字可以在OBJ文件使用。在这个列表中, 关键字根据数据类型排列,每个关键字有一段简短描述。

顶点数据(Vertex data):

v 几何体顶点(Geometric vertices)
vt 贴图坐标点(Texture vertices)
vn 顶点法线(Vertex normals)
vp 参数空格顶点 (Parameter space vertices)

自由形态曲线(Free-form curve)/表面属性(surface attributes):

deg 度(Degree)
bmat 基础矩阵(Basis matrix)
step 步尺寸(Step size)
cstype 曲线或表面类型 (Curve or surface type)

元素(Elements):

p 点(Point)
l 线(Line)
f 面(Face)
curv 曲线(Curve)
curv2 2D曲线(2D curve)
surf 表面(Surface)

自由形态曲线(Free-form curve)/表面主体陈述(surface body statements):

parm 参数值(Parameter values )
trim 外部修剪循环(Outer trimming loop)
hole 内部整修循环(Inner trimming loop)
scrv 特殊曲线(Special curve)
sp 特殊的点(Special point)
end 结束陈述(End statement)

自由形态表面之间的连接(Connectivity between free-form surfaces):

con 连接 (Connect)

成组(Grouping):

g 组名称(Group name)

s 光滑组(Smoothing group)

mg 合并组(Merging group)

o 对象名称(Object name)

显示(Display)/渲染属性(render attributes):

bevel 导角插值(Bevel interpolation)

c_interp 颜色插值(Color interpolation)

d_interp 溶解插值(Dissolve interpolation)

lod 细节层次(Level of detail)

usemtl 材质名称(Material name)

mtllib 材质库(Material library)

shadow_obj 投射阴影(Shadow casting)

trace_obj 光线跟踪(Ray tracing)

ctech 曲线近似技术(Curve approximation technique)

stech 表面近似技术 (Surface approximation technique)

3.3、OBJ文件实例

的确挺难理解,下面通过实例来具体讲解。让我们来创建一个OBJ文件,内容为一个四边形,不过这一回我们不用3D

软件,而是用写字板来创建。打开写字板,把下面的5行代码写入,可以适当加一点注释。保存文件为文本格式,文件名

为"myObj.obj"。

v -0.58 0.84 0
v 2.68 1.17 0
v 2.84 -2.03 0
v -1.92 -2.89 0
f 1 2 3 4

注意:代码最后一定要按一下回车把光标切换到下一行,就是说加一个换行符(\n)。否则会看到如下错误信息:

// Error: line 1: OBJ file line 5: index out of range. //
// Error: line 1: Error reading file. //

下面来研究一下Maya导出的OBJ文件。

在Maya中创建一个多边形立方体,选中这个立方体,选择菜单"File -> Export Selection..."导出格式为OBJ,

文件名为"cube.obj",如果没有此格式,请在Plug-in Manager中载入"objExport.mll"。 用写字板打开"cube.obj",

可以看到如下代码:

# The units used in this file are centimeters.
g default
v -0.500000 -0.500000 0.500000
v 0.500000 -0.500000 0.500000
v -0.500000 0.500000 0.500000
v 0.500000 0.500000 0.500000
v -0.500000 0.500000 -0.500000
v 0.500000 0.500000 -0.500000
v -0.500000 -0.500000 -0.500000
v 0.500000 -0.500000 -0.500000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
vt 0.000000 2.000000
vt 1.000000 2.000000
vt 0.000000 3.000000
vt 1.000000 3.000000
vt 0.000000 4.000000
vt 1.000000 4.000000
vt 2.000000 0.000000
vt 2.000000 1.000000
vt -1.000000 0.000000
vt -1.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
s off
g pCube1
usemtl initialShadingGroup
f 1/1/1 2/2/2 4/4/3 3/3/4
f 3/3/5 4/4/6 6/6/7 5/5/8
f 5/5/9 6/6/10 8/8/11 7/7/12
f 7/7/13 8/8/14 2/10/15 1/9/16
f 2/2/17 8/11/18 6/12/19 4/4/20

f 7/13/21 1/1/22 3/3/23 5/14/24

这个文件看起来稍复杂一些,用到了许多关键词,你可以对照前面的列表查看一下每个关键词的意思。来解释一下:

"vt 1.000000 0.000000"这句"vt"代表点的贴图坐标。
"vn 0.000000 0.000000 -1.000000"这句"vn"代表点的法线。
"s off"表示关闭光滑组。
"usemtl initialShadingGroup"表示使用的材质。
"f 7/13/21"这时在面的数据中多了贴图坐标uv点和法线的索引号,索引号分别用左斜线(/)隔开。
格式:"f 顶点索引/uv点索引/法线索引"。

"g pCube1"表示组,这里的成组与Maya中的成组不一样,这里的成组是指把"g pCube1"后出现的面都结合到一起,组成一个整的多边形几何体。

把"cube.obj"文件修改一下就知道成组的意思了。把"s off"这句后面的代码替换成以下代码:
usemtl initialShadingGroup
g pCube_Face1
f 1/1/1 2/2/2 4/4/3 3/3/4
g pCube_Face2
f 3/3/5 4/4/6 6/6/7 5/5/8
g pCube_Face3
f 5/5/9 6/6/10 8/8/11 7/7/12
g pCube_Face4
f 7/7/13 8/8/14 2/10/15 1/9/16
g pCube_Face5
f 2/2/17 8/11/18 6/12/19 4/4/20
g pCube_Face6
f 7/13/21 1/1/22 3/3/23 5/14/24
导入Maya后可以看到,立方体的每个面是分离的,每个面的名称分别是"pCube_Face(1~6)",可见组的名称其实就是单独几何体的名称。

可不可以用中文命名几何体(组)呢?试试就知道了,把前面的代码改成:
usemtl initialShadingGroup
g 立方体面1
f 1/1/1 2/2/2 4/4/3 3/3/4
g 立方体面2
f 3/3/5 4/4/6 6/6/7 5/5/8
g 立方体面3
f 5/5/9 6/6/10 8/8/11 7/7/12
g 立方体面4
f 7/7/13 8/8/14 2/10/15 1/9/16
g 立方体面5
f 2/2/17 8/11/18 6/12/19 4/4/20
g 立方体面6
f 7/13/21 1/1/22 3/3/23 5/14/24

试一下,会发现模型顺利的导入了。虽然物体的名称都变乱码了,可这并不是很严重的事。

不过使用中文名并不总是这么顺利,把"g 立方体面1"这行改为"g 选择"再试试看,这回导入时模型根本无法出现,

只会出现如下的错误信息:

// Error: line 1: Your OBJ file contains a line which is too long to be parsed. Please edit your obj file. //
// Error: line 1: Error reading file. //

由此可见,物体命名的不规范也是导致OBJ文件出错的原因之一。

关于Maya的物体命名,英文名是很保险的,标点符号中只有下划线(_)可用,数字不能用放到名称的开头,尽量不要

用中、日、韩等双字节文字。

OBJ文件不支持有孔的多边形面。

本文参考:http://blog.csdn.net/CHS007chs/article/details/29171721

http://blog.csdn.net/hjq376247328/article/details/47039935

http://www.cppblog.com/lovedday/archive/2008/06/13/53153.html

模型文件格式:off stl obj相关推荐

  1. 3D模型文件--STL,OBJ,3DS

    STL格式 全称是Stereolithographic,是3DSystem公司提出的3D模型文件格式,它采用三角形离散地近似表示三维模型,目前已被工业界认为是快速成形领域的标准描述文件格式. STL文 ...

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

    文章目录 模型文件格式 支持的模型文件格式 标准文件格式 专有文件格式 不支持的模型文件格式 从3ds Max 导入对象 从 Maya 导入对象 限制 常见的3D软件格式 .fbx 格式 .obj 格 ...

  3. 你或许也想拥有专属于自己的AI模型文件格式(推理部署篇)-(8)

    OCL-ENGINE推理框架完善 1.前言 2.有向图重排网络层 2.1.重排的原因和目的 2.2.重排的核心思想 2.3.具体的代码如下所示 3.算子适配过程(以Conv2d算子作为具体说明) 3. ...

  4. Unity将内部模型转换成stl格式模型,用于3D打印机进行打印

    本章我们一起来看下怎样将unity中的fbx模型转成stl模型并且保存到本地. 原理:stl模型都是由三角面组成的,只要我们了解stl文件的格式,就能够轻松的将fbx模型转换成stl. 1.先获取到f ...

  5. 【工具篇】 Solidworks导出urdf模型 Solidworks将stl文件转为obj文件 附过程中遇到的错误

    目录标题 A.urdf模型的导出 A1 模型为纯转动副 Q1.1 continuous和revolute的区别 A2 模型中包括移动副 设置一个固定不动的平台 Q1.2 solidworks导出后移动 ...

  6. 用meshio进行模型格式转换(obj.stl.vtk.vtu.svg……)

    1.命令行安装meshio pip3 install meshio 2.命令行运行convert指令 meshio convert 输入的文件 输出的文件 以vtk转obj为例: meshio con ...

  7. Assimp场景模型输出Collada,STL,3DPDF

    本文介绍开源库模型的几种输出格式:DAE,STL,3DPDF. Assimp是C++写的,AssimpNet是C#重构其中主要数据结构,并开通Assimp中重要方法的调用接口,为不熟悉C++的码农带来 ...

  8. 常见三维文件格式之STL

    STL只能用来表示封闭的面或者体,stl文件有两种:一种是明码格式,另一种是二进制格式. 他的文件格式非常简单 明码: solid name facet normal ni nj nk    oute ...

  9. 3D模型文件(STL格式)Python读取并解析体积、长、宽、高信息

    使用Python对stl文件的处理依赖Python的 numpy 和 numpy-stl 模块. 下面是一段代码,用于计算stl文件中模型的体积.长.宽.高等信息. import os import ...

最新文章

  1. win10下VS2013+OpenCV2.4.9环境配置
  2. TCP/IP报文头部结构
  3. HTML5模拟衣服撕扯动画
  4. 选择爱人的数学方法(经典秘书问题)
  5. Java 线程分段查询数据,再整合排序
  6. php有序数组合并,使用Python怎么合并两个有序数组
  7. coap python_一步步搭建物联网系统——RESTful的CoAP协议
  8. 经典怀旧:VirtualBox安装Win95 - 详细图片展示
  9. 不可不知的家庭生活妙招
  10. 【学习笔记向】零基础小白快速制作最简陋MMD(VRoid + Unity)
  11. 如何将php改成mp4,怎么在PHP中将视频转换成MP4
  12. 内网穿透软件对比——cpolar : 花生壳(上)
  13. docker exec详解
  14. LSTM股票预测模型
  15. 短距离的无线连接技术--蓝牙
  16. MAC VMware Fusion 克隆虚拟机
  17. Oracle日期函数months_between的用法
  18. 1.3T计算机学科视频教程
  19. html小时分钟秒选择器,HTMLbootstrap时间选择器控件精确到秒 datetimepicker控件怎么精确到秒?...
  20. Windows控制面板中英文对照表

热门文章

  1. 红黑树的时间复杂度分析
  2. 一份从0到1的Java项目实践清单,看这篇就对了!
  3. 原生js获取元素高度
  4. win10切换独立显卡还是集成显卡
  5. 淘宝上线语音聊天功能
  6. python字典值求平均值_如何用Python打印字典键值的平均值?
  7. 今日剪辑妙招分享:剪辑抖音短视频可以用哪些工具剪辑?
  8. java mysql 工具类_Java SE 之 数据库操作工具类(DBUtil)设计
  9. mysql修改表字段长度和添加表字段
  10. 对于初学者怎么去学习设计衣服?该怎么绘画设计的衣服?