news 2026/4/23 8:05:41

Manim进阶:用背景图片让你的数学视频脱颖而出

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Manim进阶:用背景图片让你的数学视频脱颖而出

做Manim动画久了,你是否厌倦了那万年不变的黑色虚空?

很多初学者(甚至老手)都想给动画加个背景图,但往往会遇到两个问题:

怎么加? 是把图片放进去,还是设置相机?

看不清! 背景花里胡哨,前面的文字公式瞬间“隐身”了。

今天,我们就来揭开Manim动画中一个简单却强大的技巧--为动画添加背景。

通过几个小示例,分别演示两种完全不同的背景处理思路。

1. 舞台布景法

使用ImageMobject类,这是最直观、最常用的方法。

它的逻辑是:背景图片只是舞台上的一个普通演员,只是它长得特别大,而且站得特别靠后。

这种方式的特点是:

高度灵活:背景就是个对象(Mobject),所以它可以动!你可以让背景旋转、平移、缩放,甚至改变颜色。

层级管理:需要手动把它的 z_index 设低,或者最先添加它。

下面的第一个示例中,实现一个简单的动态背景,操作背景和操作一般的Mobject是一样的。

class Method1ImageMobject(Scene):

def construct(self):

# 1. 加载图片(确保这个图片是存在的)

bg = ImageMobject("./assets/紫色梦幻星空.jpg")

# 2. 核心操作:撑满屏幕并允许超出

# 我们把高度设为屏幕高度的 2 倍,这样才有移动的空间

bg.scale_to_fit_height(config.frame_height * 2)

# 3. 核心操作:放到最底层

bg.set_z_index(-100)

self.add(bg)

# 前景物体

text = Text("方法一:ImageMobject", font_size=40, color=WHITE)

sub = Text("背景可以动!", font_size=24, color=YELLOW).next_to(text, DOWN)

self.play(Write(text), FadeIn(sub))

# 4. 演示优势:让背景缓慢移动

self.play(bg.animate.shift(LEFT * 2), rate_func=linear)

self.play(bg.animate.shift(UP * 2), rate_func=linear)

self.play(bg.animate.shift(RIGHT * 2), rate_func=linear)

self.play(bg.animate.shift(DOWN * 2), rate_func=linear)

self.wait()

下面的示例也很简单,就是显示一段简单的公式。

不过,大家可以比较看看,相比于默认的黑色背景,加一个学校的黑板背景,是不是更有亲和力?

class Method2ImageMobject(Scene):

def construct(self):

# 1. 加载图片

bg = ImageMobject("./assets/黑板.jpg")

# 2. 调整大小铺满屏幕

bg.scale_to_fit_height(config.frame_height)

bg.scale_to_fit_width(config.frame_width)

# 3. 核心操作:放到最底层

bg.set_z_index(-100)

self.add(bg)

# 前景物体

math = MathTex(r"\int_0^\infty e^{-x^2} dx = \frac{\sqrt{\pi}}{2}")

self.play(Write(math))

2. 主角光环法

除了上面两种,还有一种比较特殊的方式,也就是BackgroundColoredVMobjectDisplayer类。

它是一个负责渲染的类,专门处理一种特殊情况:当物体拥有“背景色描边”时,如何遮挡住它背后的东西。

我们通过 set_background_stroke() 来调用这个机制。

严格来说不是 “设置全屏背景”,而是 “给物体加一个局部背景(Matte)”,这是在花哨背景下生存的必备技能。

它的特点是:

局部遮挡:在文字或公式周围生成一圈不透明的轮廓。

增强对比:专门用于解决“背景太花,文字看不清”的问题。

下面的示例故意构造了一个混乱的背景,然后比较看看,这两个一样的公式,是不是加了局部背景的公式更加清晰。

class ReadableFormulaOnImage(Scene):

def construct(self):

# 1. 先设置一个很花的背景(这里为了演示,我们用随机噪点模拟一张复杂的图)

# 实际使用中,请换成你的 image.jpg

noise = Rectangle(width=16, height=10)

noise.set_fill(color=[BLUE, RED, GREEN, YELLOW], opacity=0.5)

# 把它搞得乱一点

for _ in range(20):

