今天介绍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. win10子系统docker搭建gitlab Server

    心血来潮想搞一套cicd玩玩,结果开始就掉坑里了. 遇到问题 不会写文,所以语言组织比较差,将就看着吧!就当记录一下这个坑以后没准还能用的上. 参照https://blog.csdn.net/Mono ...

  2. CodeForces Round 898 (div 4) H题解析

    CodeForces Round 898 (div 4)H. Mad  City 大致思路    对于有n条边和n个点,说明这个图里面只有一个环 并且两人同时开始和结束移动,所以可以得到当Valeri ...

  3. VScode 扩展推荐和配置

    VScode 扩展推荐和配置 VSCode Extensions 推荐 Themes Dracula Official 拥有明亮的颜色和舒适的对比度,非常适合长时间编程. Nord 基于北极地区自然色 ...

  4. VUE懒加载的table前端搜索

    // 前端搜索 fliterData() { const search = this.search if (search) { this.blist = this.list.filter(item = ...

  5. xtrabackup脚本

    xtrabackup是MySQL的一种物理备份工具,相对于mysqldump,备份和还原速度更快 , 我写了一份可以进行备份 + 还原的脚本 #!bin/bash all_bak_path=" ...

  6. Nuxt.js 应用中的 render:html 事件钩子

    title: Nuxt.js 应用中的 render:html 事件钩子 date: 2024/11/30 updated: 2024/11/30 author: cmdragon excerpt: ...

  7. AO SDK安装问题

    ao sdk for .net安装时,需要进行验证.net框架,没装vs的时候会提示 arcobjects SDK for the Microsoft.NT Framework requires a ...

  8. RPM 与 YUM

    RPM 与 YUM rpm 包的管理 rpm 用于互联网下载包的打包及安装工具,它包含在某些 Linux 分发版中.它生成具有.RPM 扩展名的文件.RPM是 RedHat Package Manag ...

  9. IOS热重载工具InjectionIII

    IOS热重载工具InjectionIII 支持 OC.Swift 以及 Swift 和 OC 混编项目的 UI 热重载工具,采取在模拟器(真机不支持)注入方式实现 UI 热重载,修改完 UI 直接 c ...

  10. 从 $PGDATA 到文件组:深入解析 PostgreSQL 与 SQL Server 的存储策略

    从 $PGDATA 到文件组:深入解析 PostgreSQL 与 SQL Server 的存储策略 在数据库领域,数据存储和管理的效率与可靠性是决定系统性能.可扩展性和易于管理的关键因素.Postgr ...