I am relatively new to game development and I'm not really that focused on game development (I find graphics and physics interesting on themselves). My programming history is kinda noobish I used to program on BlitzBasic 3d and BlitzMax. At least BlitzMax had OOP and Blitz 3d gave me ideas about how things would work at a higher level and especially when it comes to entities(well I think it was good fro a start). Since then I haven't progressed that much - I read this http://www.cplusplus.com/doc/tutorial/ and I am reading it for a 2nd time(had to refresh my memories as I did not program for a few years), I've read one book on C++ also(asn't really that good though - too much text - too little of the gist of things). I think I got the basics down or really the basics of the basics. I'm looking to improve myself more when it comes to C++ so if you can recommend me some (really) good books on C++ - especially ones with a lot of examples and exercises, I'd be really happy .
I also got really interested in 3d a few years ago and I've been reading on it (though not on the APIs - rather on the maths and ideas behind it) - I read two books on analytical geometry to get the basics down so I'm pretty confident when it comes to things as matrices, transformations, normals, intersection calculations etc. If you got any really good recommendations about books on maths especially when it concerns graphics&physics I'll be more than happy to hear them.
I am currently trying these tutorials: http://rastertek.com/tutindex.html on DX11 and I must say I find them kinda hard - I mean they require a lot of knowledge on DX commands, structures etc. so I am not sure they are the best for me but still I am trying my best - I managed to do all the exercises after each of the tutorials I read but I don't think the exercises at the end are that hard - maybe it's just me - but when I go over a code I like to know how each and every command and struct works - so if anybody knows any "easier" tutorials(rather with more explanations) I'd be happy to know of them. Btw are these books good: http://d3dcoder.net/ - do you know any better ones?
I was also thinking of learning more on windows programming as it's needed for DX programming - I got the basics down(I mean I can do a window for my DX app) but I know that there are too many things I don't know about it - I've been using the msdn tutorials on windows and I'm thinking of checking these ones: http://www.winprog.org/tutorial/start.html Windows programming is not a priority for me but I'd like to learn to code for Windows.
Also, I'm not a fan of engines, but if you would recommend an engine(for example irrlitch) I guess I'll check it out and maybe try to code on it - it's just this is not really my goal. And speaking of goals
- to get a better idea of what I want here are my goals:
1) Get better at C++(obviously I would need it for pretty much everything)
2) Learn OpenGL and DX programming (and I'd rather have it low level and not through and engine or whatever)
3) Make my own software renderer and raytracer (as an insight in how things work)
4) Try out various physics engines like Tokamak and Ode - best of all understand how they work and write my own just to get the idea about it.
5) Learn more on Windows API
Any constructive advice and criticism are welcome!
I would think over my end goals. C++ isn't as critical to game development anymore. The main advantage to using an engine, to me, is that someone else has worked out all the bugs for running the game on other platforms, different video cards, etc. That takes a large amount of time and effort that can keep you from actually writing a decent game. Unless you are into that kind of thing. A 3d game is a huge undertaking. Modeling is no small matter. In order to write anything of substance, you need pretty much every short cut you can get your hands on, and it still will probably be too much for the average person. I kind of shelved my 3d game and I'm back playing with 2d and enjoying it a lot. I may go back to it, but it's a lot of work and generally, the end result doesn't look very good.
The main advantage to using an engine, to me, is that someone else has worked out all the bugs for running the game on other platforms, different video cards, etc.
I get what you mean - I know that engines can save me a lot of time and effort but that's not my goal - I want to actually understand what happens at the core of things.
That takes a large amount of time and effort that can keep you from actually writing a decent game.
My goal isn't really writing a game just because of the game itself but rather as an exercise through which I can learn as much things about programming, 3d graphics, physics etc. as I can.
Unless you are into that kind of thing.
I guess I am into that kind of thing
A 3d game is a huge undertaking. Modeling is no small matter. In order to write anything of substance, you need pretty much every short cut you can get your hands on, and it still will probably be too much for the average person. I kind of shelved my 3d game and I'm back playing with 2d and enjoying it a lot. I may go back to it, but it's a lot of work and generally, the end result doesn't look very good.
I know what you mean but my goals are to improve my knowledge on programming, 3d, physics etc.
Thanks for the advice!
P.S. Can you recommend any tutorials(C++, DX, OpenGL, WIndows), books etc.?
I would recommend a book for c++ rather than tutorials. One good one is Thinking in c++ by Bruce Eckels, which is free online. You can at least use a window manager for Opengl, and I would recommend SFML, which also has networking and sound libraries, and 2d graphics libraries, but it's modular. You probably will need tutorials for Opengl and directX, but I haven't used Opengl in quite a while, and never bothered with DirectX because it's not cross platform.
Thanks a lot about the recommendation on Bruce Eckels book I actually considered using SFML at some point but currently I am using the rastertek tutorials. Other good openGL tutorials I found are these http://www.opengl-tutorial.org/
Nothing beats actually experience. I'd suggest setting yourself a weekly mini-project, just some small simulation or bit of a game that focuses on one new idea or thing to try, and just get used to what designs flow well and what designs end up making you fight with the language to implement them.
-Try stuff like creating an inventory system where you can put items inside other items, or where items have unique attributes that can be changed, just to get a feel for how to organize your data.
-Make an n-body simulator where the display is just spheres or dots, to get a feel for how to do the physics and how to keep it fast and responsive. Add semi-inelastic, frictionless collisions to get a feel for vector math. For a bigger challenge, go to friction, play with constraints, or even go to non-spherical objects.
-Do a project where you focus on interface, trying out various interface models and libraries, get a feeling for how to organize display elements, assign functions to them to happen when they're interacted with, etc.
-Do a project where you experiment with different kinds of central loops and threading, like something where music is playing in the background and you can click a button to change tracks, but in which at the same time you're also moving a sprite around with arrow-keys or WASD.
-Do a project where you experiment with serialization, figure out the right way to do save games.
-Do a project where you just implement a bunch of GPU shaders, sort of a library of special effects.
Once you've done all of these things, you'll have tons of snippets of re-usable code that you can put together into bigger projects. You'll also have some idea of where the hard parts are going to be so you can take that into account from the ground up when you're doing your design.