When I first started exploring Python’s Turtle module over a decade ago, I was amazed at how easily it allowed me to create 2D graphics. However, the idea of drawing 3D shapes with Turtle seemed a bit daunting because Turtle is inherently a 2D drawing tool. Over the years, I’ve discovered some neat tricks and methods to simulate 3D shapes using Python Turtle, and in this article, I want to share those with you.
Creating 3D shapes with Turtle is not about true 3D rendering; it’s about the clever use of 2D projections and drawing techniques to give the illusion of depth.
Let me walk you through different methods to create 3D shapes in Python Turtle, based on my experience. This will help you understand the concepts and get hands-on quickly.
Method 1: Draw 3D Shapes Using Isometric Projection
The simplest way to simulate 3D shapes in Python Turtle is by using an isometric projection. This technique draws the object so that all three axes appear equally foreshortened, and the angle between any two axes is 120 degrees.
I start by drawing the front face of the shape, then add the side and top faces using lines at 30° angles to simulate depth.
For example, to draw a cube:
import turtle
def draw_cube(size):
t = turtle.Turtle()
t.speed(3)
# Draw front square
for _ in range(4):
t.forward(size)
t.left(90)
# Draw top face
t.left(45)
t.forward(size / 1.414) # size / sqrt(2)
t.right(45)
for _ in range(4):
t.forward(size)
t.right(90)
# Draw side face
t.left(135)
t.forward(size / 1.414)
t.left(45)
for _ in range(4):
t.forward(size)
t.left(90)
turtle.done()
draw_cube(100)You can see the output in the screenshot below.

This method is simple and visually effective for simple shapes like cubes and boxes. It’s a great starting point if you’re new to 3D drawing with Turtle.
Method 2: Use Coordinate Geometry for 3D Wireframe Shapes
If you want more control and want to draw complex 3D wireframe shapes, you can use coordinate geometry and project 3D points onto 2D space.
I define the 3D coordinates of each vertex of the shape, then project these points onto 2D using a simple projection formula in Python. Finally, I connect the projected points with lines.
Here’s a quick example of drawing a 3D cube wireframe:
import turtle
import math
def project_point(x, y, z, angle_x=30, angle_y=30):
# Convert angles to radians
rad_x = math.radians(angle_x)
rad_y = math.radians(angle_y)
# Rotate around X axis
y2 = y * math.cos(rad_x) - z * math.sin(rad_x)
z2 = y * math.sin(rad_x) + z * math.cos(rad_x)
# Rotate around Y axis
x2 = x * math.cos(rad_y) + z2 * math.sin(rad_y)
z3 = -x * math.sin(rad_y) + z2 * math.cos(rad_y)
# Ignore z3 for 2D projection
return x2, y2
def draw_wireframe(points, edges):
t = turtle.Turtle()
t.speed(0)
t.hideturtle()
# Project points
projected = [project_point(x, y, z) for (x, y, z) in points]
# Draw edges
for start, end in edges:
t.penup()
t.goto(projected[start])
t.pendown()
t.goto(projected[end])
turtle.done()
# Define cube vertices
cube_points = [
(0, 0, 0),
(100, 0, 0),
(100, 100, 0),
(0, 100, 0),
(0, 0, 100),
(100, 0, 100),
(100, 100, 100),
(0, 100, 100),
]
# Define edges by connecting vertices
cube_edges = [
(0, 1), (1, 2), (2, 3), (3, 0), # Bottom square
(4, 5), (5, 6), (6, 7), (7, 4), # Top square
(0, 4), (1, 5), (2, 6), (3, 7) # Vertical edges
]
draw_wireframe(cube_points, cube_edges)You can see the output in the screenshot below.

This method gives you the flexibility to create any 3D wireframe shape by defining vertices and edges. It’s more math-intensive but rewarding once you get the hang of it.
Method 3: Use Turtle’s 3D-Like Animation for Rotating Shapes
To make 3D shapes more dynamic, I often animate them by rotating the vertices around an axis and redrawing the shape in real time.
By continuously updating the coordinates of the points with rotation matrices and redrawing the edges, you get a rotating 3D effect.
Here’s a snippet showing rotation around the Y-axis:
import turtle
import math
import time
def rotate_y(point, angle):
x, y, z = point
rad = math.radians(angle)
x2 = x * math.cos(rad) + z * math.sin(rad)
z2 = -x * math.sin(rad) + z * math.cos(rad)
return x2, y, z2
def project_point(x, y, z):
factor = 500 / (500 + z)
x2 = x * factor
y2 = y * factor
return x2, y2
def draw_frame(t, points, edges):
t.clear()
projected = [project_point(*p) for p in points]
for start, end in edges:
t.penup()
t.goto(projected[start])
t.pendown()
t.goto(projected[end])
turtle.update()
def main():
screen = turtle.Screen()
screen.tracer(0)
t = turtle.Turtle()
t.hideturtle()
t.speed(0)
points = [
(-100, -100, -100),
(100, -100, -100),
(100, 100, -100),
(-100, 100, -100),
(-100, -100, 100),
(100, -100, 100),
(100, 100, 100),
(-100, 100, 100),
]
edges = [
(0,1), (1,2), (2,3), (3,0),
(4,5), (5,6), (6,7), (7,4),
(0,4), (1,5), (2,6), (3,7),
]
angle = 0
while True:
rotated_points = [rotate_y(p, angle) for p in points]
draw_frame(t, rotated_points, edges)
angle += 2
time.sleep(0.03)
if __name__ == "__main__":
main()You can see the output in the screenshot below.

Animating 3D shapes this way adds a professional touch and can be great for educational projects or simple visualizations.
Tips for Working with Python Turtle 3D Shapes
- Coordinate Systems Matter: Always keep track of your coordinate space and projection method.
- Use Helper Functions: Encapsulate projection and rotation logic to keep your code clean.
- Performance: Turtle can be slow with complex animations, so optimize by using
screen.tracer(0)andturtle.update()for smoother drawing. - Experiment: Try drawing different polyhedrons like pyramids, octahedrons, or dodecahedrons by defining their vertices and edges.
Creating 3D shapes with Python Turtle is a fun way to deepen your understanding of geometry and graphics programming. While Turtle is not a full 3D engine, these methods allow you to simulate 3D visuals effectively.
If you want to explore further, try combining these techniques with user input or interactive controls; it’s a great way to make your projects more engaging.
You may also read:

I am Bijay Kumar, a Microsoft MVP in SharePoint. Apart from SharePoint, I started working on Python, Machine learning, and artificial intelligence for the last 5 years. During this time I got expertise in various Python libraries also like Tkinter, Pandas, NumPy, Turtle, Django, Matplotlib, Tensorflow, Scipy, Scikit-Learn, etc… for various clients in the United States, Canada, the United Kingdom, Australia, New Zealand, etc. Check out my profile.