# Introduction to 3D Graphics Programming

By John Tsiombikas (Nuclear / the Lab)

Welcome reader, to this new short introductory course on 3D Graphics Programming!
The goal of this series of tutorials is to teach the reader the theory behind 3D
graphics, which of course will be presented along with practical examples since it
is the actual implementation of the theory that we are mostly interested in. The
topic of 3D graphics is very broad indeed and it is not possible to cover every
aspect and technique. Our focus will be on real-time 3D graphics and thus we will
concentrate on the typical polygonal approach that is so widely used for real-time
visualization. I will try to present everything with accuracy and clarity, I hate
spreading misinformation, thus everything I write here will be double checked,
however to err is human and I would be grateful to let me know if you find any
mistakes (contact info near the bottom of this page).

## Course Requirements

It goes without saying that in order to understand the things that I will cover
in this tutorial series, you have to have a certain knowledge background. The most
important requirement is having a strong understanding of the C++ programming
language. However you should be able to make it through even if you know C and pay
close attention to the theory and convert the examples accordingly. The second
requirement is that you have an understanding of some basic concepts of linear
algebra such as matrices and vectors, which are essential for elementary 3D
graphics. In any case, I’ll try to explain most of the math stuff a little bit, so
you shouldn’t have any problems with that. Finally you should be able to draw pixels
to the screen one way or another. I’ll make available for download a graphics
library based on DirectDraw along with some win32 framework code to get you
started.

## Lessons index

- Lesson 1: Basic mathematical foundations

(more to come)

## Contact the author

If you have any trouble with the tutorials, if you find something wrong or you
have thought of a better way to do something, do not hesitate to contact me. I would
like to get any kind of feedback that you may offer. My email address is:
nuclear@siggraph.org