Python上的.OFF文件

2024-10-01 09:28:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在练习使用Python和PyOpenGL,但是我似乎不能用Python打开.OFF文件(Object File Format)。在

如果您想知道,.OFF文件是包含三维对象位置的文件。在

 OFF
 8 6 0
-0.500000 -0.500000 0.500000
 0.500000 -0.500000 0.500000
-0.500000 0.500000 0.500000
 0.500000 0.500000 0.500000
-0.500000 0.500000 -0.500000
 0.500000 0.500000 -0.500000
-0.500000 -0.500000 -0.500000
 0.500000 -0.500000 -0.500000
 4 0 1 3 2
 4 2 3 5 4
 4 4 5 7 6
 4 6 7 1 0
 4 1 7 5 3
 4 6 0 2 4

我想阅读这个文件并将其显示在python上。在

示例如下: http://people.sc.fsu.edu/~jburkardt/data/off/box.png

到目前为止,我所要做的就是手动从.OFF文件中写入每个坐标。但是程序需要能够读取你给它的每个.OFF文件。在

我只能举一个例子,因为我为垂直和曲面创建了一个元组:

^{pr2}$

以及

 surfacesCube = (
   (0,1,2,3),
   (2,3,5,4),
   (4,5,7,6),
   ...
   )

然后执行以下操作:

 def Read(verticies,surfaces):
   glBegin(QL_QUADS)
   for surface in surfaces:
      for vertex in surface:
        glVertex3fv(verticies[vertex])
   glEnd()

然后我运行Read(verticiesCube,surfacesCube),一个立方体出现了。 我的观点是,你需要能够对每一个.OFF文件都做到这一点,有时不是所有的文件都是相等的(它们也指定了颜色,或者有时在数字前面写了一些东西,所以我不知道如何跳过它们。示例:)

  OFF
  #
  #  cone.off
  #
  22   40     120
  0.000000   1.000000   0.000000
  0.000000   0.000000   0.000000
  0.500000   0.000000   0.000000

(他们和锥形。关闭是我提到的事情)

那么如何将.OFF文件的坐标和曲面保存到类似的元组中,以便应用Read()算法。


Tags: 文件in示例forreadsurface元组vertex
1条回答
网友
1楼 · 发布于 2024-10-01 09:28:53

不知道第二行的最后一个字段是什么意思。剩下的很容易推断:

def read_off(file):
    if 'OFF' != file.readline().strip():
        raise('Not a valid OFF header')
    n_verts, n_faces, n_dontknow = tuple([int(s) for s in file.readline().strip().split(' ')])
    verts = [[float(s) for s in file.readline().strip().split(' ')] for i_vert in range(n_verts)]
    faces = [[int(s) for s in file.readline().strip().split(' ')][1:] for i_face in range(n_faces)]
    return verts, faces

相关问题 更多 >