Change where z-sorting happens in 3d camera

This commit is contained in:
Grant Sanderson 2018-08-29 00:09:09 -07:00
parent bfa37e251f
commit 0d95fe7234

View file

@ -6,6 +6,7 @@ from constants import *
from camera.camera import Camera from camera.camera import Camera
from mobject.types.point_cloud_mobject import Point from mobject.types.point_cloud_mobject import Point
from mobject.types.vectorized_mobject import VMobject
from mobject.three_d_utils import get_3d_vmob_start_corner from mobject.three_d_utils import get_3d_vmob_start_corner
from mobject.three_d_utils import get_3d_vmob_start_corner_unit_normal from mobject.three_d_utils import get_3d_vmob_start_corner_unit_normal
from mobject.three_d_utils import get_3d_vmob_end_corner from mobject.three_d_utils import get_3d_vmob_end_corner
@ -94,22 +95,27 @@ class ThreeDCamera(Camera):
vmobject, vmobject.get_fill_rgbas() vmobject, vmobject.get_fill_rgbas()
) )
def display_multiple_vectorized_mobjects(self, vmobjects, pixel_array): def get_mobjects_to_display(self, *args, **kwargs):
mobjects = Camera.get_mobjects_to_display(
self, *args, **kwargs
)
rot_matrix = self.get_rotation_matrix() rot_matrix = self.get_rotation_matrix()
def z_key(vmob): def z_key(mob):
if not isinstance(mob, VMobject):
return np.inf
if not mob.shade_in_3d:
return np.inf
# Assign a number to a three dimensional mobjects # Assign a number to a three dimensional mobjects
# based on how close it is to the camera # based on how close it is to the camera
if vmob.shade_in_3d: points = mob.points
return np.dot( if len(points) == 0:
vmob.get_center(), return 0
rot_matrix.T return np.dot(
)[2] center_of_mass(points),
else: rot_matrix.T
return np.inf )[2]
Camera.display_multiple_vectorized_mobjects( return sorted(mobjects, key=z_key)
self, sorted(vmobjects, key=z_key), pixel_array
)
def get_phi(self): def get_phi(self):
return self.phi_tracker.get_value() return self.phi_tracker.get_value()