15

この質問を書いてから数か月が経ちました。それ以来、「生の」C++ D3D、The Ogre および Irrlicht グラフィック エンジン、そして最近では Microsoft XNA をいじりました。私はいくつかの 2D ゲーム (主にテトリス、アストロイドなどの古いもののレプリカ) を作成し、上記のテクノロジで 3D の世界に (非常に) 小さな一歩を踏み出しました。

実際のゲーム ロジックを作成し、オブジェクトの相互作用を抽象化して、さまざまな形式のコントロール (コンピューター、プレーヤー、ネットワーク経由など) をプラグインできるようにし、スレッド化やその他の使用する操作を行うことに問題はほとんどありません。日々の仕事から - それは私にとって完全に自然に感じます. 私は HLSL とパーティクル エフェクト (非常に基本的なもの) をほとんどいじりませんでした。

しかし、行列とベクトルを含む 3D 数学 (および Ogre3D のクォータニオン(?) は本当に必要なのでしょうか?) ... 本当に理解できます。例に従うことができます (たとえば、オライリーから購入した Learning XNA 3.0 の本は、すばらしい本です)そして、例で何かが起こる理由方法を理解していますが、自分で何かをしようとすると、このタイプの数学の理解が不足していて、実際にそれを取得して機能させることができないと感じます自分。

そこで、3D 数学 (主に) を学ぶためのリソースと、シェーダー/パーティクル エフェクトの本を探しています。私は教育的であり、私の頭をはるかに超えるベクトル数学に関する医師の論文のようなものよりもゆっくりとしたリソースを好みます. 理想的なリソースは、D3D ですべてを実証するものです。

4

5 に答える 5

24

わかりました、行列/ベクトル計算の簡単なコース:

行列は、次のような長方形のグリッドに並べられた数値のコレクションです。

[ 0,  1,  2 ]
[ 2,  3,  5 ]
[ 2,  1,  3 ]
[ 0,  0,  1 ]

上記の行列には 4 行 3 列があり、4 x 3 の行列です。ベクトルは、1 行 (行ベクトル) または 1 列 (列ベクトル) の行列です。正規数は、行列と対比するためにスカラーと呼ばれます。

行列に大文字を使用し、スカラーに小文字を使用することも一般的です。

行列を使った基本的な計算はできますが、いくつか条件があります。

添加

次元が同じであれば、行列を追加できます。したがって、2x2 マトリックスは 2x2 マトリックスに追加できますが、3x5 マトリックスには追加できません。

[ 1,  2 ] + [ 2,  5 ] = [ 3,  7 ]
[ 2,  4 ]   [ 0,  3 ]   [ 2,  7 ]

加算により、各セルの各数値が他のマトリックスの同じ位置の数値に加算されることがわかります。

行列乗算

行列は乗算できますが、これはもう少し複雑です。行列 A と行列 B を乗算するには、行列 A と行列 B の各列の各行の数値を乗算する必要があります。つまり、axb 行列と acxd 行列を乗算する場合、b と c は等しくなければならず、結果の行列は次のとおりです。

[1,2,3] x [4,6] = [1x4+2x2+3x2, 1x6+2x1+3x3 ] = [4+4+6,  6+2+9  ] = [14, 20]
[1,4,5]   [2,1]   [1x4+4x2+5x2, 1x6+4x1+5x3 ]   [4+8+10, 6+4+15 ]   [22, 25]
          [2,3] 

ご覧のとおり、マトリックスでは、A x B は B x A とは異なります。

行列スカラー乗算

行列にスカラーを掛けることができます。その場合、各セルにその数値が乗算されます。

3 x [1,2] = [ 3, 6]
    [4,7]   [12,21]

行列の反転 行列除算はできませんが、A x A-inv がその主対角を除いてすべてゼロの行列になるような行列の反転を作成できます。

[ 1, 0, 0 ]
[ 0, 1, 0 ]
[ 0, 0, 1 ]

行列の反転は正方行列でのみ行うことができ、結果を必要としない複雑な作業です。

行列 A から始めます。

    [ 1, 2, 3 ]
A = [ 1, 3, 4 ]
    [ 2, 5, 1 ]

3 つの列を追加し、それらに単位行列を入力します。

[ 1, 2, 3, 1, 0, 0 ]
[ 1, 3, 4, 0, 1, 0 ]
[ 2, 5, 1, 0, 0, 1 ]

