Kyl*_*yle 2 python opengl pygame pyopengl
我一直在用Python和PyOpenGL练习,但我似乎无法用Python打开.OFF文件(目标文件格式).
如果您想知道,.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
Run Code Online (Sandbox Code Playgroud)
我想读取这个文件并让它出现在python上.
示例应该是这样的:http: //people.sc.fsu.edu/~jburkardt/data/off/box.png
到目前为止,我必须手动编写.OFF文件中的每个坐标.但是程序需要能够读取你给它的每个.OFF文件.
我只能制作我给出的例子,因为我为verticies和surface创建了一个元组元组:
verticiesCube = (
(-0.5,-0.5,0.5),
(0.5,-0.5,0.5),
(-0.5,0.5,0.5),
...
)
Run Code Online (Sandbox Code Playgroud)
和
surfacesCube = (
(0,1,2,3),
(2,3,5,4),
(4,5,7,6),
...
)
Run Code Online (Sandbox Code Playgroud)
那么做:
def Read(verticies,surfaces):
glBegin(QL_QUADS)
for surface in surfaces:
for vertex in surface:
glVertex3fv(verticies[vertex])
glEnd()
Run Code Online (Sandbox Code Playgroud)
然后我运行Read(verticiesCube,surfacesCube)并出现一个Cube.我的观点是,您需要能够对每个.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
Run Code Online (Sandbox Code Playgroud)
(#和'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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2860 次 |
| 最近记录: |