.obj文件中的面孔是什么,它们如何工作?

编g

我有这个.obj文件。这是迷你库珀的模型。我将所有顶点和面提取到如下列表中:

vertices = [(14.82, -22.56, 25.83), (25.38, 29.02, 15.87), (-31.71, -57.05, 19.29), (-27.95, 46.76, 17.98), (-25.44, 47.58, 3.38), (33.63, 48.57, 7.97), (-30.81, 32.23, 22.08), (-14.13, 29.34, 27.43), (3.94, 47.76, 52.66), (25.38, -69.78, 16.93), (29.55, 4.96, 38.49), (33.31, 42.57, 13.42), (27.8, 8.16, 38.6), (-26.77, 46.93, 2.27), (-30.21, -80.45, 24.88), (-33.48, 40.09, 23.68), (33.29, 51.84, 13.67), (-9.08, 67.39, 17.91), (25.27, 31.68, 5.62), (-30.2, -36.77, 39.17)]

faces = [('1962/1/1962', '1958/1/1958', '1957/541/1957'), ('1957/541/1957', '1961/541/1961', '1962/1/1962'), ('1960/3202/1960', '1959/542/1959', '1963/542/1963'), ('1963/542/1963', '1964/3202/1964', '1960/3202/1960'), ('1966/543/1966', '1962/1/1962', '1961/541/1961'), ('1961/541/1961', '1965/544/1965', '1966/543/1966'), ('1964/3202/1964', '1963/542/1963', '1967/546/1967'), ('1967/546/1967', '1968/545/1968', '1964/3202/1964'), ('1970/543/1970', '1966/543/1966', '1965/544/1965'), ('1965/544/1965', '1969/544/1969', '1970/543/1970'), ('1968/545/1968', '1967/546/1967', '1971/546/1971'), ('1971/546/1971', '1972/545/1972', '1968/545/1968'), ('1985/547/1985', '1970/543/1970', '1969/544/1969'), ('1969/544/1969', '1984/550/1984', '1985/547/1985'), ('1993/551/1993', '1961/541/1961', '1957/541/1957'), ('1957/541/1957', '1991/551/1991', '1993/551/1993'), ('1958/1/1958', '1962/1/1962', '1994/548/1994'), ('1994/548/1994', '1992/548/1992', '1958/1/1958'), ('1965/544/1965', '1961/541/1961', '1993/551/1993'), ('1993/551/1993', '1995/550/1995', '1965/544/1965')]

这些只是前20个。我编写了一个渲染程序,当我放置顶点时,它显示如下: 库珀图片

它看起来像汽车的俯视图,这很有意义。我是3D模型的完整入门者。如何添加面孔?我的程序可以从3个点绘制三角形,但是这些面有大量数字,因此它们不能只是坐标。它们是什么?如何从它们中获得三角形?

保罗·M

我想用一些代码扩展我的评论,该代码显示如何解析某些文件,然后将顶点索引替换为实际坐标:

def main():

    import re

    flt = r"-?[\d\.]+"
    vertex_pattern = r"v\s+(?P<x>{})\s+(?P<y>{})\s+(?P<z>{})".format(flt, flt, flt)
    face_pattern = r"f\s+((\d+/\d+/\d+\s*){3,})"

    vertices = []
    faces = []

    with open("alfa147.obj.txt", "r") as file:
        for line in map(str.strip, file):
            match = re.match(vertex_pattern, line)
            if match is not None:
                vertices.append(tuple(map(float, match.group("x", "y", "z"))))
                continue
            match = re.match(face_pattern, line)
            if match is not None:
                faces.append(tuple(tuple(map(int, vertex.split("/"))) for vertex in match.group(1).split()))

    print(f"The first face has {len(faces[0])} vertices:")
    for vertex in faces[0]:
        print(vertex)

    print("\nWe do not care about the texture coordinate indices or normal indices, so we get the three vertex indices:")
    for vertex in faces[0]:
        print(vertex[0])

    print("\nAfter substituting the indices for their values, the face is made up of these coordinates:")
    for vertex in faces[0]:
        print(vertices[vertex[0]-1]) # -1 because in the OBJ spec, collections start at index 1 rather than 0 

    return 0


if __name__ == "__main__":
    import sys
    sys.exit(main())

输出:

The first face has 3 vertices:
(1962, 1, 1962)
(1958, 1, 1958)
(1957, 541, 1957)

We do not care about the texture coordinate indices or normal indices, so we get the three vertex indices:
1962
1958
1957

After substituting the indices for their values, the face is made up of these coordinates:
(-4.29133, 47.755795, 51.585678)
(-4.29133, 47.716423, 51.585678)
(-4.29133, 47.716423, 52.661789)
>>> 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Jenkins工作区中的@tmp文件夹是什么以及如何清理它们

