ThreeJs入门33-WebGL模型篇:3D的精髓-Obj模型的格式详解

901 阅读4分钟

「这是我参与2022首次更文挑战的第37天,活动详情查看:2022首次更文挑战

示例代码采用three.js-r73版本: cdnjs.cloudflare.com/ajax/libs/t…

yuque_diagram.jpg

通过前面课程的学习,我们已经可以加载不同格式的模型,但是如果我们不知道这些模型如何加载到我们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模型行的关键字