Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

After learning the basics of computing simple die throwing games and calendar applications, I want to explore simple graphics - drawing and moving around geometric objects is ok to start with, eventually adding pixel graphic of course.

I've taken an introductory Java course but would rather do it in C++, Python or a combination of them (that's what we will eventually be using in school). I also want to learn the principles behind it, not just blindly applying incomprehensible syntax to make the compiler happy.

Some posts seem to imply SFML is a solid choice, so I thought I'd get a book covering it and work through it, but there only seems to be ONE book on SFML available, and that one hasn't been reviewed at all. Not in the mood for a $30 gamble, so I'm feeling kind of lost!

How should I approach learning basic graphics programming?

share|improve this question
    
Are you looking for book recommendations (which is off-topic) or are you looking for "how to approach learning graphics programming?" (which might be on-topic / constructive) –  GlenH7 Jul 13 '13 at 11:52
    
A general approach. –  Benjamin Lindqvist Jul 13 '13 at 11:55
add comment

closed as too broad by Robert Harvey, Dynamic, MichaelT, Kilian Foth, Dan Pichelman Jul 16 '13 at 13:29

There are either too many possible answers, or good answers would be too long for this format. Please add details to narrow the answer set or to isolate an issue that can be answered in a few paragraphs.If this question can be reworded to fit the rules in the help center, please edit the question.

4 Answers

As a starting point I'd recommend Googling the following keywords:

  • Transformation Matrix
  • World Matrix
  • View Matrix
  • Projection Matrix (This one is really only valid if you're wanting to do 3D)

Matrices are more of a mathematics thing, but they're crucial to understanding how a system like Direct3D or OpenGL is working, so if you're wanting to do more than just follow instructions I recommend understanding the use of Matricies within code.

You'll probably need to build up a lot of practice with code though to be able to apply all of these principles in code.

You can write graphics code without understanding the underlying math, but I find it a lot more fun (less frustrating) to program when I understand the entirety of the system I'm building.

I don't know what the best way to go about learning the coding side of it specific to Java though.

share|improve this answer
    
Actually already taken linear algebra :) Was more looking for the next natural step - just simple stuff like drawing two rectangles and moving them around according to keyboard input. I had hoped that there was a clear, optimal path that led from where I am to that point. But it's starting to seem like a steeper climb than I expected. –  Benjamin Lindqvist Jul 15 '13 at 13:11
add comment

SFML is indeed a good choice to begin with, at least in my opinion. From what I've heard, it's easier than SDL and Allegro. It's also in C++ while the two others are more C based. Personnaly, it's the one I'm trying to pick up at the moment.

SFML offers binding for many other languages (C, Python, Ruby, etc.) and many custom bindings can be found. It is based on five modules and you can use whichever you need: Graphics, Window, Audio, Network, System. It works under Window/Mac/Linux. It can also use OpenGL.

As for the book, I do not know about it. However, the SFML wiki is quite good and offer a lot of resources to start working with it. Furthermore, the SFML wiki forwards to some tutorials and helpful pages to start working with the library. For instance, I found the CodingMadeEasy youtube video series that goes through SFML 2.0 over a few hours and is a useful introduction. Paired with the documentation and wiki pages, it shouldn't be hard to pick up, for only $0.

share|improve this answer
1  
Your answer would be stronger if you explained why those are good choices instead of simply stating that they are. –  GlenH7 Jul 13 '13 at 11:48
add comment

I have appreciated the Processing language and The Nature of Code ( http://natureofcode.com/book/ ) for this purpose.

Processing ( processing.org ) is built on top of Java, but requires almost none of the boilerplate you would expect with Java. As far as language goes, I wouldn't worry too much about what language you learn these skills in as they are somewhat language agnostic. The skills will transfer. What I like about Processing is that it's all about getting to the point of, e.g., what is a normalized vector and what's it for.

The Nature of Code walks you through getting graphics on the screen w/ Processing and the physics you are trying to represent.

And both are free.

Speaking a bit more generally, I would recommend a framework with as few 'moving parts' outside of the concept you are trying to learn as possible.

share|improve this answer
add comment

I've recently begun learning OpenGL using C++. It is usable on multiple platforms, and there are a plenty of options for binding it with other languages. Plus, you can also apply it to the variations of OpenGL such as WebGL, OpenGL ES, etc.

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

The website above is a good place to start and also suggests other resources for those just getting started.

share|improve this answer
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.