ページ 11

3Dゲーム製作について

Posted: 2010年6月27日(日) 09:16
by dic
色々やりたいことがあり意味もなくいそがしいので
聞くだけになりますが
3Dゲーム製作をしようと将来的には考えています
そこで、行列の変換など3Dプログラミングに必要な数学の知識は何があるでしょうか?
もちろん作る内容にもよると思いますが、3Dプログラミングで基礎的なことです
また、グラフィックも3Dになるので、3Dグラフィックを作成、編集するソフトは
個人で手が出せる範囲内ではどんなソフトがあるのでしょうか?

なかなか3Dゲームの情報は入ってこない もしくは入ってきても理解できないのです

Re:3Dゲーム製作について

Posted: 2010年6月27日(日) 12:14
by KEYONN_
私は、「3Dプログラマーのための数学」大川義邦・著、「コンピュータゲームの数学」山北篤・著
「ゲーム開発のための数学・物理学入門」を持っていますが、
とりあえず、ベクトルの内積・外積と行列の掛け算を覚えるべきだと思ってます。

まず、内積ですが、これは、2つのベクトルのX,Y,Z成分をそれぞれ掛け合わせて、足す演算です。
具体的に説明しますと、
A→={0,-1,-3} B→={2,-3,1}
というベクトルがあるとすると、内積をする場合、
A・Bと書きます。
で、計算手順は、x1*x2 + y1*y2 + z1*z2なので、
0 * 2 + (-1) * (-3) + -3 * 1
= 0 + 3 -3
= 0
という演算です。内積の結果が0の場合は、2つのベクトルのなす角度が90度ぴったりになっている
という状態です。

他に内積で角度を具体的に調べたい場合は、
たとえば、C→={-1,4,2} D→={3,0,5}
の場合、
A・B = |A| |B| * cosθ
という式が成立するので、
まず、内積を調べます。
-1*3 + 4*0 + 2*5
=-3 + 0 + 10
= 7
次に、|A|と|B|ですが、これは、ベクトルAとBの長さを求める演算です。

では、|C|=√(1+16+4)で√21となります。|D|は、√(9+25)=√34となります。

これで、あとは計算するだけです。
A・B = |A| |B| cosθなので、
7 = √21*√34 * cosθです。
7/(√21*√34)=cosθ
θ=cos^-1((7/(√21*√34))なので、
θ=74.81°となります。

Re:3Dゲーム製作について

Posted: 2010年6月27日(日) 12:29
by KEYONN_
次に外積です。

この外積は、3次元ベクトルでないと、演算できません。

a→={5 -6 0} b→={1 2 3}
だとすると、aとbの外積は、
a×bと書き、
{ay*bz-az*by az*bx-ax*bz ax*by-ay*bx}で求まります。

つまり、{-6*3-0*2 0*1-5*3 5*2-(-6)*1}となり、
{-18 -15 16}となります。

あと、a×bは、ベクトルaにもベクトルbにも垂直です。

Re:3Dゲーム製作について

Posted: 2010年6月27日(日) 14:01
by KEYONN_
ネットカフェより書き込みです。

ちょっと横道逸れますが、ベクトルの正規化について、書きたいと思います。

ベクトルの正規化は、ベクトルの大きさが1になる演算です。
どうやるかというと、ベクトルの大きさで各成分を割ってやればいいのです。

a→={-5,13,√2}というのが、あるとすると、
まず、ベクトルの大きさを求めます。

√(25+169+2)
=14となりますので、これで、各成分を割ります。

{-5/14,13/14,√2/14}
このようになります。
ベクトルの大きさを求めれば1になるはずです。

Re:3Dゲーム製作について

Posted: 2010年6月27日(日) 14:34
by KEYONN_
いきなりですが、行列の掛け算に飛びます。
しかし、行列の掛け算は重要です。

なぜ、重要かというと、ゲームプログラミングで行列を色々変換させる時に、
行列の掛け算が使われるからです。

まず、行列とは何かというと、
┏   ┓
┃0 1 2 ┃
┃3 4 5 ┃
┃6 7 8 ┃
┗   ┛
こんな形と数列をしたものを言います。
実は、ベクトルは、1行の行列ともいえます。

で、行列の掛け算ですが、
┏   ┓ ┏ ┓
┃0 1 2┃ ┃5 ┃
┃3 4 5┃*┃3 ┃
┗   ┛ ┃1 ┃
     ┗ ┛
2行3列 3行1列

A行B列 * C行D列
とすると、BとCが一致していないと行列の掛け算はできません。
また、掛け算した後に出来る行列は、A行D列となります。

で、掛け算の仕方ですが、ちょっと複雑です。
┏        ┓
┃0*5 + 1*3 + 2*1 ┃
┃3*5 + 4*3 + 5*1 ┃
┗        ┛
こんな形になります。

┏      ┓
┃0 + 3 + 2 ┃
┃15 +12 + 5 ┃
┗      ┛

┏ ┓
┃5 ┃
┃32┃
┗ ┛

こんな感じです。

画像

Re:3Dゲーム製作について

Posted: 2010年6月27日(日) 15:47
by fr
>グラフィックも3Dになるので、3Dグラフィックを作成、編集するソフト
メタセコイアというのが有名ですね。フリー版もあります。

Re:3Dゲーム製作について

Posted: 2010年6月27日(日) 15:51
by Justy
>必要な数学の知識は何があるでしょうか
 ざっくりとですけど数学としては

・ 中学・高校レベルの数学
 三角関数、微積分など

・ ベクトル
 基本的な演算
 内積・外積
 正規化
 長さ

・ 行列
 移動・回転・拡縮
 アフィン変換
 逆行列・転置

・ クォータニオン
 行列との変換
 各種演算

・ 幾何学
 点と直線の距離等
 ベクトルのなす角度
 各種交差・衝突判定
 法線

・ 補完
 線形
 各種スプライン

とかでしょうか(細かく見ていけば他にもありそうです)。
 物理の方も含めるなら各種運動方程式とか力学とか。

 数学の知識といっても結構ライブラリの機能として用意されているモノもあるので、必ずしも自分で計算できる必要は
ないですがやはり理解は必要になります。
 特にベクトルと行列は。
 まぁこの2つに関して言えば2Dでも出てくる話なので2Dで理解していれば3Dでもさほど難しくないでしょうけど。



>グラフィックも3Dになるので、3Dグラフィックを作成、編集するソフトは
>個人で手が出せる範囲内ではどんなソフトがあるのでしょうか
 個人で手が出せるかどうかの基準は人それぞれですが、ほとんどのソフトは個人でも手は出せると思います。
 最初はフリーの Metasequoiaか Blenderあたりとかがいいんじゃないかと。

クラス別 3D グラフィックソフトの傾向
http://3dcg.homeip.net/3d_products/

定番 フリー・シェアウェアの 3D グラフィックソフトの紹介
http://3dcg.homeip.net/3d_products/free_shareware/


# あ、アニマスもう無いんだ……。

Re:3Dゲーム製作について

Posted: 2010年6月27日(日) 19:10
by dic
たくさん返答ありがとうございます
保存してゆっくり読みたいと思います