Camera

注意

本部分涉及到很多关于 OpenGL 的编写,例如 vertex array object, vertex buffer object, texture 等内容。由于编者对这部分也不是很熟悉,也希望有专业的同学来一起完善这部分内容。

CameraFrame

class manimlib.camera.camera.CameraFrame(**kwargs)

相机所拍摄到的帧

get_center() → numpy.ndarray

获取物件中心坐标

get_height() → float

获取物件高度

get_shape()

获取相机宽高

get_width() → float

获取物件宽度

reorient(theta_degrees: float | None = None, phi_degrees: float | None = None, gamma_degrees: float | None = None)

set_euler_angles 的另一种写法

rotate(angle: float, axis: numpy.ndarray = array([0., 0., 1.]), **kwargs)

axis 为方向,angle 为角度旋转,kwargs 中可传入 about_point

to_default_state()

相机恢复到默认位置

manimgl 版本,你可以通过改变 CameraFrame 的属性来控制相机所拍摄到的画面,也就是说,旋转、缩放画面大小都可以用这种方式来完成。

MoveCameraExample
class MoveCameraExample(Scene):
    def setup(self):
        self.plane = NumberPlane()
        self.plane.add_coordinate_labels()
        self.add(self.plane)

    def t_func(self, t):
        a, b = 3, 3
        return np.array([
            a * np.cos(t) / t,
            b * np.sin(t) / t,
            0
        ])

    def construct(self):
        frame = self.camera.frame
        curve = ParametricCurve(self.t_func, t_range=[0.1, 100, 0.05], color=YELLOW)
        self.add(curve)
        self.play(
            curve.animate.set_stroke(width=0.3),
            frame.animate.set_width(2).rotate(PI / 2),
            run_time=3
        )
        self.wait(0.5)

Camera

class manimlib.camera.camera.Camera(ctx: moderngl.Context | None = None, **kwargs)

摄像机

widcardw 在线瞎写,因为看不懂

  • frame_config : 相机帧参数

  • pixel_width : 像素宽度,默认 1920

  • pixel_height : 像素高度,默认 1080

  • frame_rate : 相机帧率,默认 30

  • light_source_position : 光源位置

  • anti_alias_width : 抗锯齿

capture(*mobjects: manimlib.mobject.mobject.Mobject, **kwargs) → None

捕获 mobjects 中的物体

clear() → None

清空帧缓冲

get_fbo(ctx: moderngl.context.Context, samples: int = 0) → moderngl.framebuffer.Framebuffer

获取帧缓冲

get_frame_center() → numpy.ndarray

获取相机帧中心

get_frame_height() → float

获取相机帧高度

get_frame_shape() → tuple[float, float]

获取相机帧宽高

get_frame_width() → float

获取相机帧宽度

get_image() → PIL.Image.Image

获取当前帧图片

get_pixel_array() → numpy.ndarray

获取当前帧 RGB 像素矩阵

get_pixel_height() → int

获取画面像素高度

get_pixel_shape() → tuple[int, int]

获取画面像素大小

get_pixel_width() → int

获取画面像素宽度

get_raw_fbo_data(dtype: str = 'f1') → bytes

获取源缓冲数据

get_render_group(shader_wrapper: ShaderWrapper, single_use: bool = True) → dict[str]

获取渲染所包含的成员

  • vbo : vertex data buffer

  • ibo : vertex index data buffer

  • vao : vertex array

  • prog : shader program

  • shader_wrapper : 材质包装

  • single_use : 单次使用

get_texture() → moderngl.texture.Texture

获取贴图资源

get_texture_id(path: str) → int

获取资源 id

refresh_perspective_uniforms() → None

更新透视变量

release_render_group(render_group: dict[str]) → None

释放渲染

release_texture(path: str)

释放资源

render(render_group: dict[str]) → None

渲染

reset_pixel_shape(new_width: int, new_height: int) → None

重置像素宽高

resize_frame_shape(fixed_dimension: bool = False) → None

重置帧大小以匹配画面像素比

fixed_dimension 控制高度不变宽度变化,或宽度不变高度变化

set_shader_uniforms(shader: moderngl.Program, shader_wrapper: ShaderWrapper) → None

设置着色器的 uniform 变量

ThreeDCamera

class manimlib.camera.camera.ThreeDCamera(ctx: moderngl.Context | None = None, **kwargs)

仅用于保证旧版场景不崩溃

  • frame_config : 相机帧参数

  • pixel_width : 像素宽度,默认 1920

  • pixel_height : 像素高度,默认 1080

  • frame_rate : 相机帧率,默认 30

  • light_source_position : 光源位置

  • anti_alias_width : 抗锯齿