7

I never got to take a computer graphics course in university, but I want to have a thorough understanding of everything you'd learn in that course. I figure the best way to learn is through practice (programming).

If I were to start an OpenGL program from scratch, and slowly build it up to add new features to understand all of the concepts, what would I cover? And what would be a good project to demonstrate this?

cold
  • 81
  • 3
  • 1
    Simple first person shooter? You can start with just moving the camera around inside a flat-shaded box, then keep adding features until you've got Quake :) – walkytalky Jun 08 '11 at 23:50
  • hmm interesting suggestion! which concepts are learned through this! – cold Jun 08 '11 at 23:59

3 Answers3

2

I'm the author of a series of tutorial on the subject :

http://www.opengl-tutorial.org/

Regarding your question on the concepts you'll learn, the table of contents can give you a good idea :

Basic OpenGL

Tutorial 1 : Opening a window
Tutorial 2 : The first triangle
Tutorial 3 : Matrices
Tutorial 4 : A Colored Cube
Tutorial 5 : A Textured Cube
Tutorial 6 : Keyboard and Mouse
Tutorial 7 : Model loading
Tutorial 8 : Basic shading

Intermediate Tutorials

Tutorial 9 : VBO Indexing
Tutorial 10 : Transparency
Tutorial 11 : 2D text
Tutorial 13 : Normal Mapping
Tutorial 14 : Render To Texture

Miscellaneous

Math Cheatsheet
Useful Tools & Links

Tutorial 12 is done by sb else and is not crucial; Tutorials 15 & 16 are on their way ( baked & real-time shadows )

Of course, you have to keep in mind that you can't get a 'thorough understanding of everything' without a big book. I suggest Real-Time Rendering 3 for a broad, but often not in-depth discussion of, well, almost everything, and an additional math book like Essential Mathematics for Games and Interactive Applications.

What's more, I second walkytalky's proposition of making a FPS from scratch. That's basically what we all did.

Calvin1602
  • 9,021
  • 2
  • 38
  • 55
0

If you want to start with OpenGL, you can try Angel's books. Another very popular extensible graphics project is a ray tracer. For that, Suffern's Ray Tracing from the Ground Up is very nice and you'll learn lots of concepts.

lhf
  • 64,395
  • 9
  • 93
  • 126
  • See also http://stackoverflow.com/questions/362140/literature-and-tutorials-for-writing-a-ray-tracer – lhf Jun 09 '11 at 02:01
0

If you do intend to build a single project and slowly expand it, I would not suggest any form of FPS. Indeed, I would look at any kind of game with suspicion.

The reason being that most games involve a lot of things that you're not interested in dealing with. Collision detection, physics, AI, real interactivity, etc. These are important for making a game, but the more time you spend on them, the less time you spend on anything else.

Honestly, I would suggest not doing your approach entirely. That is, you should not start with a single project and build on it. What you want is to understand graphics. Unless you are going to rebuild graphics theory from first principles, that means at least initially learning from someone else. Whether it is a book, website, etc, you need a firm foundation of math and basic skills to be able to start doing projects on your own. Doing so from the right materials will help you avoid many of the pitfalls that programmers often step in.

The OpenGL Wiki has links to many tutorials and other how-to guides for learning the basics. In the interests of full disclosure, I am writing one of the guides linked there.

What you should do, once you have a firm foundation, is say, "I want to learn about graphics technique X." So then you do some research on the subject. Maybe you ask some people on a forum or something of the like. Once you understand it, you build a new application to test it out and make it work. Then, you move on to graphics technique Y. And so on.

Once you have a solid grasp on how to draw something in particular, then you'll be ready to start on your single project that you slowly expand. That way, you will know something about how to structure your rendering system and so forth.

If you do insist on taking this approach, I recommend starting with some kind of top-down-esque game with limited interaction. Perhaps a puzzle game or something similar. The ground shouldn't be flat, but you shouldn't need to do significant work on collision detection either. That way, you don't have to do much with the "game" part of the game, and you can instead focus on the rendering.

Nicol Bolas
  • 378,677
  • 53
  • 635
  • 829