I would like to start programming 3d games... but what do I need, and where do I start?
Thank you.
Printable View
I would like to start programming 3d games... but what do I need, and where do I start?
Thank you.
wow... it really all depends on what your skill level is and what you want to do.
if you would like to learn opengl, nehe is a great source
http://nehe.gamedev.net
define skill level
How long have you been programming, what language(s) do you know, are you atleast decent in that/those language(s)Quote:
Originally Posted by Devil Panther
umm, if you want to get into 3D stuff it's really really difficult, no other way to put it. Start off small by reading tutorials, and try to enjoy learning about 3D mathematics. If you don't enjoy learning, and you just want to make a 3D game, chances are slim that you'll get good. So get to learn to love math and OpenGL
about the skill level... I believe my skill level is pretty good.
also, I don't really enjoy math, but I'm ready to learn, if that what
it takes to work with 3d, and OpenGL.
Thank you for you help.
there's no way to know until you just jump into it. I can't really explain what its actually like doing 3d programmign stuff
can you please give me a clue, on how difficult the math is, and what is the best language to develope such a projects?
Master vectors and matrices. Linear algebra is very important in 3D games.Quote:
how difficult the math is
C or C++. Most tutorials are written for C/C++. Most commercial games are also in C/C++.Quote:
what is the best language to develope such a projects?
what about modding a game? its the 'shallow' end of game programming IMO. half lifes SDK is quite easy to work with (just don't do anything worthwhile, seeing as HL2 will be out soonish:D)
But my question is what is better to deal with 3d programming, c or c++?
that's only really an opinion. I use a C++ compiler, but my code is very very close to being C. I don't use most of the features of C++.
and about the math, like the other dude said, vectors and matrices are heavily used. linear algebra? not really, but okay (I've programmed an entire 3D engine, and so far I haven't used any linear algebra, unless I have without knowing it).
but even something 'easy' such as collision detection is very difficult to do, and unless you're pretty motivated it might not happen. As I said, just try jumping in it, and try to enjoy learning. I still say that if you don't enjoy learning and are not fascinated with the 3d stuff then you might not stick with it as long.
Good luck.
My advice is to start adding books to your library. I just looked at mine the other day and I have many many books related to C/C++, programming, assembly, graphics, Direct3D, operating system design/development, etc. Plus I have 3 huge 3 ring binders chocked full of info I've gathered from the net and also I have 3 directories of PDF books, docs, tech articles, white papers, etc., etc.
You can never have too much information.
Go to www.gamedev.net and look at their books section. It's a good place to start.
Here are some books I've read and can readily recommend:
How to Program Your Own Flight Simulator in C++ by Michael Radtke, Chris Lampton, and foreword by Andre Lamothe.
I had no idea that Andre took part in this book when I bought it and really did not know who Andre was at the time. This is a very old book, once titled Flights of Fantasy, but it is an invaluable resource for 3D graphics. It completely explains matrix operations and shows how to create your own transformations and your own rendering pipeline. While his polygon rasterization methods are quite slow and outdated, I managed to update it with a new algo and the thing simply flew. Very good book for learning the basics. In my opinion you should have an idea of what is going on under the hood of all those DirectX API functions.
This will explain 3D graphics in great detail. It is on www.amazon.com but currently out of print. If you can, get a copy of this book - the DOS portion does not apply anymore but the graphics and matrix portions do. This book is literally torn to shreds from being used so much. The matrix sections are falling out of the book - literally.
Tricks of the Windows Game Programming Gurus (1st edition) by Andre Lamothe.
This book focuses on 2D but gives a very good in-depth look at DirectX and most, if not all, of it's components and covers rasterization of poygons as well as texturing. A very good book to get if you want to know what will be taking place later as you move to Direct3D.
Introduction to 3D Game Programming with DirectX 9.0 by Frank D. Luna.
A very good book on introducing you to Direct3D. It explains a lot of interesting things like 3D math/vectors/matrices (a whole chapter devoted to it), lighting - equations to create your own and how to use the D3D lights, color, vertex/pixel shaders, skyboxes (brief blurb about it in a chapter - with source), texturing/multi-texturing/texture blending, basic terrain rendering, meshes, progressive meshes, stencil buffers, mirrors, cartoon rendering (cell shading), and the list goes on. Very good book.
Special Effects Game Programming with DirectX by Mason McCuskey, edited by Andre Lamothe.
Covers many, many special effects - does a bit too much rehashing of basic Direct3D and Windows API but overall it is a very good book - covers DirectAudio, DirectShow, etc. Mainly it is a collection of special effects articles and how to accomplish them. It is DirectX centered of course but because the algos behind the effects are given they could easily be ported to another API like OpenGL.
I would also recommend any books about the C++ STL, 3D mathematics, computer graphics, sound/audio programming, character animation/modeling, data structures, algorithms, and in general any good book about C and/or C++.
And there are tons more that I have and tons more that I want.
The key thing in programming games is it takes a lot of passion, desire, and persistence. Problems abound in game programming and if you do not like solving problems then you will not like it. If you like solving problems and can think critically and logically, the math will come naturally.
thank you all for your help... I now know what I need to learn and where to learn it from.
Just one last question. I always hear this: game engine... what does it mean, an engine?
thanks again
erm, vectors and matrices are part of linear algebra. So i guess you have used it without knowing it! ;)Quote:
Originally Posted by Silvercord
I am trying to learn as well and it is difficult. I am new to C++ and direct X and trying to learn both at the same time. AAAHHH
I have learned Pascal a long time ago but I am not sure that is really helping me. It's like I am learning all over again. I am very stubborn, though, and well, I got time on my hands so I figure why not.
Patience. I think it takes patience.
Right now I am trying to make a Falling objects game and I got the bitmap loaded !!! yeh
I want to do 3d games, too, but once you read all of the crazy stuff involved you figure out maybe I'll start with 2D first.
Good luck man. Maybe you have a better programming mind than me. I have a Bachelors in Mathematics and could program the physics and what not but without knowing the code commands ...the math is worthless.
Well yeah 2D is much easier, but I think I've over used it.
I've played around with 2D graphics under DOS enviroment (VGA graphics). It was so lame, but still fun.
Since then I've got myself into windows programming, and now I would like to learn 3D.
I now understand how much knowledge I'll have to gain in order to do 3D graphics.
But I still have a few questions:
1. What is better, OpenGL or DirectX, or both. What should I start with?
2. Can someone please give me a clue what is a game engine?
Thank you.
1. This is a matter of preference.Quote:
Originally Posted by Devil Panther
2. It's something that makes it easier (ala no more initializing a window, just call a function (CreateWnd())). It just basically makes programming a game much easier.
Something that could be reused, in every game i'll ever make?
Yes, but there might/will have to be some changes made when doing that.Quote:
Originally Posted by Devil Panther
If you go with OpenGL though, there's an engine called Ogre
1. I think opengl is. nehe makes it really really easy to learn the basics. Ultimately tho you'll probably want to learn both if you really want to get into game programming. I haven't tried directx yet, but the basics aren't too hard for opengl. Just be sure to really take your time on the easy stuff or it will really confuse you later when you have to relearn it :rolleyes:Quote:
Originally Posted by Devil Panther
2. A game engine is all the code that makes your game function. Like all the collision detection, algorithms, enemy ai, and other stuff but not really the graphics or content. For example, a few years ago the quake 3 engine was huge for making games. Games like jedi knight outcast 2 (maybe 1 also, not sure) and i believe the return to castle wolfenstein series were all made in the quake 3 engine. Of course these games are all completely different, but the basecode is relatively similiar.
Also, not sure who mentioned this, but having binders for stuff is extremely important. If you see a really great article online, don't just read it several times and then bookmark it. Print it and read it on paper and keep it as a reference. A lot of programming (in my opinion) is learning a concept and then remembering your sources so you can study up on it again when you reuse that idea.
This is also a good idea incase that document gets taken down, or the website gets shut down, and you really needed that doc/info.Quote:
Originally Posted by heat511
yea i meant to mention that. a lot of the stuff i have printed i noticed has recently been taken down because the author is working on a book including that information.
collision detection?? what type of collision?Quote:
Originally Posted by heat511
Like all the collision detection, algorithms, enemy ai, and other stuff but not really the graphics or content
and I know what ai means, but it looks like I'll have to learn for a long long... long!!! time before I could start writing a real game.
If you want to make a 3D game, while writing your own 3D engine, then yes it will take you an eternity before you can actually create your own game content. OpenGL is easier to learn, but it's an opinion which is ultimately better. They're both good. The only reason I haven't used direct3D is that when I started, I wanted to learn the easiest rendering api. And to be honest, the graphics is the smallest part I'm concerned with. i'm more of the physics person. It gets to the point that which graphics api you use is trivial.
I suggest *start simple*. You definitely can get good at game programming, but if you jump right in and get overwhelmed then you will never go back. Just remember that the greatest 3D game programmers started out making simple 2D games with simple algorithms, simple engines, simple ai, etc.
What do you think of the next learning plan:
I will start with openGL, trying out some simple things, to gain knowledge and practice + the math.
Move later to AI (I could use some pointers (sites etc) on the subject.).
hmm... I think that's it, in general.
anywhere you start is going to be good just as long as you do something that makes you learn. Now, go and actually do something.
I will :) thank you all.
I started 3 dimensional mathematics and programming several months ago, and never regretted it. It can be EXTREMELY hard at times, which is why you should start out with the basics first. Don't look at an entire 3D engine, look at vectors and matricies. Don't look at random terrain generation and 3D clipping, look at OpenGL. Start out simple, and you can gain the knowledge you need as slowly or as fast as you learn.
The game engine is the skeleton of all games that you might program. It handles basic functions that all games have in common. You could compare it to a map editor I think, where you have to input what you want but basics are given to you! That is, initializing stuff such as graphics sounds, and other stuff that needs to go into memory at the beginning of a game. The Engine starts the main game loop, it ends the game and it releases the memory… it’s actually a way of structuring every game into a simple und understandable manner.Quote:
Originally Posted by Devil Panther
Each engine can be more or less sophisticated, with functions that do a lot for you, such as loading pictures into memory, doing basic sprite collision, providing sound functions,… it all depends on how you program it or how the book programs it for you ;-)
But before you ask anymore questions, (such as what is the main game loop or so), please check out a book on game programming. Most of the time they have a game engine explained and coded and go over all details about what a game requires. (And how a game differs from a regular program)
So, I was there once as well, at the beginning where you are.( about 1 year ago) And I can tell you! It is hard. You really need only one thing and it WILL work! :
PASSION!
Good luck!
I totally disagree with Silvercoord..........not really but it is fun just to disagree with him for the heck of it. He is the poster boy for OpenGL here and I guess I'm becoming a poster boy for Direct3D...and, of course, assembly. He has challenged me in many areas which I thoroughly enjoy and have learned much from.
:D
Go get some books on 3D math. Not the textbook college ones because they are explained by people who could make tieing your shoe into rocket science. Most modern 3D math books are written with you and I in mind and are extremely good sources of information.
By the way, Outcast 1 is a far cry from Quake 3. Outcast 1 used a voxel engine and voxel texturing. The objects were rendered as though the camera was looking down on top of them - for more information you can do a google on it and there is a huge site which talks about it. Unfortunately Outcast 1 is a ........ poor example of a voxel engine - Nova Logic's Voxel Space 1,2,3 (Comanche series, Delta Force 1 and 2, Armored Fist 1 and 2, etc) are much better examples of very very good voxel engines with 6, yes count 'em 6 degrees of freedom.
Anyways as to which API is better is like whether or not turkey is better than ham. It's purely preference. Personally I like turkey so I'm definitely a DirectX dude.
:D
Welcome to the exciting world of game programming - there are no limits.
yeah just find some books and websites and dive right in. it's a lot of fun altho it will be insanely overwhelming at first. im working on a space invaders style game right now (although i have some weird graphics gliches ARG!!!) and it's a ton of fun. i've been programming c++ for a few years now, started opengl around a year ago (altho im taking my sweet time with it...) and trust me, it's a lot better than making databases and shell sorts.
btw, collision detection is like when stuff hits other stuff. like if a bullet hits an enemy, or a wall. the collision detection code decides what happens after the bullet hits an object. or a character bumping a wall.
You could go look at the darkbasic website if you just wanted to program some cool 3D games for your own amusement. I wouldn't mind having that either but don't want to spend the money for it. All of my books I have are checked out from the library.
I don't think you can learn any thing by just checking out books from the library... first the selection is always bad and too old, most of the time.
and except that I always either buy a book or download one from the net, because you can't learn something in a month, and you always need to use the book for refs.
You learn by doing. Go and try to write something, and ask questions once you've got a specific question. In my experience, especially with sites that actually get traffic i.e gamedev.net, potential helpers put the most effort in when
1) you prove you've tried
2) you prove you've thought about the problem and you really are stuck
3) you produce (commented) code that you wrote that shows 1 and 2
It doesn't seem that way at my library. You have understand that I knew almost nothing about a month ago. Now I'm loading bitmaps ( :) ) Soon I'll have a finished game that I can show you guys.Quote:
I don't think you can learn any thing by just checking out books from the library... first the selection is always bad and too old, most of the time.
You are right. Eventually I'll have to buy a book. I found an Instructional CD still in one of the Andre LaMothe books !!!! Usually those badboys are long gone. I got Direct x SDK off of it and some great 3D samples and code.
Money is tight for me at the moment.
I like to think about things a little longer than most before I begin to do something. Not sure why. Toward the end of my academic career, I was spending 12 hrs + on take home math tests. They were take home and still impossible !!! Also the tests were usually only 3 or 4 problems !!!
It's funny, there are tons of programming books still in the library but I can't find a decent Texas Hold 'em Poker book.
True, poker books are hard to find ;)
ok i have a question. im a bit confused. i went through beginning C++, and i want to get into graphics design. thats what OpenGL is for right? i just got some books on game development. in one book it deals with graphic design, but it doesnt teach OpenGL. instead it teaches how to use graphical editors like Genesis3D and something else. so, do i like really need to learn OpenGL? i saw some examples in the tuturials. do game devs actually do it that way?
Go here for tons of links to books you need to read.