line = Line(

start=[np.random.uniform(-7, 7), np.random.uniform(-4, 4), 0],

end=[np.random.uniform(-7, 7), np.random.uniform(-4, 4), 0],

color=random_color(),

stroke_width=5,

)

self.add(line)

self.add(noise)

# 2. 普通的文字(在花背景下很难看清)

bad_text = MathTex(r"\frac{-b \pm \sqrt{b^2 - 4ac}}{2a}")

bad_text.shift(UP)

# 3. 【核心技巧】使用 BackgroundColoredVMobject 机制

# set_background_stroke 会给文字加一层“描边”

# 这层描边是不透明的,会利用 Displayer 类遮挡住背景!

good_text = MathTex(r"\frac{-b \pm \sqrt{b^2 - 4ac}}{2a}")

good_text.set_background_stroke(color=BLACK, width=8) # 黑色描边,宽度设大一点

good_text.shift(DOWN)

# 动画演示对比

self.play(Write(bad_text))

self.play(Write(good_text)) # 清晰可见!

self.wait()

3. 两种方式比较

两种方式各有自己的应用场景,对比如下:

特性 舞台布景法 主角光环法

本质 场景中的一个巨大物体 物体自身的描边属性

主要用途 动态背景、视差滚动、多层背景 高亮主体、对抗花哨背景

动画能力 ⭐⭐⭐⭐⭐ (极强) ⭐⭐⭐ (跟随物体运动)

代码复杂度 中 (需手动调大小/层级) 低 (一行设置)

文档对应 Mobject类 BackgroundColoredVMobjectDisplayer

最佳场景 漂浮的云、移动的星空 字幕、复杂背景下的公式

4. 总结

简单来说,如果你想做一段电影感的片头,背景需要缓慢推移,请用 舞台布景法;

如果你发现文字看不清了,请使用 主角光环法 (set_background_stroke) 给文字加个 “光环”。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 23:26:31

NanoPi R5S网络性能评测与配置指南

你是否正在为家庭网络性能瓶颈而烦恼?面对复杂的网络环境和日益增长的网络需求,一款性能稳定、配置灵活的路由器设备至关重要。NanoPi R5S作为友善电子推出的高性能开发板,配合nanopi-openwrt项目的定制固件,能够为你提供企业级的…

作者头像 李华
网站建设 2026/4/21 13:47:04

Metis智能运维平台新手快速上手指南

Metis智能运维平台新手快速上手指南 【免费下载链接】Metis Metis is a learnware platform in the field of AIOps. 项目地址: https://gitcode.com/gh_mirrors/me/Metis Metis是腾讯开源的一个智能运维(AIOps)平台,致力于通过机器学习技术解决运维领域的质…

作者头像 李华
网站建设 2026/4/21 20:27:33

极速配置MPV:告别卡顿的终极影音解决方案

极速配置MPV:告别卡顿的终极影音解决方案 【免费下载链接】mpv-config 本项目为 windows 下 mpv 播放器的配置文件 (This project is the configuration file of mpv player on Windows) 项目地址: https://gitcode.com/gh_mirrors/mp/mpv-config 你是否曾经…

作者头像 李华
网站建设 2026/4/18 13:03:13

打造智能数字人:从零开始的Live2D虚拟角色搭建全攻略

打造智能数字人:从零开始的Live2D虚拟角色搭建全攻略 【免费下载链接】awesome-digital-human-live2d Awesome Digital Human 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-digital-human-live2d 想要拥有一个能够实时对话、表情丰富的虚拟角色…

作者头像 李华
网站建设 2026/4/22 20:49:21

毕业论文用什么 AI 写?实测 6 款论文写作工具优缺点对比(2025)

在写毕业论文的过程中,很多同学都会主动搜索这样的问题: “毕业论文可以用 AI 吗?” “AI 写论文靠谱吗?” “哪款 AI 论文写作工具最好用?”我在论文写作阶段,前后实际体验了 6 款主流 AI 论文写作工具&am…

作者头像 李华
网站建设 2026/4/12 22:35:46

传统农业升级路上的数字孪生实践

在数字技术不断深入产业发展的今天,传统农业也迎来了新的变革契机。数字孪生技术通过将真实农田、作物生长环境和农业设施映射到虚拟空间,实现对农业生产全过程的可视化、可分析与可预测,为长期依赖经验的农业生产方式注入了更加科学和精准的…

作者头像 李华