Joshua Gustafson and Dr. Robert P. Burton, Computer Science
A real-time 3D engine is a software system which allows a computer to generate and display three-dimensional graphics at interactive speeds. Faster, more capable, and less expensive video hardware has encouraged improvement in real-time engines and a diversification of their applications. They have been used traditionally in applications such as games and simulators, but increasingly are appearing in other applications such as home modeling, ticket purchasing, and other uses. Real-time 3D engines are therefore an area of understandable interest and considerable value to students of Computer Science.
Unfortunately, real-time 3D engines can be challenging to study. Most are proprietary, protected by trade secrets, and simply are not available for students to examine. Even when an engine is available publicly, it is usually difficult to study because most real-time engines are written with only speed in mind. Little thought is given to making them accessible or understandable to a non-expert.
I have attempted to bridge this gap through my work on VisiEn, my own real-time 3D engine, as well as through a series of tutorials I have written which cover many of the basic concepts fundamental to real-time 3D engines. Both are available on my web site at http://gustafson.homedns.org/VisiEn/.
My tutorials begin with an introduction to Direct3D, which is Mircosoft’s API (Application Programming Interface) for providing access to video hardware features which accelerate the rendering of real-time graphics. After presenting a conceptual and architectural overview, I explore some specific examples to provide the student with some hands-on Direct3D source code. I then cover rendering of simple primitives (triangles) and simple animation techniques. I conclude with a discussion of performance, addressing ways in which rendering can be made more efficient in order to provide faster rendering and smoother animation.
The content of the tutorials is the result of my own learning experiences as I built VisiEn. In addition to the basic material covered in the tutorials, however, I was able to use VisiEn to explore more advanced topics, such as texture mapping, hierarchical modeling, environment mapping (for reflective effects,) and the use of shadow volumes to create accurate shadows in a scene. This engine, as well as a pair of sample applications which exercise it, are available to interested students at http://gustafson.homedns.org/VisiEn/.
It is my hope that this engine, along with the set of tutorials, will serve as a valuable starting point for students who, like myself, have a great interest in this mushrooming field, but who, also like myself, have found access and the initial learning curve to be rather daunting.