@Caleb
It gets more complicated pretty quickly the more you want to do. For rotating the camera, you need to use matrix rotation math. I suppose you use quaternions, but the general rule of thumb is matrix rotation. The thing to keep in mind is, if you rotate the camera, the 3d points of the world are actually rotated in the opposite direction. The approach might be like this:
1. Based on screen resolution, find the distance where 1 screen pixel is equal to 1 3d unit. I'll call this the base z-distance. Using that value, you can create a ratio where you can translate any desired 3d point to a 2d pixel representation based on the 3d point's distance from the camera.
2. Create meshes of vertices and store them in data blocks (arrays, types, memory locations ,etc.)
3. Create 2 sets of 4x4 transform matrices. 1 for world coordinates (in relation to the camera) and the other set for local transformations (the points in the meshes themselves).
4. For local transformations, use the local set of matrices to rotate, scale, or translate any or all of the points in a single mesh.
5. For global transformations, like repositioning or rotating the camera, use the global set of matrices to transform all of the vertices of all of the meshes on the 2d screen. This can mean transforming every single point, or it can mean transforming each local matrix for each mesh which in turn puts the 2d pixel on the screen in the correct place.
It gets complicated, and uses a lot of matrix multiplication. Kevin Picone put together a few examples of 3d from 2d including backface culling on his website. There are some great examples there and a lot of information.
Take a look at
DB snippets
Enjoy your day.