Advertisement
Guest User

Untitled

a guest
Dec 12th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.15 KB | None | 0 0
  1. import numpy as np
  2. from affine_transformations import rotation_matrix
  3.  
  4.  
  5. def camera_point_offset(point):
  6.     cam_offset_matrix = np.array(
  7.         [[1, 0, 0, -point[0]],
  8.          [0, 1, 0, -point[1]],
  9.          [0, 0, 1, -point[2]],
  10.          [0, 0, 0,        1]],
  11.         dtype=np.float64
  12.     )
  13.     return cam_offset_matrix
  14.  
  15.  
  16. def new_basis(cam_point, obj_point):
  17.     forward_dir = (cam_point - obj_point) * (1.0 / np.linalg.norm(cam_point - obj_point))
  18.     right_dir = np.cross(np.array([0, 1, 0], dtype=np.float64), forward_dir)
  19.     up_dir = np.cross(forward_dir, right_dir)
  20.     cam_matrix = np.array(
  21.         [[right_dir[0],     right_dir[1],   right_dir[2], 0],
  22.          [up_dir[0],           up_dir[1],      up_dir[2], 0],
  23.          [forward_dir[0], forward_dir[1], forward_dir[2], 0],
  24.          [0,                           0,              0, 1]],
  25.         dtype=np.float64
  26.     )
  27.     return cam_matrix
  28.  
  29.  
  30. def cam_view_matrix(model_vertexes, cam_vector, model_point):
  31.     return np.around(camera_point_offset(cam_vector).dot(new_basis(cam_vector, model_point)).dot(rotation_matrix.vertexes_to_projective(model_vertexes).T).T[:, : 3]).astype(int)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement