fc2ブログ

Javaゲーム制作記

いろいろ作ってます  

木材追加&剛体の衝突

遅くなりましたがつぶつぶ2に木材を追加しました。
最初の剛体です。よく燃えます。

システムが大きく変わったのでソースを丸コピする訳にもいかず、
なかなか実装に時間がかかりました(特に分裂処理…)。





表面温度は最大900度近くまで達する

今更気付いたんですが、Rubberと繋げられるようにしておくの忘れてました。
びよんびよん出来ませんね。 すみませんがまた次回に・・・

ちなみに今回から粒子にアンチエイリアスがかかってます。
四隅に点を追加しただけですが、だいぶ滑らかな印象になりました。



以下おまけ(本編?)ですが、剛体の衝突についてもう一度考えてみました。
スポンサーサイト



[ 2012/05/31 22:37 ] 物理演算 | Comment(1)

布シミュレーションとか

また布シミュレーション作りました。
今回はStage3Dを使ってちょっと豪華に。

Cloth Simulation 3D - wonderfl build flash online



ばねの計算に後退オイラー法を使ってみました。
強いばね係数でも安定して計算できています。

通常は次ステップの速度を計算する際、今のステップの位置と速度を使うのですが、
後退オイラー法では次ステップの位置と速度を使います。

そのため式が連立方程式になり、反復して解く必要が出てきます。
ですがその分安定性は非常に高く、大きなタイムステップを使っても計算が破綻しません。

ちなみにボールの衝突は速度だけ次ステップのものを使いました。

P.S.
どうやら実装にミスがあるようで、ばね定数に関係なく計算を反復することで
無限に硬いばねになってしまっているようです。
ばねは力を与えるだけで拘束力はないので難しい…
誰か解決策を知っていたら教えてください。

こちらにも載せてます

--------------------------------------------

ゲームの方もじわじわ進んでます。
ひたすらステージ作りとスクリプト組み…

バリアーっぽいものとよくわからない機械


ブロックのつもり
[ 2012/02/13 20:09 ] 物理演算 | Comment(2)

凸包同士の衝突判定

物理演算で必要な凸包同士の衝突判定の解説です。

凸包というのは画像のように凹んでいる部分がない多角形です。





凸包の衝突判定は、性質上非凸形状よりも判定が容易です。

凸包の場合、局所的な最接近点は、必ず大域的にも最接近点となりますが、
凸包でない場合、必ずしもそうなるとは限りません。





また、二つの凸包が衝突を起こしていない場合、必ず二凸包を分ける分離軸が存在しますが、
衝突を起こしている場合、分離軸は必ず存在しません。





従って、二つの凸包の衝突の有無を調べるということは、分離軸を探すことになります。

ここで重要なのは、分離軸は必ずどちらかの凸包の一辺に平行であるということです。

つまり二凸包のすべての辺に対し分離軸かどうかのチェックを行えば判定ができます。
分離軸が一つも見つからなかった場合、その凸包は衝突しています。

ある辺が分離軸であるかどうかを調べるには、その辺からなる平面と凸包の衝突判定で可能です。
もし衝突があれば分離していないので分離軸ではないことになります。

(平面と凸包の衝突判定は凸包の各頂点と平面とのめり込み判定となり単純ですので省略します。
この辺はググれば沢山出てきます)






これで衝突自体の判定はできるようになりましたが、
物理演算には詳しい情報(法線ベクトル、めり込み距離、衝突点etc...)が必要です。

長いので続きからです↓
[ 2011/08/27 14:57 ] 物理演算 | Comment(5)

製作中

なにげなく製作風景を公開。


※人形は快く衝突実験に参加してくれました。感謝しましょう
せっかくWeb上で実行できるので
データのダウンロードとかできないと意味ないですよねー。
しかしそうするとcgiが必要になるわけでして・・・
どうしようか。

モコモコハンターはもう少しプレイヤーのアクションを
増やしてほしいという要望が多かったです。
上方向の攻撃は武器で補うつもりでしたが・・・
やっぱりもうちょっと進めてから考えますね。
[ 2011/01/05 15:50 ] 物理演算 | Comment(4)

自己交差多角形

カラクリエイターを自己交差した多角形に対応させることになったので、
自動分割を実装しました。

↑凸分割済み自己交差多角形

相当大変でした。これだけで数日かかりました。
とりあえず交差している部分を見つけて頂点を追加して
その間の順番を逆転させることで対処してます。

問題は三角形分割のほうにあったりします。
全く座標の同じ頂点が存在すると混乱するわけですね。
そこで微妙に位置を調整して対処してます。
これも完璧ではないのでたまにポリゴン欠けが発生したりします。

ソフト設計のほうはまだまだ進んでいません。
GUIどうしよ。
Swingが無難かなぁ・・・
でも自由度から考えて自作か・・・
どうしよう。
[ 2010/11/26 16:10 ] 物理演算 | Comment(3)

巨大ピラミッド

物理エンジンをSweep and Pruneで高速化したので、
巨大なピラミッドのデモを作ってみました。

計算時間は約15ms、ぎりぎりリアルタイムで動作します。
高速化前と比べると衝突判定速度が倍近く向上しました。

Sweep and Pruneはどこかの軸に対してソートして判定するものですが、
軸に投影したときになるべく重なりの少なくなる軸を選ぶといいです。

x軸に投影するときは、横方向に物体が並んでいると効率がいいですが、
縦一直線に並んでいたりすると、結局全体と
判定をすることになってしまいます。

そこでこの物理エンジンでは、判定に最適な軸を選択するようにしています。
重なり具合(色の濃い場所)を調べて、少ない方の軸を選択します。


※Sweep and Pruneについてもっと詳しく知りたい方はこちら(注:pdf)を参考にしてください。
[ 2010/11/15 17:32 ] 物理演算 | Comment(4)
プロフィール

saharan

Author:saharan

Twitter
検索フォーム