ベストアンサー
[数学での必要な分野] 数学の「解析学」と言う分野を勉強して下さい(特にベクトル解析学)。 <ベクトル解析学> 中学の数学から、連立方程式と言う物を学びましたよね(x 、y とかが出てくる、あれです)。 また、高校数学で、微分と積分とベクトルを学びましたよね。 ベクトル解析学は、連立方程式に、微分の式や、積分の式が混ざった物です。 さらに、x 、y の変数が、ベクトルになった物です。 <級数学> 高校数学で、数列を学びましたよね。 その延長線上で、「級数」があります。 ベクトル解析の解を求める際に、級数を使うこともありますので、フーリエ級数等の級数学も学んでおいたほうが良いです。 <ベクトル解析がわかると可能になること> ベクトル解析では、3次元空間のエネルギーの分布が計算することが可能です。 例えば、金属の物体に、電気を加えると、金属物体内の電気分布や、金属から放射される電波による空間の分布を計算することが可能です。 ビルにぶつかる風の流れも計算することが可能です。 水面の石を落とした時に、水が跳ね上がる現象をシュミレーションすることも可能です。 [物理での必要な分野] 物理では、「力学」と言う分野を学んで下さい。 力学とは、重力や加速度等の運動法則とか、仕事とエネルギーとか、そういった分野です。 取り合えず、高校物理の力学がわかれば、何とかなります。 と言いますのは、物理や工学の世界では、人間の言葉に該当するのが、数学です。 よって、前述の数学をしっかり学んでおけば、必要に応じて、物理シュミレーションに必要な物理分野は、独学でも学べます。 なお、前述の、水や風の動きの物理式(熱力学、流体力学等を含む)は、ベクトル解析学による方程式で書かれています。 よって、数学の解析学をしっかり学ばれた後、物理を学んで下さい。 [コンピューターで必要な知識] <数学の解析学におけるコンピューター処理> ベクトル解析による方程式の解を求めるには、数学的な手法(鉛筆でノートに書いて計算する方法)では、解が求まらない場合が多いです。 そこで、コンピューターの手法で、近似的な解を求めます。 よって、まずは、高校数学のレベルの方程式を、プログラミングで解く練習はやって下さい。プログラミング自体の練習も兼ねて。 次に、境界要素法や有限要素法を学んで下さい。 これらは、前述しました3次元空間の場の分布を解析する手法です。 コンピューターの分野なのですが、入門書は、大きな本屋の物理の本を売っているコーナーで売られている場合が多いです。 <分散システム> 物理シュミレーションは、処理時間が膨大にかかります。 よって、分散システムと言う技術を利用して、計算処理を分担さると良いです。 言語がC++ならば、CORBA か、COM/DCOM と言う分散システムがあります。 Java ならば、CORBA か、Javaビーンズ。 C# ならば、WCF があります。 CORBA は、UNIX でも、WindowsでもOKです。 COM/DCOM は、Windows のみ限定。 WCF なら、サーバーは、Windows 限定ですが、標準化された技術を使うので、クライアントは特に限定されません(クラウドコンピューティングに対応)。 なお、分散システムは、言い換えるとサーバー作成用の技術のことですので、これを知っていれば通信式のゲームも作れます。 [ゲームの利用] 物理エンジンは、処理時間がかかるので、ゲーム中の間に入れるムービーで利用すると良いです(計算結果をムービーに展開)。 上記までの説明の通り、かなり難しいので、例えば物理の研究チームが作った物理エンジンを、ゲーム会社に売り込んだりしています。 個人的意見としては、物理エンジンまで考えなくても、簡易的な計算でも良いと思います。 ゲームは非現実な世界ですので、例えばキャラクターがジャンプして着地する軌道は、放物線では無く、三角の軌道でも良いです。 キャラクターのアクションで、それっぽくすれば、「このゲームは面白くするために、わざと変なジャンプ(三角の軌道)にしているのだな」と言う風になります。 ゲーム目的ならば、以下を参照。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1460774184 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1459569869 上記参照先で、B-スプライン曲線がどうのと言ったのは、その時の質問者さんが、大学生なので、可能であればチャレンジを勧めた程度です。 取りあえずは、高校の数学/物理がわかれば、3Dゲームは作れます。 むしろ、プログラミングの技術のほうが大変です。 なお、2D ならば、数学/物理の負担が軽いです(前述の参照先の通り)。 取り合えずは、まず、作れそうな物からやっていったほうが良いと思います。 2Dゲームを作るとか、又は、まずは簡単な範囲の物理シュミレーションを作るとか。 取り合えずと言っても、最初は大変です。 まずは、作れそうな物から始めて、プログラミング自体に慣れ親しんで下さい。
この回答はいかがでしたか? リアクションしてみよう
質問者からのお礼コメント
詳しい情報をありがとうございます。 やっぱり何事にも数学が必要なようですね! 少し難しそうな感じもしますが飽きない程度にゆっくりと勉強していこうと思います。 まあ、確かに作りたいのは所詮ゲームですが 今、ゲームを作って売りたいという訳ではないので物理演算エンジンの作り方を知ってれば後々ゲームエンジンだとかにチャレンジする時に楽かなと思いまして... 他のみなさんも忙しいなか回答をいただいて本当に感謝してます。
お礼日時:2011/4/24 14:25
その他の回答(2件)
turibaka_4さん。 kuroneko_nさんの言われるとおり、力学系全般はこなせる必要があります。あと流体力学とかもね。 必要な数学知識は、力学系で出てくる数式が理解できるレベルが必要ですって事です。 オープンソースの物理演算エンジンならソースコードを見れますので、それも勉強になると思うので紹介します。 「Box2D - Home」 2Dの剛体力学エンジン http://www.box2d.org/ 「Game Physics Simulation」 3Dの剛体・軟体力学エンジン http://bulletphysics.org/wordpress/ 「Bullet Physics Japanese Manual」 日本語マニュアル http://bulletjpn.web.fc2.com/ 「Wiki for Springhead」 国内のリアルタイム剛体運動シミュレータ http://springhead.info/wiki/ 「DynaMo - Dynamic Motion library」 3Dの剛体力学エンジン http://home.iae.nl/users/starcat/dynamo/ 「Open Dynamics Engine - home」 3Dの剛体力学エンジン http://ode.org/
あれは科学計算の塊みたいなものですから。材料力学、構造力学、熱力学、航空力学とかそっちじゃないでしょうかね。 つまりリアルで起こる現象を数値化して計算できるようにしたもの。 ゲームで使っているのはそれらをよりそれらしく計算させて見せる技術ですね。 実際、詳細な計算を行うのであればスーパーコンピューターを使うことになってしまいますし、それらの結果が果たして現実と同じかといわれるとやはり差異がありますので、現実に車や航空機などそういったもののシュミレーションをして現実に物をぶつけたりして確認した上で、シュミレーションとどれだけ現象が乖離しているかを調べ、その原因は何かどうすれば、より現実に近づくのかということも今、現在もやってどんどん改良を加えています。 まあ とりあえずいろいろな力学とかその辺は学んでおいて損はないかと。