Quote: Did you "read around" the subject - general graphics programming, mathematics... If so, are there any particular resources you used?
Not really.
Quote: Did you jump straight into 3D or start with 2D?
Started With 2D.
Quote: Did you read the SDK documentation and tutorials?
Ive read the Direct3D Tutorials and DirectInput Tutorials after I knew what i was doing so it didnt help me much. I wouldnt say that the SDK Doc is well made as it doesnt describe the tutorials to detail.
I'd done some minor hobby stuff in DDraw 3, which was horrible (DDraw, not my stuff), and years later on a whim I applied at a game company and was hired. I was forced to learn D3D rather quickly.
They already had a very basic engine up and running in DX8, rendering meshes and morphing meshes in software, doing all drawing with DIPUP. First I was thrown deep into 3D math, doing bone transformations in software. Next I learned about TextureStageStates to make new effects. I found nVidia's old DX7 BlendView was useful to get an idea of how it worked. After that improvements came from browsing the SDK, and from nVidia's white papers, which involved switching to vertex/index buffers, multiple bone influences per vertex, shaders, render queue sorting, etc.
I didn't really start with tutorials or examples, no. Everything was pretty lacking back then anyway.
nVidia's developer whitepapers are a good source of info. Dig into their older papers, rather than the new ones pushing the latest tech.
I've got no D3D books. The SDK is clear enough, and won't have an author's misinterpretations of the spec.
I was already a competent ASM and C coder, working on various computers and embedded systems, and was familiar with coding 2D games (back on the C64, Amiga, PC in DOS, etc.). 3D was pretty much all new to me, but I don't remember how I picked up the concepts.
Pretty much straight to 3D. Nothing I'd done in 2D in Windows was noteworthy. I'd done some neat 2D things in DOS, on Amigas, C64, etc.
I didn't follow the SDK tutorials, but the parts about performance pitfalls, etc. I did read. Having a functioning engine to play around in made it a bit easier to just use the SDK as an API reference and try things out.
I purchased two books: The Zen of Direct3D Game Programming (Peter Walsh) Beginning Direct3D Game Programming (good ol' Wolfgang Engel)
It was between these two books that I learnt a lot of the basics. Zen covered a lot of the gritty details, particularly of transformations and things, while Beginning looked at a lot of higher level stuff, including lots of important concepts with textures, models, etc.
After that, it gets a little hazy. I did some smallish projects and eventually ended up in OpenGL (using Astle and Hawkins' book). It was in OGL that I began learning about shaders (Cg, basically learned in #graphicsdev), as well as doing a lot of the initial terrain things. A lot of intermediate work with understanding how to do graphics engines and things happened there, and I finally came back to D3D, as well as moving into a managed environment, in January.
After the books, I'd say that most of what I learned came from the net, briefly from tutorials and later papers initially. Most of my learning over the last year can be traced back to #graphicsdev.
SlimDX | Ventspace Blog | Twitter | Diverse teams make better games. I am currently hiring capable C++ engine developers in Baltimore, MD.
Well I'm still in the process of learning D3D, so maybe I’m not in the best position to contribute but...
I started with D3D in the DirectX SDK examples, and found it to be rather restricting, in that it didn’t always explain why certain variables were used for certain things, instead just saying to put X into spot Y. The SDK does however provide an absolutely invaluable resource for looking up the specifics on anything.
I then turned to Andy Pike, which is mentioned in the current site listing here for good tutorials, and found it out dated, using D3D7, which used a lot of stuff that doesn’t get used in D3D9 programs, especially with the constants that are declared, and the setup of the display. It did however provide a good source of just giving what was actually different along each step, instead of throwing in a bunch of extra functionality that is more windows-based instead of DirectX based, and provided very concise comments about many of the things it did, and some explanation.
By far the most valuable thing for me though, is just the time required to experiment with things, and the ‘article search’ area of this website [since I’m WAY too cheap to buy a book on it when I don’t absolutely have to]. It didn’t provide a cover-all, but it enabled me to quickly fill in gaps in my knowledge, like how to enable transparency.
So basicly for me, I read around the subject till I understood enough to get started, rummaged around for every example I could find, and hand-typed all of them that I found to be useful [no copy pasting], and looked up everything and anything I was fuzzy or curious about, as soon as I was curious about it, in the SDK. [I’m still learning, as it’s obviously a large thing to learn, but its proceeding well, and I understand what I’m doing. It’s just a matter of learning all the little functions to do this-and-that now]
One of my college courses was focused on direct X, which is more or less is what got me started. We had no text book, as the instructor felt that there was no worthy textbook out there (a point I have more or less come to agree with), so our resource was the sdk documentation, and of course the samples that come with it.
I wouldn't entirely recommend this method without some sort of instructor. It can be pretty overwhelming at first. What I will recommend is, while learning, be it from a textbook or online tutorial, having the sdk documentation open at all times is a must. Learn what the calls you're copying and pasting are doing, and how they can otherwise be used.
While building my first direct X applications, I did spend a lot of time looking up resources on the internet. Many topics landed me here at gamedev.net. I believe Drunken Hyena was also quite helpful. I'd just recommend to anyone else doing so to remember that most online tutorials have little to no design consideration, and a good way to learn how something works is to rewrite it yourself to be as flexible as possible.
Obviously after getting a solid grasp on C/C++. I was initially turned off by DX when I was first starting out (DX 6-7 time frame) so I learned OpenGL instead...until MS got it's act together, I switched to D3D on DX 8.
I think people should start out by doing 2D work, and then transition into 3D. But things are different today, it wouldn't be too bad to start out doing 3D apps. Back when I started there was DirectDraw, now they're one in the same, so I don't know what I would have done.
I do feel people should get a book and walk their way through it if they're just starting out.
Quote:3. Which book(s) did you buy/read to help you get on your way? Were they any good?
Intro To 3D Game Programming With DirectX 9.0 - good Zen of Direct3D Game Programing - good, but has bad programming techniques (IMO) Isometric Game Programming w/ DirectX 7.0 - decent
Quote:4. Did you "read around" the subject - general graphics programming, mathematics... If so, are there any particular resources you used?
3D Graphics Programming: Games and Beyond - good 3D Math Primer for Graphics and Game Development - good
Quote:5. Did you jump straight into 3D or start with 2D?
Started with 2D then learned some 3D. Still using 2D.
Quote:6. Did you read the SDK documentation and tutorials?