Software rendering ...
           
Unfortunately, software rendering is considered a lost art. But there is so
much power into it that the future will turn back on it some day. The GPUs
becomes so powerful that one can implement very sophisticated rendering
techniques, perhaps adapted for a special game, in software computed by the 
GPU. For example, one can implement a software rasterizer to 
render perfectly 
rounded shapes on the GPU. With the increase in CPU/GPU performance it becomes 
feasible computing your own rendering technique fitting the aesthetic of a 
game you may have in mind. Look what SM, ND, and GG does. And wait until they
utilize the PS4's compute units to their fullest. More and more software 
graphics code will be used to generate kind of a different look for a given 
game, like it was prior to 1997 until the graphics accelerators took over.
However, this requires a fundamental understanding of rendering techniques out
of the API box. That's why I consider software rendering so important. Some 
universities don't even teach and practice the fundamentals rightfully any 
longer. The way they raster lines is by calling glBegin(GL_LINES). So props to 
dragonelite doing it the other way around! I appreciate your work. :+
Define the corners of an object and perspective project them onto the screen,
connecting them by lines getting a wireframe image. That's the basics start.
Hence,
(1) learn how to draw a pixel onto the screen,
(2) learn how to draw a line onto the screen (most cg students can't), and
(3) learn about perspective projection.
Do everything by hand, derive everything from scratch. Spend considerable time 
with point (2) and (3). Don't use any API. 
Getting the basics right gains momentum.
Here is software rasterizer I started to write a few months ago for the 
DCPU-16. The framebuffer is 64x64 in size and has a depth of 1-bit per pixel. 
Coded in fully 16-bit DCPU assembly language.
I also implemented a simple lighting model and a halftone shader.
... for the win.