"Global" -> "Static" don't exist for nothing.
Statics don't imply being global, at least not being in any global namespace.
IMHO Nexus is absolutely right. You create a lot of dependencies, thus writing code that is far away from being modular. This is something that's often done wrong with games, in my opinion. Why should classes like "Weapon" or "Player" draw themselves? You should rather write classes that *use* those, e.g. for displaying or sending stuff over the network.
I would instead keep global variables in a namespace, you know like for things that don't need to be objects.
Nothing "needs" to be an object, but it's just more logical, especially in terms of object oriented programming. Why doesn't your ImageManager belong to something more specific? Like a Game class or Gamestate class or whatever? I can't understand why resource managers are just "there" and don't belong to anything. That's a reason why I dislike singletons, and your design is a kind of singleton.
I would say global variables is just a taboo by teachers and books. It's still Not everything needs to be objects, it only makes the application slower, so if it can be designed as not an object would be faster and better.
There's a reason why teachers and books (also good books, for example by Bjarne Stroustrup) teach you that you shouldn't use such designs. There's also a reason why you shouldn't use "goto". Mostly people just don't know the reason and think it's only a "programmer taboo", but it isn't.
Not everything should belong to an object, that's true, but only for modularity reasons. For example, you should not write overloading functions for operator<< using ofstreams as a member. And please show up where your method is somewhat faster than *elegant* C++ code. The difference is neglectable. And if you've got a reason to produce more dirty code, you can still do that when performance penalties occure, but not by pre-optimization.