箱シミュレータ

正式公開版 Ver 1.5(2000/2/9公開)


積み上げた箱とそれが崩れるところをシミュレーションします.

箱シミュレータ ver1.5をダウンロードする(Windows95/98用(DirectX5以降要)、LZH圧縮、112KB)

箱シミュレータ ver1.5プログラムソース(VisualC++6.0用、LZH圧縮、93KB)

カーソルキーで回転、Roll UP/DOWNで視点前後移動,スペースで初期化(ボール高速)です.

あと、マウスの左ボタンがオブジェクトの操作、右ボタンで初期化となります。


作者のたわごと

2000/2/9日 Ver1.5

 うーん、自由に操作できるようにしたら、少しでもずれると上に乗ってられなくなるのが気になるようになったので、面上の判定点を増やして、この不祥事が起きないようにしておきました。ここで、面上でとまっていられるためには最低3点で面同士が接触している必要があり、まったく同じ大きさの面同士では、4点程度はないとだめそう・・。ということで、各面に判定点を4つずつ配置しましたので、頂点8+辺上12+面中央6+面周辺4x6+箱中央1で、箱ひとつにつき51点判定です。おかげで遅い遅い(^^;特に、完全接触で2次元上に詰まっているときは接触しまくりで遅いです。

 あと、以前のではこのすべるのをごまかすために、意図的に箱間の摩擦を無視してましたが、今度は摩擦がないと改造点がわかりませんので、箱間の摩擦を有効にしてあります。これで、ぱっと見にはどこでいんちきしてるのかわからないのではないかと思います。角で多少めり込んだりするのは気になるところですが・・・・

 これで、だるま落としとか、あと崩れないようにバランス取るブロックとかのゲームをPC上で再現できると思いますが、どうでしょう?ここまで複雑化すると、AB法でなくて普通の手法でといたほうが早い気もしなくはないですけどね(^^;

 

2000/2/8日 Ver1.4

 ボールとか箱をマウスで操作できるように修正しました。動きの計算の方は特に変わってません。なお、箱の選択は、手抜きして隅の8点しか見てませんので、箱の中心ではなく、角を選択するようにしてください。色が変わるので選択できたことがわかります。

 そいえばふと思ったんですが、これで、だるま落としシミュレータとか作ったら面白いかもしれませんね(^^;今のだと安定度に問題があるので、上下面の制御点増やして、あと面間の摩擦をちゃんとかけてあげないと、このままだと難しくてしかたないですけど・・・

 

2000/1/30日 Ver1.3

 跳ね返りのえーかげんなのがやはり気になるので、ここのところだけ普通の方法(摩擦と跳ね返りで速度を変える方法)に変更しておきました。あと、細かい修正。これで、ぱっと見にはいんちき計算なのがわからないんではないかと。まだ、ドミノ倒しには耐えられませんけどね。

 ただ、オブジェクトが積み重なった場合の処理がまだ変です。綺麗につまれている場合は大丈夫ですが、ちょっとでもずれるとずるずると落ちてしまう。今のところ面上には判定点が一つしかないので、これをもっと増やすか、エッジと面の接触部をちゃんと求めてそこに制御点を置けばよいはずですが、どんどん遅くなるなぁ(^^;

 リアルタイム処理なら、この程度のいいかげんさでよろしいのではないでしょうか?動きを見て期待してソース見た人が気を失いそうな処理ですが(笑)
#どこにも質量とか力とか加速度というのが出てこないもんなぁ。もちろん、角速度とか行列とか慣性テンソルなんかは論外。ベクトルだけ知ってればOKという・・・

 

2000/1/29日 Ver1.2

 プログラムよく見たら、箱と箱の間のあたり判定が思いっきりバグってたので修正(^^;めり込んだときに、面上じゃなくて8つの頂点のどれかに移動させてました。これじゃ爆発するわな。

 と、あとせっかくですので、下に書いた制御点の増加をやっておきました。1.1では各頂点と中心だけの9点判定でしたが、こんどは各辺の中心と面の中心の全27点判定(1箱あたり)です。ただ、そのせいで重くなっていて、ver1.0(100箱)→ver1.1(50箱)→ver1.2(30箱)とオブジェクトの数が減ってきてます。

 また、多少はまともになったので、ドミノ倒し風にも配置するようにしました。が、これ見ると、エネルギー保存がなってないのがばればれ(^^;ただ、一応連続して倒れることもあります。なんか風圧で飛ばされているみたいな感じですけど。

 

2000/1/29日 Ver1.1

 Bioの方で新坂さんにレスいただいたので修正。そういえば、摩擦の類が入ってなかった(一定の抵抗成分のみだった)、ということで、床と箱、箱と箱間で摩擦(もどき)を追加しました。あと、爆発気味だったのを抑えときましたし、中心にも制御点設けて、完全にめり込むのを防いであります。

 た〜だ、ぐしゃっとつぶれるようになったおかげで、あたり判定のいいかげんなのがばればれです。具体的には、各辺と各箱のあたり判定をしないといけないのですが、各頂点と各箱のあたり判定しかしていないので、斜めに接触したときにめり込んで爆発してしまいます。そのせいで、オブジェクトがちょっとでもずれて上に載ると跳ね飛ばしてしまう(^^;

 この辺は、制御点を増やしていけば(面上に判定点を増やすなど)ある程度どうにかなるはずですが、そうすると処理速度が・・・。水粒子デモで示した様に、上に載って止まるというのはこの手法でもやってやれなくはないはずなんですが、某所にあるようなドミノ倒しを(擬似でも良いので)リアルタイムで処理するのは辛そうすねぇ。だれか、チャレンジ。

 

2000/1/28日 Ver1.0

 今回は,技術的に多少は意味がありそうなものをやってみようということで,多数オブジェクトの干渉チェックに挑戦してみました.具体的には,積み上げた箱にボールをぶつけたところのシミュレーションです.

 これ,普通に剛体計算でもできるでしょうけど,積みあがった状態というのが曲者でして,こういうのでは,普通に力がどのぐらいかかるかとやっていたのでは,衝突が何回も発生してしまって計算が困難になります.ということで,こういうときはAB法(これ正式呼称?(笑))ということで,こちらで処理してます.基本的には,前作った粒子による水シミュレータの3次元箱バージョンということですね.

 ただ,こういういかにも剛体なものはAB法ですと変形を抑えるために繰り返し回数が増えてしまい,遅くなってしまいます.ですので,今回は無理やり剛体と仮定して各頂点の位置を補正するという手を使って高速化しています.これのせいで計算誤差がかなりひどくて,物体の回転速度が速くなると下に落ちない(^^;というあ〜あなことになってますが,そこのところは目をつぶってください.あと問題になるのが,物体のめり込みでして,これも良く見てるとたまに発生してます.頂点しかチェックしてないのが,最大の問題点です.こういう,干渉チェックは作るの難しいですねぇ.ただ,そこそこらしい動きにはなっているのではないかと思います.

 あ,あと,球がワイヤー表示なのはどうでも良かったので手抜きした結果です(^^;

 


ソフトウェアトップページに戻る