Who These Papers Are For
Before I begin delving into the mysteries of 3D graphics, I guess I should start off by explaining my reasoning behind writing this series of papers. Recently, I was trying to help out someone with a 3D problem and the more I explained to him, the more I realized he just didn't understand why I was doing what I was doing. This experience got me thinking back to when I was trying to learn 3D. I can honestly say, I understand his confusion.
The problem is that most 3D information available is either targeted at a specific technique or a specific API. This is great if you are an experienced 3D programmer, but it only adds to the confusion of a beginner. I propose that if a beginner can get a firm grasp on how a 3D engine works and why certain steps are performed, then he or she can develop a 3D engine in any API and incorporate the more advanced techniques as they are intended to be used.
These papers should help anyone trying to further his or her understanding of the 3D pipeline. While they're written for people who are new to 3D graphics, many programmers who think they understand 3D could use them. Remember this simple rule. If you can't program a 3D engine in software, you don't really know 3D.
All I expect from you is that you are an experienced programmer and that you have a basic understanding of high school math. All code examples will be written in C++, but keep in mind that the purpose of these papers is to teach you the fundamentals of 3D graphics, not to implement a specific engine in a specific language or environment. Code examples will be used sparingly and only when I feel they will help you better grasp a concept. As far as math goes, don't panic here. Obviously, math is extremely important in 3D graphics, but it's not as complicated as it appears. I will explain all the math used, and I will explain why it is used. Trust me here. The more you understand the math, the more you'll understand 3D.