忍者ブログ
場所取り そのうち引っ越すかも http://maglog.jp/gltest/
[12] [11] [10] [9] [8] [7] [6] [5] [4] [3] [2]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

人体モデルに銃火器を持たせる上で、リアル系FPSばりにリコイルを表現してみたくなった。

ランダムで照準をずらして、連射時に目標を狙いつづけるのが難しくなるようにしてみた。

話の上で、照準のずれ量 a (角度)とその変化速度 ω (角度/秒)を定義する。ピッチとヨーの2軸についてこの値が2次元平面を張ると考えることができる。

基本的には、射撃によって ω が瞬間的に変化するようにし、 a がゼロに近づいていくように制御すればよいのだが、ここで問題になるのは、 gltest のようにシミュレーションステップの時間幅が可変の場合、差分法による求解では、描画時のフレームレートによって挙動が異なってしまうことである。悪い場合には発振や発散にも至る。

そこで、一次のフィードバック系の解析解である指数関数を使って、フレームレートに関わらずリコイルの挙動が決まるようにした。

ソースや動画は「続きを読む」で。


 

以下のソースはリコイルを指数減衰を使ってシミュレートしたものである。照準のずれを kick[i] に格納している。

	double relax, relax2, prelax;
double accel[2];
int i;
relax = exp(-5. * dt2);
relax2 = (1. - relax) / 5.;
prelax = exp(-2. * dt2);
for(i = 0; i < 2; i++){
accel[i] = (kickvelo[i] * (relax - 1.));
kickvelo[i] += accel[i];
accel[i] /= dt2;
kick[i] += kickvelo[i] * relax2;
kick[i] *= prelax;
}
まとめはこちらのページから。

以下の動画は、銃火器の反動をシミュレートしたもの。


PR

コメント


コメントフォーム
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字


トラックバック
この記事にトラックバックする:


忍者ブログ [PR]
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
フリーエリア
最新コメント
最新トラックバック
プロフィール
HN:
gltest
性別:
非公開
自己紹介:
バーコード
ブログ内検索
アクセス解析