Im not sure what cross-platform language i should you use and learn first. I have never used any cross-platforms before and dont really know which to choose from. I heard of SDL, OpenGL, and Allegro but, like i said, i have no clue which to choose. Any tips to which i should choose would be greatly appreciated.
For 3D, I use OGRE, it's very fast and not too difficult, though there is a bit of boilerplate involved which is a bit of a pain. The main downside is that it only supports its own file formats for meshes, textures, animations, etc. but there are converters for things like Blender.
Doing 2D games teaches you many useful techniques that can be used when you move up to 3D (especially how to program games correctly) but without having to deal with the steep learning curve 3D will first have.
Learning C teaches you...how to not program in C++ most of the time.
Yeah I gotta disagree with you here Duoas (for the first and perhaps last time). Doing 2D games will teach you not only some programming techniques that will carry over into 3D games, but also the basics of games - Good gameplay, level design, interface design etc.
Though I agree with the C before C++ being ridiculous and I would never suggest that particular rotten egg.
Many 3D libraries attempt to gloss the curve over, and what beginners are really left doing is copying and pasting code that they do not understand. High abstractions are nice and all, but it is imperative that the users understand what they are doing, which in almost all cases requires a bare minimum of a collegiate level mastery of linear algebra and a dumptruck load of jargon *before they can even apply a rotational affine transformation around a quaternion to a mesh before transforming to from model space, to world space, and finally to clip-space.
Advice: If you're going 3D - get a grip on the basics before diving into an abstraction such as OGRE, or you will probably feel overwhelmed. In fact, even with a firm grip on the basics, OGRE can still overwhelm.
The things you need to know for 2D games are different than the things you need to know for 3D games. While there is some overlap, it is all fairly boilerplate stuff (loading and saving level data, character information, etc).
You all act like 3D is so much harder than 2D that the jump is impossible to make.
Doing 2D will help you if you have no experience with games, just to get the basics down and to experiment.
And you don't typically have to really know all that much math for 3D stuff -- you have to understand some basic affine transformations, but good 3D libraries will set everything up for you easily enough.