views:

603

answers:

6

Hey. I'm a software and web developer for ~3 years, and I want to start learning 3D network game programming.

  • What is the most modern & fastest way to write 3D PC games? What language? For graphics, should I use a graphics API like Direct3D/OpenGL or is there something less painful?

  • What math/physics skills should I know before starting? I'm 13 years-old and I never learned advanced maths. But I can self learn from the web - and I want to.

Thank you.

By the way: sorry for English - I'm from Israel.

+5  A: 

You may wish to look into one of the many open-source 3D graphics engines available; they'll simplify the process rather than having to build things up from DirectX/OpenGL yourself. One often-referenced example is OGRE. Most of these engines tend to be based in C++, but there are some exceptions.

As far as math/physics go, at the very least you should have a very good grasp of trigonometry, and ideally be fairly familiar with linear algebra and matrix mathematics. A basic working knowledge of general newtonian physics is handy (the interrelated equations for acceleration vs. velocity vs. position, et cetera).

Amber
http://www.thestudentroom.co.uk/wiki/Category:M1_Revision_Notes Should suffice for the physics you'll want to start out with. When you move on to more advanced games you'll be able to find what you need at the time, but this will do for the vast majority.http://www.sosmath.com/matrix/matrix.html Will give you the basics of matrix mathshttp://mathforum.org/mathimages/index.php/Transformation_Matrix Will give you the basics of matrix transformations, the rotations being the main ones you'll want to familiarise yourself with. Definitely read the sosmath one before this one.
AaronM
[Unity](http://unity3d.com/) and [XNA](http://creators.xna.com/en-US/) are also good choices for 3d game development.
RCIX
I'm reading this answer as a web developer and trying to understand why anyone would ever want to become a game programmer.
dclowd9901
Because granted, the work can suck at times, but the end product can be pretty flashy. :)
Amber
@DavIf I just want to make another farmville game, do I still need those math skills?
drikoda
@drikoda no, but I wouldn't call Farmville 'modern' - just viral.
Amber
+1  A: 

If you want to support Linux or OS X, you must use OpenGL, but bear in mind that some Windows OpenGL drivers are not as optimized/tested as D3D drivers.

As for math skills, you must learn linear algebra, especially vectors and matrices.

SurvivalMachine
+3  A: 

Game programming is a very large field, so you should probably start by focusing on a single part of a game and use existing components for the rest. That way you can get a working game faster and gradually write your own replacement components.

There are a few open source 3D engines available online. You might want to take a look at one of those and then program it to make a complete game. Most games are huge projects and even the best programmers can't write a big game alone.

If you are more interested in learning about 3D, I would recommend that you start by writing a simple 2D game using a 3D library to learn how to use it. Then you should probably read about linear algebra before you start on the real 3D programming. I can recommend Linear Algebra by Jim Hefferon, which is freely available online. Google and WikiPedia might also be good places to start.

The most important concepts to understand are vectors, matrices and how to manipulate them. Quaternions are also used a lot for 3D, but you won't find information about those in most linear algebra books. There are some books on Amazon specifically about math for 3D programming, but I don't know which are good.

Jørgen Fogh
+3  A: 
  • "modern & fastest way to write": Python-Ogre (easier to use than C++, include physics engines too)
  • "math/physics skills": a small subset of linear algebra (three-dimensional space representation, linear maps); a small subset of classical mechanics (kinematics, Newton's laws)
Roberto Russo
+6  A: 

About the math: You should be both fluent with trigonometric functions and being able think in vector space.

You might want to start doing some 2d-games first. I have recently played with a small Lua based framework called Löve, which is really neat and allows you to produce first results really fast. It might however be limiting of you want to make something more complex.

If you want to go straight to 3d, then I would recommend you some high level environment first. Not having to worry about memory or shooting yourself with C++ in the foot all the time does quite help if you are learning a new skill.

XNA is an interesting framework, I've recently played with NeoAxis, which does also seem quite nice. These are both based on .NET. XNA only works within the Microsoft ecosystem, but you can also make Xbox/Zune/Windows Phone games with it. NeoAxis does have support for other operation systems with mono. There are other high level environments like Unity, but that costs a bit. Some friends of mine also recommended trying out the blender engine to me.

There are also commercial engines that support free mods or even non commercial standalone games. For example the Unreal Engine with the UDK, the Source engine (HL2 etc) or maybe the Cryengine (Farcry 1, Crysis). I have worked only with the source engine, which is quite nice but its documentation is really bad.

Of course you can also take the hardcore path and start either building your own complete game engine, by integrating together different libraries, like OGRE for graphics, ODE for physics, raknet for networking etc, or even digging up all the theory and implement all that technology yourself. Do whatever pleases you most.

I'd also recommend you reading articles on pages like beyond3d, Gamasutra and watching some presentation from the GDC Vault.

Brutos
+1  A: 

I'll go along with the part that you might be really 13 years old. First of all, the fastest way to build a 3D game is to use a platform. You could use TV3D, or Panda3D. There are also a lot of commercial ones available, but unless you don't a big bag of golden coins, these are far away in another grownup galaxy. Understanding 3D programming is easier than you might think:

http://blogs.msdn.com/dawate/archive/2008/02/05/building-a-3d-game-in-xna-from-scratch-free-video-tutorial-series-now-available.aspx

Most populair languages are C++ and Python for 3D games, and C# is also an option. Writing Direct3D and OpenGL is a pretty tricky thing, and I think you would be much more excited in actually creating a game instead of building a new engine.

When it comes to networking in games, such as MMORPG, you need to learn more about client-server, in particular many-to-many connections. For starters you should take a look at how the IRC protocol works, for it has hosted many online text games that supported multiple users (MUD). Good luck!

Shyam
+1 for XNA mention
Jamie Keeling