I'm a software engineer and I'm hoping to move my career towards game development. I'm reading a book right now on 2D using C++/DirectX. When I get into 3D I know I want to do it correctly. For example, I know nothing about 3d space. So if I learn only an API I might know it but I don't know if I can develop an interractive mini 3d world with it. I wouldn't call myself successful just having a rotating crate with the latest shaders etc. My math skills are up to trig/linear algebra and still in college. I know more math is to come. Should I be reading on 3D theory books before picking up on OpenGL/Direct3D, or any other suggestions? I just know an API isn't going to teach 3D game development and don't want to be lost afterward. I'm very book-oriented so that's fine if there's suggestions there too. Thoughts are welcome. Thanks!

This question appears to be off-topic. The users who voted to close gave this specific reason:

"Questions about "how to get started" or "what should I learn next" cannot reasonably be answered with anything other than opinion polling and therefore are off topic for the site. For more information on how to ask a better question, see the help center" – Byte56

Changes to the rules on the site since this question was asked now make it off topic. Not a problem, just closing it so others know what types of questions are off topic in the future.
–
Byte56♦Jan 20 '14 at 3:49

Thanks. Have you heard of this book? I heard it teaches the 3d theory but focuses on 3d software rasterization too. I guess it may still help understand what's going on. amazon.com/…
–
PhilAug 2 '10 at 17:16

1

@Phil rasterization is important, but I don't know if I would have started with a book called "tips" and addressing "advanced" 3D developers... sounds like something to read later on.
–
OakAug 2 '10 at 17:25

I'm reading volume 1 right now and this is volume 2. I'm guessing it merges you but I never looked at it. I know he says "advanced" but most say it's not. I'll keep it on the list :)
–
PhilAug 2 '10 at 17:31

1

Ray tracing is also another interesting topic, but is much too slow for real-time games
–
Bryan DennyAug 2 '10 at 18:31

@Byran +1 for mentioning it. It is used it pre-calculating lighting though.
–
Jonathan FischoffAug 2 '10 at 22:39

I was the TA for the graphics course at my university for several years. I set the syllabus, and covered things like software rasterizations and shading, Java3D, OpenGL, etc. Some time after this, in my own time I decided to write a ray-tracer for my own edification. This was an incredible experience - with a frame buffer and a putpixel(x,y, color) routine, in 500 lines I had code to generate an image with spheres, triangles, per-pixel shading, shadows, etc. If I had to redo the pracs for the courses, I would insist that the students do a ray-tracer. It is way to easy to get caught up in the details of a scanline algorithm when building a rasterizer, or feel like you're working through a black box using a 3D API.

For quick, solid access to a graphics sandbox, I recommend writing your own ray-tracer. Obviously, this is a far cry from what is commonly used in production real-time 3D graphics, but it is a really intuitive and compact way to see and learn the theory.

It really is important to understand the math behind it before you bother starting to learn an API. Otherwise, the order and purpose of the API calls won't make a whole lot of sense to you. You need to understand what they're doing for you on a math level first.

If you want to understand how a traditional software rendering pipeline works (and things haven't changed that much even with the introduction of programmable hardware pipelines), one book I'd definitely recommend would be Jim Blinn's: A Trip Down The Graphics Pipeline.

Unlike some of the other suggestions, it's not particularly comprehensive, but it is very readable and I think if you're just getting started with 3D, it's a good introduction. And it's written by Jim Blinn, who is one of the founding fathers of computer graphics, and thus is written from the perspective of someone who actually invented/discovered these techniques.

Above all else just try to make stuff. First and foremost jump in. Otherwise you will become an expert at theory but not practice.

If you think that you are truly passionate about graphics, then imagine that you will continue to learn new material most of your life. Its not like you can learn everything you need before you start. It just doesn't work that way.

As you learn more and more about the mathematics of 3D graphics, you will realize that there is no mathematics of computer graphics, there is only math. Learn how to teach yourself mathematics on your own. Then you will be able to digest new techniques as they are presented in literature.

As graphics technologies evolve we will borrow different mathematic techniques. What is popular today might not be popular tomorrow.

I took an Intro to Computer Graphics class in college (1-2 years ago) and the course website is still up. Lots of PowerPoint slides are still up that you might find useful and helpful. Topics cover both 2D and 3D graphics theory.

Hmmm, when I had to make my first 3D game some 15 years ago (had to as it was my job, that helps persevering) I had no 3D knowledge whatsoever other than high school math. If you have a fondness for puzzle solving and reading up, you can reason most of it out yourself and with some help from the internet (comp.graphics.algorithms faq). I did read the openGL bibles and http://www.amazon.com/Computer-Graphics-Principles-Practice-2nd/dp/0201848406 (warning oldskool) as they give valid background info. If you do it this way you might start off the wrong way but at a point you'll either dream up, or bump into, a better solution. Most of the 3d problems can be solved if your 2d grasp is good. Add to the general trig, pythagoras, matrices and inverses/transpose (for projection), dot&cross product and what you use em for, quaternions (don't have to understand em, just know how to use them - you can do without but they are nowadays part of the basic vocabulary), and you can solve most problems you come across. As you go you'll bump into better ways, but those few can solve anything. The best way is to set yourself a goal outside your grasp and force yourself to get there. The problems you run into are what you need to learn, and hey, you're on the site where they can help you solve em!

I'm in a similar boat to you (although I'm technically relearning stuff I vaguely knew in college), and my solution has been to check out several of the books mentioned over in the "Good 3D Math Theory Books" question here. If you're a book learner that may be a good way to go for you. Especially if your college doesn't actually have a good 3d graphics course (mine didn't).

There must be some kind of easier way to learn that stuff than taking an expensive course.
–
The Communist DuckAug 2 '10 at 17:19

That suggestion is stupid... Taking a course to learn math? I stand with Einstein: Some stuff are better learned from books. (not a direct quote... I saw only the portuguese version anyway, the translation would be different)
–
speederAug 2 '10 at 20:02

1

@speeder How exactly is the suggestion "stupid". Since you're so keen to learn from books like your peer Einstein, perhaps you should read about manners.
–
octonionAug 2 '10 at 21:03

I upvoted this. It's not stupid to take a course. What works for one person, doesn't always work for everyone. Some people, like me, prefer books and self-study; others need a course. IMO, you can do worse than taking a course from GI.
–
jacmoeAug 3 '10 at 9:46