.NET Webアプリケーション アーキテクチャパター …....NET Webアプリケーション アーキテクチャパターン 森屋英治 有限会社アークウェイ
物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture...
Transcript of 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture...
情報メディア実験A (GC41103) 1
物理エンジンを使ったアプリケーション開発
筑波大学情報学群情報メディア創成学類
藤澤誠
情報メディア実験A (GC41103) 2
実験の目的
物理シミュレーションエンジンを利用したアプリケーションが作れるようになる
教員による説明回+講義ページの説明を理解して練習問題を解く(実装する)
物理エンジンを用いた簡単なアプリケーションを作成
情報メディア実験A (GC41103) 3
実験スケジュール毎週水3,4限&金5,6限
テーマ内スケジュール
1. ガイダンス&事前知識(C++)説明 : 5/8
2. 物理シミュレーションとは? : 5/13, 15, 20
3. 物理エンジンとは? : 5/22, 23, 27
4. 剛体間の衝突判定,衝突応答 : 5/29, 6/3, 5, 10
5. 剛体間リンク : 6/12, 13, 17, 19
6. 3Dモデル読み込みと弾性体 : 6/24, 26, 27, 7/1
7. アプリケーション開発 : 7/3, 8, 10, 15, 17, 22, 24
8. 成果発表会 : 7/29
赤太字は説明回,黒太字は土曜日授業,7/31はレポート作成回
情報メディア実験A (GC41103) 4
物理シミュレーションとは?
物体の物理運動をリアルに再現するための手法
質量・速度・摩擦・風といったものを物理法則に基づきシミュレーション
情報メディア実験A (GC41103) 5
物理エンジンで使う数学
ニュートンの運動方程式
𝑭 = 𝑚𝒂力[N] =質量[kg] ×加速度[m/s2 ]
• 物体に力を加えたときにどれぐらい加速するかが分かる
• 物体を描画するときに必要なのは位置𝒙
情報メディア実験A (GC41103) 6
物理エンジンで使う数学
ニュートンの運動方程式
𝑭 = 𝑚 ሷ𝒙
ሷ𝒙 ∶ 𝒙の時間2階微分(𝑑2𝒙
𝑑𝑡2)
ሷ𝒙 =𝑑 ሶ𝒙
𝑑𝑡=𝑑𝒗
𝑑𝑡, ሶ𝒙 = 𝒗 =
𝑑𝒙
𝑑𝑡
1階微分×2に分解
情報メディア実験A (GC41103) 7
物理エンジンで使う数学
時間積分の離散化
𝒗(𝑡) =𝑑𝒙
𝑑𝑡=
𝑑𝑥
𝑑𝑡,𝑑𝑦
𝑑𝑡,𝑑𝑧
𝑑𝑡
𝒙 𝑡 + Δ𝑡 = 𝒙 𝑡 + 𝛥𝒙
位置𝒙の時間変化
情報メディア実験A (GC41103) 8
物理エンジンで使う数学
時間積分の離散化
𝒗(𝑡) =𝑑𝒙
𝑑𝑡=
𝑑𝑥
𝑑𝑡,𝑑𝑦
𝑑𝑡,𝑑𝑧
𝑑𝑡
位置𝒙の時間変化
𝒙 𝑡 + Δ𝑡 = 𝒙 𝑡 + 𝛥𝒙
情報メディア実験A (GC41103) 9
物理エンジンで使う数学
時間積分の離散化
𝛥𝒙 = නt
𝑡+𝛥𝑡
𝒗 𝑡 𝑑𝑡
速度が𝑡から𝑡 + Δ𝑡の間一定の値だと仮定
𝒙 𝑡 + Δ𝑡 = 𝒙 𝑡 + 𝒗(𝑡)𝛥𝑡 :前進オイラー法
情報メディア実験A (GC41103) 10
物理エンジンで使う数学
ここまでのまとめ
物体を動かすためには力Fを与える
Fから運動方程式で加速度,加速度から前進オイラー法で速度⇒位置と計算
時間ステップ幅Δ𝑡を与える必要がある
精度はΔ𝑡が小さいほど良くなる(計算時間は大きくなる)
情報メディア実験A (GC41103) 11
物理エンジンで使う数学
行列を使った回転の表現2次元の回転⇒角度𝜃で表現可能
𝑹 =cos 𝜃 − sin 𝜃sin 𝜃 cos 𝜃
𝒙′ = 𝑹𝒙
𝒙
𝒙′
𝜃
情報メディア実験A (GC41103) 12
物理エンジンで使う数学
行列を使った回転の表現3次元の回転⇒?
オイラー角𝑥, 𝑦, 𝑧軸周りの回転角 𝛼, 𝛽, 𝛾で回転を表現
それぞれに回転行列𝑅𝑥, 𝑅𝑦, 𝑅𝑧があり,それを合成することで1つの行列で回転を表現
計算が大変,1つの回転に9つの要素が必要
情報メディア実験A (GC41103) 13
物理エンジンで使う数学
四元数実数部(スカラー部)1つ,虚数部(ベクトル部)3つを持つ4次元数
ベクトル部を回転軸,スカラー部を回転角と考えると任意の回転を表現可能
𝒒 = 𝒗, 𝑠 = 𝑖𝑣𝑥 + 𝑗𝑣𝑦 + 𝑘𝑣𝑧 + 𝑠
𝒒 = 𝑥 sin𝜃
2, 𝑦 sin
𝜃
2, 𝑧 sin
𝜃
2, cos
𝜃
2
ベクトル部 スカラー部
情報メディア実験A (GC41103) 14
物理エンジンで使う数学
四元数を使った回転の表現
四元数で覚えておくこと
単位四元数
逆回転を表す四元数(共役四元数)
回転行列と相互変換可能
𝒙′ = 𝒒 𝒙, 0 𝒒−1
𝒒 = −𝒗, 𝑠
𝒒 = 0, 0, 0, 1
情報メディア実験A (GC41103) 15
物理エンジンで使う数学
四元数𝒒 = 𝑣𝑥 , 𝑣𝑦 , 𝑣𝑧 , 𝑠 から回転行列への変換
ほとんどの物理エンジンは四元数を扱うクラス(bulletだとbtQuaternion)で姿勢等を指定できるが,描画側(OpenGL)は回転行列を使っている
⇒ 回転行列への変換が必要となる
情報メディア実験A (GC41103) 16
物理エンジンで使う数学
ニュートンの運動方程式(回転版)
角速度𝝎は角度𝜃or四元数𝒒の時間微分
慣性テンソルは回転版質量のようなもの
回転のしにくさを表す
同じ質量でも形状やまわす軸でまわしやすさは変わる
物理エンジンにはこれを計算するための関数が用意されている
𝑻 = 𝐼 ሶ𝝎トルク[N・m] = 慣性テンソル×角加速度[rad/s2 ]
情報メディア実験A (GC41103) 17
物理エンジンで使う数学
回転版の前進オイラー法(四元数使用)
𝝎 =𝜕𝜽
𝜕𝑡, ሶ𝝎 =
𝜕𝝎
𝜕𝑡
並進運動版 ∶ 𝒙 𝑡 + Δ𝑡 = 𝒙 𝑡 + 𝒗(𝑡)𝛥𝑡
𝒒 𝑡 + Δt = 𝒒𝑤𝒒 𝑡
𝝎 𝑡 + Δ𝑡 = 𝝎 𝑡 + ሶ𝝎 𝑡 Δt
角度𝜽を四元数𝒒にして離散化
情報メディア実験A (GC41103) 18
物理エンジンで使う数学
1ステップあたりの姿勢変化𝒒𝑤について
1ステップあたりの姿勢変化量 : 𝝎Δ𝑡
⇒ これを四元数変化量に変換すれば良い
ベクトル𝝎Δ𝑡 をオイラー角 𝛼, 𝛽, 𝛾 と考えて,
と変換できる.
情報メディア実験A (GC41103) 19
GLUTによるOpenGLアプリケーション
本実験テーマではFreeGLUTライブラリによってアプリケーションを構築しています.
GLUT(OpenGL Utility Toolkit)の代替
OpenGLはグラフィック用APIなのでGUI関係は別に実装する必要がある⇒ GLUTなど
実験サンプルはすべてGLUTベースですが,別のを使っても構いません(ただし自己責任で)
実際のコードを見せながら構造を解説します.