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

お知らせ

テーマ概要

担当教員


スケジュールと実験内容

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

(注) 第##週というのはあくまで目安.自分のペースで実験を進めること.

C++について

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

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

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

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

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

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

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

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

シャドウマッピングについて

サンプルプログラム2ではシャドウマッピングという技術を用いて物体の影をつけている. これはデプスマップテクスチャというテクスチャを用いて影領域を判別しているのだが, このテクスチャの解像度が低いと影の輪郭にシャギー(エリアシング)が発生する. サンプルプログラム2に同封したシャドウマッピングのコード(rx_shadow_gl.h)は実習室のPC(GPUがIntel HD Graphics 4000)上で動作するように作ったので, この解像度がウィンドウ解像度以下に制限される(一部,GL拡張やGLSLなどが使えないため).
自分のPCなどで実行する際にシャドウマップにより高解像度を設定しても大丈夫なものを以下におく.

右クリックでリンク先を保存でダウンロードし,shared/incに置いて,utils.h内でrx_shadow_gl.hの代わりにインクルードすればよい.
また,NVIDIA GeForceやATI RadeonなどのGPUを搭載したPCならば,GLSLを用いたシャドウマップが使えることが多い. この場合は以下のファイルを用いる.

さきほどのものと同様に右クリックでリンク先を保存でダウンロードし,shared/incに置いて,utils.h内でrx_shadow_gl.hの代わりにインクルードすればよい (rx_shaders.hは上書き).

参考書,参考Webページ