床部分にマウスを置いて動かすと、ミクとリンがマウスの方を向く床をクリックすると、ミクとリンがクリックした点に向かって突進ミクとリンがぶつかると、反発しあって互いに吹っ飛ぶ。ちなみに、最初の天から降ってくるギミックが完了するまでは動かせなくしてある。あの部分はWOWEngineではなく、Tweenerを使ってる。WOWEngine使ったら、跳ねまくってえらいことになったので。言うことで、今回のエントリではWOWEngineの使い方を紹介。WOWEngineを使う手順は以下の通り。WOWEngineを入手するWOWEngineを初期化する物体を追加する物体を動かすWOWEngineで計算する表示に反映する。WOWEngineは表示関係の一切を行わない、物理計算のみのライブラリであることに注意。要するに、WOWEngine内で物体を定義し、その物理的な動きを計算した上で、その結果(座標値など)を表示系の方に渡す必要がある。今回の場合、Papervision3Dが表示を担当する。WOWEngineが表示にタッチしないお陰で、今回のミクやリンのように見た目が複雑なモデルでも、単なる球体として計算を行うことが出来ると言う利点がある。WOWEngineを入手する。WOWEngineを公式サイトからダウンロードして、クラスパスを通す。この時注意する必要があるのは、WOWEngineが使用している依存ライブラリの存在。Developers」を利用している。これもダウンロードしてクラスパスを通す。WOWEngineは変数や関数に型を設定していない部分が幾つかあるので、コンパイル時に警告が出てくる。気になる場合は修正しよう。WOWEngineを初期化する。ここからは実際にWOWEngineを使う話。3D物理計算を行ってくれるエンジンである、「WOWEngine」のインスタンスを作成・初期化する必要がある。以下のような感じで、クラスのメンバとして定義する。wowRin:WSphere;必須となるのが、WOWEngineクラスのインスタンス「wow」と、物理計算を行う領域を表すWBoundsAreaのインスタンス「wowFloor」だ(名前は任意)。残りの2つのWSphereは、メンバ名からも想像出来る通り、ミクとリンを表す物体である。このようにして宣言したWOWEngine関連のメンバを、次のように初期化する。0.050;//摩擦wow.setBoundArea(wowFloor);まず、先頭4行でWOWEngineのインスタンスを作成し、初期設定を行っている。それぞれの設定は以下の意味を持つ。wow.collisionResponseModeこれは、衝突時の計算の詳細度。この値が小さいほど、物体同士が衝突した時に細かく動き回る。定数として、STANDARD(100)、SELECTIVE(200)、SIMPLE(300)がある。wow.addMasslessForce空間内に常にかかり続ける力を設定する関数。WVectorは、WOWEngine内での「物体にかかる力」を意味している(と言うか、物理で言うベクトル)。コンストラクタの書く引数は以下の意味を持つ。WVector(X方向のベクトル,Y方向のベクトル,Z方向のベクトル);wow.addMasslessForceで設定されたベクトルは、wow内に登録された全ての物体に常に働く。WVector(0,-3,0)のようにして、重力代わりに使う人が多いようだ。wow.damping残念ながら詳細は良くわからないが、設定されたWVectorに対して係数のように働く値らしい。これを0にするとどんなに力を与えても物体は動かなかった。1を超える力を与えると暴れまわって物体はどこかに消えた。次に、WBoundsAreaの設定を行う。それぞれ以下の意味を持つ。FLOOR_DEPTH)WBoundsAreaの初期化。引数はそれぞれ、(幅、高さ、奥行き)で、立方体が出来上がる。wowFloor.setPositionWBoundsAreaインスタンスの位置。引数はそれぞれ、(X座標、Y座標、Z座標)を意味する。wowFloor.elasticityWBoundsAreaの弾性。物体がぶつかってきた時に、どれくらい力を奪い取るかと言う倍率。1にすると完全弾性で、ぶつかってきたままにで返す。1以上の値を設定すると暴れまわって物体はどこかに消える。wowFloor.frictionWBoundsAreaの摩擦力。リアルにしようとするなら細かく計算するか、実際の床面などの物体に近い摩擦係数を与えてやればいい。別に0でも問題ないと思われるが、今回は気持ちを設定。最後にWBoundsAreaをWOWEngineに設定して初期化は完了。物体を追加する物理計算を行ってくれるWOWEngine自体の初期化が完了したら、そこに物体を加えていく。今回はミクとリンの2物体を追加すればよい。wowRin:WSphere;を使う。以下は、かぐぁみねリンが床面に降り立つ→WOWEngineの物体定義の処理を行っている部分。);2行目で物体を初期化し、3行目でその物体をWOWEngineに登録している。WSphereというのはWOWEngine内で球体を表現するためのクラス。今回のミクとリンは見た目はミクとリンだが、物理的には球体として認識される。作った物体を、WOWEngine#addParticleで登録し、今後計算の対象とする。物体を動かす次に、物体を動かしてみる。今回のデモだと、床をクリックした時にクリック位置に向かって突っ込んでいくように動かすわけだが、そのためには、動く方向に向かう力を与えてやればよい。力は、WSphereのメンバvelocityに、WVectorの値を代入することで与えられる。今回は、床クリック時に各モデルに対して以下のような関数を呼び出すようにしてみた。4);//(3)}}各引数については、こんな感じ。targetにはミクやリンのモデルが入る。wowTargetには、ミクやリンを表すWSphereが入る(wowMikuやwowRin)pointには、クリック位置の座標が入るで、関数内で行っていることとしては、targetの現在位置とpointから、ベクトルを求める・・・(1)求めたベクトルからクリック位置とモデルの角度を求め、モデルがクリック位置(目標ポイント)の方向を見るようにする。・・・(2)なお、Metasequoia上で正面(Z方向)を向いているミクとリンのために、Math.atan2に与える引数を工夫しているwowTarget.velocityに、求めたベクトルを元にした速度を与えてやる。・・・(3)これにより、物体が動き出す。このようになっている。ちなみに床はXZ平面状にあり、今回はY方向の移動を考えていないため、Yの部分は0とした。計算するここまでで物体が動いている状態をシミュレートする準備が出来たので、今度はこいつを実際に動かすようにする。WOWEngineでは、メソッドWOWEngine#step()を使って、コマ送りのように物体を動かす計算をする。>ActionScriptwow.step();と言う記述を入れてやる。表示に反映するとまぁ、物体を動かしてやると、step()が呼び出される毎にエンジン内の物体が動き回るわけだが、それだけでは肝心のミクとリンはピクリともしない。最初に書いたがWOWEngineは表示系と結びついてないからだ。表示、つまりミクとリンの座標位置は、こちらで適宜変更してやる必要がある。言うことで、wow.step();の実行直後に、ミクとリンに対してこんな関数を呼び出そう。wowObj.pz;}}これで、ミクとリンがエリア内をガンガン跳ねながらぶつかっているようなデモになる。全体的にはこんな感じ。ミクとリンを使って見た目は派手そうだが、その実feb19.jpのサンプルと比べると異常に簡単。オブジェクト2つだけだし。フィールド上に障害物を置いたりして面白いものが作れるような気がしてきた。WOWEngineの、表示は一切やらないという態度のおかげで、人型モデルを球体扱いできるのが便利。跳ね方的には殆どわからないと思う。言えば、note.xさんの方では、リンが踊っていたが、あの技術を応用すれば踊ったまま衝突するミクとリンも作れそうだ。言うか、走るとかのアニメーションが無いと、折角動いてぶつかってるのに味気ないし。後は、衝突の瞬間にイベントが出てないかな?とかその辺を探索しよう。衝突イベント検知出来たらかなり楽しいぞ。ブログ関連記事ActionScriptFLARToolKitで、あなたの隣にはちゅねミク、かぐぁみねリン、いやお好きなキャラを・・・!前エントリのコメントで、Java版ARToolKitの作者A虎@さんが、モデルを動的に切り替えられると良いと仰ってたので、なるほどじゃあやってみようと言うコトにしてみた。以下に2パターン作成。Frameworkコネタ。Frameworkと言えばコマンドクラス。いう事で、今回は小さいネタを紹介。鮮度が大事なので、おお!こうか!!と思った瞬間ブログエントリにしてしまおうと言う方針を打ち立ててみたのです、今。ActionScriptAS3で音源を埋め込もうとしたら、コンパイルエラーが出たので調査。AS3でコンテンツ作ろうとして、mp3ファイルをEmbedしようとしたんだが、何故かこんなエラーが出てきた。原因をいろいろと調べたところ、サンプリングレートが悪い説とかいろいろ出てきた。FLV’sという、AIR用のflvファイル作成クラスをもとにして、FlashPlayer10用にflvファイルを作成するクラスを作ってみた。簡単な変更ですぐ出来た。Bender用のファイルを作る「PBDT」を使ってみた。Benderをインストールしよう。RSSを順番に流すと言うネタがあった。...スポンサーリンクMouse3Dではちゅねミクを動かそう。Piのイメージが壊れてたら、Rubyをインストールできない。Piのイメージが壊れてたら、Rubyをインストールできない。tuperaに支配された東京を描くディストピア映画!あと磯子滅ぶ!俺はおしっこちょっぴりもれてない!まだグレイテスト・ショーマン見てないの!?タイトルとURLをコピーしました。