Experienced programmer, looking for most effective/efficient way to dive into c++/graphics

Started by
6 comments, last by menyo 9 years, 5 months ago

I'll try to keep this short and too the point.

I'm an experienced programmer, I don't have a degree or a job related to computers in any way, but I've been self teaching for close to a decade now and am pretty good at programming in general.

I decided I enjoy graphics programming and am considering trying to specialize in it and eventually have a career as a graphics programmer. All the graphics programming I've done so far has been using libraries that take all the real work out of it, I've dabbled with opengl a bit for android programming but that's the extent of my experience, aside from a few articles I read about specific rendering techniques that sparked my interest in graphics.

I am also pretty new to c++. I've used it before for a couple different very small projects, but it's been a while and although I have a grasp of the basic concepts I'm very rusty and would need to reference the internet to write anything beyond a hello world app in c++. Most my experience is in java/python/javascript.

So given my background, i want to know what experienced graphics programmers suggest as the best route to learn graphics programming WELL and EFFICIENTLY. I was thinking a book would be a good resource because it's cheap, relatively comprehensive and cohesive, and provides a guideline for my learning journey(I just go through it chapter by chapter, instead of jumping around from tutorial to tutorial all across the internet trying to learn the topic without leaving to many gaps on the way). Other resources would be considered though if you think they fit my needs.

my main learning goals are

