Kinect と Blender でモーションキャプチャしたい 1
Blender で作ったものを Flash で表示する(アニメーション) で、Blender からアニメーションデータ出力 → Flash で表示まで出来ました。あとは Blender でうまいことアニメーションを作れるようになれば・・・という状態です。 Kinect を使えば、家でモーションキャプチャの環境を作れるというようなことをどこかで聞いたので、色々調べた結果、とりあえずKinect から Blender へデータを渡し、Blender 上のモデルを動かすことが出来たので記録しておきます。せっかくなので、商用可な正規版 SDK でがんばりました。
対象環境
- Blender 2.63a
- Windows 7 Home Premium
- Kinect for Windows
- Kinect for Windows SDK v1.5
- Microsoft Visual Studio 2010 Express(C#ソースを修正しないなら不要)
子から親へ選択的なデータアクセスを行うクラス構成
AS3 でゲームを作る場合に僕が良く使うクラス構成です。
[caption id=“attachment_2481” align=“alignnone” width=“605” caption=“コンテキストを用いたデータのやり取り図”][/caption]
各オブジェクトのメイン処理は各クラスの execute() で行います。
各クラスのデータのみ使用する処理の場合は特に特殊な考えは不要ですが、
例えばキャラクターオブジェクトの攻撃動作で炎オブジェクトを出現させたい場合、
自クラスのみでは解決出来ません。
そういう場合は、ctx によって公開されている親オブジェクトのメソッドに対し、
「炎を作って!」と依頼します。(↓みたいなイメージ)
ctx.createFire(x, y);
親オブジェクトは各キャラクターと炎との当たり判定処理を行い、
当たり有りと判定した場合、炎の例えば hit(this) 等呼び出します。
炎クラスの hit() 内では ctx を介して
ctx.damageCharacter(10); // キャラクターにダメージを与える
ctx.removeFire(this); // 自分自信を消す
等実行します。
まぁつまり、キャラクターと炎のデータやり取りを親に任せることで、
オブジェクト同士のやり取りが自由になるわけです。
親は子のデータやり取りを選択的に開放しているので、
コードが無秩序ということもなく、ある程度ルールに基づいた実装が可能です。
(限度はありますが。)
些細な問題かもしれませんが、上記図の通り、 孫→親のデータアクセスのためには、子に親オブジェクトを持たさなければならなそうで、 これが気持ち悪く思っています。 どうにかならないものですかねぇ。
for each で末尾データの処理をスキップする方法
ちっちゃいネタですが、今まで気づかなかったので。
僕は AS3 で、できることなら for each を使いたがるのですが、この場合インデックスの情報を持っていないので、 「~番目のデータは処理しない」 とかの処理が出来ません。 まあそれは仕方ないのですが、 「末尾のデータは処理しない」 ということは結構簡単に出来ます。
var fooList:Vector.
// データ登録 // :
var savedFoo:Foo = fooList.pop();
for each (var foo:Foo in fooList) { // なんか処理 }
fooList.push(savedFoo);
パフォーマンスについては知りません!
Flexで何か作る前に
ちょっと前から、 Air for Android でアプリを作ろうとしているのですが、適当に作り始めてみると案の定苦労しました。 根本的に勉強し直そうと Adobe のサイトを探ってると、以下のページを発見。
1週間でFlexを学ぶ | Adobe Developer Connection
最初は、ビデオとか時間を縛られるし・・・とか思っていましたが、まぁ騙されたと思って。
基本的には MXML での作り方なのですが、 MXML って大分色々楽できるように出来てます。 ということが分かる内容です。 通常の Flex/Air アプリでも Air for Android でも、作る前に見ておいて損はないです。