相机(Camera)在二维的场景下使用不多,一般在3D场景中提及的比较多。
相机相当于我们看动画的视角,简单来理解的话,相当于我们的眼睛(实际情况会复杂一些,相机还有其他一些辅助功能)。
默认的相机焦点在屏幕的中心位置,相机默认是以俯视的视角查看所有的元素。
之前的介绍的常用动画效果和高级动画效果,都没有对相机进行调整过,
所以,是通过移动和变换各个元素来实现动画效果。
本篇介绍的相机,则是另一种制作动画的方式,它不改变元素在屏幕或者说在坐标系中的位置,
通过改变相机的位置和角度来实现动画效果。
举个现实世界中的简单例子,如果有个杯子,我们可以通过转动杯子来从各个角度观察杯子;
而如果是一栋楼的话,我们无法移动它,只能围着楼走一圈来观察它,这个过程就相当于移动相机。
下面通过一些实例来看看移动相机带来的不一样的动画效果。
1. 相机移动
相机移动常用的两种方式:
- 移动焦点:改变相机的焦点,焦点在那个元素,那个元素就会在屏幕中心
- 改变视野:改变相机与元素的距离,离得越远,物体越小。
1.1 移动焦点
manim
中移动焦点要继承 MovingCameraScene
类,
然后通过 self.camera.frame.animate.move_to
函数来移动焦点。
下面的示例构造了一个正方形,一个三角形,然后通过改变焦点来形成元素移动的动画。
实际上元素并没有移动,它们的坐标始终没变,变化的是相机的焦点。
class CameraSample1(MovingCameraScene):
def _move_focus(self):
s = Square(color=RED, fill_opacity=0.5)
t = Triangle(color=GREEN, fill_opacity=0.5)
vg = VGroup(s, t)