diff --git a/opengl_tutorial/tutorial.py b/opengl_tutorial/tutorial.py index b1fb48f..4290f35 100644 --- a/opengl_tutorial/tutorial.py +++ b/opengl_tutorial/tutorial.py @@ -13,62 +13,62 @@ class OpenGLPipeline(Scene): def construct(self): # self.skip_animation_preview = True - diagrams = OpenGLVGroup() - vertices = OpenGLVGroup( - OpenGLDot().move_to(-1 * RIGHT + 2 * UP), - OpenGLDot().move_to(-2 * RIGHT - 1 * UP), - OpenGLDot().move_to(1 * RIGHT + 0 * UP), + diagrams = VGroup() + vertices = VGroup( + Dot().move_to(-1 * RIGHT + 2 * UP), + Dot().move_to(-2 * RIGHT - 1 * UP), + Dot().move_to(1 * RIGHT + 0 * UP), ).shift(0.5 * DOWN) - vertices_label = OpenGLText("Vertices").next_to(vertices, UP, buff=0.5) + vertices_label = Text("Vertices").next_to(vertices, UP, buff=0.5) self.add(vertices, vertices_label) # Vertices. self.play(FadeIn(vertices_label, shift=DOWN)) self.interactive_embed() - vertices_diagram = OpenGLVGroup(vertices_label, vertices) + vertices_diagram = VGroup(vertices_label, vertices) diagrams.add(vertices_diagram.copy()) # Vertex Shader. - vertex_shader_label = OpenGLText("Vertex Shader").move_to( + vertex_shader_label = Text("Vertex Shader").move_to( vertices_label.get_center() ) self.play(FadeOut(vertices_label, shift=UP)) self.play(FadeIn(vertex_shader_label, shift=DOWN)) - vertex_shader_diagram = OpenGLVGroup(vertex_shader_label, vertices) + vertex_shader_diagram = VGroup(vertex_shader_label, vertices) diagrams.add(vertex_shader_diagram.copy()) self.interactive_embed() # self.skip_animation_preview = False # Primitives Generation. - primitives_generation_label = OpenGLText("Primitives Generation").move_to( + primitives_generation_label = Text("Primitives Generation").move_to( vertex_shader_label.get_center() ) self.play(FadeOut(vertex_shader_label, shift=UP)) self.play(FadeIn(primitives_generation_label, shift=DOWN)) - triangle = OpenGLPolygon(*[dot.get_center() for dot in vertices]) + triangle = Polygon(*[dot.get_center() for dot in vertices], color=WHITE) self.play(Create(triangle)) self.play(FadeOut(vertices)) - primitives_generation_diagram = OpenGLVGroup( + primitives_generation_diagram = VGroup( primitives_generation_label, triangle ) diagrams.add(primitives_generation_diagram.copy()) self.interactive_embed() # Rasterization. - rasterization_label = OpenGLText("Rasterization").move_to( + rasterization_label = Text("Rasterization").move_to( primitives_generation_label.get_center() ) self.play(FadeOut(primitives_generation_label, shift=UP)) self.play(FadeIn(rasterization_label, shift=DOWN)) - top_left = OpenGLDot( + top_left = Dot( triangle.get_left()[0] * RIGHT + triangle.get_top()[1] * UP ) - bottom_right = OpenGLDot( + bottom_right = Dot( triangle.get_right()[0] * RIGHT + triangle.get_bottom()[1] * UP ) grid_width = bottom_right.get_center()[0] - top_left.get_center()[0] @@ -82,7 +82,7 @@ def construct(self): vec = end - start triangle_normals.append(normalize(rotate_vector(vec, PI / 2))) - def point_inside_triangle(point: np.ndarray, triangle: OpenGLPolygon): + def point_inside_triangle(point: np.ndarray, triangle: Polygon): triangle_points = triangle.get_vertices() for i in range(3): translated_point = point - triangle_points[i] @@ -92,9 +92,9 @@ def point_inside_triangle(point: np.ndarray, triangle: OpenGLPolygon): return True square_side_length = 0.18 - pixels = OpenGLVGroup() - outside_pixels = OpenGLVGroup() - inside_pixels = OpenGLVGroup() + pixels = VGroup() + outside_pixels = VGroup() + inside_pixels = VGroup() for j in range(int(grid_height // square_side_length) + 1): for i in range(int(grid_width // square_side_length) + 1): # Place a square. @@ -106,7 +106,7 @@ def point_inside_triangle(point: np.ndarray, triangle: OpenGLPolygon): fill_color = WHITE else: fill_color = BLACK - pixel = OpenGLSquare( + pixel = Square( side_length=0.15, stroke_width=1, fill_color=fill_color, @@ -121,36 +121,36 @@ def point_inside_triangle(point: np.ndarray, triangle: OpenGLPolygon): self.play(Create(pixels)) self.play(FadeOut(triangle), FadeOut(outside_pixels)) - rasterization_diagram = OpenGLVGroup(rasterization_label, inside_pixels) + rasterization_diagram = VGroup(rasterization_label, inside_pixels) diagrams.add(rasterization_diagram.copy()) self.interactive_embed() # Fragment Shader. - fragment_shader_label = OpenGLText("Fragment Shader").move_to( + fragment_shader_label = Text("Fragment Shader").move_to( rasterization_label.get_center() ) self.play(FadeOut(rasterization_label, shift=UP)) self.play(FadeIn(fragment_shader_label, shift=DOWN)) self.play(inside_pixels.animate.set_color(RED)) - fragment_shader_diagram = OpenGLVGroup(fragment_shader_label, inside_pixels) + fragment_shader_diagram = VGroup(fragment_shader_label, inside_pixels) diagrams.add(fragment_shader_diagram.copy()) self.interactive_embed() # Blending. - blending_label = OpenGLText("Blending").move_to( + blending_label = Text("Blending").move_to( fragment_shader_label.get_center() ) self.play(FadeOut(fragment_shader_label, shift=UP)) self.play(FadeIn(blending_label, shift=DOWN)) self.play(inside_pixels.animate.set_opacity(0.7)) - blending_diagram = OpenGLVGroup(blending_label, inside_pixels) + blending_diagram = VGroup(blending_label, inside_pixels) diagrams.add(blending_diagram.copy()) self.interactive_embed() # Frame Buffer. - frame_buffer_label = OpenGLText("Frame Buffer").move_to( + frame_buffer_label = Text("Frame Buffer").move_to( blending_label.get_center() ) self.play(FadeOut(blending_label, shift=UP)) @@ -158,7 +158,7 @@ def point_inside_triangle(point: np.ndarray, triangle: OpenGLPolygon): triangle.set_color(RED).set_opacity(0.7) self.play(FadeOut(inside_pixels), FadeIn(triangle), run_time=1) - frame_buffer_diagram = OpenGLVGroup(frame_buffer_label, triangle) + frame_buffer_diagram = VGroup(frame_buffer_label, triangle) diagrams.add(frame_buffer_diagram.copy()) self.interactive_embed() @@ -174,11 +174,11 @@ def point_inside_triangle(point: np.ndarray, triangle: OpenGLPolygon): diagrams[6].move_to(0 * RIGHT - 2.7 * UP) - triangle_with_label = OpenGLVGroup(frame_buffer_label, triangle) + triangle_with_label = VGroup(frame_buffer_label, triangle) triangle_with_label.generate_target() triangle_with_label.target.scale(0.5).move_to(diagrams[6].get_center()) self.play(MoveToTarget(triangle_with_label)) - self.play(FadeIn(OpenGLVGroup(diagrams[:-1]))) + self.play(FadeIn(VGroup(diagrams[:-1]))) self.interactive_embed() @@ -240,10 +240,10 @@ def update_label(index): ndc_location = point * np.array( [config["frame_x_radius"], config["frame_y_radius"], 1] ) - dot = OpenGLDot().move_to(ndc_location) + dot = Dot().move_to(ndc_location) dots.append(dot) - label = OpenGLMathTex(f"P_{i}").next_to(dot, offsets[i]) + label = MathTex(f"P_{i}").next_to(dot, offsets[i]) labels.append(label) self.add(label) @@ -479,12 +479,12 @@ def scale_callback(sender, data): class ViewVisualization(Scene): def construct(self): self.grid_size = 5 - grid = OpenGLVGroup() + grid = VGroup() # Add x gridlines. for i in range(-self.grid_size, self.grid_size + 1): grid.add( - OpenGLLine( + Line( UP * self.grid_size, DOWN * self.grid_size, stroke_opacity=0.5 ).shift(RIGHT * i) ) @@ -492,7 +492,7 @@ def construct(self): # Add y gridlines. for i in range(-self.grid_size, self.grid_size + 1): grid.add( - OpenGLLine( + Line( LEFT * self.grid_size, RIGHT * self.grid_size, stroke_opacity=0.5 ).shift(UP * i) ) @@ -502,33 +502,33 @@ def construct(self): # Add the axes. z_radius = self.grid_size * 0.55 self.add( - OpenGLLine(LEFT * self.grid_size, RIGHT * self.grid_size), - OpenGLLine(UP * self.grid_size, DOWN * self.grid_size), - OpenGLLine(IN * z_radius, OUT * z_radius), + Line(LEFT * self.grid_size, RIGHT * self.grid_size), + Line(UP * self.grid_size, DOWN * self.grid_size), + Line(IN * z_radius, OUT * z_radius), ) def look_at_camera(mob): tutorial_utils.look_at(mob, self.camera.get_position(), looking_axis="z") # Add axis labels. - x_label_group = OpenGLVGroup() + x_label_group = VGroup() x_label_group.model_matrix = opengl.translation_matrix( x=self.grid_size + 0.3 ) @ opengl.scale_matrix(1.2) - y_label_group = OpenGLVGroup() + y_label_group = VGroup() y_label_group.model_matrix = opengl.translation_matrix( y=self.grid_size + 0.3 ) @ opengl.scale_matrix(1.2) - z_label_group = OpenGLVGroup() + z_label_group = VGroup() z_label_group.model_matrix = opengl.translation_matrix( z=z_radius + 0.3 ) @ opengl.scale_matrix(1.2) - x_label = OpenGLMathTex("x") - y_label = OpenGLMathTex("y") - z_label = OpenGLMathTex("z") + x_label = MathTex("x") + y_label = MathTex("y") + z_label = MathTex("z") x_label_group.add(x_label, update_parent=True) y_label_group.add(y_label, update_parent=True) @@ -657,13 +657,13 @@ def switch_camera(): self.set_key_function(" ", switch_camera) - camera_frame = OpenGLVGroup() + camera_frame = VGroup() camera_frame.model_matrix = opengl.translation_matrix( z=-2 ) @ opengl.scale_matrix(scale_factor=1 / 6) rotating_camera.add(camera_frame, update_parent=True) - shader_code = OpenGLText( + shader_code = Text( """ // Vertex Shader in vec3 in_vert; @@ -736,7 +736,7 @@ def update_matrix(mob, matrix, color): mob.remove(*mob.brackets) brackets[0].next_to(mob, LEFT, mob.bracket_h_buff) brackets[1].next_to(mob, RIGHT, mob.bracket_h_buff) - mob.brackets = OpenGLVGroup(*brackets) + mob.brackets = VGroup(*brackets) mob.add(*brackets) mob.set_style(fill_color=color) @@ -746,14 +746,14 @@ def update_matrix(mob, matrix, color): ) ) - view_label = OpenGLText("View Matrix =", fill_color=BLUE) + view_label = Text("View Matrix =", fill_color=BLUE) view_label.model_matrix = ( opengl.translation_matrix(x=-2.7) @ opengl.scale_matrix(scale_factor=0.5) @ view_label.model_matrix ) - view_matrix_obj = OpenGLVGroup() + view_matrix_obj = VGroup() view_matrix_obj.add(projection_matrix, update_parent=True) view_matrix_obj.add(view_label, update_parent=True) @@ -808,10 +808,10 @@ def rotate_triangle(dt): ) model_matrix.add_updater(lambda mob: update_matrix(mob, mesh.model_matrix, RED)) - model_matrix_obj = OpenGLVGroup() + model_matrix_obj = VGroup() model_matrix_obj.add(model_matrix, update_parent=True) - model_label = OpenGLText("Model Matrix =", fill_color=RED) + model_label = Text("Model Matrix =", fill_color=RED) model_label.model_matrix = ( opengl.translation_matrix(x=-2.7) @ opengl.scale_matrix(scale_factor=0.5) @@ -908,9 +908,9 @@ def construct(self): mesh = Mesh(attributes=attributes, shader=shader) self.add(mesh) - vertex_dots = OpenGLVGroup( + vertex_dots = VGroup( *[ - OpenGLDot(stroke_width=2.5, depth_test=True) + Dot(stroke_width=2.5, depth_test=True) .move_to(point) .shift(self.text_shift) for point in self.triangle_corners @@ -920,18 +920,18 @@ def construct(self): dot.data["fill_rgba"] = np.array([np.hstack((color, 1))]) self.fragment_location = 1.5 * DOWN + LEFT - vertex_fragment_lines = OpenGLVGroup( + vertex_fragment_lines = VGroup( *[ - OpenGLLine(point, self.fragment_location, depth_test=True).shift( + Line(point, self.fragment_location, depth_test=True).shift( self.text_shift ) for point in self.triangle_corners ] ) - fragment_variables = OpenGLVGroup( + fragment_variables = VGroup( *[ - OpenGLTex(f"$f_{i+1}$", depth_test=True).shift( + Tex(f"$f_{i+1}$", depth_test=True).shift( self.triangle_corners[i] + self.triangle_corner_label_offsets[i] + self.text_shift @@ -941,12 +941,12 @@ def construct(self): ) interpolated_fragment = ( - OpenGLTex("$f$", stroke_width=2.5, depth_test=True) + Tex("$f$", stroke_width=2.5, depth_test=True) .move_to(self.fragment_location) .shift(0.25 * RIGHT + 0.2 * UP + self.text_shift) ) interpolated_dot = ( - OpenGLDot(stroke_width=2.5, depth_test=True) + Dot(stroke_width=2.5, depth_test=True) .move_to(self.fragment_location) .shift(self.text_shift) ) @@ -966,9 +966,9 @@ def construct(self): RIGHT * -1.5 + UP * -1, RIGHT * -0.5 + UP * -2.5, ] - triangle_labels = OpenGLVGroup( + triangle_labels = VGroup( *[ - OpenGLTex(f"$A_{i+1}$", depth_test=True).shift( + Tex(f"$A_{i+1}$", depth_test=True).shift( self.triangle_label_locations[i] + self.text_shift ) for i in range(3) @@ -982,7 +982,7 @@ def update_mesh(mesh, dt): mesh.add_updater(update_mesh) self.play( - OpenGLVGroup( + VGroup( vertex_fragment_lines, vertex_dots, triangle_labels, @@ -997,13 +997,13 @@ def update_mesh(mesh, dt): mesh.clear_updaters() lambda_definition = ( - OpenGLTex("$\lambda_i = \\frac{A_i}{A_1+A_2+A_3}$", depth_test=True) + Tex("$\lambda_i = \\frac{A_i}{A_1+A_2+A_3}$", depth_test=True) .scale(1.2) .shift(RIGHT * 3.5 + self.text_shift) ) self.play(Write(lambda_definition)) - barycentric_interpolation_description = OpenGLTex( + barycentric_interpolation_description = Tex( "The Barycentric interpolation\\\\$f$ of a fragment $p$ is given by\\\\$f=\lambda_1f_1+\lambda_2f_2+\lambda_3f_3$" ).to_edge(UP) self.play(Write(barycentric_interpolation_description)) @@ -1198,7 +1198,7 @@ def construct(self): "intensity": 0.5, } - letter = OpenGLMathTex("\\mathbb{M}").scale_to_fit_height(3) + letter = MathTex("\\mathbb{M}").scale_to_fit_height(3) subpaths = letter[0][0].get_subpaths() num_points = 0