1 前言

OBJ文件是Alias|Wavefront公司为它的一套基于工作站的3D建模和动画软件"Advanced Visualizer"开发的一种标准3D模型文件格式,目前市面上大多数主流的软件平台都是支持OBJ格式,OBJ模型于是也就成为了一种常用的数据交换格式。 OBJ文件是一种文本文件,由于模型是明码标记,这就方便我们对其进行查看、编辑。

博主通过参考OBJ规范文档,将规范文档加上自己的一定理解写成本文,旨在帮助大家了解obj模型结构,在日常工作中更好使用它!

2 概述

2.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后只需指定一下贴图文件路径就行了,不需要再调整贴图坐标。

2.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)

OBJ里的面的索引可正可负,为正数时是指顶点的绝对索引,为负时(比如:f -a -b -c),表示从该面位置开始,倒数的第a,b,c个顶点,vn,vt索引也一样。

OBJ文件不包含面的颜色定义信息,不过可以引用材质库,材质库信息储存在一个后缀是".mtl"的独立文件中。关键字"mtllib"即材质库的意思。

材质库中包含材质的漫射(diffuse),环境(ambient),光泽(specular)的RGB(红绿蓝)的定义值,以及反射(specularity),折射(refraction),透明度(transparency)等其它特征。

"usemtl"指定了材质之后,以后的面都是使用这一材质,直到遇到下一个"usemtl"来指定新的材质。

注意:这里面最常用的几个参数是v,vt,vn,f,s,g,o,usemtl,mtllib 其他的参数很少用到。

3 OBJ数据解析

3.1 模型材质库的定义(mtllib)

将obj模型通过记事本打开之后发现,在模型的开头会定义材质库的引用对象:mtllib model.mtl 这句话的意思是材质库参考model.mtl文件,至于mtl文件的组织结构后面将会详细介绍,这里不再详述,大家只要知道它是一个模型材质库文件就行了。

#开头的表示注释内容,软件解析文件的时候会自动忽略。

3.2模型顶点(v)
计算机图形学中模型通过顶点、顶点法线、顶点uv、面构成。在obj模型中模型的顶点是通过v进行标识记录的,格式为“v x y z”。其中xyz分别表示xyz坐标值。

3.3顶点法线(vn)
模型的顶点和面都是具有法线这个概念的,法线决定着对应对象的可见性。法线朝内,对象不可见。法线朝外,对象可见。模型面的法线是可以根据模型顶点法线进行计算得到,所以obj中的法线用顶点法线表示就可以。

顶点法线使用vn进行标识,表示格式为:“vn x y z” 其中xyz分别表示xyz方向上向量值。

3.4 顶点贴图坐标(vt)
具有贴图的模型,模型几何与贴图是如何对应起来的?其实很简单,通过uv坐标就可以将模型与对应贴图,标识符为vt,表达格式为:“vt u v”

3.5模型面(f)
模型面对象就像一个容器将上面的顶点坐标、顶点法线、顶点uv通过索引值进行组织在一起,封闭为模型体。面对象可以由三角形或者四边形构成,其表达格式为:”f verticeIndex\vtIndex\vnIndex”其中verticeIndex表示顶点序列号,vtIndex表示uv索引号,vnIndex表示法线索引号,其中vtIndex,vnIndex可以缺失,不写也没有关系,但是顶点索引值必须得有。

3.6 对象材质(usemtl)
对于上面编写的模型结构,需要为这个对象指定一个材质,需要用usemtl 进行标识,格式为usemtl [material name]


3.7 其他参数
o标识对象名称

g 标识模型组

s 标识光滑组

4 Mtl数据解析

当你导出Obj模型的时候会发现除了.obj文件还会有个同名.mtl文件,这个文件用来干什么的?其实这个文件是用来记录模型的材质库参数的,包括贴图、环境光参数、模型反射等参数。

Newmtl 标识材质名称

Ks 标识镜面反射颜色,颜色为rgb参考,取值0-1

Ns标识镜面反射中加权反射指数

Ka标识环境颜色,颜色为rgb参考,取值0-1

Kd标识漫反射颜色,颜色为rgb参考,取值0-1

d 和Tr 标识材质的透明度,Tr=1-d

map_ka和map_kd分别表示贴图路径

模型的材质可能会要不同的效果,为了达到这种区分,用关键字illum进行标识

Illum 0表示颜色和环境参数关闭

Illum 1表示颜色和环境参数开启

Illum 2表示材质高亮显示

Illum 3表示开启反射和光线跟踪