来自分类Dev

fail2ban的jail.conf文件中的这些%(...)s字符串是什么,它们如何工作?

来自分类Dev

ElasticSearch Index,它们如何工作以及它们是什么?

来自分类Dev

什么是文件夹,它们如何工作?

来自分类Dev

Ubuntu下的存储库密钥是什么?它们如何工作?

来自分类Dev

这些帮助文件的名称是什么,如何从程序中浏览它们?

来自分类Dev

obj文件中纹理坐标的含义是什么

来自分类Dev

这个Obj-C文件中的`+ monthArray`是什么?

来自分类Dev

chai 中的 _obj 是什么?

来自分类Dev

python中的_curried方法是什么?它们是如何生成的?

来自分类Dev

/ dev / input /中的文件是什么?它们的作用是什么?

来自分类Dev

C++ 文件处理中的 tellg() 是什么,它是如何工作的?

来自分类Dev

netbeans中的标签或功能?它们是什么以及如何使用它们?

来自分类Dev

Eclipse工作区中的.metadata文件夹是什么?

来自分类Dev

在 pom 文件中打包的实用程序是什么?什么是可以包装的价值,它们的含义是什么?

来自分类Dev

hadoop日志文件夹中的.out文件是什么?删除它们安全吗?

来自分类Dev

javascript中的obj ['']是什么意思?

来自分类Dev

这段代码是什么“ obj && obj.myFunction();” 在JavaScript中?

来自分类Dev

gedit模式行–它们是什么?它们如何运作?

来自分类Dev

用Mac编写的/ usr / bin文件是什么语言,如何读取它们的代码?

来自分类Dev

这些文件是什么,如Zone.Identifier:$ DATA以及如何防止它们?

来自分类Dev

在Python中,冲洗是如何工作的,原因是什么?

来自分类Dev

Jackson中的JSON View类是什么,它如何工作?

来自分类Dev

angularjs中的“ viewModel”是什么,它如何按顺序工作?

来自分类Dev

在Perl中-s的含义是什么,它是如何工作的?

来自分类Dev

什么是Windows套件,它们如何工作?

来自分类Dev

什么是在线帐户,它们如何工作?

来自分类Dev

使它们协同工作的正确语法是什么?

来自分类Dev

*〜文件的用途是什么;它们是Ubuntu / Linux中的某种默认备份吗?

Related 相关文章

  1. 1

    Jenkins工作区中的@tmp文件夹是什么以及如何清理它们

  2. 2

    fail2ban的jail.conf文件中的这些%(...)s字符串是什么,它们如何工作?

  3. 3

    ElasticSearch Index,它们如何工作以及它们是什么?

  4. 4

    什么是文件夹,它们如何工作?

  5. 5

    Ubuntu下的存储库密钥是什么?它们如何工作?

  6. 6

    这些帮助文件的名称是什么,如何从程序中浏览它们?

  7. 7

    obj文件中纹理坐标的含义是什么

  8. 8

    这个Obj-C文件中的`+ monthArray`是什么?

  9. 9

    chai 中的 _obj 是什么?

  10. 10

    python中的_curried方法是什么?它们是如何生成的?

  11. 11

    / dev / input /中的文件是什么?它们的作用是什么?

  12. 12

    C++ 文件处理中的 tellg() 是什么,它是如何工作的?

  13. 13

    netbeans中的标签或功能?它们是什么以及如何使用它们?

  14. 14

    Eclipse工作区中的.metadata文件夹是什么?

  15. 15

    在 pom 文件中打包的实用程序是什么?什么是可以包装的价值,它们的含义是什么?

  16. 16

    hadoop日志文件夹中的.out文件是什么?删除它们安全吗?

  17. 17

    javascript中的obj ['']是什么意思?

  18. 18

    这段代码是什么“ obj && obj.myFunction();” 在JavaScript中?

  19. 19

    gedit模式行–它们是什么?它们如何运作?

  20. 20

    用Mac编写的/ usr / bin文件是什么语言,如何读取它们的代码?

  21. 21

    这些文件是什么,如Zone.Identifier:$ DATA以及如何防止它们?

  22. 22

    在Python中,冲洗是如何工作的,原因是什么?

  23. 23

    Jackson中的JSON View类是什么,它如何工作?

  24. 24

    angularjs中的“ viewModel”是什么,它如何按顺序工作?

  25. 25

    在Perl中-s的含义是什么,它是如何工作的?

  26. 26

    什么是Windows套件,它们如何工作?

  27. 27

    什么是在线帐户,它们如何工作?

  28. 28

    使它们协同工作的正确语法是什么?

  29. 29

    *〜文件的用途是什么;它们是Ubuntu / Linux中的某种默认备份吗?

热门标签

归档