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
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
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()
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()
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