The main purpose of this project is to help understanding how asf/amc file works, as well as how to use them. Therefore, simplicity and readability are stressed, while robustness is ignored.
Demo using PyGame and PyOpenGL:
Demo using Matplotlib:
There’s a simple example in the source code as follows:
if __name__ == '__main__': asf_path = './data/01/01.asf' amc_path = './data/01/01_01.amc' joints = parse_asf(asf_path) motions = parse_amc(amc_path) frame_idx = 180 joints['root'].set_motion(motions[frame_idx]) joints['root'].draw()
And another exampls in
asf_path = './data/01/01.asf' amc_path = './data/01/01_01.amc' joints = parse_asf(asf_path) motions = parse_amc(amc_path) v = Viwer(joints, motions) v.run()
The data can be found from CMU MoCap dataset.
The asf/amc parsers are straightforward and easy to understand. The parsers are fully tested on the CMU MoCap dataset, but I don’t expect it can work on other datasets without any modification. However, it won’t be hard to extend it for more complicating asf/amc files.
Matplotlib is used to draw joints and bones in 3D statically; PyGame and PyOpenGL are used to draw motion sequence.
In 3DViewer, we support:
WASDto move around.
QEto zoom in/out.
↑ ↓ ← →to rotate.
LEFT MOUSE BUTTONto drag.
RETURNto reset camera view.
.to forward and rewind.
NOTE that my implementation of changing view is inefficient (but fluent enough) with some small bugs, but I don’t have time to improve it. Pull request is welcomed.
All the dependencies are available via