情報メディア実験 物理エンジンを使ったアプリケーション開発

お知らせ

テーマ概要

担当教員


説明ページ

本Webページを含めた配付資料,サンプルプログラムなどはすべてgithubのiml_physicsに置いてある.

C++の教材

本実験で用いるBullet PhysicsライブラリはC++で書かれたオープンソースライブラリである. 実験で用いるサンプルプログラムではC++のクラスなどは使わないようにしているので, C言語(とOpenGL)が分かっていれば理解できるでしょう. しかし,Bulletを深く理解するためにはC++(特にクラスについて)が分かっている必要がある. C++の参考資料(PDF)を以下に置くので,必要に応じて参照すること.

また,Visual Studioなどほとんどの開発環境で標準的に使えるSTLという便利なライブラリがある. これを使うと便利なので,簡単な解説資料を以下においたので,是非使ってみてほしい

なお,これらの資料は私が学生の時に研究室の輪講用に作成したものを少しだけ修正したものである (なので日本語がおかしかったり,間違っていたらごめんなさい).

ガイダンス資料

物理エンジンについて

内容 資料
1.物理シミュレーションとは? 物理シミュレーションの基礎的な理論(物理エンジンを使うために必要となる理論的な基礎)について学ぶ. 説明スライド(PDF)
説明ページ
サンプルプログラム (MD5:f8959e90d8cc0043167395a5dbca63a8)
2.物理エンジンとは? オープンソースの物理エンジン"Bullet Physics Library"(以下Bullet)について学び, Bulletライブラリのビルド,Bulletを使った単純な剛体シミュレーションプログラムを作成する. 説明スライド(PDF)
説明ページ
3.多数の剛体間の衝突判定,衝突応答 物理エンジンの重要な機能である衝突判定,衝突応答について, 多数の剛体が存在する場合でも高速に処理するための方法を学ぶ. 説明スライド(PDF)
説明ページ1(衝突検出)
説明ページ2(衝突応答)
サンプルプログラム2 (MD5:b424344bcf5c0004c823dda8c0b82b55)
4.剛体間リンク 剛体同士の位置,姿勢関係に拘束条件を加えることでジョイント構造を持たせることができる. この剛体間リンクの理論とBulletで設定できるジョイントの種類について学ぶ. 説明スライド(PDF)
説明ページ
補足:視点の追従
5.3Dモデル読み込みと弾性体 Bulletでは剛体だけでなく,ゴムや布ような変形する物体(弾性体)も扱うことができる. そのためのバックグラウンドになっている技術を学ぶとともに, 三角形メッシュによる形状の読み込みについても学び, 弾性体を使ったプログラムを作成する. 説明スライド(PDF)
説明ページ1(3Dモデル読み込み)
説明ページ2(弾性体)
補足:Blenderによるポリゴン数削減
補足など - 補足:複合形状
補足:文字列描画

ソースコードに関する注意事項

ファイルのMD5によるチェック

実習室のPCではダウンロードしたファイルが不完全であることがある (この場合,解凍時にエラーが出るか,ビルドしようとするとファイルが足りないといわれる). サンプルファイルの下にMD5チェックサムを載せておいた. WindowsだとNirSoftのHashMyFilesというフリーソフトで ファイルのMD5を確認できるので不安な人はこれでダウンロードしたファイルのMD5を調べ,上記の値と一致するかをチェックすること.

dllファイルが見つかりません

Visual Studioでビルドしたプログラムを実行しようとすると「*.dllファイルが見つかりません」といわれ実行できない場合, プロジェクトファイル(*.vcxproj)があるフォルダにDebugもしくはReleaseという名前のフォルダがあるので, その中に,bin/*.dllファイルをコピーする.

参考書,参考Webページ