# 「リアルな動きのための ゲーム物理プログラミング」のサンプルについて

このHTMLドキュメントは、書籍「リアルな動きのための ゲーム物理プログラミング」（ISBN：978-4-8399-3163-6）のサンプルについて説明し ています。

各サンプルのソリューションファイル(.sln)やプロジェクトファイル(.csproj)は以下の場所に収録しています。

対応する章や節 | サンプルのフォルダやファイル | 概要
--- | --- | ---
2.2.1 | Farseer Physics 2.1.1 XNA\FarseerPhysicsXNA.sln | サンプルで参照しているオープンソースの物理エンジンライブラリ「Farseer Engine Physics 2.1.1」
2.2.2 | JigLibX\JigLibX\JigLibX.csproj | サンプルで参照しているオープンソースの物理エンジンライブラリ「JigLibX 0.3.1」のプロジェクト
3.1.4 | FarseerPhysicsTutorial1\FarseerPhysicsTutorial.sln | Farseer Engine Physicsのチュートリアル1
3.1.5 | FarseerPhysicsTutorial2\FarseerPhysicsTutorial2.sln | Farseer Engine Physicsのチュートリアル2
3.2.4 | JigLibXTutorial\JigLibXTutorial1.sln | JigLibXのチュートリアル1
3.2.6 | JigLibXTutorial\JigLibXTutorial2.sln | JigLibXのチュートリアル2
3.2.10 | JigLibXTutorial\JigLibXTutorial3.sln | JigLibXのチュートリアル3
3.2.11 | JigLibXTutorial\JigLibXTutorial4.sln | JigLibXのチュートリアル4
3.2.12 | JigLibXTutorial\JigLibXTutorial5.sln | JigLibXのチュートリアル5
4 | MathSamples\MathSamples.sln | 数学ライブラリのサンプル（4章の各プロジェクトを含む）
4.2 | MathSamples\MathSample1\MathSample1.csproj | ベクトルのサンプルプロジェクト
4.3 | MathSamples\MathSample2\MathSample2.csproj | 行列のサンプルプロジェクト
4.4 | MathSamples\MathSample3\MathSample3.csproj | クォータニオンのサンプルプロジェクト
4.5 | MathSamples\MathSample4\MathSample4.csproj | デュアルクォータニオンのサンプルプロジェクト
4 | XELF.Framework\XELF.Framework.csproj | 数学ライブラリのプロジェクト(単体/Windows用)
4 | XELF.Framework\XELF.Xna.csproj | 数学ライブラリのプロジェクト(XNA/Windows用)
4 | XELF.Framework\XELF.Xna.Xbox.csproj | 数学ライブラリのプロジェクト(XNA/Xbox 360用)
5.1 | RigidBody\RigidBody.sln | 剛体運動のサンプル
6.1 | Sphynx\Sphynx.sln | Farsser Physics Engineによる物理を用いた2Dゲーム「Sphynx」
7.1 | Hair.JigLibX\Hair.JigLibX.sln | JigLibXによる「髪の毛」の表現
8.3 | Cloth1.StillDesign\Cloth1.sln | PhysXによる「なびく布」の表現
8.3 | Cloth2.eyecm\Cloth2.sln | PhysXによる「服と胴」の表現

## 付属のオープンソースの物理エンジンのソースコードについて

以下のオープンソースのソースコードは、以下の各ライセンスに基づいて収録しています 。必要に応じて各ライブラリの公式サイトにて提供される最新版をお使いください。
また、ソースコードを収録していないものついては、DLLの参照でビルドするように設定しています。必要に応じて、該当ライブラリの公式サイトにて提供されるソースコードや最新版DLLをお使いください。

物理エンジンライブラリ名 | 該当するライセンス
--- | ---
Farseer Physics Engine 2.1.1 | Microsoft Permissive License (Ms-PL) v1.1
JigLibX 0.3.1 | Microsoft Public License (Ms-PL)

## サンプル「Cloth1」についての補足

「Cloth1」サンプルでは、XNA Game Studio 3.1対応するバージョンの「StillDesign.PhysX.Net」のDLLを作成して使っています。「StillDesign.PhysX.Net」のDLLをソースコードからビルドする場合には、ソリューション構成に「Release XNA 3.1」（デバッグ用は「Debug XNA 3.1」）のある最近のものをレポジトリからチェックアウトしてご利用ください。

また、サンプル「Cloth1」では、本書執筆時点よりも新しい「StillDesign.PhysX.Net」のバージョンを使うように変更しました。そのため、本書270ページの「ClothGame1.cs」の

> // 物理演算されたメッシュのデータを受け取るバッファの設定
> clothDescription.MeshData.AllocatePositions<vector3>(mesh.Points.Length);
> clothDescription.MeshData.AllocateIndices<int>(mesh.Indices.Length);
> clothDescription.MeshData.MaximumVertices = mesh.Points.Length;
> clothDescription.MeshData.MaximumIndices = mesh.Indices.Length;

の部分を次のように、新たな処理を加えています。

> // 物理演算されたメッシュのデータを受け取るバッファの設定
> clothDescription.MeshData.AllocatePositions<vector3>(mesh.Points.Length);
> clothDescription.MeshData.AllocateIndices<int>(mesh.Indices.Length);
> clothDescription.MeshData.MaximumVertices = mesh.Points.Length;
> clothDescription.MeshData.MaximumIndices = mesh.Indices.Length;
> // （StillDesign.PhysX.Netの新バージョンに対応するための追加の処理）
> clothDescription.MeshData.NumberOfVertices = mesh.Points.Length;
> clothDescription.MeshData.NumberOfIndices = mesh.Indices.Length;

- 2009年10月1日 初版第1刷発行
- 著者：XELF
- 発行所：株式会社 毎日コミュニケーションズ

ダウンロード可能なプログラムコードの使用により発生したいかなる損失や損害、その他いかなる事態についても、弊社および著作権者、各ソフトウェアの製作・提供 者は責任を負いかねます。