2009年11月19日

Box2Dのオブジェクトと画像について その2

昨日の続きです。画像処理で三角ポリゴン化し、そのデータを独自ファイルに保存まではできたので、今日は実際にBox2Dで使ってみます。

画像のレンダリングが必要ですので、今回は2DゲームエンジンのHGEを使用しました。

http://hge.relishgames.com/

パーティクルエディタなども付いていますし、2Dのレンダラとしてはいいものではないかと思います。

素材は、昨日に引き続き下記サイトのT2R様の透過PNG画像を使用させていただいております。

http://piapro.jp/colorw7

実行結果



やっぱり500ポリゴン前後だと重くて駄目ですね。Box2Dのb2Settings.hの最大プロキシ数を増やさないと、実行時にプロキシ数が多くなってエラー終了してしまいます。

const int32 b2_maxProxies = 65536; // this must be a power of two

後は小さい面積のポリゴンは使用しないようにして、大体100ポリゴンぐらいまで減らしたので何とか動いている感じです。

面積で適当に減らしちゃっているので、指先など細かい部分が侵入してしまっています。もうちょっと輪郭線抽出や三角ポリゴン化の手法を検討したいと思います。三角ポリゴン化も一点に集中するとパフォーマンスが落ちるという情報もありましたし。

まぁ思うだけでやらない気がしますが。

取りあえず目的の機能は出来たので、頭や腕などパーツごとに透過画像を用意して、各パーツをJointで繋いでめり込まない2DのRagdollを作ったりしたいですね。問題はパーツ画像を作成するスキルがないことですが。

web拍手 by FC2
posted by シンドラー at 23:21 | Comment(2) | TrackBack(0) | Box2D | このブログの読者になる | 更新情報をチェックする

Box2Dのオブジェクトと画像について

画像を読み込んでBox2Dのオブジェクトを作成する場合、画像とBox2Dのshapeが一致していないと何もないところで衝突したりして違和感があります。

しかしながら、大体の画像は凹凸あり曲線ありで、画像とshapeを一致させるのはとても大変です。

そこで、画像処理を使って楽に出来ないかなと考えました。

Box2Dのオブジェクトに使用する画像=動く=画像の背景は透過しているのではないかということで、透過画像を使用し、下記の手順でBox2Dで使用する三角ポリゴン情報に変換することにしました。

1. アルファ値を閾値として2値化
2. 2値化した画像にラプラシアンフィルタを用いてエッジ抽出
3. エッジ抽出画像に輪郭線抽出処理
4. 輪郭線を構成する点群から三角ポリゴンを生成

透過画像として下記の素材を使用させていただいております。
http://piapro.jp/content/jjjocjj9upu8ecxc

実行結果

OutPut.png

あまりきれいな三角ポリゴンにはなっていませんが、Box2Dで使う分には問題ない・・・んですかね?
続きを読む
web拍手 by FC2
posted by シンドラー at 03:49 | Comment(2) | TrackBack(0) | Box2D | このブログの読者になる | 更新情報をチェックする

2009年11月18日

Box2Dユーザマニュアルメモ

Box2Dのマニュアルでも訳そうかなと思ったのですが、下記ページに既に訳されている方がいらっしゃっいました。
http://d.hatena.ne.jp/technohippy/20080203

ですので、各章に関するメモでも書いておきます。個人的に大事そうなところは太字にしています。


1章

2Dの剛体物理エンジンです。衝突解決とかジョイント拘束とかできます。


2章

2.1. WorldのAABBは大きめに。物体がAABB外に出るとfrozenして何も出来なくなります。

2.2. WorldにBodyを作って、BodyとShapeを関連付けましょう。
2.3. 静的物体は質量0、動的物体は0より大きく。SetMassFromShapes関数で質量計算してくれます。
2.4. タイムステップは60Hzぐらいで。繰り返し計算回数は速度と正確さのトレードオフ。10回ぐらいがいいのでは。
2.5. worldを削除したらbodyやshape、jointなども全部削除されるので、これらを個別にdeleteしちゃ駄目です。
2.6. Testbedあるよ。


3章

3.1. mallocやnewでオブジェクト作っちゃ駄目です。
3.2. なので、worldのCreateBody等の関数を使ってください。

3.3. Box2Dはメートル−キログラムー秒(MKS)単位系です。オブジェクトが動く範囲は0.1m〜10mぐらいの間が良いです。描画エンジンはピクセル単位で指定することが多いので、そちらを基準にしてしまうと、例えば200pixelのオブジェクトは200mのオブジェクトになってしまいます。描画⇔物理エンジン間でスケールの変換をしましょう。

3.4. b2Shape、b2Body、b2Jointクラスはユーザデータとしてvoidポインタを持てます。ゲームアクターへのポインタを関連付けたり出来るので、いろいろ使えます。衝突した時にアクターにダメージを与えるとか。

3.5. C++ですよ。
3.6. 何か意見があればフォーラムまで。


4章

