diff --git a/main.py b/main.py index 1fdfe75..3276bac 100644 --- a/main.py +++ b/main.py @@ -31,6 +31,8 @@ IndexedFaceSet = list[IndexedFace] def to_viewport(verts: Vertex2Set) -> Vertex2Set: + """Maps vertices into the [0, WIDTH]x[0, HEIGHT] viewport""" + def transform(vert: Vertex2) -> Vertex2: return ( ((vert[0] + 1.0) / 2.0) * CANVAS_SIZE, @@ -41,6 +43,8 @@ def to_viewport(verts: Vertex2Set) -> Vertex2Set: def to_imageplane(verts: Vertex3Set) -> Vertex2Set: + """Projects vertices onto the [-1, 1]x[-1, 1] imageplane""" + def transform(vert: Vertex3) -> Vertex2: return (vert[0] / vert[2], vert[1] / vert[2]) @@ -48,6 +52,8 @@ def to_imageplane(verts: Vertex3Set) -> Vertex2Set: def translate(verts: Vertex3Set, distance: float) -> Vertex3Set: + """Translates vertices along the forward-axis in 3D space""" + def transform(vert: Vertex3) -> Vertex3: return (vert[0], vert[1], vert[2] + distance) @@ -55,6 +61,8 @@ def translate(verts: Vertex3Set, distance: float) -> Vertex3Set: def rotate(verts: Vertex3Set, angle: float) -> Vertex3Set: + """Rotates vertices around the up-axis in 3D space""" + def transform(vert: Vertex3) -> Vertex3: return ( vert[0] * cos(angle) - vert[2] * sin(angle), @@ -86,9 +94,10 @@ def draw(drawlist, vertices: Vertex3Set, faces: IndexedFaceSet, time: float): thickness=EDGE_SIZE, ) - viewport_vertices: Vertex2Set = to_viewport( - to_imageplane(translate(rotate(vertices, time), CAMERA_DISTANCE)) - ) + rotated_vertices: Vertex3Set = rotate(vertices, time) + translated_vertices: Vertex3Set = translate(rotated_vertices, CAMERA_DISTANCE) + imageplane_vertices: Vertex2Set = to_imageplane(translated_vertices) + viewport_vertices: Vertex2Set = to_viewport(imageplane_vertices) if RENDER_VERTICES: for v in viewport_vertices: