Итак, это wikipedia page показывает, как сделать перспективную проекцию точки в 3d пространстве на плоскость x/y. Кто-нибудь знает, как сделать эквивалент на плоскости y/z? Это то, что я делаю прямо сейчас (только википедия страниц материал.):Перспективная проекция на плоскость y/z
class Shape(object):
...
def apply_perspective(self, camera_pos, orientation, viewer_pos):
a, b, c = viewer_pos
cx, cy, cz = map(cos, orientation)
sx, sy, sz = map(sin, orientation)
transformed_vertices = []
append = transformed_vertices.append
for v in self.vertices:
x, y, z = v - camera_pos
t1 = sz*y + cz*x
t2 = cz*y - sz*x
x_ = cy*t1 - sy*z
t3 = cy*z + sy*t1
y_ = sx*t3 + cx*t2
z_ = cx*t3 - sx*t2
t4 = c/z_
newx = t4*x_ - a
newy = t4*y_ - b
append((newx, newy))
return transformed_vertices
Вы можете увидеть весь код на в github repo .the файл, в частности, что в это shapes.py.