def display_multiple_vectorized_mobjects(self, vmobjects, pixel_array): rot_matrix = self.get_rotation_matrix() def z_key(vmob): # Assign a number to a three dimensional mobjects # based on how close it is to the camera if vmob.shade_in_3d: return np.dot(vmob.get_center(), rot_matrix.T)[2] else: return np.inf Camera.display_multiple_vectorized_mobjects( self, sorted(vmobjects, key=z_key), pixel_array)
def display_multiple_vectorized_mobjects(self, vmobjects): camera_point = self.spherical_coords_to_point( *self.get_spherical_coords()) def z_cmp(*vmobs): # Compare to three dimensional mobjects based on # how close they are to the camera # return cmp(*[ # -np.linalg.norm(vm.get_center()-camera_point) # for vm in vmobs # ]) three_d_status = map(should_shade_in_3d, vmobs) has_points = [vm.get_num_points() > 0 for vm in vmobs] if all(three_d_status) and all(has_points): cmp_vect = self.get_unit_normal_vect(vmobs[1]) return cmp( *[np.dot(vm.get_center(), cmp_vect) for vm in vmobs]) else: return 0 Camera.display_multiple_vectorized_mobjects( self, sorted(vmobjects, cmp=z_cmp))