第2天
技术总结:
技术项目工作,包括项目进展、遇到的问题及解决方案等。
今天主要梳理了继续往下计算的思路,感觉不是很清晰,需要再考虑一下怎么往下写。
还有就是修复一个之前因为精度设定而导致的bug,目前已经成功处理,现在看起来正常了许多。
明天周六打算来单位工作一下,争取把边界的相交问题搞定,主要是处理边界对齐的问题。
学习笔记:
关于Obj格式
OBJ 格式是一种开放的几何定义文件格式,由 Wavefront Technologies 开发。它是一种纯文本格式,用于存储三维模型的几何数据,如顶点、面、法线、纹理坐标等。OBJ 文件通常与材质文件(如 MTL)一起使用,以提供更丰富的模型信息。以下是 OBJ 格式的详细介绍:
基本结构
OBJ 文件的基本结构包括以下几个主要部分:
- 顶点数据:定义模型的顶点坐标。
- 纹理坐标:定义顶点的纹理映射坐标。
- 法线:定义顶点的法线方向。
- 面:定义模型的面,即由顶点、纹理坐标和法线组成的三角形或多边形。
- 材质引用:引用外部材质文件(MTL)中定义的材质。
关键字
OBJ 文件使用特定的关键字来标识不同的数据类型。以下是一些常见的关键字:
v
:顶点坐标,格式为v x y z
。vt
:纹理坐标,格式为vt u v [w]
。vn
:法线,格式为vn x y z
。f
:面,格式为f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3
。usemtl
:使用材质,格式为usemtl material_name
。mtllib
:材质库,格式为mtllib filename.mtl
。
示例
以下是一个简单的 OBJ 文件示例:
代码语言:java复制plaintext
# 这是一个简单的 OBJ 文件示例
# 顶点坐标
v 1.0 2.0 3.0
v 4.0 5.0 6.0
v 7.0 8.0 9.0
# 纹理坐标
vt 0.0 0.0
vt 1.0 0.0
vt 0.0 1.0
# 法线
vn 0.0 0.0 1.0
vn 0.0 1.0 0.0
vn 1.0 0.0 0.0
# 面
f 1/1/1 2/2/2 3/3/3
# 使用材质
usemtl MaterialName
# 材质库
mtllib example.mtl
在这个示例中:
v
关键字定义了三个顶点坐标。vt
关键字定义了三个纹理坐标。vn
关键字定义了三个法线。f
关键字定义了一个面,由三个顶点、纹理坐标和法线组成。usemtl
关键字引用了名为 "MaterialName" 的材质。mtllib
关键字指定了材质库文件 "example.mtl"。
材质文件 (MTL)
OBJ 文件通常与 MTL 文件一起使用,MTL 文件定义了模型的材质属性,如颜色、纹理、反射率等。以下是一个简单的 MTL 文件示例:
代码语言:java复制plaintext
# 这是一个简单的 MTL 文件示例
newmtl MaterialName
Ka 1.0 0.0 0.0 # 环境光颜色
Kd 1.0 0.0 0.0 # 漫反射颜色
Ks 0.0 0.0 0.0 # 镜面反射颜色
Ns 10.0 # 镜面反射指数
map_Kd texture.png # 漫反射纹理贴图
在这个示例中:
newmtl
关键字定义了一个新的材质 "MaterialName"。Ka
关键字定义了环境光颜色。Kd
关键字定义了漫反射颜色。Ks
关键字定义了镜面反射颜色。Ns
关键字定义了镜面反射指数。map_Kd
关键字指定了漫反射纹理贴图 "texture.png"。
应用
OBJ 格式广泛用于三维建模软件之间的数据交换,以及游戏和动画行业。它是一种通用的、易于解析的格式,支持丰富的几何和材质信息,因此被许多三维软件和工具支持。
总结
OBJ 格式是一种开放的、纯文本的三维模型文件格式,用于存储模型的几何数据和材质信息。它通过关键字和数据行来定义顶点、纹理坐标、法线和面,并支持引用外部材质文件。OBJ 格式因其通用性和易用性而被广泛应用于三维建模和动画领域。