Illum 4表示玻璃透明度开启,管线追踪开启

最详细的Obj数据解析相关推荐

  1. python爬虫数据解析xpath解析详细讲解——附有详细案例

    案例③由于时间流逝,网页爬取失效了 最近考研复试,增加一个案例,爬取985211学校,并以excel表格形式存储 文章目录 1.什么是xpath 是最常用的最广泛的数据解析方式 2.xpath解析原理 ...

  2. 【中科微北斗+GPS模块经纬度数据解析详细教程-附免费代码工程】

    中科微北斗+GPS模块经纬度数据解析详细教程-附免费代码工程 简介 准备工作 PC端需要用到的工具 代码下载地址 GD32F103C8T6最小系统板 代码实现 GD32串口引脚定义如下: 串口的初始化 ...

  3. Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例

    转载自  Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 第1部分 ArrayList介绍 ArrayList简介 ArrayList 是一个数组队列,相当于 动态数组.与 ...

  4. 帆软报表填报自定义提交-后台数据解析保存详解

    帆软报表填报前期步骤按api或者百度就可以完成,今天我这里着重讲解自定义提交(访问web后台服务进行提交). 填报提交有两种方式: 1)内置SQL:没什么难度,按教程来就行. 2)自定义提交:对应后台 ...

  5. iOS - XML 数据解析

    前言 @interface NSXMLParser : NSObjectpublic class NSXMLParser : NSObject 1.XML 数据 XML(Extensible Mark ...

  6. 【2020/6/24整理版】利用csi tool获取csi数据并进行数据解析----适合初学的小白

    1.准备工作 <1> 查看自己电脑是否能安装Intel 5300网卡,不能安装的话直接看文章最后,尝试Atheros csi tool工具. <2> 安装Ubuntu系统,cs ...

  7. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  8. 远程定位gps linux,GPS(NMEA)数据解析

    一.GPS定位信息 设置好gps模式,启动gps,正常的话在gps通路有NMEA数据上报,如下: $GPGSV,3,1,11,01,62,130,42,07,61,201,43,11,72,075,2 ...

  9. c# 解析gprmc数据_Windows下VLP16激光雷达数据解析

    最近,实验室有一个对VLP16数据解析的需求,要求在Windows系统下单独把VLP16的数据解析整理出来,作为后期多传感器融合的一个必要基础准备.无奈从ROS转战Windows,网上查了查Windo ...

最新文章

  1. LeetCode实战:环形链表
  2. R语言plotly可视化:plotly可视化分组归一化直方图(historgram)并在直方图中添加密度曲线kde、并在直方图的底部部边缘使用geom_rug函数添加边缘轴须图
  3. 簡單SQL存儲過程實例
  4. ios如何判断键盘是否已经显示
  5. Firebug控制台详解
  6. PCL “(”:“::”右边的非法标记 和 E2512 功能测试宏的参数必须是简单标识符
  7. iQOO Neo 855竞速版来了:今年最后一款骁龙855 Plus手机
  8. @Autowired 与 @Resource的区别
  9. 平板电脑有哪些品牌_平板电脑充电柜使用要注意哪些?安和力
  10. ppt修复无法读取_CVE20201938 Tomcat 文件读取/包含漏洞复现
  11. BAT中删除目录,如何不显示删除的文件
  12. uniapp - 接入科大讯飞语音评测
  13. Android中向ContactsProvider中插入大量联系人
  14. 学习libpcap库,写例子代码--tcp_config.txt
  15. 二、17【FPGA】无源蜂鸣器驱动实验
  16. B树、B+树、B*树
  17. python迷宫问题代码_Python解决走迷宫问题算法示例
  18. Unknown column 'salary' in 'field list'
  19. 关于颜色直方图中bins的理解
  20. Java面试常考的 BIO,NIO,AIO 总结

热门文章

  1. det曲线_一文说透机器学习的主流评价指标
  2. Wireshark过滤器的使用
  3. 桌面中计算机作用,云桌面技术在计算机机房管理中的作用研究
  4. latex中的各种数学字体宏包
  5. 软考(软件设计师)考点总结 -- 多媒体技术基础
  6. python打包成exe文件提示PermissionError: [Errno 13] Permission denied: ‘C:\\Users\\wj\\AppData\\Local\\Progr
  7. 比较 Solaris、Linux 和 FreeBSD 内核(转)
  8. AutoCAD学习之基本操作学习笔记
  9. Vue+i18n多语言动态设置(保姆级案例教程)
  10. win10c语言0xc0000142,Win10应用程序无法正常启动0xc0000142错误的解决方法