这里写自定义目录标题
加载茶壶数据teapot.py程序分析
学习附录C中的程序,分析teapot.py程序,了解加载茶壶数据teapot.off的过程。
加载库
from transforms import *
from math import pi
读取teapot.off 数据

`with open("teapot.off") as f:
lines = f.readlines()#读取茶壶数据
vertex_count, face_count, edge_count = map(int,lines[1].split()) #获取数据的统计数据`
获取每个坐标点向量值load_vertices()
其中 vertices.append(scale_by(2)(rotate_x_by(-pi/2)(translate_by((-0.5,0,-0.6))(v))))
这条指令中:(rotate_x_by(-pi/2)(translate_by((-0.5,0,-0.6))(v)) 把茶壶的中心移到坐标原点,并且把绕X轴旋转-90度;
scale_by(2) 把茶壶图像放大2倍
其中三个函数的原型:
def scale_by(scalar): #向量缩放
def new_function(v):
return scale(scalar,v)
return new_function
def rotate_x_by(angle):
def new_function(v):
return rotate_x(angle,v)
return new_function
def translate_by(translation):
def new_function(v):
return add(translation,v)
return new_function
获取每个面的顶点坐标load_polygons()
其中poly = list(map(vertices.getitem, map(int,lines[i].split()[1:])))
这条指令 根据每个面的各顶点的索引号,到vertices中找到对应的坐标值
把大于等于4个顶点的面转换为三角形的坐标点triangulate(poly)

整体封装函数load_triangles():
def load_triangles():
tris = []
polys = load_polygons() #加载茶壶面信息
for poly in polys:
for tri in triangulate(poly): #把面信息转为三角形
assert(len(tri)==3)
for v in tri:
assert(len(v)==3)
tris.append(tri)
return tris
整个程序通过调用该函数完成茶壶数据的获取,为下一步绘制做准备。

615

被折叠的 条评论
为什么被折叠?



