2013-12-23 3 views
0

Итак, это 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.

ответ

0

Я закончил тем, что сделал предположение, что оказалось правильным. Я использовал t4 = a/x_, newx = t4*y_ - b и newy = t4*z_ - c; которая оказалась правильной. Я просто использовал алгебру!

Смежные вопросы