• obj模型的格式


    纹理的obj模型

    一般带纹理的obj模型需要有以下三个文件,分别是.obj文件,.mtl纹理库文件,还有纹理贴图(这里是.jpg)如图所示:
    在这里插入图片描述
    用记事本或者其他工具打开查看.obj文件的内部结构如下图所示:
    详细讲解下.obj文件结构

    1. #代表文件的注释,用来描述具体的内容注释,当读到#时,可跳过该行。
    2. mtllib xxx.mtl代表obj文件中包含纹理库信息(如右图所示,纹理信息后面详细讲解)
      在这里插入图片描述
    v  -8.6007 1.3993 10.0000
    
    • 1
    1. 格式:v (vertices) x y z
      意义:每个顶点的坐标
    vt 0.0000 1.0000 0.0000
    
    • 1
    1. 格式:vt (vertex texture) u v或者vt u v w 通常是0-1
      意义:纹理坐标
    vn 0.0000 0.0000 -1.0000
    
    • 1
    1. 格式:vn (vertex normal) x y z
      意义:顶点法矢方向
    f 1/1/1 2/2/1 3/3/1 
    
    • 1
    1. 格式 :f v/vt/vn v/vt/vn v/vt/vn顶点索引 / 纹理坐标索引 / 顶点法向量索引
      意义:构成的面
      注意:其中面的构成可以只由:v、v/vt、v//vn(两斜杠)、v/vt/vn等情况构成,且顶点的个数也不一定要为3个,可以大于等于3如下所示:表示为5边形的面结构
    f 1 2 3 4 5
    
    • 1
    仅包含顶点f v1 v2 v3 ....
    包含顶点和纹理f v1/vt1 v2/vt2 v3/vt3 ...
    包含顶点纹理和法线f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 ...
    包括顶点和法线f v1//vn1 v2//vn2 v3//vn3 ...
    
    • 1
    • 2
    • 3
    • 4
    1. Group声明用于组织模型的单元(element)以及简化数据操作
    o:代表object,表示不同的对象名称
    对象是由组构成,比如一个城镇是一个对象,它有许多房子,每个房子都被认为是一个组,而每个房子又包含了很多子组,比如窗户,们,墙,屋顶等。
    
    g:代表group,顶点或者三角面片的集合名称
    组是由一系列面构成,这些面使用同样的属性,比如同样的材质。
    
    s:代表smooth
    s 1
    ...
    s 2
    ...
    smooth shading还可以被关闭
    s off
    ``
    `
    
    # 材质引用
    一个材质库是一个伴随.obj文件的独立文件,它为每个组定义了材质。.obj文件常常会包含一个材质库文件,有时它还会包含多个材质库文件。
    
    包含mtl文件
    ```cpp
    mtllib xxx.mtl
      ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    使用mtl文件

    usemtl xxx
      ...
    
    • 1
    • 2

    mtl材质文件

    # 
    # Wavefront material file
    # Converted by the DEEP Exploration  2.1.12.1218
    # Right Hemisphere, LTD
    # http://www.righthemisphere.com/
    # 
    //定义材质以newmtl开头
    newmtl inside //newmtl之后的都是材质的定义,它的范围是直到另一个新的newmtl出现,或该文件的结束才停止。
    Ka 0.4 0.4 0.4//Ka - 环境光
    Kd 0.587609 0.587609 0.587609//Kd-漫反射颜色
    Ks 0.071744 0.071744 0.071744//Ks-镜面颜色
    illum //1illum-光照模型
    Ns 32
    
    newmtl outside
    Ka 0 0 0
    Kd 1 1 1
    Ks 0.384296 0.194061 0.174387
    illum 2
    //每个材质允许使用多照明模型。枚举如下:
    //0. 色彩开,阴影色关
    //1. 色彩开,阴影色开
    //2. 高光开
    //3. 反射开,光线追踪开
    //4. 透明: 玻璃开 反射:光线追踪开
    //5. 反射:菲涅尔衍射开,光线追踪开
    //6. 透明:折射开 反射:菲涅尔衍射关,光线追踪开
    //7. 透明:折射开 反射:菲涅尔衍射开,光线追踪开
    //8. 反射开,光线追踪关
    //9. 透明: 玻璃开 反射:光线追踪关
    //10. 投射阴影于不可见表面
    Ns 64//指定材质的反射指数,定义了反射高光度。64是反射指数值,该值越高则高光越密集,一般取值范围在0~1000。
    //map_Ka - 环境光贴图
    map_Kd cup.jpg//map-Kd - 漫反射颜色贴图
    //map_Ks - 镜面颜色贴图
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    设置完成后打开obj文件得到的模型如下所示:
    在这里插入图片描述

    推荐参考库文件

    tiny_obj_loader

    tiny_obj_loader

    assimp

    assimp

  • 相关阅读:
    淘口令真实url API 返回值说明
    mysql数据库优化--数据库参数
    MySQL图形管理工具的安装与使用
    UWA上新|真人真机测试新增海外机型专区
    深度解读ChatGPT基本原理
    Jenkins 安装
    怎么把音频转换成mp3格式?
    windows10 Docker Desktop中部署clickhouse
    探索UWB模块的潜力:智能家居与物联网的连接者
    什么是电商云仓储?
  • 原文地址:https://blog.csdn.net/weixin_44478077/article/details/126689388