LITTLE CLAP
FLASHで物理シミュレーション:落下する立方体 2010/12/05
 FLASHでの物理シミュレーションに挑戦しています。あまり本格的なものではなく「軽い負荷でそれっぽく見えるデモ」を目指しています。
動作確認
 スタートボタンを押すと上から立方体が32個出現して落ちてきます。
 マウスでドラッグすると視点が回転します。
説明
球体8つとリンク28本による骨組み
球体8つとリンク28本による骨組み
 いきなりですが立方体の衝突判定は難しいのでやめました(爆)。
 では何をやっているかというと、球体を8つ並べて立方体の代わりにしています。しかも球体の直径は全て「1」です。つまり球体の中心同士の距離が1未満になったら衝突したと判断します。
 8つの球体が立方体としての形状を保てるよう、生成時に球体同士の距離を覚えておき、距離が伸びていたら近づくように働きかけます。
 球体衝突検出後の処理はよくある単純反射で良いのですが、3つ以上の球体が密集したときめり込みやすくもなるようで、強制押し出し処理も入れました。
 余談ですが、描画にはflash.display.Graphicsクラスではなく自前のソフトウェアレンダリングを使用しました。
 オブジェクト単位でzソートするよりは、描画ロジック側でデプスバッファを使ってくれたほうが楽で良いです。中身は立方体ではなく球体なので、角が丸くなっている前提での衝突判定が行われるため一部重なって表示されることもあります。
 床を描画するのが面倒だったので、全立方体を反転座標で描画して「床に映りこんでいるように」見せています。
今後の展開
 もっと色んなシーンでのシミュレーションをやってみたいですが、なかなか簡単に実装できるシーンを思いつきません。球体は積み上げられませんしねぇ。
inserted by FC2 system