• Obj格式模型 读取


    OBJ文件的结构

    在一个OBJ文件中,首先有一些以v、vt或vn前缀开头的行指定了所有的顶点、纹理坐标、法线的坐标。然后再由一些以f开头的行指定每一个三角形所对应的顶点、纹理坐标和法线的索引。在顶点、纹理坐标和法线的索引之间,使用符号“/”隔开的。一个f行可以以下面几种格式出现:

    f  1 2 3

    表示以第1、2、3号顶点组成一个三角形。

    f  1/3 2/5 3/4

    表示以第1、2、3号顶点组成一个三角形,其中第一个顶点的纹理坐标的索引值为3,第二个顶点的纹理坐标的索引值为5,第三个顶点的纹理坐标的索引值为4。

    f  1/3/4 2/5/6 3/4/2

    表示以第1、2、3号顶点组成一个三角形,其中第一个顶点的纹理坐标的索引值为3,其法线的索引值是4;第二个顶点的纹理坐标的索引值为5,其法线的索引值是6;第三个顶点的纹理坐标的索引值为6,其法线的索引值是2。

    f  1//4 2//6 3//2

    表示以第1、2、3号顶点组成一个三角形,且忽略纹理坐标。其中第一个顶点的法线的索引值是4;第二个顶点的法线的索引值是6;第三个顶点的法线的索引值是2。

    注意:文件中的索引值是以1作为起点的,在渲染的时候应注意将从文件中读取的坐标值减去1。

    OBJ文件的基本结构

    点数据(Vertex data):

    v 几何体顶点 (Geometric vertices)

    vt 贴图坐标点 (Texture vertices)

    vn 顶点法线 (Vertex normals)

    vp 参数空格顶点 (Parameter space vertices)

    --------------------------------------------------------

    根据这个写了点代码

    不过上面没有讲全

    他的face 一个face很多点的

    f 43/85/83 62/104/84 61/103/85 60/102/86 59/101/87 58/100/88 57/99/89 56/98/90 55/97/91 54/96/92 53/95/93 52/94/94 51/93/95 50/92/96 49/91/97 48/90/98 47/89/99 46/88/100 45/87/101 44/86/102

    face  支持4个点的顶点 ,纹理坐标和法线

    f 485/590/564 484/589/565 504/610/566 505/611/567
    f 486/591/568 485/590/564 505/611/567 506/612/569
    f 487/592/570 486/591/568 506/612/569 507/613/571
    f 488/593/572 487/592/570 507/613/571 508/614/573

    所以光靠

    fscanf(file, "%d/%d/%d %d/%d/%d %d/%d/%d
    ", &vertexIndex[0], &uvIndex[0], &normalIndex[0], &vertexIndex[1], &uvIndex[1], &normalIndex[1], &vertexIndex[2], &uvIndex[2], &normalIndex[2] );
    

    这样是不够的,得写个解析器

  • 相关阅读:
    [sql]mysql启停脚本
    [sh]函数+条件表达式
    【Qt开发】QT中显示图像数据
    【Qt开发】QT中显示图像数据
    【Qt开发】如何将内存图像数据封装成QImage V1
    【Qt开发】如何将内存图像数据封装成QImage V1
    【Qt开发】将内存图像数据封装成QImage V2
    【Qt开发】将内存图像数据封装成QImage V2
    【Qt开发】Qt中图像的显示与基本操作
    【Qt开发】Qt中图像的显示与基本操作
  • 原文地址:https://www.cnblogs.com/dragon2012/p/5149137.html
Copyright © 2020-2023  润新知