Best 3D Engine Reference Book? 13
Horizon_99 asks: "This is more of an ask John Carmack type question but since he already did this I would like to ask the community what is in your opinion *the* reference book to 3d engine design? And I don't mean a directx for dummies type book but something more along the lines of the physics related to 3d environments and such.
Where should I invest my hard earned money for this part-time hobby of mine?"
There is no one book (Score:4, Informative)
graphics
ai
networking
database
physics
IO
So you're question is much to general. But to answer your question anyway. Get books by Dave Eberly [mkp.com]. 3D Game Engine Design is quite good, even though it is kinda slanted towards the scene graph methodology of feeding the graphics card. Geometric Tools for Computer Graphics is a great mathematical reference book, but I'm kinda biased since I was a tech editor for the book. Game Physics is supposed to be quite good, but I haven't read it.
In terms of graphics get the OpenGL redbook and bluebook. Realtime Rendering is quite good. And everybody who is anybody in computer graphics has Computer Graphics: Principle & Practices. The Game Programming Gems series is quite good too.
Other than that, the best way to learn to code is to read through code. id has GPL'd a bunch of their old engines. And the Torque engine is available for about $100.
That should keep you busy for a while.
Re:There is no one book (Score:1, Informative)
I have the "Game Programming All in One" and some of the coding practises aren't up to standards. But overall I feel that the concepts are right, just don't use it to learn C++.
Re:Most physics (Score:1, Offtopic)
What a wanker *shakes head*
Books I've found helpful (Score:5, Informative)
Game Programming Gems Series
3d Graphics Programming Games and Beyond by Sergei Savchenko
Michael Abrash's Graphics Programming Black Book (this book is dated)
3d Game Engine Design by David H. Eberly
Advanced Linux 3D Graphics Programming (Score:2, Informative)
Read the reviews at Amazon [amazon.com].
Somewhat of a plug (Score:4, Informative)
First, visit my site, OpenGLForums.com [openglforums.com]. Its geared toward OpenGL obviously, but there is an abundance of talented 3D programmers there who can share knowledge with you regardless of the rendering API you choose to use.
With that out of the way, I recommend the following:
Good luck with your quest. Its one of the most rewarding ones, I think.
-Vic
3D engine or game engine? (Score:2)
The problem with even a 3D engine is that you start to get into a ton of other areas that you wouldn't think would be a part of it, but are. One biggie is databases - essentially your world you are rendering exists as a database, but it has to be a high speed one, typically will be custom, and may even be specially geared toward 3D operations on the data sets that inhabit it. That is just one quick example, there are tons more.
Other posters have pointed out what goes into a game engine, which covers even more ground, so I won't go into it here again. Even for 3D engines, if you have little or no knowledge of the subject, don't expect to gain it overnight. One thing when I tried learning this stuff that I figured out quickly was that I couldn't learn it just reading a book on vectors and matrix multiplication. Sure, that helped, but it didn't tell me WHY. So, I struck out on my own - first learning what rotation was. I started out creating apps that rotated things in 2D (using SIN and COS) and why that worked (ie, unit circles, etc play a big part here - if you are lacking in geometry or trig, brush up on those), then learned how to expand that into 3D, so I could do all of that. Then, I learned the hows and whys of projection, then back-face culling, then face/object culling based on intersections with the view frustum, etc - on and on and on...
It never seemed to end, and in the end (I was wanting to make a 3D game engine, which never went far) I was finding I was taking up too much time on this, when there were tons of engines available that could do all I did, plus tons more I just didn't have the time to learn to do, that I realized that I was wasting my time on this hobby, rather than looking into wheels that already existed.
Now, let me say that I never went anywhere with building a 3D game, and game building isn't my main thing anymore (though it is still something I think about - one of those "back burner" projects) - but I would never give up the learning I was able to come away with in my brief foray into 3D game engine mechanics. It gave me a lot of insights into the kind of things game engine coders face, and a respect to what they do, and what they know. It also taught me how complex the world really is, what it takes to even try to model things. It also helped me think of how to do new ways in coding to gain speed and tightness of code, which are useful in more ways than just pushing pixels.
So, I don't want to discourage you - if what you are wanting to do is learn, then go for it. If you are wanting to learn enough to get a job in the field, then go for it. If what you are wanting in the end though is to create a game, then I would advise you to learn the basic mechanics (ie, enough to code a simple texture mapped cube spinner, possibly with cameras, maybe even a world database, etc - which was as far as I got - maybe even though in simple face lighting), to know how it all works at a basic level, and to understand what is being talked about - then find a free or GPL'd engine and work with it from there to create your game.
As has been shown by countless examples scattered across the net, a game engine by itself is useless without a good playable game to go along with it...
From my limited experience... (Score:1)
I've found Moller and Haines' Real-Time Rendering to be straightforward, informative and (relatively) easy to read, even though my math background at this point is fairly limited. (Calc 1 and half a semester of calc 2).