In this tutorial I hope to explain the basics of 3D graphics using Python and Pygame. Pygame is not really designed for 3D graphics, so if you want to create a game with 3D graphics, you'd be better off using something else where all the basics, such as shading, are done automatically.
The aim of this tutorial is primarily to explain the mathematics of 3D graphics. I'm using Pygame to display the results simply because it's convenient. Hopefully, however, some of the programs might be useful in their own right.
Here are some examples of what is possible. These aren't yet covered by the tutorial, but who knows, one day I might add them. You can find the code for these example here.