« DirectX とか | メイン | 親子関係 »

2007年09月01日

アニメーションライブラリ:: データ構造、実装よりの話

    

データをどのように保持するかは少し前に書いた通りだけど、今回はもう少し実装よりの話。
時間と値の pair を vector に入れればいいと言えばいいんだけれど、それだけだと扱い辛い。
そこで少しラップする。

単純に1つのクラスで全部やってしまっても良いが、エンベロープとチャンネルの2段階に分けた。
エンベロープは時間と値のペアをコンテナに保持し、時間での検索や挿入などの操作を行うクラス。
チャンネルはエンベロープを継承し、範囲外の値の扱いや補間を行う。
つまり、チャンネルを通してアクセスすれば、任意の時間の値が取得できるのに対して、エンベロープでは存在するキーフレームの時間の値しか取得できない。

なぜ分けたかと言うと、直感的に…… と言う面もあるが、補間が必要ない値も扱うため。
値や時間はテンプレートを使って任意の型が設定できるようにしてある。

補間の必要がない値は、例えばラベルやマーカーなどと呼ばれるフレームに付ける名前のようなもの。
これらは瞬時値で、特定のフレームにしか値は存在しない。
このような値はエンベロープで保持すればいい。

補間方法は、とりあえず離散と線形補間だけ作った。
たぶん、スプライン系の補間も追加するが、なくてもいいので後にした。
離散は、次のキーフレームまで直前のキーフレームの値を維持するもの。
跳び跳びで移動するようなもの以外に、離散的な値しかないものを扱うのにも使う。
例えば、ブレンド方法などは数種類の中から選択するもので、種類と種類の間を補間することは出来ない。
また、画像データそのものも離散的な値。チャンネルに画像データを入れておけば、パラパラ漫画と言うかムービーと言うかそのようなものが表現できる。

この2つのクラスがあれば、アニメーションする値についてはほとんど事足りるはず。



投稿者 Takenori : 2007年09月01日 22:21




comments powered by Disqus
Total : Today : Yesterday : なかのひと