この本は、一般的に使用される線形代数と衝突検出ゲームに関する包括的なガイドですが、衝突解決 (物理学) のトピックについては簡単に触れているだけです。この本の構成は次のとおりです。
この本で取り上げられるトピックはすべて、剛体物理エンジンを段階的に構築するために使用されます。最後の 3 章 (14、15、16) では、素粒子物理学、剛体物理学、および軟体物理学 (布) を実装します。高度なトピック、これらのトピックを探索するためのリソース、およびゲームの物理を探索するための追加リソースを簡単に説明する付録が提供されます。
この本のために作成された図の一部は印刷にうまく変換できませんでした。これに対処するために、書籍のすべての図をこのリポジトリに含め、図を https://github.com/gamephysicscookbook/Figures でオンラインで公開しました。
この本の最初の 3 章は、ゲーム開発に必要な基本的な線形代数を教えることに専念しています。すべての概念は数学的な文脈で説明され、すべての概念に対してソース コードが提供され、何かを視覚的に探索できる場合には画像も提供されます。最初の 3 章を通じて、次のデータ構造が作成されます。
vec2
)vec3
)mat2
)mat3
)mat4
)可能な場合、行列演算は一般的な方法で実装されます。たとえば、任意のサイズの 2 つの行列を乗算するコードが提供されています。
この本では次の交差点が取り上げられています。
ポイント | ライン | レイ | 球 | AABB | OBB | 飛行機 | 三角形 | 錐台 | |
---|---|---|---|---|---|---|---|---|---|
ポイント | |||||||||
ライン | |||||||||
レイ | |||||||||
球 | |||||||||
AABB | |||||||||
OBB | |||||||||
飛行機 | |||||||||
三角形 | |||||||||
錐台 |
第 14 章では素朴な素粒子物理学について説明します。この章は、物理ループの設定と物理ループの一般的な形式の検討への入門として意図されています。第 15 章は最も興味深い章で、基本的な剛体物理エンジンが実装されています。基本エンジンは、指向性のあるボックスと球をサポートしており、スタッキングを機能させることができますが、直接はサポートされていません。第 16 章では、スプリングと、スプリングを使用して軟体物理学を実装する方法について説明します。この本の最後のデモは、ソフト ボディ、布物理学のデモです。
これが私の最初の本で、執筆プロセスについて多くのことを学びました。おそらく計画についてもさらに詳しくなります。以下は、この本を執筆中に私が発見した、適切に計画していなかった事柄のリストです。
クォータニオン: クォータニオンを持つことは必須です。私はオイラー回転と回転行列を使用して本を書くつもりでした。これは機能しましたが、クォータニオンにアクセスできれば作業ははるかに簡単になったでしょう。
平面: 平面の交差はブール値を返すべきではなく、交差を後ろ、交差、前に分類する必要があります。できれば、交差点が前または後ろにある場合は、距離の表示を返す必要があります。これは、錐台のカリングを行うときに非常に便利です。錐台についてどこまで詳しく書けばいいのか分からなかったので、単純なブール交差について書くことにしました。
レイキャスト: 最初からレイキャスト結果を返すようにレイキャストを書くべきでした。後で戻ってレイキャスティング API を書き直す必要があったため、テキストで表現するのは予想よりも複雑であることが判明しました。この背後にある秘訣は、最初は物事をシンプルにし、必要な場合にのみ複雑にすることでした。
ソースコードの物理実装にはさまざまな問題があります。これらの問題は、この本の物理部分を 3 つの章に要約する必要があったという事実から生じています。堅牢な剛体物理システムを作成するために必要なすべてをカバーするには時間が足りませんでした。このエンジンの最大の問題は、アービターが存在しないという事実です。
アービターがなければ、シーケンシャル インパルス ソルバーを構築することはできません。これにより、かなり必要最低限の単純なインパルス ソルバーが残ります。問題は、インパルスがフレームごとのコンタクトごとに解決されることです。過剰な滑りの原因となります。シーケンシャル インパルスの欠如を線形投影と積極的なフリシトン バイアスで補いました。古い物理エンジンは、問題を隠すために強い手のスリープに依存することで、同様のことを行っています。言うまでもなく、スリープは実装されていません。
この本の第 2 版を書く機会があれば、2 次元衝突に関する章 (第 4 章、第 5 章、第 6 章) を削除し、シーン管理の章のページ数を減らすつもりです。追加のページを使用して次のトピックを取り上げる予定です。