   Beginner Question
  I'm sorry if the answer to this question is posted elsewhere; it's just that looking through Google results and this website I got many half-answers to this, but never a crystal clear and thorough answer.Basically, I have a decent amount of programming experience (nothing college level or professional, just self-taught as an occasional hobby on and off throughout the past decade).  I have made several games before, but always with a unsophisticated "beginnerish" (for lack of a better word) graphics program or engine. Now I want to do it from scratch as I refresh my programming experience and (later) take it to a whole new level.  No more beginner graphics engines.  Nor even a better free engine like Havok.  I want to take my C++ code and make a game DIRECTLY from that.  Where do I go from here?  How do I output graphics directly from my code?  In other words, how do the professionals take C++ code and create a graphics engine?  I am getting the impression that I need to learn DirectX and/or OpenGL.  Which is preferable?  Are there better alternatives? Or am I on the completely wrong path?  Thanks in advance for your time and for putting up with my ignorance!   
  It sounds like you want to learn how to make your own Game Engine. I think these videos might help lean you in to that direction. http://www.3dbuzz.com/vbforum/sv_videonav.php?fid=364cfa2b83aa7795254b70a82c99a863   ;  Directx or OpenGL are the only way you can access graphics acceleration in the hardware.  There are, however, various SDKs and whatnot that wrap those APIs.  It doesn't matter which you pick.  Arguably Directx is used more in the industry (you need it for the 360), but it doesn't really matter.  Either will give you the functionality you need.If you go OpenGL check out http://nehe.gamedev.net for a great set of tutorials.  IIRC, there were a set of Directx tutorials there as well.You can also just check out the Forum FAQ which I believe has some other relevant answers.And if you're going in to graphics, you really need to learn at least the basics of Linear Algebra: significantly vectors, matrices, and all the operations you can do on them.  Computer Graphics and more broadly, game programming are Linear Algebra many steps along the way. If you don't understand the basics, you won't get anywhere.-me   ;Quote:Original post by Jaevko In other words, how do the professionals take C++ code and create a graphics engine?  I am getting the impression that I need to learn DirectX and/or OpenGL.  Which is preferable?  Are there better alternatives? Or am I on the completely wrong path?Most professionals use a middleware solution to do the pixel-pushing for them.  That allows them to spend their time making games, not engines.If you are determined to make your own engine:1. How is your linear algebra?  If you are building your 3D engine you need to know your 3D math.  You will need to understand how to work with various matrix projections, affine matrix operations, stacked/sequential matrix transformations, basis vectors, and the common vector and matrix operations.  You will benefit from knowing about quaternions, eigenvalue/eigenvector calculations, and reduction formulas.2.  If you choose to use Direct3D, how well do you know COM?  Do you understand how to work with interfaces, shared instances, and asynchronous processing?  If you choose to use OpenGL, how comfortable are you with function pointers?  How comfortable are you with resource management?  How comfortable are you with converting pixel data from one format to another?3. How is your calculus?  You will need to implement your own game-specific physics, which can involve some pretty serious math.  If you are only doing basic interpolation you can get away with just linear algebra.It is certainly POSSIBLE to write an engine without those all those skills.  You can pick your way through online tutorials.  You can spend many hours trying to debug why you got a black screen.  You can scratch your head on problems that could be solved easily if you knew the correct math.Note that most professionals don't have all of those skills. To do it like the professionals, you will use any middleware library, tool, and prebuilt software that you can legally obtain so you don't need to do it yourself.   ;  Thanks so much for the quick replies!  I think I'm leaning towards DirectX.  To answer questions, I am working on math/physics major at the moment.  I haven't taken the Linear Algebra class yet, but have been putting it off and have taken a lot more advanced stuff, and therefore know most of it (will probably take it within the next year anyway).  Any other math and physics will definitely not be a problem.@frob: to answer question 2 (the others are answered above) I do not know anything about that stuff at all.  My programming experience has mostly been limited to higher-level stuff; for example, I know a lot more about AI algorithms than about how the processor/memory/the intricacies of C (to be honest, almost nothing about this lower level stuff).  I know I need to learn a lot of this stuff if I'm gonna get to the next level.  What is a good path to follow learning what I need to know?  (Note: I DO know the most necessary basics (like pointers).  I want to start building my own engine/games as a fun way of implementing what I learn in the all endless tutorials to make it stick in my memory).  I don't actually expect to be working on a real masterpiece of an engine and/or game for MANY months or years.   ;Quote:Original post by Jaevkoto answer question 2 I do not know anything about that stuff at all.  My programming experience has mostly been limited to higher-level stuff; for example, I know a lot more about AI algorithms than about how the processor/memory/the intricacies of C (to be honest, almost nothing about this lower level stuff).  I know I need to learn a lot of this stuff if I'm gonna get to the next level.  What is a good path to follow learning what I need to know?  (Note: I DO know the most necessary basics (like pointers).Then the next step would be to learn the C++ language.COM relies on inheritance and encapsulation, virtual functions, polymorphism, and other language features.  Before you can learn to use COM in C++ you need to learn how to use the C++ language effectively.If you haven't read it yet, pick up "Accelerated C++" by Andrew Koenig and Barabara Moo.  Read it.  Try it out.  Learn it.  Embrace it.  Love it.That should give you at least the basics that you need to know.  The book is perhaps the best book for learning the language.For your general C++ knowledge, I also recommend these books.  They are less essential for what you want to do, but still recommended:# "The C++ Standard Library" Nicolai Josuttis# "Effective C++" Scott Meyers# "More Effective C++" Scott Meyers# "Effective STL" Scott Meyers# "Exceptional C++" Herb Sutter# "More Exceptional C++" Herb Sutter   