python - Python 上的 .OFF 文件

标签 python opengl pygame pyopengl

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

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

 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 文件。

我只能做我给出的例子,因为我为顶点和表面做了一个元组的元组:

verticiesCube = (
   (-0.5,-0.5,0.5),
   (0.5,-0.5,0.5),
   (-0.5,0.5,0.5),
   ...
   )

 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

(#'s 和 cone.off 是我提到的东西)

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

最佳答案

不知道第二行的最后一个字段是什么意思。其余的很容易推导出来:

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

关于python - Python 上的 .OFF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31129968/

相关文章:

opengl - glsl 像素着色器 - 到最近目标像素的距离

cocoa - 如何使用 Cocoa (Mac) 绘制两个 NSOpenGLView

python - 为什么这个 Sprite 没有显示在屏幕上?

python - pygame.camera 不工作?

python - Python 中的 mysql_info() 等效项

python - 如何将一些字符串粘贴到 Python 中的事件窗口?

Python:从字符串访问变量

python - 无需代码即可将笔记本导出为 pdf

Python:如何在 OpenGL Superbible 示例中让立方体旋转和移动

python - 如何读取 Python Num-Lock 按键切换事件?