become proficient in c++(I don't need a beginners c++ book though, if i get a book that teaches opengl using c++ I can pick up the c++ as I go and completing the book should give me a good grasp of c++

learn to use opengl in practical situations. I want to be able to write cool tech demos, make my own shaders, and expand on the knowledge I gained in the book to implement real-world rendering techniques. Once I feel I've learned enough I plan on writing a tech demo or two to add to my portfolio, for whenever I finally feel confident enough to apply for programming jobs.

learn fundamentals of graphics programming. I think being a good graphics programmer means I need a grasp of the fundamentals, but if there is no single resource that teaches these fundamentals alongside c++ and opengl I suppose I could research all the aspects of how rendering works on my own pretty easily, as it would be fun to read about. So this isn't a major concern.

Ok this is getting to long already, please leave any suggestions you think may be helpful, and, if you have time, an explanation of why you thinkI would benefit from your suggested resources. Thanks a lot

Advertisement

I don't know how helpful it'll be, but I am in a similar position to you - look at the link in my signature - I've been blogging about my own progress. I'm mainly going the C#/DirectX route, but the process and books are mostly similar overall. Ultimately, there is a shitload to learn but it's totally doable if you dedicate the time to do it.

My recommendation would be to have a goal that you'd like to be able to implement. Something that inspires you, that will keep you focussed. Something that excites you every time you think of being able to do it. Then break that down until you have a list of basic things you know you're going to have to learn. For me, I started with a a 3D rainbow-coloured cube (i.e. coloured vertices, no texture). Then I figured out how to render several cubes on the screen, and how to do so using hardware instancing. I then added animation to make the cubes rotate. After that I moved on to learning how to texture a cube, how to render a texture with transparency, how to dynamically create a texture and use that on a cube's face, and at the moment I'm in the process of learning lighting.

If you don't have the mathematical foundations, make sure you at least understand high school algebra and basic linear algebra (vectors, dot products, cross products, etc.). It's pretty easy to find books on those subjects (The "for dummies" type books are just fine). I also really recommend "3D Math Primer for Graphics and Game Development" by Fletcher Dunn and Ian Parberry. Check out http://www.arcsynthesis.org/gltut/ and also get yourself a book on OpenGL. I haven't done any OpenGL yet, so I can't recommend any books in that department, but using Amazon star ratings and reading the reviews as a guide is a pretty good bet (4-5 stars is ideal). Then basically start creating sample learning projects where you learn each basic skill one by one in isolation. After a while you'll know enough that you can combine what you've learned into a simple engine that you can build on and continue to learn from. I'd also recommend "Real Time Rendering, 3rd Edition". I understand it's a bit of a bible in the graphics programmer field, and I know I'm finding it to be very valuable. Once you've established some competence in the basics, your own needs will dictate what books to buy next and what papers you need to read.

For C++:

http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list

For OpenGL:

https://www.opengl.org/documentation/books/

http://gamedev.stackexchange.com/questions/32876/good-resources-for-learning-modern-opengl-3-0-or-later

P.S. For the fundamentals of graphics programing you'll need some math knowledge - analytical geometry, linear algebra.

For the shaders part you can start by checking out some theory on shading/illumination: http://en.wikipedia.org/wiki/List_of_common_shading_algorithms

If you're into ray-tracing too, I'd recommend more math + http://www.pbrt.org/ + http://www.scratchapixel.com/

And here you can find plenty of good stuff on the subject: http://blog.selfshadow.com/

for great DirectX tutorials :

http://web.archive.org/web/20140625070410/http://rastertek.com/tutindex.html

openGl :

http://www.opengl-tutorial.org/

learn one first.Just be sure your c++ is enough to do the job.


for great DirectX tutorials
http://web.archive.org/web/20140625070410/http://rastertek.com/tutindex.html

First, I would agree that the Rastertek tutorials are pretty thorough and complete. However, be aware that those tutorials are based on the now deprecated DirectX SDK (hence all the references to "DirectX" rather than "Direct3D"). Depending on one's experience level setting up Visual Studio projects, a beginner unfamiliar with the DirectX libraries or the D3D libraries may find revising code in the tutorials to Direct3D is difficult.

As the OP is looking to begin a career, and looking for a route to learn graphics programming, and if there's an interest in learning Direct3D, I would suggest avoiding DirectX in favor of Direct3D. When a foundation has been laid, the DirectX Toolkit would then be a good addition.

Please don't PM me with questions. Post them in the forums for everyone's benefit, and I can embarrass myself publicly.

You don't forget how to play when you grow old; you grow old when you forget how to play.


I would suggest avoiding DirectX in favor of Direct3D

Quoted directly from http://windows.microsoft.com/en-au/windows/directx-faq:

What are the different parts of DirectX?

  • Direct3D. This helps make three-dimensional animation possible on your computer monitor. Direct3D is designed to provide a powerful link between your computer's video card and software programs that can show three-dimensional (3?D) objects. The faster your computer can process animation, the more realistic the 3?D objects, light, and motion on your monitor will appear to be.

  • DirectDraw. This helps produce two-dimensional (2?D) visual effects. Your computer's video card and many software programs use DirectDraw to communicate with one another before sending the finished visual image to the monitor. Computer games, 2?D graphics packages, and Windows system features all use DirectDraw.

  • DirectSound. This boosts the performance of audio effects on your computer and makes many subtle effects in audio mixing and playback possible. It provides a link between software programs and the hardware on your computer. DirectSound provides multimedia software programs, such as games and movies, with hardware acceleration, mixing capabilities, and access to the sound card.

Direct3D is a subset of DirectX. By avoiding DirectX, you'll also avoid Direct3D.


Direct3D is a subset of DirectX. By avoiding DirectX, you'll also avoid Direct3D.

For semantic correctness, my comment could've been better worded.

To clarify: For the purposes of learning graphics programming well and efficiently, and if one is interested in Direct3D, I suggest avoiding tutorials (such as the Rastertek series mentioned) which are based on the "DirectX SDK," as the DirectX SDK (June 2010) is often referred to.

As noted here:

... all versions of D3DX are deprecated and are not shipped with the Windows 8.x SDK. This includes D3DX9, D3DX10, and D3DX11. There are plenty of options for moving existing code over to newer, more supportable solutions most of which are now shared-source.

Please don't PM me with questions. Post them in the forums for everyone's benefit, and I can embarrass myself publicly.

You don't forget how to play when you grow old; you grow old when you forget how to play.

For C++:

http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list

For OpenGL:

https://www.opengl.org/documentation/books/

http://gamedev.stackexchange.com/questions/32876/good-resources-for-learning-modern-opengl-3-0-or-later

P.S. For the fundamentals of graphics programing you'll need some math knowledge - analytical geometry, linear algebra.

For the shaders part you can start by checking out some theory on shading/illumination: http://en.wikipedia.org/wiki/List_of_common_shading_algorithms

If you're into ray-tracing too, I'd recommend more math + http://www.pbrt.org/ + http://www.scratchapixel.com/

And here you can find plenty of good stuff on the subject: http://blog.selfshadow.com/

^This^

These are some interesting reads even for someone that in not mainly interested in graphics programming or even 3D. Wish i could give some more upvotes.

This topic is closed to new replies.

Advertisement