4.1. b2Worldクラスは大事だよ。
4.2. newで作ってdeleteで消してね。
4.3.1. シミュレーションのStepは環境に合わせて

4.3.2. すべてのオブジェクトに何か処理を行う方法について。GetBodyList()で回してね。

4.3.3. バウンディングボックス単位の選択。マウスピッキングとかグループ選択とか出来るよ。


5章

5.1. Bodyの概要
5.2. Bodyの定義
5.2.1. 質量とか慣性モーメントとか設定できるよ。
5.2.2. 初期位置と姿勢を設定できるよ。
5.2.3. 並進/回転のダンパを設定できるよ。
5.2.4. sleepのパラメータを設定できるよ。

5.2.5. Bullets(弾)の属性を設定できるよ。これを設定すればContinuous Collision Detection(CCD)を行うので高速に動いてもすり抜けないけど計算時間増えるよ。

5.3. Body作るよ。
5.4. Bodyの関数色々。
5.4.4. ApplyForceとApplyImpulseがあるよ。違いは即座に速度に反映されるかどうかだよ。


6章

6.1. Shapeのお話です。
6.2. Shapeの定義のお話です。
6.2.1. 摩擦や反発係数を設定できます。
6.2.2. 密度を設定できます。b2Body::SetMassFromShapeは密度を元に質量を計算します。

6.2.3. 衝突のフィルタリングをグループとかマスクとか使ってできます。

6.2.4. センサとかあります。

6.3. Shapeの作成
6.4. Shapeの関数は別にないよ。


7章

7.1. Jointのお話です。
7.2. 色々な種類のJointあります。
7.3. Jointの作り方です。
7.4. Joint関係の関数です。


8章

8.1. 衝突に関するお話です。いろんな情報あります。

8.2. 衝突時に呼ばれるコールバック関数の使い方です。b2ContactListenerクラスを継承します。AddとPersistとRemoveとResult関数を実装できます。衝突したオブジェクトを削除する場合は一工夫必要ですよ。

8.3. 衝突のフィルタリングを自分で実装することができます。b2ContactFilterクラスを継承します。ShouldCollide関数を実装して自分でフィルタリングできますよ。


9章

9.1. BodyがAABBの外に出ちゃった時に呼ばれる関数を定義できます。b2BoundaryListenerクラスを継承して、Violation関数を実装すればいいです。関数の登録がSetListener(myBoundaryListener);関数になってますが、SetBoundaryListener関数の間違いじゃないですかね?

9.2. Box2Dは個別にnewやdeleteしちゃ駄目なので、削除時に呼ばれる関数を定義できるようにしています。b2DestructionListenerクラスを継承して、SayGoodbye関数を実装すれば良いです。


10章

10.1. b2Settings.hとb2Settings.cppで色々設定を変更できるよ。
10.2. 単位系を変更できるよ。
10.3. メモリ確保の方法も変えられるよ。


11章

b2DebugDrawクラスを実装すれば、Box2Dのオブジェクトを作るだけで描画も出来るよ。TestbedはOpenGLで実装しているよ。

こんなところですかね。b2DebugDrawをIrrlichtで実装するとかもありといえばありですかねぇ。

web拍手 by FC2
posted by シンドラー at 00:10 | Comment(0) | TrackBack(0) | Box2D | このブログの読者になる | 更新情報をチェックする

2009年11月06日

Unreal Development Kitについて

ちょっと油断すると2,3カ月経っていて恐ろしいことです。

ついったーなどでUnreal Development Kit(UDK)の話題があったのでダウンロードしてみました。
PhysXやHavokがフリーになってきたと思ったら今度はゲームエンジンがフリーですか。
教育・非商用利用でフリーとはありがたいことです。メニューなどは日本語になってますし。
http://udk.com/index.html

それにしても色々なツールが入ってますねぇ。開発環境として出すにはこれぐらいは必要なんですかね。

とりあえずダウンロード
http://developer.nvidia.com/object/udk.htmlのClick here to get UDK now!をクリックしてインストール

デモは3つ
http://udk.com/showcase-ut-game.html
UT DemoはUDKをインストールすれば入っているようです。

WhizzleはPDFのドキュメントがついています。
http://udk.com/showcase-whizzle.html

The Ball
http://udk.com/showcase-the-ball.html

この2つのデモはインストールしたフォルダのBinariesのUDK.exeを実行すれば動くはずです。多分。
それにしても結構PCのスペックが要りますね。

UDKをインストールすると、スタートメニューのプログラムのUnreal Development KitにEditorとかGameとかSpeedTreeとかが追加されます。

Gameを選ぶとUT Demoが起動するようです。

Editorを選ぶとUDKのEditorが起動します。ゲームを作る場合はこれを使うんですかね。

SpeedTreeは木を生成するみたいですね。面白そうですねぇ。
http://blendermoe.blogspot.com/2009/11/etc-udk.html

土日に元気があれば色々試してみたいと思います。
続きを読む
web拍手 by FC2
posted by シンドラー at 19:09 | Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。