add comments + split the transformations
This commit is contained in:
15
main.py
15
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:
|
||||
|
||||
Reference in New Issue
Block a user