[Atelier Blue アトリエブルー]HomeプログラミングManaged DirectX3D>行列(Matrix)

今回説明しているMatrixについては表面の機能からの解説をしているため、実際の内部構造とはしっかりと一致しない部分があります。それについてはこの入門の範囲を越えるので独学でお願いします。

行列(Matrix)

はっきりと言いますと、3Dにはそれなりの知識が必要になります。行列や三角関数はもちろん、3Dの用語や手法についての知識が欲しいです。ですが、ここではあまりそのようなことに触れずにいこうと思います。私も深く理解しているわけではありませんから。

と、言い切るのは簡単ですが、全く知らないで3Dを扱うこともまた色々と問題です。すこしは知らなければなりません。そういうわけで今回は「利用することだけに的を絞った行列」です。

頂点

3次元空間の中での頂点は「X,Y,Z」の三つの座標を持っています。この三つの座標があれば、3次元世界の任意の一点を示すことが出来ます。

頂点の移動

たとえば、ある1つの点が与えられたときにその点をx軸を軸にして回転させるにはどうしたらいいでしょうか?難しいですね。ですが、DirectXにはこういう難しい演算を行ってくれる構造体があります。それがMatrixです。

Matrixの中に入っているのは変形の手順

大事なのは「Matrix」の中に入っているのは頂点を移動させる手順だと言うことです。つまり、関数と同じです。

「ある頂点とMatrixを掛け算することによってその頂点を移動させる」こういう事をするためにあるのです。

点を移動させるということ、立体を変形させるということ

ここにあるMatrixがあります。それを立体を作るための頂点配列全部に使ったらどうなるでしょうか?

1つ1つの点は移動しますね。そして移動したあとの点を使って立体を表示させると・・・どうなるでしょうか?

立体が変形することになりますね。

ここで言いたいことはMatrixは3次元世界の中にある全てのものを変形させる事が出来るということです

カメラ、ワールド変換とは?

結局の所「カメラ」「ワールド変換」でそれぞれ行われているのは頂点を行列によって移動・回転・拡大縮小させることなのです。もっと詳しく知りたい方は、本を読んで勉強するのが良いでしょう。



変形を組み合わせる

前回でしたこと、今回覚えたことを合わせて、ちょっと次のことをしてみましょう。

全軸に2倍に拡大、X軸に30度回転、Y軸に+1。

上の動作は行列の掛け算で実現できます。

device_.Transform.World =
    Matrix.Scaling(2,2,2)
    *Matrix.RotationX((float)(60f * Math.PI / 180f))
    *Matrix.Translation(0,-2,0);
変形前 変形後

ここで行列の大事な性質を話しておきます。行列では掛け算の順番によって結果が変わります。これはとても大切なことです。数式を出して説明しても良いのですが、めんどくさいのでパスです。

device_.Transform.World =
    Matrix.Scaling(2,2,2)
    *Matrix.Translation(0,-2,0)
    *Matrix.RotationX((float)(60f * Math.PI / 180f));
変形後その2

そのため、大抵は「拡大縮小*回転*移動」の順番で掛け算を行います。

もちろん、他の順番を利用するときもあります。ただし、一般論も知っておく必要がありますので覚えておいてください。



次回は立方体を作りましょう。その次は多分インデックスバッファです。


ページの一番上へ
前のページへ 一覧に戻る 次のページへ
初版2006-3-14 最終更新2006-5-13
[Atelier Blue アトリエブルー]HomeプログラミングManaged DirectX3D>行列(Matrix)