Mobject(Mathematical Object)系统是 ManimGL 中所有视觉元素的基础构建块。本页面将解释 mobject 的核心架构、它们的层级结构、数据结构以及渲染方式。有关特定 mobject 类型(如文本或 3D 对象)的信息,请参阅 处理 Mobjects。
来源:manimlib/mobject/mobject.py64-895 manimlib/mobject/types/vectorized_mobject.py60-186 manimlib/mobject/types/point_cloud_mobject.py17-52 manimlib/mobject/types/surface.py28-70
Mobject 类是整个系统的基础。它定义了:
每个 mobject 将其数据存储在结构化的 NumPy 数组中,具体数据类型取决于 mobject 的类型。
来源:manimlib/mobject/mobject.py72-75 manimlib/mobject/types/vectorized_mobject.py61-69 manimlib/mobject/types/point_cloud_mobject.py17-52 manimlib/mobject/types/surface.py28-70
基础 Mobject 的数据结构包含:
point:mobject 中每个点的 3D 坐标rgba:每个点的颜色(RGB)和透明度(A)值VMobject 在此基础上扩展了更多属性,例如描边和填充属性,而 PMobject 和 Surface 等其他类型则拥有其专用的数据结构。
Mobjects 以层级结构组织,具有父子关系。
关键概念:
submobjects:此 mobject 包含的子 mobject 列表parents:包含此 mobject 的父 mobject 列表family:层级结构中的所有 mobject(自身 + 所有子 mobject 的递归集合)用于操作族结构的方法
add(*mobjects):将 mobjects 添加为子 mobjectremove(*mobjects):移除子 mobjectget_family(recursive=True):获取族中的所有 mobject来源:manimlib/mobject/mobject.py98-103 manimlib/mobject/mobject.py423-485
VMobject(Vectorized Mobject)通过更复杂的矢量图形功能扩展了基础 Mobject。VMobjects 使用二次贝塞尔曲线定义其形状。
VMobjects 使用二次贝塞尔曲线表示形状,其中:
来源:manimlib/mobject/types/vectorized_mobject.py443-456 manimlib/mobject/types/vectorized_mobject.py733-739
VMobject 包含更高级的样式功能:
| 属性 | 描述 | 方法 |
|---|---|---|
| 填充 (Fill) | 内部颜色和透明度 | set_fill(color, opacity) |
| 描边 | 边框颜色、宽度和透明度 | set_stroke(color, width, opacity) |
| 连接类型 | 线段连接处的渲染方式 | set_joint_type("auto"/"bevel"/"miter") |
| 平滑度 | 曲线插值方式 | make_smooth(), make_jagged() |
来源:manimlib/mobject/types/vectorized_mobject.py159-197 manimlib/mobject/types/vectorized_mobject.py398-410
VMobject 提供用于操作路径的方法
add_line_to(point):向点添加直线add_cubic_bezier_curve_to():添加三次贝塞尔曲线add_quadratic_bezier_curve_to():添加二次贝塞尔曲线add_smooth_curve_to():添加具有连续切线的曲线close_path():关闭当前路径来源:manimlib/mobject/types/vectorized_mobject.py505-587
PMobject(Point Mobject)是 Mobject 的简化版本,专为基于点的图形(如 DotCloud)而设计。与 VMobjects 不同,PMobjects 没有曲线结构,而是表示离散的点。
主要功能
来源:manimlib/mobject/types/point_cloud_mobject.py17-52 manimlib/mobject/types/dot_cloud.py26-43
Surface 是一个专门用于 3D 表面的 Mobject。它使用参数化表示来创建 3D 形状。
主要功能
uv_func(u, v) 定义,该函数将 2D 坐标映射到 3D 空间ParametricSurface、Sphere 和 Torus 等子类来源:manimlib/mobject/types/surface.py28-70 manimlib/mobject/three_dimensions.py93-122
Mobjects 的渲染通过着色器系统处理,该系统为 OpenGL 渲染准备数据。
Mobjects 使用 ShaderWrapper 对象来管理它们的渲染
ShaderWrapper:所有着色器包装器的基类VShaderWrapper:VMobjects 的专用包装器着色器系统
来源:manimlib/shader_wrapper.py34-62 manimlib/shader_wrapper.py220-243
整体渲染流程
来源:manimlib/camera/camera.py225-237 manimlib/shader_wrapper.py194-205
操作点的核心方法
| 方法 | 描述 |
|---|---|
set_points(points) | 设置所有点 |
append_points(new_points) | 在末尾添加点 |
apply_points_function(func) | 将函数应用于所有点 |
get_center() | 获取中心点 |
get_all_points() | 获取所有点(包括子 mobject) |
来源:manimlib/mobject/mobject.py232-269 manimlib/mobject/mobject.py316-332
变换 mobjects 的方法
| 方法 | 描述 |
|---|---|
shift(vector) | 按向量移动 |
scale(factor) | 按比例缩放 |
rotate(angle, axis) | 围绕轴旋转 |
flip(axis) | 沿轴翻转 |
stretch(factor, dim) | 沿维度拉伸 |
move_to(point) | 移动到特定点 |
align_to(mobject, direction) | 与另一个 mobject 对齐 |
这些变换会修改mobject及其任何子mobject的点。
来源: manimlib/mobject/mobject.py906-1071
设置外观的方法
| 方法 | 描述 |
|---|---|
set_color(color) | 设置颜色 |
set_opacity(opacity) | 设置透明度 |
set_stroke(color, width) | 设置描边属性 (VMobject) |
set_fill(color, opacity) | 设置填充属性 (VMobject) |
set_shading(factor) | 控制3D着色 |
来源: manimlib/mobject/mobject.py148-155 manimlib/mobject/types/vectorized_mobject.py159-197
Mobjects可以以各种方式进行分组和排列
| 方法 | 描述 |
|---|---|
add(*mobjects) | 添加子mobjects |
remove(*mobjects) | 移除子mobjects |
arrange(direction) | 将子mobjects排列成一行 |
arrange_in_grid(rows, cols) | 将子mobjects排列成网格 |
sort(key_func) | 对子mobjects进行排序 |
shuffle() | 随机重排子mobjects |
来源: manimlib/mobject/mobject.py456-485 manimlib/mobject/mobject.py523-615
Mobjects 被设计成可以与动画系统协同工作
来源: manimlib/mobject/mobject.py163-203 manimlib/mobject/mobject.py817-871
要创建自定义Mobject
对于VMobjects,关键在于使用 `set_points_as_corners()` 等方法或直接使用 `set_points()` 来定义代表锚点和控制点的点序列。
来源: manimlib/mobject/mobject.py151-153 manimlib/mobject/types/vectorized_mobject.py644-657
Mobject系统是ManimGL的核心,为创建数学可视化提供了灵活而强大的基础。从简单的形状到复杂的矢量图形和3D表面,mobjects能够创建各种视觉元素,这些元素可以进行变换、动画处理并以高精度渲染。