mirror of
https://github.com/3b1b/manim.git
synced 2025-08-05 16:49:03 +00:00
microedits (not yet working)
This commit is contained in:
parent
148c808b76
commit
a06c9d32d9
2 changed files with 87 additions and 28 deletions
|
@ -749,7 +749,7 @@ class SingleLighthouseScene(PiCreatureScene):
|
||||||
self.setup_elements()
|
self.setup_elements()
|
||||||
self.setup_angle() # spotlight and angle msmt change when screen rotates
|
self.setup_angle() # spotlight and angle msmt change when screen rotates
|
||||||
self.rotate_screen()
|
self.rotate_screen()
|
||||||
self.morph_lighthouse_into_sun()
|
#self.morph_lighthouse_into_sun()
|
||||||
|
|
||||||
|
|
||||||
def setup_elements(self):
|
def setup_elements(self):
|
||||||
|
@ -908,47 +908,103 @@ class SingleLighthouseScene(PiCreatureScene):
|
||||||
### but it doesn't work
|
### but it doesn't work
|
||||||
|
|
||||||
|
|
||||||
|
class MorphIntoSunScene(PiCreatureScene):
|
||||||
|
|
||||||
|
def construct(self):
|
||||||
|
|
||||||
|
self.setup_elements()
|
||||||
|
self.morph_lighthouse_into_sun()
|
||||||
|
|
||||||
|
|
||||||
|
def setup_elements(self):
|
||||||
|
|
||||||
|
self.remove(self.get_primary_pi_creature())
|
||||||
|
|
||||||
|
SCREEN_SIZE = 3.0
|
||||||
|
DISTANCE_FROM_LIGHTHOUSE = 10.0
|
||||||
|
source_point = [-DISTANCE_FROM_LIGHTHOUSE/2,0,0]
|
||||||
|
observer_point = [DISTANCE_FROM_LIGHTHOUSE/2,0,0]
|
||||||
|
|
||||||
|
# Light source
|
||||||
|
|
||||||
|
self.light_source = LightSource(
|
||||||
|
opacity_function = inverse_quadratic(1,SPOTLIGHT_SCALE,1),
|
||||||
|
num_levels = NUM_LEVELS,
|
||||||
|
radius = 10,
|
||||||
|
max_opacity_ambient = AMBIENT_FULL,
|
||||||
|
max_opacity_spotlight = SPOTLIGHT_FULL,
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
self.light_source.move_source_to(source_point)
|
||||||
|
|
||||||
|
|
||||||
|
# Pi Creature
|
||||||
|
|
||||||
|
morty = self.get_primary_pi_creature()
|
||||||
|
morty.scale(0.5)
|
||||||
|
morty.move_to(observer_point)
|
||||||
|
morty.shift(2*OUT)
|
||||||
|
self.add_foreground_mobject(morty)
|
||||||
|
|
||||||
|
self.add(self.light_source.lighthouse,self.light_source.ambient_light)
|
||||||
|
|
||||||
|
|
||||||
|
# Screen
|
||||||
|
|
||||||
|
self.screen = Rectangle(
|
||||||
|
width = 0.06,
|
||||||
|
height = 2,
|
||||||
|
mark_paths_closed = True,
|
||||||
|
fill_color = WHITE,
|
||||||
|
fill_opacity = 1.0,
|
||||||
|
stroke_width = 0.0
|
||||||
|
)
|
||||||
|
|
||||||
|
self.screen.next_to(morty,LEFT)
|
||||||
|
|
||||||
|
self.light_source.set_screen(self.screen)
|
||||||
|
self.add(self.screen,self.light_source.shadow)
|
||||||
|
|
||||||
|
self.add_foreground_mobject(self.light_source.shadow)
|
||||||
|
self.add_foreground_mobject(morty)
|
||||||
|
|
||||||
|
self.light_source.dim_ambient
|
||||||
|
self.add(self.light_source.spotlight)
|
||||||
|
|
||||||
|
self.screen_tracker = ScreenTracker(self.light_source)
|
||||||
|
self.add(self.screen_tracker)
|
||||||
|
|
||||||
|
self.wait()
|
||||||
|
|
||||||
|
|
||||||
def morph_lighthouse_into_sun(self):
|
def morph_lighthouse_into_sun(self):
|
||||||
|
|
||||||
|
sun_position = np.array([-100,0,0])
|
||||||
|
|
||||||
|
|
||||||
sun_position = [-100,0,0]
|
|
||||||
|
|
||||||
|
|
||||||
self.play(
|
# Why does none of this change the opacity function???
|
||||||
FadeOut(self.angle_arc),
|
|
||||||
FadeOut(self.angle_indicator)
|
self.sun = self.light_source.copy()
|
||||||
)
|
|
||||||
|
self.sun.change_spotlight_opacity_function(lambda r: 0.1)
|
||||||
|
# self.sun.spotlight.opacity_function = lambda r: 0.1
|
||||||
|
# for submob in self.sun.spotlight.submobjects:
|
||||||
|
# submob.set_fill(opacity = 0.1)
|
||||||
|
|
||||||
|
#self.sun.move_source_to(sun_position)
|
||||||
|
#self.sun.set_radius(120)
|
||||||
|
|
||||||
|
self.sun.spotlight.generate_points()
|
||||||
|
|
||||||
self.wait()
|
self.wait()
|
||||||
|
|
||||||
self.sun = self.light_source.deepcopy()
|
|
||||||
|
|
||||||
#self.sun.num_levels = NUM_LEVELS,
|
|
||||||
#self.sun.set_radius(150)
|
|
||||||
#self.sun.set_max_opacity_ambient(AMBIENT_FULL)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
self.sun.spotlight.change_opacity_function(lambda r: 0.5)
|
|
||||||
self.sun.set_radius(150)
|
|
||||||
self.sun.move_source_to(sun_position)
|
|
||||||
|
|
||||||
#self.sun.update()
|
|
||||||
|
|
||||||
#self.add(self.sun)
|
|
||||||
self.wait()
|
|
||||||
# temporarily remove the screen tracker while we move the source
|
|
||||||
#self.remove(self.screen_tracker)
|
|
||||||
|
|
||||||
#print self.sun.spotlight.get_source_point()
|
|
||||||
|
|
||||||
self.play(
|
self.play(
|
||||||
#self.light_source.spotlight.move_source_to,sun_position,
|
|
||||||
Transform(self.light_source,self.sun)
|
Transform(self.light_source,self.sun)
|
||||||
)
|
)
|
||||||
|
|
||||||
#self.add(ScreenTracker(self.sun))
|
|
||||||
|
|
||||||
self.wait()
|
self.wait()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -181,6 +181,9 @@ class LightSource(VMobject):
|
||||||
self.update()
|
self.update()
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
def change_spotlight_opacity_function(self, new_of):
|
||||||
|
self.spotlight.change_opacity_function(new_of)
|
||||||
|
|
||||||
def set_radius(self,new_radius):
|
def set_radius(self,new_radius):
|
||||||
self.radius = new_radius
|
self.radius = new_radius
|
||||||
self.ambient_light.radius = new_radius
|
self.ambient_light.radius = new_radius
|
||||||
|
|
Loading…
Add table
Reference in a new issue