Beispiel #1
0
    def update_frame(self, scene):
        window_background_color = color_to_rgba(config["background_color"])
        self.frame_buffer_object.clear(*window_background_color)
        self.refresh_perspective_uniforms(scene.camera)

        for mobject in scene.mobjects:
            self.render_mobject(mobject)

        view_matrix = scene.camera.get_view_matrix(format=False)
        opengl_view_matrix = opengl.matrix_to_shader_input(view_matrix)
        from moderngl.program_members.uniform import Uniform

        for obj in scene.meshes:
            for mesh in obj.get_meshes():
                mesh.shader.set_uniform(
                    "model_matrix",
                    opengl.matrix_to_shader_input(mesh.model_matrix))
                mesh.shader.set_uniform("view_matrix", opengl_view_matrix)
                mesh.shader.set_uniform(
                    "projection_matrix",
                    scene.camera.projection_matrix,
                )
                mesh.render()

        self.animation_elapsed_time = time.time() - self.animation_start_time
Beispiel #2
0
    def update_frame(self, scene):
        window_background_color = color_to_rgba(config["background_color"])
        self.frame_buffer_object.clear(*window_background_color)
        self.refresh_perspective_uniforms(scene.camera)

        for mobject in scene.mobjects:
            self.render_mobject(mobject)

        for obj in scene.meshes:
            for mesh in obj.get_meshes():
                mesh.set_uniforms(self)
                mesh.render()

        self.animation_elapsed_time = time.time() - self.animation_start_time
    def __init__(self, file_writer_class=SceneFileWriter, skip_animations=False):
        # Measured in pixel widths, used for vector graphics
        self.anti_alias_width = 1.5
        self._file_writer_class = file_writer_class

        self._original_skipping_status = skip_animations
        self.skip_animations = skip_animations
        self.animation_start_time = 0
        self.animations_hashes = []
        self.num_plays = 0

        self.camera = OpenGLCamera()
        self.pressed_keys = set()

        # Initialize texture map.
        self.path_to_texture_id = {}

        self._background_color = color_to_rgba(config["background_color"], 1.0)
    def render(self, scene, frame_offset, moving_mobjects):
        def update_frame():
            self.frame_buffer_object.clear(*window_background_color)
            self.refresh_perspective_uniforms(scene.camera)
            self.render_mobjects(scene.mobjects)
            self.animation_elapsed_time = time.time() - self.animation_start_time

        window_background_color = color_to_rgba(config["background_color"])
        update_frame()

        if self.skip_animations:
            return

        if config["write_to_movie"]:
            self.file_writer.write_frame(self)

        if self.window is not None:
            self.window.swap_buffers()
            while self.animation_elapsed_time < frame_offset:
                update_frame()
                self.window.swap_buffers()
    def add_points(self, points, rgbas=None, color=None, opacity=None):
        """Add points.

        Points must be a Nx3 numpy array.
        Rgbas must be a Nx4 numpy array if it is not None.
        """
        if rgbas is None and color is None:
            color = YELLOW
        self.append_points(points)
        # rgbas array will have been resized with points
        if color is not None:
            if opacity is None:
                opacity = self.rgbas[-1, 3]
            new_rgbas = np.repeat([color_to_rgba(color, opacity)],
                                  len(points),
                                  axis=0)
        elif rgbas is not None:
            new_rgbas = rgbas
        elif len(rgbas) != len(points):
            raise ValueError("points and rgbas must have same length")
        self.rgbas = np.append(self.rgbas, new_rgbas, axis=0)
        return self
Beispiel #6
0
    def render(self, scene, frame_offset, moving_mobjects):
        def update_frame():
            self.frame_buffer_object.clear(*window_background_color)
            self.refresh_perspective_uniforms(scene.camera)

            for mobject in scene.mobjects:
                self.render_mobject(mobject)

            view_matrix = scene.camera.get_view_matrix()
            for mesh in scene.meshes:
                try:
                    mesh.shader.set_uniform("u_view_matrix", view_matrix)
                    mesh.shader.set_uniform(
                        "u_projection_matrix",
                        opengl.perspective_projection_matrix())
                except KeyError:
                    pass
                mesh.render()

            self.animation_elapsed_time = time.time(
            ) - self.animation_start_time

        window_background_color = color_to_rgba(config["background_color"])
        update_frame()

        if self.skip_animations:
            return

        if config["write_to_movie"]:
            self.file_writer.write_frame(self)

        if self.window is not None:
            self.window.swap_buffers()
            while self.animation_elapsed_time < frame_offset:
                update_frame()
                self.window.swap_buffers()
Beispiel #7
0
 def clear_screen(self):
     window_background_color = color_to_rgba(config["background_color"])
     self.frame_buffer_object.clear(*window_background_color)
     self.window.swap_buffers()
Beispiel #8
0
 def background_color(self, value):
     self._background_color = color_to_rgba(value, 1.0)
 def fade_to(self, color, alpha, family=True):
     rgbas = interpolate(self.rgbas, color_to_rgba(color), alpha)
     for mob in self.submobjects:
         mob.fade_to(color, alpha, family)
     self.set_rgba_array_direct(rgbas)
     return self