Projects > Programming > Shapeshifter

Shapeshifter

I created an interactive 3D editor that allows users to design and manipulate one or two 3D shapes. This was inspired by my experiences using TinkerCad and Blender.

Type: desktop application
Date: 2024
Role: full-stack development
Implementation: Python, CMU Graphics

Project Repository Editing a vertex's 3D position in the Shapeshifter editor

Feature Demo #1

Editing Vertex Endpoints

You can edit 3D positioning of any of the points by selecting the vertex and then adding or subtracting from the original value.

Adding a second shape and using sticky edges to share endpoints

Feature Demo #2

Adding Shapes and Sticky Edges

You can add up to 2 shapes at a time, after the limit is reached, the add button is disabled. Additionally, you can activate the sticky feature to apply the position of one endpoint to another — which helps create shared faces for the next step.

Merging two shapes that share a face into a single shape

Feature Demo #3

Merging Faces

When the two shapes share any of their faces, the merge feature is activated. If the two shapes are merged, they behave as a single shape (with the intermediate face removed). And as a result, you can add more shapes with the add button! Additional features showcased here are: zoom in ('+') and rotation ('w' and 's' for rotation along z-axis)

Why this project?

I've always been intrigued by the idea of displaying 3D objects on a 2D interface — how are we supposed to store and show 3D objects when all we are given is a flat medium, such as a computer screen? When prompted to create a unique term project for my class, I took the opportunity to explore these ideas.

Notebook sketches working out how to project and store 3D boxes on a flat screen Storyboard sketches of the editor panels and their controls
Some sketches for the interface

Things I’m Proud of

  • Shapeshifter was selected as one of five projects to be demoed at the 15-112 Term Project Showcase, out of more than 500 submissions.
  • I chose to design my own object classes for geometric primitives, which gave me control over how shapes behaved and transformed.
  • Working on Shapeshifter allowed me to turn abstract mathematical ideas into intuitive, interactive visuals, which was a particularly satisfying process for me as a visual thinker.