物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture...

19
情報メディア実験A (GC41103) 1 物理エンジンを使った アプリケーション開発 筑波大学情報学群 情報メディア創成学類 藤澤誠

Transcript of 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture...

Page 1: 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture › ... · 物理シミュレーションエンジンを利用した アプリケーションが作れるようになる

情報メディア実験A (GC41103) 1

物理エンジンを使ったアプリケーション開発

筑波大学情報学群情報メディア創成学類

藤澤誠

Page 2: 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture › ... · 物理シミュレーションエンジンを利用した アプリケーションが作れるようになる

情報メディア実験A (GC41103) 2

実験の目的

物理シミュレーションエンジンを利用したアプリケーションが作れるようになる

教員による説明回+講義ページの説明を理解して練習問題を解く(実装する)

物理エンジンを用いた簡単なアプリケーションを作成

Page 3: 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture › ... · 物理シミュレーションエンジンを利用した アプリケーションが作れるようになる

情報メディア実験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はレポート作成回

Page 4: 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture › ... · 物理シミュレーションエンジンを利用した アプリケーションが作れるようになる

情報メディア実験A (GC41103) 4

物理シミュレーションとは?

物体の物理運動をリアルに再現するための手法

質量・速度・摩擦・風といったものを物理法則に基づきシミュレーション

Page 5: 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture › ... · 物理シミュレーションエンジンを利用した アプリケーションが作れるようになる

情報メディア実験A (GC41103) 5

物理エンジンで使う数学

ニュートンの運動方程式

𝑭 = 𝑚𝒂力[N] =質量[kg] ×加速度[m/s2 ]

• 物体に力を加えたときにどれぐらい加速するかが分かる

• 物体を描画するときに必要なのは位置𝒙

Page 6: 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture › ... · 物理シミュレーションエンジンを利用した アプリケーションが作れるようになる

情報メディア実験A (GC41103) 6

物理エンジンで使う数学

ニュートンの運動方程式

𝑭 = 𝑚 ሷ𝒙

ሷ𝒙 ∶ 𝒙の時間2階微分(𝑑2𝒙

𝑑𝑡2)

ሷ𝒙 =𝑑 ሶ𝒙

𝑑𝑡=𝑑𝒗

𝑑𝑡, ሶ𝒙 = 𝒗 =

𝑑𝒙

𝑑𝑡

1階微分×2に分解

Page 7: 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture › ... · 物理シミュレーションエンジンを利用した アプリケーションが作れるようになる

情報メディア実験A (GC41103) 7

物理エンジンで使う数学

時間積分の離散化

𝒗(𝑡) =𝑑𝒙

𝑑𝑡=

𝑑𝑥

𝑑𝑡,𝑑𝑦

𝑑𝑡,𝑑𝑧

𝑑𝑡

𝒙 𝑡 + Δ𝑡 = 𝒙 𝑡 + 𝛥𝒙

位置𝒙の時間変化

Page 8: 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture › ... · 物理シミュレーションエンジンを利用した アプリケーションが作れるようになる

情報メディア実験A (GC41103) 8

物理エンジンで使う数学

時間積分の離散化

𝒗(𝑡) =𝑑𝒙

𝑑𝑡=

𝑑𝑥

𝑑𝑡,𝑑𝑦

𝑑𝑡,𝑑𝑧

𝑑𝑡

位置𝒙の時間変化

𝒙 𝑡 + Δ𝑡 = 𝒙 𝑡 + 𝛥𝒙

Page 9: 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture › ... · 物理シミュレーションエンジンを利用した アプリケーションが作れるようになる

情報メディア実験A (GC41103) 9

物理エンジンで使う数学

時間積分の離散化

𝛥𝒙 = නt

𝑡+𝛥𝑡

𝒗 𝑡 𝑑𝑡

速度が𝑡から𝑡 + Δ𝑡の間一定の値だと仮定

𝒙 𝑡 + Δ𝑡 = 𝒙 𝑡 + 𝒗(𝑡)𝛥𝑡 :前進オイラー法

Page 10: 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture › ... · 物理シミュレーションエンジンを利用した アプリケーションが作れるようになる

情報メディア実験A (GC41103) 10

物理エンジンで使う数学

ここまでのまとめ

物体を動かすためには力Fを与える

Fから運動方程式で加速度,加速度から前進オイラー法で速度⇒位置と計算

時間ステップ幅Δ𝑡を与える必要がある

精度はΔ𝑡が小さいほど良くなる(計算時間は大きくなる)

Page 11: 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture › ... · 物理シミュレーションエンジンを利用した アプリケーションが作れるようになる

情報メディア実験A (GC41103) 11

物理エンジンで使う数学

行列を使った回転の表現2次元の回転⇒角度𝜃で表現可能

𝑹 =cos 𝜃 − sin 𝜃sin 𝜃 cos 𝜃

𝒙′ = 𝑹𝒙

𝒙

𝒙′

