如何使用
阅读各个规则文件以获取详细解释和代码示例:
核心概念
- rules/scenes.md - InteractiveScene、Scene 类型和 construct 方法
- rules/mobjects.md - Mobject 类型、VMobject、Groups 和定位
- rules/animations.md - 动画类、播放动画和时序控制
创建与变换
- rules/creation-animations.md - ShowCreation、Write、FadeIn、DrawBorderThenFill
- rules/transform-animations.md - Transform、ReplacementTransform、TransformMatchingTex
- rules/animation-groups.md - LaggedStart、Succession、AnimationGroup
文本与数学
- rules/tex.md - Tex 类、原始字符串 R"..." 和 LaTeX 渲染
- rules/text.md - Text mobjects、字体和样式
- rules/t2c.md - tex_to_color_map (t2c) 用于数学表达式着色
样式与外观
- rules/colors.md - 颜色常量、渐变色、RGB、十六进制、GLSL 着色
- rules/styling.md - 填充、描边、不透明度、背光、光泽、阴影
3D 与相机
- rules/3d.md - 3D 物体、曲面、球体、环面、参数曲面、光照
- rules/camera.md - frame.reorient()、欧拉角、fix_in_frame()、相机动画
交互式开发
- rules/interactive.md - 使用
-se标志的交互模式、checkpoint_paste() - rules/frame.md - self.frame、相机控制、重新定向和缩放
- rules/embedding.md - 用于 IPython 调试的 self.embed()、touch() 模式
配置与 CLI
- rules/cli.md - manimgl 命令、标志(-w、-o、-se、-l、-h)、渲染选项
- rules/config.md - custom_config.yml、目录、相机设置、质量预设
可运行示例
完整、经过测试的示例文件,展示常见模式:
- examples/basic_animations.py - 基本形状、文本和动画
- examples/math_visualization.py - LaTeX 方程和数学内容
- examples/graph_plotting.py - 坐标轴、函数和绘图
- examples/3d_visualization.py - 带相机控制和曲面的 3D 场景
- examples/updater_patterns.py - 使用 updater 的动态动画
场景模板
复制并修改以下模板以开始新项目:
- templates/basic_scene.py - 标准 2D 场景模板
- templates/interactive_scene.py - 带有 self.embed() 的 InteractiveScene
- templates/3d_scene.py - 带有 frame.reorient() 的 3D 场景
- templates/math_scene.py - 数学推导和方程
快速参考
基本场景结构
from manimlib import *
class MyScene(InteractiveScene):
def construct(self):
# 创建 mobjects
circle = Circle()
# 添加到场景(静态)
self.add(circle)
# 或者动画
self.play(ShowCreation(circle)) # 注意:ShowCreation,不是 Create
# 等待
self.wait(1)
渲染命令
# 渲染并预览
manimgl scene.py MyScene
# 交互模式 - 在第 15 行进入 shell
manimgl scene.py MyScene -se 15
# 写入文件
manimgl scene.py MyScene -w
# 低质量用于测试
manimgl scene.py MyScene -l
与 ManimCE 的关键区别
| 特性 | ManimGL (3b1b) | Manim 社区版 |
|---|---|---|
| 导入 | from manimlib import * | from manim import * |
| CLI | manimgl | manim |
| 数学文本 | Tex(R"\pi") | MathTex(r"\pi") |
| 场景 | InteractiveScene | Scene |
| 创建动画 | ShowCreation | Create |
| 相机 | self.frame | self.camera.frame |
| 固定到帧 | mob.fix_in_frame() | self.add_fixed_in_frame_mobjects(mob) |
| 包 | manimgl (PyPI) | manim (PyPI) |
交互式开发工作流
ManimGL 的杀手级功能是交互式开发:
# 在第 20 行启动,保留状态
manimgl scene.py MyScene -se 20
在交互模式中:
# 复制代码到剪贴板,然后运行:
checkpoint_paste() # 带动画运行
checkpoint_paste(skip=True) # 立即运行(无动画)
checkpoint_paste(record=True) # 运行时录制
相机控制 (self.frame)
# 获取相机帧
frame = self.frame
# 在 3D 中重新定向(phi, theta, gamma, center, height)
frame.reorient(45, -30, 0, ORIGIN, 8)
# 动画相机移动
self.play(frame.animate.reorient(60, -45, 0))
# 在 3D 移动期间固定 mobject 到屏幕空间
title.fix_in_frame()
使用 Tex 类的 LaTeX
# 使用大写 R 的原始字符串
formula = Tex(R"\int_0^1 x^2 \, dx = \frac{1}{3}")
# 使用 t2c 进行颜色映射
equation = Tex(
R"E = mc^2",
t2c={"E": BLUE, "m": GREEN, "c": YELLOW}
)
# 隔离子字符串以便动画
formula = Tex(R"\sum_{n=1}^{\infty} \frac{1}{n^2} = \frac{\pi^2}{6}")
formula.set_color_by_tex("n", BLUE)
常见模式
嵌入调试
def construct(self):
circle = Circle()
self.play(ShowCreation(circle))
self.embed() # 在此处进入 IPython shell
设置 3D 底面
self.set_floor_plane("xz") # 使 xy 成为视平面
文本可读性的背光
text = Text("Label")
text.set_backstroke(BLACK, 5) # 文本背后的黑色轮廓
安装
# 安装 ManimGL
pip install manimgl
# 检查安装
manimgl --version
常见陷阱
- 版本混淆 - 确保使用的是
manimgl,而不是manim(社区版) - ShowCreation vs Create - ManimGL 使用
ShowCreation,不是Create - Tex vs MathTex - ManimGL 使用带大写 R 原始字符串的
Tex - self.frame vs self.camera.frame - ManimGL 直接使用
self.frame - fix_in_frame() - 在 mobject 上调用,而不是场景
- 交互模式 - 使用
-se标志进行交互式开发
许可与归属
此技能包含来自 Grant Sanderson 的 3Blue1Brown 视频仓库 的改编示例代码。
许可证: CC BY-NC-SA 4.0
- 需要署名 - 同时注明 3Blue1Brown 和改编者
- 非商业性 - 不可用于商业用途
- 相同方式共享 - 衍生作品必须使用相同许可证
详见 LICENSE.txt。