这篇说说Manim如何渲染3D动画.
官网中关于3D动画的示例很少, 纯文字的描述我只能说有点抽象... 所以我希望本篇内容结合动画效果可以帮助兄弟萌更舒服的上手Manim的3D动画.
本篇文章介绍了Manim的三维坐标轴, 三维动画, 三维函数图像.
欢迎关注公众号: 算法铁金库.
三维坐标轴
ThreeDAxes表示三维坐标轴.
示例代码:
from manim import *
class Demo(ThreeDScene):
def construct(self):
# 设置俯仰角和方位角, 后面会说明详细说明
self.set_camera_orientation(phi=75 * DEGREES, theta=15 * DEGREES)
# 坐标系
axes = ThreeDAxes(
# x_range=[-5, 5, 1]表示x轴范围从-5到5, 每隔1个单位做一个标记
x_range=[-5, 5, 1], y_range=[-5, 5, 1], z_range=[-3, 3, 1],
x_length=10, y_length=10, z_length=6,
# x轴不显示标记
x_axis_config={'include_ticks': False},
y_axis_config={'include_ticks': False},
z_axis_config={'include_ticks': False}
)
labels = axes.get_axis_labels(
Text("x轴").scale(0.5), Text("y轴").scale(0.5), Text("z轴").scale(0.5)
)
self.add(axes, labels)
参数x_axis_config是字典类型, 参数就是NumberLine的参数.
效果如下:
ThreeDScene
渲染3D动画需要使用ThreeDScene.
接下来介绍ThreeDScene的方法:
set_camera_orientation()
设置相机角度.
常用参数:
- phi: 俯仰角, 相机和原点的连线与z轴的角度
- theta: 方位角, 相机绕z轴旋转的角度
- gamma: 滚转角, 相机绕视线方向旋转的角度
- focal_distance: 大值(比如100)类似长焦镜头, 小值(比如2)类似广角镜头
- zoom: 放大缩小
- frame_center(Mobject或坐标数组): 视线中心对准新的坐标或Mobject
默认情况下, 相机正对xy平面. z轴垂直向屏幕外.