I think your goal of having as little 3rd party software in the loop as possible is a great goal. I would strongly suggest first getting your head solidly in how skeletal animation math works (what transforms are involved, what they’re named, how they’re composited, etc.) before you dig into this, or you’re likely to quit in frustration or pull your hair out until you decide to go back and figure out the basics.
A lot of the skeletal animation info available on the net is just “so-so” to complete garbage (many of the so-so ones assume knowledge of things you might not know or use odd or confusing names for things), so you can spend a lot of time here if you don’t know where to look. Would suggest you first read Chapter 11 of Jason Gregory’s Game Engine Architecture– or if you’re impatient, just Sections 11.1 - 11.5 (you can pick up the rest later). For a short-but-good tutorial on the transforms specifically (Gregory covers this well also), read Chapter 4.2: Filling the Gaps: Advanced Animation Using Stitching and Skinning from Game Programming Gems (also in Best of Game Programming Gems).
If you have any questions, feel free to ask them here (should probably post on the “Math and Algorithms” forum though) – there are several folks on the OpenGL boards that have done skeletal before.
As to your specific question about formats, there are some common 3D file formats you could use for skeletal animation interchange. These include:
[ul]
[li]FBX (Filmbox; Autodesk publishes an SDK for this) [/li][li] MD5 (Doom 3 Models), [/li][li] IDM/IQE (Inter-Quake Model/Export) [/li][li] COLLADA [/li][/ul]
and then of course the native save formats for your favorite 3D skeletal modeling packages (e.g. Blender, Maya, Cinema4D, 3DSMax, etc.). I haven’t done a deep analysis of any of them. Pretty much wrote my own – easier to tailor to the specific needs and capabilities of your engine that way (once you understand the guts it’s much easier to just avoid the bloat/limitations of an existing format and roll your own).
…can animations be stored in a separate file.
Sure thing. In fact, that’s highly encouraged! You’d want to do this for instance to support skin retargetting (i.e. applying the same animation set to different skin meshes).
I don’t know much about how animations are stored so I don’t really know how to ask the questions.
Can you explain to me the concepts behind storing animation data?
This isn’t a “quick tutorial” type subject. I’d suggest you spend some quality time carefully reading one or both of the above sources I mentioned, and then if you have any questions, feel free to post them here and we’ll try to help you out. Probably best to post in the Math & Algorithms forum though as this isn’t really an OpenGL specific question.