頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


Bulletでsoft bodyの布に剛体を衝突させてみた

開発者向けにiOS 8も出てるタイミングでアレなんだけど、OpenGLとBulletでいろいろと試したりしているんだ。
Bulletには剛体(rigid body)以外にもsoft bodyを扱えるというので試してみたんだけど、これがえらく苦労してさ。soft bodyと言ってもどうせ剛体に毛が生えたようなものだろうと思ってたんだけど、痛い目みたよ。



↑とりあえず布のような面(右手前の点だけ固定してない)を作って、そこに上から剛体が落ちるようにしてみた。赤い丸が時々表示されるけど、これはタップした場所でタップすると剛体がランダムな位置に生成されるというだけで本筋とは関係ない。
とりあえずそれらしく動いてるみたい。
布は両辺10分割のCreatePatchで作ってるけど、さすがのiPhone 5s、サクサクだよ!

Bulletでの計算結果をOpenGLで表示させるんだけど、これがまたよくわかんない。
というのもCreatePatchでsoft bodyを作った場合、
const btVector3& position = cloth_softBody->m_nodes[nodeIndex].m_x;
ってな感じで各頂点座標にアクセスするみたいなのよ。さらに
position.x()
position.y()
position.z()
というメソッドで各値を得るようなので、どこかひとつポインタを得ればそれをOpenGL側に渡してやればOKという感じではないみたい。
結局描画のたびにOpenGL(のシェーダ)に渡すための三角形が並ぶような配列を作ってる。他に方法があれば知りたいわ。毎回描画ごとに座標データを取ってきて並べて、、、なんて無駄だよね。どういう方法が定石なんだろ?


ところでBulletでsoft bodyを扱う場合の記事が日本語はもちろん英語でも少ないのよね。ましてiOS用のだとさらに少なくなるし。結局はあちこちで見かけたようにBulletに同梱の SoftDemo.h / SoftDemo.cpp を頼りにするしかないみたい。SoftDemoでの処理の流れを見ながらネットでいろいろ調べて、、、って繰り返し。
どこかにいいチュートリアルがないものか、と思っちゃうよ。

<< Bulletでメッシュからsoft bodyを作る  TopPage  App Annieに新しいアプリを追加する方法 >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/898-d11fd53a




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad