今天介绍Manim中用于淡入淡出变换的3个动画类:

  1. FadeToColor:聚焦于对象颜色的平滑转换,通过渐变增强视觉效果
  2. FadeTransform:实现不同对象之间的渐变替换,让元素转换更加连贯
  3. FadeTransformPieces:突出将对象碎片化并对各部分单独变换,适用于复杂物体的分解重组

这三者都在增强动画的表现力和连贯性方面发挥着重要作用,但在操作对象和变换方式上各有侧重,可根据具体场景灵活选用,以创造出多样、吸引人的动画效果。

1. 动画概述

1.1. FadeToColor

当需要将一个对象的颜色平滑地过渡到另一种颜色时,FadeToColor 是一个很好的选择。

例如,在演示颜色变化对某个图形或文本的影响时,可以使用它将图形或文本从初始颜色渐变为目标颜色。

也可以用于强调某个元素,通过改变其颜色吸引观众的注意力,同时产生渐变的视觉效果,使过渡更加自然。

FadeToColor动画的特点是在一定的时间内将一个对象的颜色逐渐淡入到另一个指定的颜色。

它的参数主要有:

参数名称 类型 说明
mobject Mobject 应用颜色变化的对象
color str 指定要变化到的目标颜色

1.2. FadeTransform

FadeTransform适用于将一个对象变换为另一个对象的场景。

例如,将一个圆形平滑地变换为一个正方形,或者将一段文本变换为另一个文本。

在展示元素之间的替换或转换关系时,使用 FadeTransform 可以让观众清晰地看到一个元素如何逐渐变成另一个元素,而不是突兀地消失和出现。

FadeToColor动画的特点是可以在两个不同的 Mobject 之间进行渐变变换。

动画过程中,会产生一种类似于旧对象逐渐消失,新对象逐渐浮现的效果,两个对象的轮廓在变换过程中会有融合和过渡。

它的参数主要有:

参数名称 类型 说明
mobject Mobject 起始的 Mobject
target_mobject Mobject 目标 Mobject
stretch bool 控制目标 Mobject 在动画过程中是否拉伸
dim_to_match int 若目标 Mobject 不自动拉伸,此参数可调整目标 Mobject 移入时的初始缩放

1.3. FadeTransformPieces

当需要对一个对象进行碎片化的变换时,可以使用FadeTransformPieces

例如,将一个复杂的图形拆分成多个部分,然后将这些部分分别变换为另一个复杂图形的对应部分。

在演示物体的分解和重组时,它能很好地展示各个部分的变化过程。

与上一节中的FadeTransform 不同,FadeTransformPieces更侧重于将对象分解为多个部分,然后对每个部分进行单独的变换。

可以为每个部分生成独立的变换动画,使整个对象的变换过程更加细致和有层次感。

FadeTransformPieces继承自FadeTransform ,它的参数和FadeTransform类似 :

参数名称 类型 说明
mobject Mobject 起始的 Mobject
target_mobject Mobject 目标 Mobject
stretch bool 控制目标 Mobject 在动画过程中是否拉伸
dim_to_match int 若目标 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)

manim边做边学--淡入淡出变换的更多相关文章

  1. [转]Android UI:看看Google官方自定义带旋转动画的ImageView-----RotateImageView怎么写(附 图片淡入淡出效果)

    http://blog.csdn.net/yanzi1225627/article/details/22439119 众所周知,想要让ImageView旋转的话,可以用setRotation()让其围 ...

  2. jQuery基础(动画篇 animate,显示隐藏,淡入淡出,下拉切换)

    1.jQuery中隐藏元素的hide方法   让页面上的元素不可见,一般可以通过设置css的display为none属性.但是通过css直接修改是静态的布局,如果在代码执行的时候,一般是通过js控制元 ...

  3. 图片轮播(淡入淡出)--JS原生和jQuery实现

    图片轮播(淡入淡出)--js原生和jquery实现 图片轮播有很多种方式,这里采用其中的 淡入淡出形式 js原生和jQuery都可以实现,jquery因为封装了很多用法,所以用起来就简单许多,转换成j ...

  4. jQuery淡入淡出效果轮播图

    用JavaScript做了平滑切换的焦点轮播图之后,用jQuery写了个简单的淡入淡出的轮播图,代码没有做优化,html结构稍微有一些调整,图片部分用ul替换了之前用的div. html结构如下: & ...

  5. Unity3D 4.61 实现淡入淡出的场景过渡方法。

    还在学习过程中,如果有大大看到请指点. orz原来官方就有了更好的处理方法的教程,具体查看下面视屏. [Unity官方实例教程 秘密行动] Unity官方教程<秘密行动>(五) 屏幕渐变效 ...

  6. 针对淡入淡出的定时轮播效果js

    如果不使用jquery的fadeIn和fadeOut的接口和不适用animate情况下,如果要做用js实现淡入淡出轮播效果,我所想到的办法就是使用css3新特性transition(注意好兼容性). ...

  7. Unity 启动画面淡入淡出

    前几天在玩我叫MT 2游戏的时候发现打开他们应用的时候发现他们Logo淡入淡出的效果做的挺好的,例如第一张是运营商腾讯的logo第二张是他们公司的游戏logo.我们也来模仿一下: 第一张图片:运营商的 ...

  8. Android---两个视图间的淡入淡出

    本文译自:http://developer.android.com/training/animation/crossfade.html 淡入淡出动画(也可以作为溶解动画)是指在渐渐的淡出一个UI组件的 ...

  9. js淡入淡出

    示例: js淡入淡出 原理:更改css不透明数值 知识点: css不透明 filter:alpha(opacity:30); opacity:0.3;} 小技巧: 小于临界值,做加速 大于临界值,做减 ...

  10. ListView的淡入淡出和Activity的淡入淡出补间动画效果Animation

    //=========主页面======================= package com.bw.lianxi7; import android.os.Bundle;import androi ...

随机推荐

  1. 报错处理TypeError: can't multiply sequence by non-int of type 'float'

    在练习格式化输出时出现错误TypeError: can't multiply sequence by non-int of type 'float' 为什么会出现TypeError:不能将序列乘以'f ...

  2. 读书笔记-C#8.0本质论-04

    18. 多线程 18.1 多线程基础 处理器受限延迟(Processor-bound latency):假定一个计算需要执行120亿次算术运算,而总共的处理能力是每秒60亿次,那么从请求结果到获得结果 ...

  3. Java垃圾回收器总结

    什么是Java垃圾回收器 Java垃圾回收器是Java虚拟机(JVM)的三个重要模块(另外两个是解释器和多线程机制)之一,为应用程序提供内存的自动分配(Memory Allocation).自动回收( ...

  4. ZCMU-1101

    这个题不怎么难,就是当时没有理解到字典序的意思:我一直以为是自己元素间的比较,后再同学帮助下明白这里是与其他比,这样就很简单了.就是要求当前那个最小就可以了. 对这道题我有点吐槽明明自己都说了最后一组 ...

  5. Vue 模版解析

    1.大括号表达式 (1)在MVVM()中接收并保存配置对象 (2)调用Compile编译函数,将el和vm传入 function MVVM (option) { this.$option = opti ...

  6. \r,\n,\r\n的前世今生

    前情 最近在逛论坛的时候遇到有人在提问题,为什么\n在苹果手机上不换行,我以前有网上看到过文章,是因为各系统的解析不同,需要使用\r\n来做兼容,自己虽然知道怎么解决,但是不知具体原因,今特来详细了解 ...

  7. uni-app下载文件在ios下失败

    标签: js uni-app 前情 uni-app是我很喜欢的跨平台框架,它能开发小程序,H5,APP(安卓/iOS),对前端开发很友好,自带的IDE让开发体验也很棒,公司项目就是主推uni-app. ...

  8. CentOS7.8安装k8s

    1, 安装 docker / kubelet # 在 master 节点和 worker 节点都要执行 \# 最后一个参数 1.20.6 用于指定 kubenetes 版本,支持所有 1.20.x 版 ...

  9. 【报错解决】【Python】'Failed to import pydot. You must pip install pydot and install graphviz (https://graphviz.gitlab.io/download/), ', 'for pydotprint to work.'

    可视化函数式API的形式seq2seq模型的过程中发生报错. 报错内容: 'Failed to import pydot. You must pip install pydot and install ...

  10. Qt/C++音视频开发56-udp推流和拉流/组播和单播推流

    一.前言 之前已经实现了rtsp/rtmp推流,rtsp/rtmp/hls/flv/ws-flv/webrtc等拉流,这种一般都需要依赖一个独立的流媒体服务程序,有没有一种更便捷的方式不需要这种依赖, ...