mirror of
https://github.com/3b1b/manim.git
synced 2025-07-31 05:52:34 +08:00
A few 3d updates
This commit is contained in:
41
camera.py
41
camera.py
@ -287,47 +287,6 @@ class MovingCamera(Camera):
|
||||
self.resize_space_shape(
|
||||
0 if self.aligned_dimension == "height" else 1
|
||||
)
|
||||
|
||||
class ShadingCamera(Camera):
|
||||
CONFIG = {
|
||||
# "sun_vect" : OUT+LEFT+UP,
|
||||
"sun_vect" : UP+LEFT,
|
||||
"shading_factor" : 0.5,
|
||||
}
|
||||
def __init__(self, *args, **kwargs):
|
||||
Camera.__init__(self, *args, **kwargs)
|
||||
self.unit_sun_vect = self.sun_vect/np.linalg.norm(self.sun_vect)
|
||||
|
||||
def get_stroke_color(self, vmobject):
|
||||
return Color(rgb = self.get_shaded_rgb(
|
||||
color_to_rgb(vmobject.get_stroke_color()),
|
||||
normal_vect = self.get_unit_normal_vect(vmobject)
|
||||
))
|
||||
|
||||
def get_fill_color(self, vmobject):
|
||||
return Color(rgb = self.get_shaded_rgb(
|
||||
color_to_rgb(vmobject.get_fill_color()),
|
||||
normal_vect = self.get_unit_normal_vect(vmobject)
|
||||
))
|
||||
|
||||
def get_shaded_rgb(self, rgb, normal_vect):
|
||||
brightness = np.dot(normal_vect, self.unit_sun_vect)
|
||||
if brightness > 0:
|
||||
alpha = self.shading_factor*brightness
|
||||
return interpolate(rgb, np.ones(3), alpha)
|
||||
else:
|
||||
alpha = -self.shading_factor*brightness
|
||||
return interpolate(rgb, np.zeros(3), alpha)
|
||||
|
||||
def get_unit_normal_vect(self, vmobject):
|
||||
anchors = vmobject.get_anchors()
|
||||
if len(anchors) < 3:
|
||||
return OUT
|
||||
normal = np.cross(anchors[1]-anchors[0], anchors[2]-anchors[1])
|
||||
length = np.linalg.norm(normal)
|
||||
if length == 0:
|
||||
return OUT
|
||||
return normal/length
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user