3D theory before graphics APIs?

Phil
  • 3D theory before graphics APIs? Phil

    I'm a software engineer and I'm hoping to move my career towards game development. I'm reading a book right now on 2D using C++/DirectX. When I get into 3D I know I want to do it correctly. For example, I know nothing about 3d space. So if I learn only an API I might know it but I don't know if I can develop an interractive mini 3d world with it. I wouldn't call myself successful just having a rotating crate with the latest shaders etc. My math skills are up to trig/linear algebra and still in college. I know more math is to come. Should I be reading on 3D theory books before picking up on OpenGL/Direct3D, or any other suggestions? I just know an API isn't going to teach 3D game development and don't want to be lost afterward. I'm very book-oriented so that's fine if there's suggestions there too. Thoughts are welcome. Thanks!

  • After dissing you on the other site I feel obliged to answer :)

    I'm not any professional myself, but I did take a 3D Computer Graphics course in my university and it really helped me understand APIs I ended up using.

    Among things I found especially useful:

    1. Transformation matrices and how they work, not only for object transformations but also for viewing transformation, perspective projection etc. That's probably the most important thing.
    2. The whole theory behind lightning and shadow, especially useful when you start dabbling into shaders.
    3. Texture sampling, mipmapping.
    4. Color theory and blending techniques is also useful.

    And I definitely think that these are subjects that can be picked up from just reading a book or two on the subject, as long as you have the mathematical background.

  • I suggest you enroll at Game Institute, specifically the Graphics Programming with DirectX 9 courses.

    You don't need to take part in the interactive classes if you just want to self-learn.

    By the way, there is an option to also get printed books for a very low additional amount. They are well worth it.

    I did a lot of their courses a few years ago and the courses, although a little old-skool are really quite good and I can't recommend them highly enough - plus Gary Simmons is a really nice guy.

  • Start by doing. That way you'll discover what you don't know.

    Then pick up a good book on 3D math.

    I recommend '3D Math Primer for Graphics and Game Development'

    by Fletcher Dunn and Ian Parberry. (Wordware)

    Very clear, to the point, relevant - with C++ code and all.

    It's very important to know about the basics of points, vectors, transformations, etc.

    But that does not mean you should study it all before diving in. :)

  • I'm in a similar boat to you (although I'm technically relearning stuff I vaguely knew in college), and my solution has been to check out several of the books mentioned over in the "Good 3D Math Theory Books" question here. If you're a book learner that may be a good way to go for you. Especially if your college doesn't actually have a good 3d graphics course (mine didn't).

  • Hmmm, when I had to make my first 3D game some 15 years ago (had to as it was my job, that helps persevering) I had no 3D knowledge whatsoever other than high school math. If you have a fondness for puzzle solving and reading up, you can reason most of it out yourself and with some help from the internet (comp.graphics.algorithms faq). I did read the openGL bibles and http://www.amazon.com/Computer-Graphics-Principles-Practice-2nd/dp/0201848406 (warning oldskool) as they give valid background info. If you do it this way you might start off the wrong way but at a point you'll either dream up, or bump into, a better solution. Most of the 3d problems can be solved if your 2d grasp is good. Add to the general trig, pythagoras, matrices and inverses/transpose (for projection), dot&cross product and what you use em for, quaternions (don't have to understand em, just know how to use them - you can do without but they are nowadays part of the basic vocabulary), and you can solve most problems you come across. As you go you'll bump into better ways, but those few can solve anything. The best way is to set yourself a goal outside your grasp and force yourself to get there. The problems you run into are what you need to learn, and hey, you're on the site where they can help you solve em!

  • I took an Intro to Computer Graphics class in college (1-2 years ago) and the course website is still up. Lots of PowerPoint slides are still up that you might find useful and helpful. Topics cover both 2D and 3D graphics theory.

  • Above all else just try to make stuff. First and foremost jump in. Otherwise you will become an expert at theory but not practice.

    If you think that you are truly passionate about graphics, then imagine that you will continue to learn new material most of your life. Its not like you can learn everything you need before you start. It just doesn't work that way.

    As you learn more and more about the mathematics of 3D graphics, you will realize that there is no mathematics of computer graphics, there is only math. Learn how to teach yourself mathematics on your own. Then you will be able to digest new techniques as they are presented in literature.

    As graphics technologies evolve we will borrow different mathematic techniques. What is popular today might not be popular tomorrow.

    Here are some things that are going to stay the same.

    Right now I am finding the material in Geometric Algebra for Computer Science very interesting, and think that it might be better to start with the approach they layout for computer graphics. http://www.amazon.com/Geometric-Algebra-Computer-Science-Object-Oriented/dp/0123694655

    The book explains things like quaternions in a much simpler way, and might be helpful for you depending on your mathematical background and interests.

  • Don't go for "computer graphics" books. Start with linear algebra - it lays the foundation for everything you need. MIT has a good video course: http://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2005/

    From there, it should be straight forward to pick up any introductory text on computer graphics. UoWashington has a course online (no video, though): http://www.cs.washington.edu/education/courses/457/06au/lectures/

    If you're impatient you can start with the graphics course without linear algebra, but believe me when I say it will come back to bite you :)

  • If you want to understand how a traditional software rendering pipeline works (and things haven't changed that much even with the introduction of programmable hardware pipelines), one book I'd definitely recommend would be Jim Blinn's: A Trip Down The Graphics Pipeline.

    Unlike some of the other suggestions, it's not particularly comprehensive, but it is very readable and I think if you're just getting started with 3D, it's a good introduction. And it's written by Jim Blinn, who is one of the founding fathers of computer graphics, and thus is written from the perspective of someone who actually invented/discovered these techniques.

  • I'm currently doing the same as you, and found http://bit.ly/7618fJ (CSCI 234 Introduction to Computer Graphics on iTunesU) to be really helpful after I read a few books on computer graphics and math.

  • The Wolfire Games blog has had a really excellent series of tutorials on linear algebra for game developers recently.

    It really is important to understand the math behind it before you bother starting to learn an API. Otherwise, the order and purpose of the API calls won't make a whole lot of sense to you. You need to understand what they're doing for you on a math level first.

  • I was the TA for the graphics course at my university for several years. I set the syllabus, and covered things like software rasterizations and shading, Java3D, OpenGL, etc. Some time after this, in my own time I decided to write a ray-tracer for my own edification. This was an incredible experience - with a frame buffer and a putpixel(x,y, color) routine, in 500 lines I had code to generate an image with spheres, triangles, per-pixel shading, shadows, etc. If I had to redo the pracs for the courses, I would insist that the students do a ray-tracer. It is way to easy to get caught up in the details of a scanline algorithm when building a rasterizer, or feel like you're working through a black box using a 3D API.

    For quick, solid access to a graphics sandbox, I recommend writing your own ray-tracer. Obviously, this is a far cry from what is commonly used in production real-time 3D graphics, but it is a really intuitive and compact way to see and learn the theory.

Tags
graphics c++ opengl directx
Related questions and answers
  • I have the book iPhone 3D Programming; this book taught be a lot about overall c++ iPhone application architecture and iPhone OpenGL ES. But a lot of the book is obviously about 3D, so most of the book wasn't that useful to me. I also have Game Coding Complete 3rd Edition; this book taught me a lot about game engine architecture but the emphasis is on c++ windows desktop game programming. I am looking for c++ 2D game engine architecture books. I'm not looking to use any frameworks; I want something more geared towards 2d c++ game engine architecture. Any suggestions? Thanks.

  • animation I would end up storing a lot of data that I don't really need, even if I'm indexing node and frame data when saving and then store the hierarchy with the indices to the actual data. I don't know if my speculations are ok, as I don't have much experience with 3d animations yet. I want to make a well decision as any option I choose would require a lot of work to get it to render and I...well... I'm building the animation system of my game engine (the skeletal and skinned animation stuff), and I came to a point where I added so much functionality in the frame and node structures

  • I'm creating an FPS game. I'm writing my own game engine. So far all the backend stuff is going great. I'd like to support md2 as the native file format for 3D Objects, but I also want to use skeletal meshes. Does anyone know if the md2 file format supports skeletal meshes? In-case you need to know, I'm going to use blender as my Mesh creation tool and C++ as my programming language... Thanks For got to mention, the engine is based on OpenGL... Alright, for anyone who is reading this, I just found the Doom 3 md5 specifications (http://tfc.duke.free.fr/coding/md5-specs-en.html). It gives

  • to use Flash, but I don't know if it scales well enough. I'm not a scripter, I want some real APIs that I can work with inside a proper IDE. Just for information, I looked at several alternatives, I'm... don't really need 3D. The editor usability is a little worse than Unity3D in my opinion and it wasn't clear to me how to start programming. I think it requires C++ for coding, so that's a negative too. I...# bindings get dropped repeatedly. I'm not an engine enthusiast, I just want to make a game. I don't see this happening with Irrlicht. Ogre3D. Way too much work, it's just a graphics engine. Also no multiple

  • I'm fairly new to game development, played around with xna before and just learning OpenGL & c now and I'm interested to know which c/c++ based model animation libraries are out there and which you would recommend? I don't have any particular model format in mind yet but probably a format that is supported by a free modelling tool like Blender.

  • I want to try my hand at writing a 3D game. However I don't want to start at such a low level of drawing individual triangles and writing my own 3D object loader and so on. I've heard of things like Irrlicht, Crystal Space 3D, and Cafu, but I don't have any experience with any of them. I'm looking for suggestions from people who have experience with these or other engines on which ones are well written, and are easy to get started using, without having to learn a ton of 3D math theory and how GPUs work internally.

  • 1st Question is I want to write a board game for iOS and Android so I'm coming up with CoronaSDK and AirPlay. Since I have a mac, development platform is not an issue but the problem is which one should I choose. I'm fluent with PHP and web languages and familiar with C but it's a new language for Lua. I know a lot of people prefer Corona but why not Airplay? It even provides more devices and able to write in C/C++. 2nd Question is I want a SDK with shortest development time and easier coding. I don't need complex 3D or animation engine since the game is a board game like chess or monopoly

  • EDIT: There aren't sufficient enough tutorials for what I'm trying to do in Python, so I'm going to take my time and slowly build up my skills in C++. It's hard to trip and not land in a book of C++ tutorials on game development and 3D programming. Once I get passed the basic syntax for classes in multiple files with preprocessor declarations, what is the next step in 3D? Do I use DirectX or OpenGL? If I use DirectX, are there sufficient enough books on the subject for a BEGINNER? Same question for OpenGL. I love programming books, I just feel that most of them are way below par

  • happy to outsource graphics and sound, leaving me with coding, game design, level design and so forth. Do I need to learn C++ properly, or can I rely on my C# and .Net knowledge? If I'm going to leave C...I am interested in moving into game development once my current project is done, as it's nearly at a point where it will pay my bills and allow me to hire someone else to take the driver's seat... but forced myself to wait on, as there are only so many hours in the day to devote to projects. I am an experienced web developer (12 years) with most of my experience programming in C# and .Net (8