𝜃

Page 12: 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture › ... · 物理シミュレーションエンジンを利用した アプリケーションが作れるようになる

情報メディア実験A (GC41103) 12

物理エンジンで使う数学

行列を使った回転の表現3次元の回転⇒?

オイラー角𝑥, 𝑦, 𝑧軸周りの回転角 𝛼, 𝛽, 𝛾で回転を表現

それぞれに回転行列𝑅𝑥, 𝑅𝑦, 𝑅𝑧があり,それを合成することで1つの行列で回転を表現

計算が大変,1つの回転に9つの要素が必要

Page 13: 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture › ... · 物理シミュレーションエンジンを利用した アプリケーションが作れるようになる

情報メディア実験A (GC41103) 13

物理エンジンで使う数学

四元数実数部(スカラー部)1つ,虚数部(ベクトル部)3つを持つ4次元数

ベクトル部を回転軸,スカラー部を回転角と考えると任意の回転を表現可能

𝒒 = 𝒗, 𝑠 = 𝑖𝑣𝑥 + 𝑗𝑣𝑦 + 𝑘𝑣𝑧 + 𝑠

𝒒 = 𝑥 sin𝜃

2, 𝑦 sin

𝜃

2, 𝑧 sin

𝜃

2, cos

𝜃

2

ベクトル部 スカラー部

Page 14: 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture › ... · 物理シミュレーションエンジンを利用した アプリケーションが作れるようになる

情報メディア実験A (GC41103) 14

物理エンジンで使う数学

四元数を使った回転の表現

四元数で覚えておくこと

単位四元数

逆回転を表す四元数(共役四元数)

回転行列と相互変換可能

𝒙′ = 𝒒 𝒙, 0 𝒒−1

𝒒 = −𝒗, 𝑠

𝒒 = 0, 0, 0, 1

Page 15: 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture › ... · 物理シミュレーションエンジンを利用した アプリケーションが作れるようになる

情報メディア実験A (GC41103) 15

物理エンジンで使う数学

四元数𝒒 = 𝑣𝑥 , 𝑣𝑦 , 𝑣𝑧 , 𝑠 から回転行列への変換

ほとんどの物理エンジンは四元数を扱うクラス(bulletだとbtQuaternion)で姿勢等を指定できるが,描画側(OpenGL)は回転行列を使っている

⇒ 回転行列への変換が必要となる

Page 16: 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture › ... · 物理シミュレーションエンジンを利用した アプリケーションが作れるようになる

情報メディア実験A (GC41103) 16

物理エンジンで使う数学

ニュートンの運動方程式(回転版)

角速度𝝎は角度𝜃or四元数𝒒の時間微分

慣性テンソルは回転版質量のようなもの

回転のしにくさを表す

同じ質量でも形状やまわす軸でまわしやすさは変わる

物理エンジンにはこれを計算するための関数が用意されている

𝑻 = 𝐼 ሶ𝝎トルク[N・m] = 慣性テンソル×角加速度[rad/s2 ]

Page 17: 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture › ... · 物理シミュレーションエンジンを利用した アプリケーションが作れるようになる

情報メディア実験A (GC41103) 17

物理エンジンで使う数学

回転版の前進オイラー法(四元数使用)

𝝎 =𝜕𝜽

𝜕𝑡, ሶ𝝎 =

𝜕𝝎

𝜕𝑡

並進運動版 ∶ 𝒙 𝑡 + Δ𝑡 = 𝒙 𝑡 + 𝒗(𝑡)𝛥𝑡

𝒒 𝑡 + Δt = 𝒒𝑤𝒒 𝑡

𝝎 𝑡 + Δ𝑡 = 𝝎 𝑡 + ሶ𝝎 𝑡 Δt

角度𝜽を四元数𝒒にして離散化

Page 18: 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture › ... · 物理シミュレーションエンジンを利用した アプリケーションが作れるようになる

情報メディア実験A (GC41103) 18

物理エンジンで使う数学

1ステップあたりの姿勢変化𝒒𝑤について

1ステップあたりの姿勢変化量 : 𝝎Δ𝑡

⇒ これを四元数変化量に変換すれば良い

ベクトル𝝎Δ𝑡 をオイラー角 𝛼, 𝛽, 𝛾 と考えて,

と変換できる.

Page 19: 物理エンジンを使った アプリケーション開発 › ~fujisawa.makoto.fu › lecture › ... · 物理シミュレーションエンジンを利用した アプリケーションが作れるようになる

情報メディア実験A (GC41103) 19

GLUTによるOpenGLアプリケーション

本実験テーマではFreeGLUTライブラリによってアプリケーションを構築しています.

GLUT(OpenGL Utility Toolkit)の代替

OpenGLはグラフィック用APIなのでGUI関係は別に実装する必要がある⇒ GLUTなど

実験サンプルはすべてGLUTベースですが,別のを使っても構いません(ただし自己責任で)

実際のコードを見せながら構造を解説します.