物理演算エンジンってどうやって作るの?

■ このスレッドは過去ログ倉庫に格納されています
2007/05/24(木) 19:10:51ID:NTMqyc86
ハーフライフとか、オブリビオンのあれです。

詳しい人教えて
82名前は開発中のものです。
垢版 |
2012/01/08(日) 13:49:46.00ID:i1iv+V/j
BulletXのソース読んでみたけど、あれって拘束ベースなのかな?力積ベースなのかな?
constraint(拘束)Solverっていうディレクトリが在ったから読んでたら、Impulse(力積)を加えてたんで判んなくなった。
拘束ベースの判り易いソースって知ってたら教えて欲しいな。VC++よりはC#の方が読み易いからうれしい。
83名前は開発中のものです。
垢版 |
2012/02/25(土) 23:00:55.81ID:HsM02eP/
拘束条件を解く方式のエンジンでも、拘束されてる(物体どうしが一定時間以上
連続して接触している)ときも常に力積を加え続ける方式のものもあるよ。
つまり、力積が吊り合ってたら物体が静止状態になるってことね。

ちなみに、ソース読むよりも代数学の行列とか勉強した方が早いかも。
連立方程式を反復法で適当に解いてくエンジンとか、
すごい高度な数学のテクニックで解いてくエンジンとかいろいろある。
まずそっちの知識が無いと、ソースだけ読んでもわけわからん。
84名前は開発中のものです。
垢版 |
2012/02/25(土) 23:04:14.93ID:lzeArZyh
>>82
俺が教えてやるよ。もちろん数学はできるんだよな?

・ペナルティ法
・撃力
・拘束
85名前は開発中のものです。
垢版 |
2012/02/25(土) 23:05:24.17ID:lzeArZyh
撃力について

衝突したら撃力を加えるっていうのを何度もやる。
静止状態も実は撃力を何度も加えて結果的に静止してる

これは静止状態が重いんだわ
86名前は開発中のものです。
垢版 |
2012/02/25(土) 23:08:49.02ID:lzeArZyh
だから、それに加えて力積 or 力に関してのLCP(線形相補性問題)を解く
これはどういう式かっていうと

普通静止させたい場合は、衝突部分の相対速度の法線成分が0になるっていう式を連立させて解けばいいよな?
でも、離れようとしてるのに力を加えたり、マイナスの力を加えるのはおかしいよな?

だから
力 >= 0、相対速度 >= 0、力 = 0 or 相対速度 = 0
っていう式を立てるのよ

どっちかがゼロでなければもう片方はゼロっていう

これを高速に解くのがキモなの
87名前は開発中のものです。
垢版 |
2012/02/25(土) 23:13:50.63ID:lzeArZyh
おおまかな流れとして

・撃力を加える(静止状態とかだとかなりの回数になるから、どこかで打ち止め(近似))
・重力とかの外力を加える
・LCPを解く

速度と加速度を別に保持しておくか、速度だけにするか
つまりLCPで解く対象を速度にするか、加速度にするか

撃力を打ちどめることが多いので、近似になるけど速度をLCPで押さえこんだほうがいい。撃力を打ち止めてほっておくとめり込む
LCPで解く対象は速度だから、外力を加えるときは、dtをかけて力積として加えてしまう
88名前は開発中のものです。
垢版 |
2012/02/25(土) 23:15:24.27ID:lzeArZyh
ペナルティ法

めり込みに応じて反発力を。めり込んだ体積に比例させたり、距離に比例させたり
ステップ数が十分短ければどれも正しいんだけど、ステップ数が広いときにどれがいいのか
って分からない

ステップ数を広くできないから、他の方法と比べて衝突判定のコストが上がってしまう
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況