Ninja Library - 構造体/その他のデータ型

NJS_MATRIX

4*4 行列(マトリクス)

定義

typedef Float   NJS_MATRIX[16]; 

解説

4*4 行列(3Dの座標変換用行列)を定義する型です。

構造体型ではなく、配列型であることに注意してください。

 標準的な数学の記法では、行列M の i 行 j 列成分は、Mij と記述します。よって、次のような表記をします。


|M00 M01 M02 M03|
M =|M10 M11 M12 M13| ・・・・式1
|M20 M21 M22 M23|
|M30 M31 M32 M33|

 3D空間上の点の集合に回転と平行移動を施すことは、座標 を表す列行列(広義ではベクトルということもある)に 4*4行列 を乗算することに対応できます。4*4 行列はこのように回転と 平行移動を行うもの(=移動行列)、と考えることもできますし、 点の座標の表現を、ある座標系での表現から別の座標系での表現 へと変換するもの(=座標変換行列)、と考えることもできます。 3D-CGの世界においては、どちらの考え方も必要ですが、後者の 考え方が頻繁に必要となります。

 行列 M により座標 P を 座標 Q へ変換することは、座標を 表す列行列 Q を、列行列 P の左から M を乗算した結果にするこ とに対応します。つまり Q = MP となります。Q = MP は、次の ようにも記述します。


|Q0| |M00 M01 M02 M03||X0|
|Q1|=|M10 M11 M12 M13||X1|   ・・・・式2
|Q2| |M20 M21 M22 M23||X2|
|Q3| |M30 M31 M32 M33||X3|

SH4 の FTRV XMTRX,FVn 命令は、次のように1命令でこの行列 演算を行います。


FVn XMTRX FVn
|FR[n] | |XF[0] XF[4] XF[8] XF[12] ||FR[n] |
|FR[n+1]|=|XF[1] XF[5] XF[9] XF[13] ||FR[n+1]|・・・・式3
|FR[n+2]| |XF[2] XF[6] XF[10] XF[14] ||FR[n+2]|
|FR[n+3]| |XF[3] XF[7] XF[11] XF[15] ||FR[n+3]|

NJS_MATRIX 型は、この XMTRX レジスタに対応しています。 つまり、NJS_MATRIX 型の変数 mat は、


 mat[k] = XF[k] (k=0,1,2,...,15) ・・・・式4

関係があります。式2,3,4 から、


mat[j*16+i] = Mij

となります。これは、NJS_MATRIX 型は行列の縦を優先的に 並べていることを意味します。

 カレントマトリックスは、XMTRX レジスタに格納されてい ます。


参照

njAddMatrix() マトリクスの加算
njCalcPoint() 任意の点のマトリクス変換
njCalcPoints() 任意の複数の点のマトリクス変換
njCalcVector() 任意のベクトルのマトリクス変換
njCalcVectors() 複数のベクトルのマトリクス変換
njDetMatrix() 行列式の計算
njGetMatrix() カレントマトリクスのコピー
njGetTranslation() 任意のマトリクスから移動要素の取り出し
njInitMatrix() マトリクススタックの初期化
njInvertMatrix() インバートマトリクス(逆行列)の計算
njMirror() 任意の境面に対する鏡像の計算
njMultiMatrix() マトリクスの右からの乗算
njPostMultiMatrix() マトリクスの左からの乗算
njProject() 任意の投影面への平行投影
njProject2() 任意の投影面への透視投影
njProjectScreen() 任意の点のスクリーン投影
njPushMatrix() マトリクススタックのプッシュ
njRotate() マトリクスの任意軸回りの回転
njRotateX() マトリクスのX軸回りの回転
njRotateXYZ() マトリクスのXYZ各軸回りの回転
njRotateY() マトリクスのY軸回りの回転
njRotateZ() マトリクスのZ軸回りの回転
njRotateZXY() マトリクスのZXY各軸回りの回転
njScale() マトリクスの拡縮
njScaleV() マトリクスの拡縮
njSetMatrix() 任意のマトリクスのコピー
njSubMatrix() マトリクスの減算
njTranslate() マトリクスの平行移動
njTranslateV() マトリクスの平行移動
njTransposeMatrix() 転置行列の計算
njUnitMatrix() 任意のマトリクスを単位行列にする
njUnitRotPortion() 任意のマトリクスの回転要素を初期化
njUnitTransPortion() 任意のマトリクスの移動要素をクリア

NJS_MATRIX
COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000