「这是我参与2022首次更文挑战的第37天,活动详情查看:2022首次更文挑战」
示例代码采用three.js-r73版本: cdnjs.cloudflare.com/ajax/libs/t…
通过前面课程的学习,我们已经可以加载不同格式的模型,但是如果我们不知道这些模型如何加载到我们3D场景中的话,对于以后做模型压缩、模型优化等更深入的开发,会很困难。所以我们需要要了解学习各种模型格式,来完成我们的开发。
3D中的OBJ文件
- 常见到的
*.obj
文件有两种:- 第一种是基于COFF(CommonObject File Fomat)格式的OBJ文件(也称目标文件),这种格式用于编译应用程序;
- 第二种是Alias|Wavefront公司推出的OBJ模型文件。
- 本文对第二种OBJ模型文件进行分析。
- 3D文件格式,常见的有几种 ".3ds",".max",".lw",".mb",".dxf",".obj"。但是,OBJ文件的具体特征,却很少有人能给出较为圆满的描述。
- Alias|Wavefront:制作Maya的公司,侏罗纪后期处理的公司OBJ文件是一种标准的3D模型文件格式,很适合用于3D软件模型之间的互导。
OBJ文件格式概念
- OBJ]文件是一种文本文件格式,比起二进制文件,OBJ更好被人理解(例如,可以通过写字本打开并阅读该格式)
- OBJ格式支持多边形(Polygon),直线(Lines),表面(Surfaces),和自由形态曲线(Free-form Curves)。
OBJ文件的特点
- OBJ是一种3D模型文件,因此不包含动画、枕质特性、贴图路径、动力学、粒子等信息。
- OBJ文件主要支持多边形(Polygons)模型。
- 虽然OBJ文件也支持曲线(Curves)、表面(Surfaces)、 点组材质(PointGroup Materials),但Maya导出的OBJ文件并不包括这些信息。
- OBJ文件支持三个点以上的面,这一点很有用。
- 很多其它的模型文件格式只支持三个点的面,所以我们导入Maya的模型经常被三角化了,这对于我们对模型的再加工甚为不利。
- OBJ文件支持法线和贴图坐标。
OBJ文件每行的格式
- OBJ文件由一行行文本组成,注释行以一个“井”号(#)为开头,空格和空行可以随意加到文件中以增加文件的可读性。
- 有字的行都由一两个标记字母也就是关键字(Keyword)开头,关键字可以说明这一行是什 么样的数据。
- 多行可以逻辑地连接在一起表示一行,方法是在每一行最后添加一一个连接符()。
- 注意连接符()后面不能出现空格或tab格,否则将导致文件出错。
OBJ模型行关键字
下列关键字可以在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) 【顶点索引,UV坐标的索引,法线的索引】
- 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)
总结
这一节我们主要讲了以下内容:
- 3D种的OBJ文件
- OBJ文件概述
- OBJ文件的特点
- OBJ文件每行的格式
- OBJ模型行的关键字