読者です 読者をやめる 読者になる 読者になる

BVH 形式のファイルを読んで表示するプログラム (BVH Viewer)

ソースコード 習作

スケルタルアニメーションについてちょっと調べる機会があったので、ついでに習作として簡単なプログラムを書いてみました。

ソースコード

せっかくなので、Xcode のプロジェクトを丸ごと公開しておきます。言語は C++ です。描画には OpenGL を使っています。Mac 向けですが、少ない修正で Windows や Linux でも動かせると思います。

zip 形式でダウンロード

プログラムの概要

BVH ファイル形式で記述されたモーションキャプチャデータを読み込んで、棒人間を表示するプログラムです。

プログラムはできる限り簡素に書かかれています。レンダリングやインタフェースなどに余計な機能はつけていないので、何をしているかは読めば容易に理解できると思います。(ただし C++ に疎いため、ソースコードは汚いです。)

以下に、メインとなるオブジェクトのクラス定義を掲載しておきます。

class BVHObject {
    typedef int                 Index;
    typedef std::vector<double> Pose;
    
public:
    std::vector<Joint>   joints;
    std::vector<Channel> channels;
    std::vector<Pose>    motion;
    
    std::map<std::string, Index> jointNameToIndex;
    
    double       interval;
    int          nFrames;     // equal to motion.size()
    int          nChannels;   // equal to channels.size();
    bool         ready;
    std::string  name;
    
    bool         renderingJoint;
    bool         renderingBone;
    
    void clear();
    void init(std::string fileName);
    void render(int frameNum);
    
    BVHObject();
    ~BVHObject();
private:
    void renderJoint(Index joint, Pose pose);
    void renderBone(Vector3d position0, Vector3d position1);
};

スケルトンは木構造になっているので、レンダリングの際は関数の再起呼び出し (ここでは void renderJoint(Index joint, Pose pose) が再起呼び出しされる) を利用して実装してあります。

また、Pose はあるフレームにおける姿勢を表しており、各 Joint の回転角などの集合 (並び順は BVH ファイル形式に従っている) になっています。Pose をフレーム順に並べたものを motion としています。

動作例

モーキャプデータ

調べていて初めて知ったのですが、
mocapdata.com
というサイトが無料(一部有料)でモーキャプデータを配布しているようです。これらのデータは自由に複製、頒布、展示、実演をすることができ、また二次的著作物を作成することもできるそうです。
Terms of Use | mocapdata.com
今回は上記のサイトからモーキャプデータを使わせて頂いています。

また少し前に話題になりましたが、Perfume のダンスのモーキャプデータが BVH ファイル形式で公開されています。もちろんこのモーキャプデータを使って棒人間をダンスさせることも可能です。
Perfume official global website

ということで棒人間をダンスさせてみました。

参考にしたサイト

MOCAPデータファイル - TMPSwiki
コンピュータグラフィックス特論�U 講義情報ページ


配布物に含まれるモーションキャプチャデータは、mocapdata.com, Eyes, JAPAN Co. Ltd. により「クリエイティブ・コモンズ表示 2.1 日本ライセンス」の下でライセンスされています。
使用許諾条件は、mocapdata.com, Eyes, JAPAN Co. Ltd. または http://creativecommons.org/licenses/by/2.1/jp/ にお問い合わせください。
http://mocapdata.com/
(C) Copyright Eyes, JAPAN Co. Ltd. 2008-2009