それでは、最初の列から始めましょう。最初の行を除いて最初の列にゼロのみが含まれるように、最初の行を他の行から減算する必要があります。これを行うには、最初の行を 2 番目の行から 1 回、3 番目の行から 2 回引きます。

[ 1, 2, 3, 1, 0, 0 ]
[ 0, 1, 1,-1, 1, 0 ]
[ 0, 1,-5,-2, 0, 1 ]

これを 2 番目の列で繰り返します (最初の行から 2 回、3 番目の行から 1 回)。

[ 1, 0, 1, 3,-2, 0 ]
[ 0, 1, 1,-1, 1, 0 ]
[ 0, 0,-6,-1,-1, 1 ]

3 番目の列については、少し問題があります。ピボット番号は 1 ではなく -6 です。しかし、行全体に -1/6 を掛けることでこれを解決できます。

[ 1, 0, 1,   3,  -2,    0 ]
[ 0, 1, 1,  -1,   1,    0 ]
[ 0, 0, 1, 1/6, 1/6, -1/6 ]

これで、1 行目と 2 行目から 3 行目を引くことができます。

[ 1, 0, 0, 17/6,-13/6,  1/6 ]
[ 0, 1, 0, -7/6,  5/6,  1/6 ]
[ 0, 0, 1,  1/6,  1/6, -1/6 ]

これで A の逆数が得られました。

[ 17/6,-13/6,  1/6 ]
[ -7/6,  5/6,  1/6 ]
[  1/6,  1/6, -1/6 ]

これは次のように記述できます。

      [ 17,-13,  1 ]
1/6 * [ -7,  5,  1 ]
      [  1,  1, -1 ]



    [ 1, 2, 3 ]   [ 17,-13,  1 ]                [ 6, 0, 0 ]    [ 1, 0, 0 ]
A = [ 1, 3, 4 ] x [ -7,  5,  1 ] x 1/6  = 1/6 x [ 0, 6, 0 ] =  [ 0, 1, 0 ]
    [ 2, 5, 1 ]   [  1,  1, -1 ]                [ 0, 0, 6 ]    [ 0, 0, 1 ]

これが少し役立つことを願っています。

于 2009-01-28T12:45:52.757 に答える
9

Fredrik - 簡単に言えば、行列とベクトルは 3D 作業の数学的基盤であるため、それらを学ぶ必要があります。

線形代数は確かに博士レベルの数学ではありませんが、少し手間がかかります。始めるには、 Amazon でこの本をチェックしてください。まさにあなたが探しているもののようです。私はこの特定の本を読んだことがありません (私が大学院で使用した本は少し古くなっています) が、特に評価が高いです。

もう 1 つ: この作業を行うさまざまな 3D モデリング エンジンが市場に出回っています。これらの中で最も有名なのは、間違いなくValveのSource Engineです。このエンジン (HalfLife2 および CounterStrike 用に構築) を使用して、3D モデリングのレベルを超えて作業しながら、かなり洗練されたゲームを作成できます。実際、Steam ネットワークで最も人気のあるゲームの 1 つであるGarry の modは、Steam Engine でできるクールなことで遊んでいる人から始まりました。興味がある場合は、Source Engine を使用して独自の世界を構築するためのチュートリアルを提供するサイトへのリンクを次に示します。

于 2009-01-28T12:37:48.017 に答える
4

あなたは間違いなく線形代数を学ぶ必要があります。MITはYouTubeでクラス全体を無料でリリースしました。ここから始めることができます。それほど難しいことではありません、信じてください!楽しむ ;)

于 2009-02-02T22:16:26.997 に答える
2

Mathematics for Computer Graphics Applications」は、入門レベルの教科書であり、3D プログラミングのために知っておく必要があるすべての基本的な数学 (主に行列とベクトル) に対する教室での適切なアプローチを取ります。

クォータニオンに関する注意: クォータニオンは、特定のアプリケーションに非常に役立ちます。SLERP (Spherical Linear intERPolation) は、(とりわけ) 滑らかで魅力的なカメラの動きを生成するのに非常に便利です。SLERP は、行列を処理するのは面倒 (コストがかかる) ですが、Quaternions を使用すると安価で簡単です。それらを完全に理解していなくても、それらを使用して愛することを学びましょう。

于 2009-02-02T22:02:47.273 に答える
1

特にベクトルについては、線形代数の入門テキストまたはコースでかなり迅速に理解できるはずです。

于 2009-01-28T12:04:47.207 に答える