3D几何物体——三角网格的表示与显示(obj)
Posted Taily老段
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3D几何物体——三角网格的表示与显示(obj)相关的知识,希望对你有一定的参考价值。
OBJ文件格式
OBJ是一种标准的3D模型文件格式;软件:3dsMax,LightWare,Maya都支持OBJ文件的读写;
OBJ是以纯文本的形式存储了模型的顶点、法线和纹理坐标和材质使用信息;
格式:前缀参数1 参数2 参数3.......
前缀 | 说明 |
v | 表示本行指定一个顶点 此前缀后跟着3个单精度浮点数,分别表示顶点的x,y,z坐标值 |
vt | 表示本行指定一个纹理坐标 此前缀后跟着两个单精度浮点数,分别表示此纹理坐标的u,v值 |
vn | 表示本行指定一个法线向量 此前缀后跟着3个单精度浮点数,分别表示顶点法向量x,y,z坐标值 |
f | 表示本行指定一个表面(Face) 此前缀后面的数据见“面的格式说明” |
usemtl | 此前缀后只跟着一个参数。该参数指定了从此行之后到下一个以usemtl开头的行 之间的所有表面所使用的材质名称。该材质可以在此OBJ文件所附属的MTL文件 中找到具体信息。 |
mtllib | 此前缀后只跟着一个参数,该参数指定了此OBJ文件所使用的材质库文件(*.mtl) 的文件路径 |
参考:https://wenku.baidu.com/view/3d47b9b73086bceb19e8b8f67c1cfad6195fe9b2.html
面的格式说明:
f 顶点坐标索引 / 纹理坐标索引 / 顶点法向索引
f Vertex / Texture / Normal
其中,纹理坐标索引/顶点法向索引可以为空;
f 1 2 3 等同于 f 1// 2// 3//
f 1/3 2/5 3/4 (顶点法向索引为空)
f 1/3/4 2/5/6 3/4/2
f 1//4 2//6 3//2
obj格式对纹理的支持是通过关键字mtllib指定的;
newmtl blinn1SG illum 4 Ka 0.2 0.2 0.2 Kd 1 1 1 Ks 0.2 0.2 0.2 Tf 1.00 1.00 1.00 map_Kd carp.bmp |
Ka——物体材质中环境光的颜色
Kd——物体材质中漫反射光的颜色
Ks——物体材质中镜面光颜色
map_Kd——纹理图像的路径
三角网格的数据结构
三角网格的数据由几何和连接关系组成;
几何包括顶点的x,y,z坐标及顶点的法向量等;
连接关系即三角网格是如何连在一块的;
常用的三角网格数据结构包括:
顶点-边(Vertex-Edge) |
顶点-面(Vertex-Face) |
邻接矩阵 和 邻接表 |
顶点-边-面 |
半边结构(half Edge) |
纹理数据
obj文件中不但包含顶点几何坐标,还可以指定纹理数据,mtllib命令指定了材质属性的文件,材质属性文件中可以指定纹理图像所在的文件。纹理的显示包含三个步骤:
1、生成纹理数据
2、将纹理数据载入纹理内存
3、将纹理数据映射到物体表面
mtl 格式文件
newmtl name #name为材质名称
Ns exponent #exponent指定材质的反射指数,定义了反射高光度
Ka r g b #环境光反射,g和b两参数是可选的,如果只指定了r的值,则g和b的值都等于r的值
Kd r g b #漫反射
Ks r g b #镜面光反射
# Ka Kd Ks 都还有其他两种格式,可查阅其他资料:
#Kd spectral file.rfl factor
#Kd xyz x y z
map_Kd picture.png #固有纹理贴图
map_Ka picture1.png #阴影纹理贴图
map_Ks picture2.png #高光纹理贴图 illum 2
#光照模型
#光照模型属性如下:
#0. 色彩开,阴影色关
#1. 色彩开,阴影色开
#2. 高光开
#3. 反射开,光线追踪开
#4. 透明: 玻璃开 反射:光线追踪开
#5. 反射:菲涅尔衍射开,光线追踪开
#6. 透明:折射开 反射:菲涅尔衍射关,光线追踪开
#7. 透明:折射开 反射:菲涅尔衍射开,光线追踪开
#8. 反射开,光线追踪关
#9. 透明: 玻璃开 反射:光线追踪关
#10. 投射阴影于不可见表面
以上是关于3D几何物体——三角网格的表示与显示(obj)的主要内容,如果未能解决你的问题,请参考以下文章