Throwing Shapes: Recreating the 2D Canvas API in 3D