1.manim边学边做--三维图形的场景类
2.【manim动画教程】-- 安装
3.【manim动画教程】-- 基本图形
4.【manim动画教程】-- 坐标系
5.【manim动画教程】-- 文本样式
6.【manim动画教程】-- 文字和公式
7.【manim动画教程】-- 图形样式
8.【manim动画教程】--相机
9.【manim动画教程】--高级动画效果
10.【manim动画教程】--常用动画效果
11.【manim】之滚动字幕
12.【manim】之圆规动画
13.【manim】之目录动画
14.manim边学边做--DecimalNumber
15.manim边学边做--Integer
16.manim边学边做--Variable
17.manim边学边做--Title
18.manim边学边做--BulletedList
19.manim边学边做--SingleStringMathTex
20.manim边学边做--MathTex
21.manim边学边做--Tex
22.manim边学边做--Text
23.manim边学边做--Paragraph
24.manim边学边做--MarkupText
25.manim边学边做--Code
26.manim边学边做--Matrix
27.manim边学边做--Table
28.manim边学边做--点
29.manim边学边做--圆形类
30.manim边学边做--圆弧形
31.manim边学边做--直线类
32.manim边学边做--带箭头直线
33.manim边学边做--曲线类
34.manim边学边做--角度标记
35.manim边学边做--常用多边形
36.manim边学边做--通用多边形
37.manim边学边做--弧形多边形
38.manim边学边做--空心多边形
39.manim边学边做--图形间集合关系
40.manim边学边做--形状匹配
41.manim边学边做--无向图
42.manim边做边学--有向图
43.manim边做边学--数轴
44.manim边做边学--直角平面
45.manim边做边学--复数平面
46.manim边学边做--极坐标平面
47.manim边学边做--通用二维坐标系
48.manim边做边学--通用三维坐标系
49.manim边学边做--三维的点和线
50.manim边学边做--立方体和棱柱体
51.manim边做边学--圆锥
52.manim边做边学--球体
53.manim边做边学--圆环面
54.manim边做边学--圆柱体
55.manim边做边学--曲面
56.manim边做边学--多面体
57.manim边做边学--文字的创建与销毁
58.manim边做边学--图形的创建与销毁
59.manim边做边学--淡入淡出
60.manim边学边做--渐变生长
61.manim边学边做--突出显示
62.manim边学边做--旋转
63.manim边学边做--移动动画
64.manim边学边做--同伦变换
65.manim边学边做--改变动画速度
66.manim边做边学--动画轨迹
67.manim边做边学--动画组合
68.manim边做边学--动画更新
69.manim边做边学--动画联动
70.manim边做边学--缩放变换
71.manim边做边学--交替变换
72.manim边做边学--淡入淡出变换
73.manim边学边做--时针方向变换
74.manim边学边做--局部变换
75.manim边学边做--通用变换
76.manim边学边做--相机Camera简介
77.manim边学边做--标准相机
78.manim边学边做--场景Scene简介
79.manim边学边做--局部缩放的场景类
80.manim边学边做--向量相关的场景类
81.manim边学边做--线性变换的场景类
82.manim边学边做--移动相机的场景类
83.
Manim实现线条发光效果
84.Manim:动画制作背后的魔法
85.manim 动画效果总结
86.manim变换效果总结
87.Manim动画渲染:从代码到屏幕的幕后故事
88.轻松掌握Manim的.animate语法:让动画编程更简单
89.Manim实现图像变形特效
90.Manim实现旋转变色特效
91.manim边做边学--显函数图像
92.manim边做边学--隐函数图像
93.manim边做边学--参数化曲线
94.Manim中三种函数图像类的比较
95.掌握ChangeSpeed类:让数学动画速度随心而动!
在动画制作中,发光效果是一种非常吸引眼球的视觉元素,它可以为简单的线条增添动态和活力。
今天,我们将通过Manim
框架来实现一个线条的发光效果,并逐步解析代码,让你轻松掌握这个技巧。
准备工作
首先确保安装Manim
社区版(ManimCE
):
pip install manim
实现的思路
要让线条发光,我们需要在基础线条的周围添加一层层的“发光层”,并通过动态调整这些发光层的透明度和宽度,来模拟发光的效果。
主要思路和步骤如下:
- 创建基础线条:首先绘制一条普通的线条作为发光的基础。
- 添加发光层:在基础线条的周围添加多层线条,这些线条将作为发光效果的载体。
- 动态调整发光层属性:通过正弦波函数动态调整发光层的透明度和宽度,使其产生闪烁的发光效果。
实现的过程
按照实现的思路,下面逐步来实现:
创建基础线条
class PulsingGlowLine(Scene):
def construct(self):
# 创建基础直线
line = Line(LEFT, RIGHT, color=BLUE, stroke_width=2).scale(3)
line.set_stroke(width=2)
# 第一阶段:绘制基础直线
self.play(Create(line))
self.wait(0.5)
其中代码主要含义:
Line(LEFT, RIGHT, color=BLUE, stroke_width=2)
:创建了一条从左到右的蓝色线条,宽度为2。.scale(3)
:将线条放大3倍,使其更明显。self.play(Create(line))
:使用 Create 动画将线条绘制到场景中。self.wait(0.5)
:暂停0.5秒,让用户有时间看清基础线条。
添加发光层
# 创建发光效果组
glow_group = VGroup()
colors = [BLUE_A, BLUE_E, RED_A, RED_E] # 发光颜色序列
num_layers = 12 # 发光层数量
# 创建多层发光效果
for i in range(num_layers):
glow = line.copy()
phase = i / num_layers # 相位控制
# 设置发光层属性
glow.set_stroke(
width=5 * (1 - phase) + 2, # 宽度递减
color=colors[i % len(colors)],
opacity=0, # 初始完全透明
)
glow_group.add(glow)
其中代码主要含义:
VGroup()
:是一个组合对象,用于管理多个图形对象。colors
:是一个颜色列表,用于为发光层指定不同的颜色。num_layers
:定义了发光层的数量。- 在循环中:通过
line.copy()
复制基础线条,并调整其宽度、颜色和透明度。 width=5 * (1 - phase) + 2
:使发光层的宽度从外到内逐渐减小。opacity=0
:将发光层的初始透明度设置为完全透明,后续通过动态调整透明度来实现发光效果。
动态调整发光层属性
# 将发光层放在基础线下方
glow_group.set_z_index(line.z_index - 1)
self.add(glow_group, line)
self.wait()
# 定义更新函数实现脉冲效果
def update_glow(group, dt):
# 使用正弦波生成动态参数
t = self.time * 2 # 控制脉冲速度
for i, glow in enumerate(group):
phase = i * 0.15 # 相位偏移量
intensity = (np.sin(t + phase) + 1) / 2 # 0-1之间波动
# 动态调整属性
glow.set_stroke(
opacity=intensity * 0.5, # 透明度波动
width=5 * intensity + 2, # 宽度波动
)
# 添加持续更新器
glow_group.add_updater(update_glow)
self.wait(6) # 展示6秒动态效果
其中代码主要含义:
glow_group.set_z_index(line.z_index - 1)
:将发光层放在基础线条的下方,避免遮挡基础线条。update_glow
:是一个更新函数,用于动态调整发光层的属性。self.time
:是ManimCE
内置的时间变量,表示动画播放的时间。np.sin(t + phase)
:生成一个在-1
到1
之间波动的值,通过(np.sin(t + phase) + 1) / 2
将其转换为0
到1
之间的值,作为发光强度intensity
。glow.set_stroke(opacity=intensity * 0.5, width=5 * intensity + 2)
:动态调整发光层的透明度和宽度,使其产生闪烁的效果。glow_group.add_updater(update_glow)
:将更新函数绑定到发光层组,使其在动画播放过程中持续更新。self.wait(6)
:让动画展示6秒的发光效果。
结束动画
# 移除更新器并保持最终状态
glow_group.remove_updater(update_glow)
self.remove(glow_group)
self.wait()
代码主要含义:
glow_group.remove_updater(update_glow)
:移除更新函数,停止发光效果的动态变化。self.remove(glow_group)
:将发光层组从场景中移除。self.wait()
:暂停动画,等待用户手动停止。
整个代码运行效果如下:
总结
通过这个文章,我们可以了解到:
- 发光效果 = 多层半透明描边 + 动态属性变化
add_updater
实现持续动画- 三角函数创造平滑波动
- 相位差产生波浪效果
现在尝试修改参数创建你自己的特效吧!
比如,修改发光的颜色,发光的脉冲频率等等。
原创作者: wang_yb 转载于: https://www.cnblogs.com/wang_yb/p/18880993