簡単な質問:すべてのゲームプログラマが成功するには、どのような数学をしっかりと把握する必要がありますか?
ゲームプログラミングのニッチ領域で数学や何かをレンダリングすること、具体的にはゲームプログラマーが知っておくべきことについては特に話していません。
注:正解は1つもないので、この質問(およびその回答)はコミュニティwikiです。
また、派手なラテックス数学の方程式が必要な場合は、http://mathurl.com/を使用してください。
簡単な質問:すべてのゲームプログラマが成功するには、どのような数学をしっかりと把握する必要がありますか?
ゲームプログラミングのニッチ領域で数学や何かをレンダリングすること、具体的にはゲームプログラマーが知っておくべきことについては特に話していません。
注:正解は1つもないので、この質問(およびその回答)はコミュニティwikiです。
また、派手なラテックス数学の方程式が必要な場合は、http://mathurl.com/を使用してください。
回答:
役に立つ数学には他にも多くの形式がありますが、最低限これらを知っておく必要があります。
これらは非常に基本的なものですが、これらを知らなければ、ゲーム開発者はもちろんのことプログラマーになる機会さえありません。
ゲーム世界のオブジェクトはベクトルで表されます。ベクトルは、オブジェクトの位置、視線方向、速度などを表します。ドット積、クロス積、ベクトル正規化などのベクトル数学計算は不可欠です。
ゲームオブジェクトを移動するにはどうすればよいですか?初心者は言うかもしれません:
「!私が知っている私はちょうどやります:」object.position.x++
。
ダメダメダメ。ベクトル計算を使用する必要があります。オブジェクトには、オブジェクトの移動に使用できる位置、方向、加速度ベクトルが必要です。あなたが初心者のことをすると、維持できない混乱に巻き込まれ、世界のXYZ軸と整列していない方向にどのように動かすことができますか?
ゲームがクォータニオンを使用する主な理由は、ジンバルロックに悩まされることなく、オイラー角とほぼ同じスペース効率で回転を表すためです。ジンバルロックは、オイラー角がいずれかの軸を中心に90度の回転に達すると開始します。すぐに自由度が失われます。四元数は、4番目の次元を追加することでこの問題に対処します。オイラー角にこだわる場合、1つの軸が最大89度以上回転しないように制限する必要があります。
ゲームで物理反応の数学をプログラミングする場合、物理クラスを取得するのは悪い考えではありません。
物理方程式を知る必要がある理由:
物理エンジン(または物理エンジンが組み込まれているゲームエンジン)を使用している場合、物理についてほとんど知識がなくても大丈夫です。それでも、物理エンジンが適切に動作していないため、いつ手を汚す必要があるかを知ることは非常に良いことです。
ゲーム開発がアート制作と同じようにデータ駆動型である日を夢見ています。私は地平線のどこにもそれを見ていないので、今のところいくつかの数学を知ることが必要であるように見えます。
あなたがそれを適用できる限り、数学はテクニックに似ています。
ここに私が見る重要性の順序があります。
続けることができました。知れば知るほど良くなりますが、たくさんの数学を学んだからといって素晴らしいゲームを作れるというわけではありませんが、それは助けになります。
非常に基本的なものはピタゴラスの定理です。距離式とも呼ばれます。
ここでa
およびb
はc
直角三角形のエッジで、斜辺です。これは、ベクトルの長さを見つけるために、これを行うことを意味します:
興味深いもう1つの注意点は、距離を比較するだけであれば、平方根を取る必要がないことです(比較的コストがかかる場合があります)。そのため、ほとんどのフレームワークには、ベクトルに「距離の2乗」または「長さの2乗」関数があります。
sqrt(V dot V)
その長さです。したがって、2点間の距離は次のsqrt((A-B) dot (A-B))
たとえあなたがThe Graphics Guyでなくても、80%の確率でベクトルとベクトル数学を使用することになります。彼らは私たちの楽しいボロネーゼの玉ねぎです。
しっかり把握+
、-
、*
、と/
。それらがなければ、あなたは完全にめちゃくちゃです。
ええ、ゲームプログラミングはかなり数学に集中する傾向があります。必要な数学は、作業内容によって異なります。もちろん、すべてのプログラミングと同様に、基本的な算術演算は必須です。それ以上:
ジオメトリはグラフィックス作業に不可欠です。画面に物を表示したい場合は、座標系を理解する必要があります。そして、それらを基本的な方向以外に動かしたい場合、サイン、コサイン、ベクトル(基本的なトリガー)をしっかりと把握していなければ、完全に失われます。また、3Dで作業する必要がある場合、ジオメトリとトリガーの要件ははるかに複雑になります。
リモートで現実的な物理学をモデル化する場合は、そのための計算が必要です。(結局、ニュートンが微積分を発明するようになったのです。)
あらゆる種類の確率計算では、異常な量の試行錯誤を行うことなく健全な結果を得るために、統計と確率理論の知識が必要です。
おそらくもっとたくさんありますが、それは私の頭上から思い浮かぶことです。
s=u.t + a.t.t/2
。ただし、初期速度を取得するにはトリガーが必要です(u)。
2 進数および 16進数の番号付けシステム、およびそれらを10進数に/から変換する方法。
一般に生の 2進数を扱う必要はありませんが、ブール変数とビットシフトを必要とするFlag変数に頻繁に使用されます。
Hexはそれほど重要ではありません(0xDEADBEEFを処理したい場合を除きます)が、少なくとも、いつ使用されているのか、そしてその理由を認識したいでしょう。
Boolean
とbinary
混同していると思います。それらがゲームプログラミングに絶対に必要かどうかはわかりません。
ペイオフマトリックスは非常に重要なツールだと思います。ゲームは、興味深いゼロサムフェアプレイバランスに近づくと、より楽しくなることが多く、ペイオフマトリックスは、複雑な場合にそれを定量化するのに役立ちます。このウィキペディアの記事は他のどの記事よりも優れており、次の基本的な必要概念を理解できます。http://en.wikipedia.org/wiki/Normal-form_game
それはあなたが何をしているかによります。
すべてのゲームプログラマは、少なくとも高校の代数を知っている必要があります。つまり:
グラフィックプログラマは次のことを知っている必要があります。
あなたの物理プログラマーは知っておく必要があります:
サインとコサイン(私が会ったプログラマーの50-75%が使用方法を知らなかった)に加えて、魔法のアークタン関数と、それを使用してベクトルの角度を取得する方法を学びます。
atan2
、これは象限処理自体を処理するため必要です。
ゲームを作成するということは、仮想現実に「現実の」生活をもたらすことです。少ないよりも現実の世界/宇宙についてもっとよく知っている方がよい:) ..数学はただの道具です。そして、あなたが計画を立てているなら、あなたも計画で勉強する時間を置かなければなりません。
編集:私はいくつかの誤解を見ました:) ..あなたが支配する必要がある数学の習得のセットは、あなたが説明したい具体的なものに依存すると思います。誰もがすべてを知っているわけではありません。そして、それを行うより良い方法があります。始めにすべてを学ぶのではなく、小さなピース、使用、学習、使用などを学んでください。その後、適切な計画があれば、開発中にそれを行うことができます。