Fundamentals of Computer Graphics

Peter Shirley, Michael Ashikhmin, Steve Marschner

Mentioned 4

With contributions by Michael Ashikhmin, Michael Gleicher, Naty Hoffman, Garrett Johnson, Tamara Munzner, Erik Reinhard, Kelvin Sung, William B. Thompson, Peter Willemsen, Brian Wyvill. The third edition of this widely adopted text gives students a comprehensive, fundamental introduction to computer graphics. The authors present the mathematical foundations of computer graphics with a focus on geometric intuition, allowing the programmer to understand and apply those foundations to the development of efficient code. New in this edition: Four new contributed chapters, written by experts in their fields: Implicit Modeling, Computer Graphics in Games, Color, Visualization, including information visualization Revised and updated material on the graphics pipeline, reflecting a modern viewpoint organized around programmable shading. Expanded treatment of viewing that improves clarity and consistency while unifying viewing in ray tracing and rasterization. Improved and expanded coverage of triangle meshes and mesh data structures. A new organization for the early chapters, which concentrates foundational material at the beginning to increase teaching flexibility.

More on

Mentioned in questions and answers.

I'm looking for sites with examples and tutorials for OpenGL. The OpenGL SuperBible seemed to be a must-have so I just got it and it seems a bit too complicated for me at the moment due to my lack of math knowledge. Therefore, I have decided to start out with simple 2D-games which shouldn't be that hard. The tutorials and examples need to be up-to-date which seems hard to find. I'd love a very simple 2D game example like Pong or similar that I could build upon.

Also: what math is necessary for 3D-programming? Would it be possible for me to learn most of it by myself (I'm 15 years old) or do I have to wait for college/late high school?

I would recommend having a look at Joe's Blog as well.

For math, have a look at this book.

As mentioned in other posts, NeHe is great. It is getting a bit old though. Lighthouse 3D is pretty helpful as well. For the most up-to-date references, just go straight to OpenGL. It's a great resource. Real-Time Rendering is a great book for computer graphics. The website has tons of resources as well.

Regarding the math that you should know, linear algebra is a must in computer graphics. Many computer graphics books will provide an overview of the math that you should be familiar with. The book I mentioned above (Real-Time Rendering) provides a great overview. Another decent book relating to the math required for computer graphics is Fundamentals of Computer Graphics. There may be better books out there in terms of the math overview that you're looking for, but I've found these two to be helpful. Be aware, though, that neither of these books will have a lot of examples; they cover some of the more theoretical aspects of computer graphics.

I am from .net C# background and I want to learn DirectX. I have knowledge of C++ but I am fairly new to graphic world.

I am little confused about how to start learning directx, should I start learning direct directly or buy a basic graphic book like hern and baker and then jump to directx.

Which is the recommended book for learning basic graphic concepts, is it hern and baker? Is there any directx book which will cover graphic concepts as well?

I think that keeping a basic graphics book is allways good, because i can use it as reference anytime

Any suggestions from experts here?

You say that you have a C# background so I am going to assume you are more comfortable with C# then C++. Also, you say that you have knowledge of C++ so I will assume that you already have an understanding of memory management.

If you just want to learn and become more comfortable with the graphics pipeline you should check out SlimDX and XNA. They both allow you to use DirectX without having to dive into C/C++.

As for whether to learn the theory or API first I don't think you should do either one first. It makes sense to learn them asynchronously. Pick up a book on the theory but mess around with an API at the same time.

I highly recommend XNA. People commonly say that you should stick with C++ if you want to develop games but I strongly disagree. XNA will allow you to learn more high level game concepts in less time than if you use C++ and DirectX alone. You will be able to focus on learning why you are doing something rather than how to manage the memory. If in the future you decide that game development is a serious passion then by all means C++ is the way to go. You will find that XNA's graphics pipeline closely mirrors DirectX 9 and wont have much trouble moving to C++.

Also, DirectX 9 should be good enough for any beginner and it will give you a better understanding of how and why things have changed in 10 and 11. However, if you really want bleeding edge technologies you can try out SlimDX which is a C# wrapper for DirectX.

With all this said, XNA offers many easy to understand samples that you can start playing with on their educational catalog page. Also, check out ziggyware (great collection of xna tutorials).

Also, there are many blogs you can check out. A lot of them have excellent tutorials on them. Here are some off the top of my head:

Finally, here are 2 graphics books that I highly recommend (they are pretty complex and will last you a long time):

They are not directly related to DirectX, but rather they cover the theory every graphics developer should know. (from linear algebra to texture mapping to volumetrix rendering...)

I'm starting in 3D programming.

So I learn about vectors, matrices and all that stuff.

The question I lack is knowing about how all this stuff generates a 3D image.

What I need is an introduction to vectors, matrices and how these can be combined to make i.e. a 3D landscape. Let's say, I need it shown and explained just as you write it on the paper.

Sadly, I cannot find a real good with Google... what I found are just code samples for OpenGL written in C++ with no good comments about what each line does and no information in depth about vectors and matrices.

Many thanks and best wishes, Joern.

I'm new to Android and Java programming and I've manage to create a simple paint program, but how do I add a zoom feature? Right now I'm just extending the View class and using the "onDraw()" method.

Do I have to use a Drawable to be able to add zooming functionality? I'm not really understanding the differences between the two.

If I am way off base then please point me to a good tutorial on paint/zooming.

I think your question is beyond the scope that stackoverflow Q/A format can provide. I know you're asking for 'simple' but imho that's probably due to your lack of perception about the scope of the question that you're asking.

In order to support zooming you need to know what kind of image processing engine you want. Are you creating a vector or raster based drawing program? If you do not understand the difference between the two then you'll going to have a difficult time figuring out what to do.

You should probably at least gain a basic understanding about these various topics (links to books pulled more or less from the top of amazon's search results):

Wikipedia links:

Open source image processing apps (not android but source code never hurts to see how others have done something)

I'm sorry there isn't an easy and direct answer to your question. I'm also not saying that you need to become an expert in these topics to do what you want. You just need to familiarize yourself with them and then you'll probably be able to implement what you want without much difficulty.