manim 实现的基本逻辑

源:https://docs.manim.community/en/stable/guides/deep_dive.html

总的来说,分为三个部分:

 

1、预备

导入库:

from manim import *

在__init__.py文件里也会导入config:

from ._config import *

 此代码初始化了manim的配置系统

场景的实例化和渲染:

在命令行进行,或者在Jupyter notebooks进行(使用了%%manim魔术指令)。例如:

scene = ToyExample()

随后Scene.__init__设置了一些属性,随后Scene基于config.renderer的值实例化一个CairoRenderer或者OpenGLRenderer对象……(还调用了ffmpeg,总之用于渲染)

Scene.render()描述了一个场景完整的渲染周期,这里有三个定制的方法:Scene.setup()、Scene.construct()、Scene.tear_down()

 

2、Mobject初始化

指定了一些最初的属性,像name、submobjects、color,两个方法被使用:reset_points和generate_points,最后使用了init_color,事实上,这三个方法是空的。

Mobject有三种:ImageMobject、PMobject、VMobject,VMobject代表vectorized mobjects,它具有四组点,其中第一个和第四个代表锚点anchor,第二个和第三个代表手柄handle

例如:

复制代码
        def playscene0():
            plane = NumberPlane()
            vmobject = VMobject(color=GREEN)
            vmobject.points = [
                np.array([-3, 0, 0]),
                np.array([-3, 2, 0]),
                np.array([-2, 3, 0]),
                np.array([0, 3, 0]),
                np.array([0, 3, 0]), 
                np.array([2, 3, 0]),
                np.array([3, 2, 0]),
                np.array([3, 0, 0]),
            ]
            sa(plane, vmobject);sw()
复制代码

这样可以产生半个椭圆

 

我们来考察一下Square的构造,首先Square使用了父类Rectangle的init方法,它仅仅使Rectangle的长宽相等:

super().__init__(height=side_length, width=side_length, **kwargs)

我们继续看Rectangle的构造,它具有了自己的属性(如width),它继承自Polygon,Polygon继承自Polygram,Polygram继承自VMobject

……介绍了self.add()

 

3、动画的实现

一个Animation总是和一个mobject相连。Animation的初始化通过Animation.__init__()实现,它保证Animation.starting_mobject和Animation.mobject这两个属性产生,动画开始,starting_mobject属性代表一份不更改的mobject副本,在实例化中变为占位符mobject,mobject属性代表Animation中的mobject

Animation具有如下几个特殊的方法:Animation.begin()、Animation.finish()、Animation.interpolate()(实现完成百分比例的动画)

我们考察一下ReplacementTransform的构造:ReplacementTransform……Transform……Animation

……以下介绍的是渲染的过程,并没有介绍Animation的本质,有机会继续完成

posted @   树叶本子  阅读(96)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
点击右上角即可分享
微信分享提示