I think the 'big picture' architectural design of programs is actually the hardest part, which I'm guessing is why there is such a huge lack of information on the subject. It's something I've been struggling to learn myself, because I basically have to trial-and-error rediscover it on my own from a lack of good guides.
The only advice I can give, unless someone can point out a real book that actually teaches software engineering architecture, I can only suggest that you learn from actual practice by doing, and re-doing.
If someone can recommend a real book that actually teaches software engineering architecture, that would be grand. I don't mean, "Here's how you build this piece, and here's this piece", but "Here's how you can fit any piece together in a clean and organized way" - Again, many books claim to teach the latter, but actually teach the former, so be on your guard.
If all you are wanting is the "Here's how you do this, and here's how you do that" without the big picture, there are plenty of resources online. For OpenGL, try here. For anything else logic-related, basically just google it, as the information is scattered all over the net. (Things like "C++ physics", and "OpenGL fire", etc...)