mirror of
https://github.com/3b1b/manim.git
synced 2025-08-05 16:49:03 +00:00
Change where z-sorting happens in 3d camera
This commit is contained in:
parent
bfa37e251f
commit
0d95fe7234
1 changed files with 18 additions and 12 deletions
|
@ -6,6 +6,7 @@ from constants import *
|
|||
|
||||
from camera.camera import Camera
|
||||
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_unit_normal
|
||||
from mobject.three_d_utils import get_3d_vmob_end_corner
|
||||
|
@ -94,22 +95,27 @@ class ThreeDCamera(Camera):
|
|||
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()
|
||||
|
||||
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
|
||||
# based on how close it is to the camera
|
||||
if vmob.shade_in_3d:
|
||||
points = mob.points
|
||||
if len(points) == 0:
|
||||
return 0
|
||||
return np.dot(
|
||||
vmob.get_center(),
|
||||
center_of_mass(points),
|
||||
rot_matrix.T
|
||||
)[2]
|
||||
else:
|
||||
return np.inf
|
||||
Camera.display_multiple_vectorized_mobjects(
|
||||
self, sorted(vmobjects, key=z_key), pixel_array
|
||||
)
|
||||
return sorted(mobjects, key=z_key)
|
||||
|
||||
def get_phi(self):
|
||||
return self.phi_tracker.get_value()
|
||||
|
|
Loading…
Add table
Reference in a new issue