Advertisement

Learning Graphics Development

Started by April 19, 2015 10:42 PM
8 comments, last by BKrenz 9 years, 9 months ago

Hello all!

I'm a somewhat capable programmer in general, currently taking some time off school for personal reasons. In the meantime, I've been reading books on more generalized software development concepts, and working on a few tiny projects for various things. While I'd have loved to get an internship in the industry, my current situation prevents that.

I've been interested in games for a while, and am interested in different aspects of developing them. Most recently, I've been wanting to dive into the world of graphics, and have done a minimal amount of research so far. I have one major concern before I start learning, and it's related to the new Vulkan and DX12 APIs. I've noted from various sources that the way of doing things is going to be changing, and that, at least for Vulkan, it should be public by the end of 2015.

My concern is that I would start diving into one of the APIs that are out now, DX11 or OGL4+, and would be harmed by learning about how things are currently accomplished.

Doing the math isn't a concern on my end, I'm fairly familiar with a lot of calculus, algebra, and geometry. From my understanding, matrices, and to a lesser extent, quaternions, are a major staple of 3D graphics.

My question is this: In order to ensure that I'm learning the more "correct" way of doing things, where should I be starting? Is just getting in and doing something in the current APIs the best way to go? I'm not sure where to start. Conceptually, I would think that many things will carry over well (VBOs, etc). However, implementations, and architectures, seem like they'll be changing drastically.

Please do note that I'm wanting to learn how to develop directly in the APIs, and not wanting to learn about different engine's ways of handling it or anything like that.


Is just getting in and doing something in the current APIs the best way to go?

Absolutely! The currently used graphics APIs like DX11 and OpenGL aren't going anywhere for the foreseeable future, so for all intents and purposes they're still a completely valid way to learn how to do graphics programming on PC. The upside of these APIs is that you'll be able to get something up and running much faster than with the new APIs (at least for DX11, OpenGL can be a bit of a mess when trying to get things up and running "the right way").

I think people are interpreting the purpose of Vulkan and D3D12 the wrong way; these APIs are not a replacement for DX11 and OpenGL, but rather an attempt at giving those developers who really need those advantages of being "closer to the metal" what they want at the cost of having to be much more considerate of how they design and implement their graphics framework.

If you're a novice in the area of graphics related programming these new APIs will mostly antagonize you, as you will have to deal with a lot of things which do not immediately help you achieve your goals of getting familiar with the basics. You really don't want to have to deal with doing manual state transitions, memory usage tracking and management and all the other things the driver does for you in the older APIs when you just want to learn how to get a simple mesh with some basic shaders to render on screen.

The principal concepts of getting something interesting on the screen (vertex/index buffers, textures, shaders, constant buffers, etc.) have not changed in the transition from previous gen to current gen APIs, so get familiar with the basic concepts first in a more friendly environment before exposing yourself to all the responsibilities you need to take on in the newer APIs.

I gets all your texture budgets!

Advertisement

Alright, thank you!

Yeah good advice above.

We still have people posting on this forum asking questions about Direct3D 9, or OpenGL 2! So starting with D3D11 or OpenGL 3/4 is still relatively modern :)

They key task is that you're learning how modern GPUs work. D3D11 or GL3/4 will be fine for this.

Once you're comfortable with the theory of how GPUs work, then learning ANY GPU API is easy.

What they said... I just wanted to add that there are some fantastic resources available that'll walk you through some common rendering techniques :

For OpenGL & DirectX :

http://www.rastertek.com/tutindex.html

Shaders :

https://www.shadertoy.com/

I would definitely recommend jumping into the current API's and more specifically OpenGL due to it's cross-platform nature. Creating games/projects with these current APIs should hopefully give you a deeper understanding of the underlying concepts such as graphics programming as well as software design patterns.

There are plenty of OpenGL bindings for pretty much every language thinkable right now so just choose the language you are most comfortable in and get coding! :D

Game Development Tutorials - My new site that tries to teach LWJGL 3.0 and OpenGL to anyone willing to learn a little.

Advertisement

What they said... I just wanted to add that there are some fantastic resources available that'll walk you through some common rendering techniques :

For OpenGL & DirectX :

http://www.rastertek.com/tutindex.html

Shaders :

https://www.shadertoy.com/

Never seen that shadertoy site till now. Looks awesome. My computer gets really choppy when I'm on that site though, is it just me? Can't test on another computer atm.

Shadertoy is really choppy here as well - crashes my Firefox/GraphicsCard on a regular basis.

I have a real crap GC, though..

Still, what runs in a browser these days didn't even run stand-alone a couple of years ago.

Too many projects; too much time


I would definitely recommend jumping into the current API's and more specifically OpenGL due to it's cross-platform nature.

I generally don't like it when people give this advice. Yes, OpenGL is cross-platform, but anyone who has any experience with cross-platform (or even cross-vendor!) OpenGL development knows how much of a pain it is to get consistent results across platforms and hardware. I'd choose DirectX over OpenGL any time just to avoid the extension and driver compatibility hell.

I gets all your texture budgets!


I would definitely recommend jumping into the current API's and more specifically OpenGL due to it's cross-platform nature.

I generally don't like it when people give this advice. Yes, OpenGL is cross-platform, but anyone who has any experience with cross-platform (or even cross-vendor!) OpenGL development knows how much of a pain it is to get consistent results across platforms and hardware. I'd choose DirectX over OpenGL any time just to avoid the extension and driver compatibility hell.

I actually ended up going with DIrectX, via SharpDX. I'm not concerned with actual development at this point in time, and this is more of a side project type of thing than an actual career decision.

This topic is closed to new replies.

Advertisement