Take a look at this topic. That link's question actually has nothing to do with DirectX and is applicable to most applications that may use more than one import file format. Even if you only import from one format, the approach still provides flexibility in revising your code.
The approach of having a file importer program separate from a data saver program is particularly applicable if you're not sure how you're going to use data for animations. Write a file importer and load in all the data that format has to offer, and stuff it into a custom structure of your design. The data converter/saver program will load data from that custom structure and convert it to your animation program's needs, the best being a binary file with data in just the form needed by the mesh builder part of your program, and by the animation controller part of your program, which should be separate processes/objects.
It may seem like a pain in the rear-end having all those separate pieces. But, if you have a file importer that works, you can (and will be) revising the data converter/saver without having to change working code. It will likely be a little iterative - you may want to change the custom structure from time to time - but you'll thank yourself if you take the time now to create a flexible process.
Once you get it working, the entire back end of the process never needs to be revised. Note: obj format doesn't support animation, but can still store it in the same structure and you just create meshes from it. Also, the better you separate all the tasks from one another, you'll later be able to write other programs using some or all of the pieces without having to worry about importing data again! With a binary file on disk, whose structure you know, you can write in other APIs (DirectX, etc.) with previously converted files.
file importer (MD3) ---> custom data structure (maybe ASCII on disk) ---> convert/save (binary) to disk ---> quick load and mesh creation / animation creation.
file importer (Maya) ---> custom data structure (maybe ASCII on disk) ---> convert/save (binary) to disk ---> quick load and mesh creation / animation creation.
file importer (obj) ---> custom data structure (maybe on ASCII disk) ---> convert/save to (binary) disk ---> quick load and mesh creation / animation creation.
If you're not comfortable passing the data structure in memory from one program to another, write a routine that takes a pointer to the data structure and writes the data in that structure configuration to disk. That routine can then be copy/pasted into each file importer. If you're just starting out doing this sort of thing, write the custom structure data to disk in ASCII, so you can open it in Notepad (or even in your IDE - Visual Studio, etc.) as you'll likely be debugging the import process. Remember, the time to load/save/convert, etc., for this process is all outside your realtime animation program, so, if it takes a couple seconds to read this file or that, and a few more seconds to save it, load it again, etc., there's no impact on your animation program.
Edited by Buckeye, 20 March 2014 - 07:23 AM.