今天介绍Manim中用于淡入淡出变换的3个动画类:
- FadeToColor:聚焦于对象颜色的平滑转换,通过渐变增强视觉效果
- FadeTransform:实现不同对象之间的渐变替换,让元素转换更加连贯
- FadeTransformPieces:突出将对象碎片化并对各部门单独变换,实用于复杂物体的分解重组
这三者都在增强动画的表现力和连贯性方面发挥偏重要作用,但在操尴尬刁难象和变换方式上各有侧重,可根据具体场景灵活选用,以创造出多样、吸引人的动画效果。
1. 动画概述
1.1. FadeToColor
当需要将一个对象的颜色平滑地过渡到另一种颜色时,FadeToColor 是一个很好的选择。
例如,在演示颜色变化对某个图形或文本的影响时,可以使用它将图形或文本从初始颜色渐变为目标颜色。
也可以用于强调某个元素,通过改变其颜色吸引观众的注意力,同时产生渐变的视觉效果,使过渡更加天然。
FadeToColor动画的特点是在肯定的时间内将一个对象的颜色逐渐淡入到另一个指定的颜色。
它的参数主要有:
参数名称类型说明mobjectMobject应用颜色变化的对象colorstr指定要变化到的目标颜色1.2. FadeTransform
FadeTransform实用于将一个对象变换为另一个对象的场景。
例如,将一个圆形平滑地变换为一个正方形,大概将一段文本变换为另一个文本。
在展示元素之间的替换或转换关系时,使用 FadeTransform 可以让观众清晰地看到一个元素如何逐渐变成另一个元素,而不是突兀地消失和出现。
FadeToColor动画的特点是可以在两个不同的 Mobject 之间进行渐变变换。
动画过程中,会产生一种类似于旧对象逐渐消失,新对象逐渐浮现的效果,两个对象的轮廓在变换过程中会有融合和过渡。
它的参数主要有:
参数名称类型说明mobjectMobject起始的 Mobjecttarget_mobjectMobject目标 Mobjectstretchbool控制目标 Mobject 在动画过程中是否拉伸dim_to_matchint若目标 Mobject 不自动拉伸,此参数可调整目标 Mobject 移入时的初始缩放1.3. FadeTransformPieces
当需要对一个对象进行碎片化的变换时,可以使用FadeTransformPieces。
例如,将一个复杂的图形拆分成多个部门,然后将这些部门分别变换为另一个复杂图形的对应部门。
在演示物体的分解和重组时,它能很好地展示各个部门的变化过程。
与上一节中的FadeTransform 不同,FadeTransformPieces更侧重于将对象分解为多个部门,然后对每个部门进行单独的变换。
可以为每个部门生成独立的变换动画,使整个对象的变换过程更加细致和有层次感。
FadeTransformPieces继续自FadeTransform ,它的参数和FadeTransform类似 :
参数名称类型说明mobjectMobject起始的 Mobjecttarget_mobjectMobject目标 Mobjectstretchbool控制目标 Mobject 在动画过程中是否拉伸dim_to_matchint若目标 Mobject 不自动拉伸,此参数可调整目标 Mobject 移入时的初始缩放2. 使用示例
这三个类多用在动画转场的时候,使用也比较简单,下面通过示例演示如何使用它们。
2.1. 图形颜色淡入渐变
这个示例主要展示颜色的渐变效果。
首先在场景中创建一个蓝色的正方形,通过FadeToColor动画,让正方形以淡入的方式依次逐渐变为黄色,红色和绿色。
FadeToColor动画效果实用于需要突出显示某个图形。- # 创建一个正方形
- square = Square(color=BLUE, side_length=2)
- self.add(square)
- # 展示将正方形淡入渐变为不同颜色
- self.play(FadeToColor(square, color=YELLOW))
- self.play(FadeToColor(square, color=RED))
- self.play(FadeToColor(square, color=GREEN))
复制代码
2.2. 图形平滑淡入变换
这个示例用于展示图形间的平滑渐变转换。
开始时,在场景中创建一个绿色的圆形,随后运用FadeTransform动画,圆形以淡入渐出的方式平滑地转变为一个黄色的三角形,这种效果常用于几何图形教学场景。- # 创建一个圆形
- circle = Circle(color=GREEN, radius=0.8)
- self.add(circle)
- # 创建一个三角形作为目标图形
- triangle = Triangle(color=YELLOW)
- # 展示将圆形淡入渐变为三角形的动画
- self.play(FadeTransform(circle, triangle))
复制代码
2.3. 子图变换
这个示例聚焦于组合图形的子图形渐变。
首先绘制一个由 4 个小正方形排列成 2x2 网格组成的大正方形。
接着,利用FadeTransformPieces动画,每个小正方形独立地淡入渐变为别的一种图形,同样以 2x2 网格情势排列。
此效果实用于展示复杂图形由简票据图形逐步变换的过程,例如在图案设计教学中展示元素的变换。- # 创建一个由多个小正方形组成的大正方形
- squares = VGroup(*[Square(side_length=0.5) for _ in range(4)])
- squares.arrange_in_grid(rows=2, cols=2)
- self.add(squares)
- # 创建一个由多个图形组成的目标图形
- c = Circle(radius=0.5, color=BLUE)
- t = Triangle(color=GREEN)
- s = Star(color=RED)
- p = RegularPolygon(n=6, color=YELLOW)
- vg = VGroup(c, t, s, p)
- vg.arrange_in_grid(rows=2, cols=2)
- # 展示将每个小正方形淡入渐变为小圆形的动画
- self.play(FadeTransformPieces(squares, vg))
复制代码
2.4. 逐个字符变换
这个示例应用于文本动画场景。
首先显示紫色的 “Hello” 文本,之后借助FadeTransformPieces动画,“Hello” 的每个字符逐个淡入渐变为大小不同,颜色不同的“Manim” 字符,实现文本内容的平滑过渡,常用于文字特效展示或故事叙述中文字的动态变化。- # 创建一个文本对象
- text = Text("Hello", color=PURPLE)
- self.add(text)
- # 创建一个由单个字符组成的文本对象作为目标
- colors = [RED, ORANGE, BLUE, GREEN, YELLOW]
- font_sizes = [60, 40, 20, 40, 50]
- new_text = VGroup(
- *[
- Text(
- char,
- font_size=font_sizes[idx],
- color=colors[idx],
- )
- for idx, char in enumerate("Manim")
- ]
- )
- new_text.arrange(RIGHT)
- # 展示将每个字符淡入渐变为新字符的动画
- self.play(FadeTransformPieces(text, new_text))
复制代码
3. 附件
文中的代码只是关键部门的截取,完整的代码共享在网盘中(fade.py),
下载所在: 完整代码 (访问暗码: 6872)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |