minMatrix.js リファレンス
概要
行列処理を行なうための簡易ライブラリ。
4 x 4 の正方行列を扱う基本的な処理を実装。ライブラリ内部では Float32Array
を使っているので、型付配列を扱えないブラウザでの動作は保証できません。
多くのメソッドが一応戻り値を返しますが、実際にはほとんどのメソッドが引数によって渡された行列を直接参照し書き換えます。また、メモリ効率の考慮や例外処理などは、ほとんどしていないに等しいので使用に際しては拡張することを視野に入れておいたほうがいいと思います。
ライセンスは完全フリーです。改変も自由です。まぁ、当サイトを少しくらい宣伝してくれるとうれしいですが。
※テキストの最後にファイルへのリンクがあります
matIV コンストラクタ
行列演算を行なうための matIV
オブジェクトのインスタンスを生成します。ちなみに matIV
オブジェクトは 4 x 4 の正方行列を扱うことができます。というか、それ以外は無理です。我ながら適当だな……
記述例
var m = new matIV();
※以降、m を matIV オブジェクトのインスタンスとみなします
create メソッド
4 x 4 の正方行列を生成します。実態としては単なる一次元配列で、16 個の要素を持ちます。先述の通り、型付配列の Float32Array
を利用します。
構文
matrix matIV.create(void)
記述例
var dmat = m.create();
identity メソッド
行列を単位化します。
構文
matrix matIV.identity(matrix dest)
第一引数:dest
:単位化する行列
記述例
m.identity(dmat);
multiply メソッド
行列を掛け合わせます。
構文
matrix matIV.multiply(matrix mat1, matrix mat2, matrix dest)
第一引数:mat1
:掛け合わせの対象となる行列
第二引数:mat2
:掛け合わせられる行列
第三引数:dest
:演算結果を格納する行列
記述例
m.multiply(mat1, mat2, dmat);
scale メソッド
行列にスケーリングを適用します。スケーリング係数には三つの要素を持つベクトルを配列として渡します。
構文
matrix matIV.scale(matrix mat, vec3 vec, matrix dest)
第一引数:mat
:演算の対象となる行列
第二引数:vec
:スケーリング係数となるベクトル
第三引数:dest
:演算結果を格納する行列
記述例
var vec = [x, y, z];
m.scale(mat, vec, dmat);
translate メソッド
行列に平行移動を適用します。三次元空間上の移動量を表す、三つの要素を持つベクトルを配列として渡します。
構文
matrix matIV.translate(matrix mat, vec3 vec, matrix dest)
第一引数:mat
:演算の対象となる行列
第二引数:vec
:移動量を表すベクトル
第三引数:dest
:演算結果を格納する行列
記述例
var vec = [x, y, z];
m.translate(mat, vec, dmat);
rotate メソッド
行列に回転を適用します。回転する角度をラジアンで、回転軸を三つの要素を持つベクトルで、それぞれ引数に渡します。
構文
matrix matIV.rotate(matrix mat, float angle, vec3 axis, matrix dest)
第一引数:mat
:掛け合わせの対象となる行列
第二引数:angle
:回転する角度(ラジアン単位)
第三引数:axis
:回転軸を表すベクトル
第四引数:dest
:演算結果を格納する行列
記述例
// X軸を中心として45度回転する行列を生成する例
var angle = 45 * Math.PI / 180;
var axis = [1.0, 0.0, 0.0];
m.rotate(mat, angle, axis, dmat);
lookAt メソッド
ビュー座標変換行列を生成します。視点(カメラ)の位置、注視点、上方向をそれぞれ三つの要素を持つベクトルとして渡します。
構文
matrix matIV.lookAt(vec3 eye, vec3 center, vec3 up, matrix dest)
第一引数:eye
:視点(カメラ)の位置を表すベクトル
第二引数:center
:注視点の位置を表すベクトル
第三引数:up
:視点(カメラ)の上方向を表すベクトル
第四引数:dest
:演算結果を格納する行列
記述例
// 原点よりやや手前の位置にカメラを置く
var eye = [0.0, 0.0, 5.0];
// 注視点は原点を指定
var center = [0.0, 0.0, 0.0];
// カメラの上方向はYの正方向
var up = [0.0, 1.0, 0.0];
m.lookAt(eye, center, up, dmat);
perspective メソッド
透視法による射影座標変換行列を生成します。透視法による射影変換では遠近法のような効果が得られます。引数には、視野角(度数法による指定)を整数で、コンテキストのアスペクト比、およびクリッピング領域の前方位置と後方位置を小数点数として引数に渡します。
構文
matrix matIV.perspective(int fovy, float aspect, float near, float far, matrix dest)
第一引数:fovy
:視野角を表す整数
第二引数:aspect
:アスペクト比を表す小数点数
第三引数:near
:クリッピング領域の前方面を表す小数点数
第四引数:far
:クリッピング領域の後方面を表す小数点数
第五引数:dest
:演算結果を格納する行列
記述例
// 視野角は45度に設定
var fovy = 45;
// コンテキストのアスペクト比
var aspect = canvas.width / canvas.height;
// クリッピング領域は0より大きい正の値を必ず指定する
var near = 0.1;
var far = 100;
m.perspective(fovy, aspect, near, far, dmat);
transpose メソッド
行列を転置します。引数には転置したい行列と、その演算結果が代入される行列とを、それぞれ別に指定しなければならない点に注意してください。
構文
matrix matIV.transpose(matrix mat, matrix dest)
第一引数:mat
:転置処理の対象となる行列
第二引数:dest
:演算結果を格納する行列
記述例
m.transpose(mat, dmat);
inverse メソッド
行列を反転します。反転の対象となる行列と演算結果を代入する行列は、transpose メソッドと同様個別に指定する必要がありますので注意してください。
構文
matrix matIV.inverse(matrix mat, matrix dest)
第一引数:mat
:反転処理の対象となる行列
第二引数:dest
:演算結果を格納する行列
記述例
m.inverse(mat, dmat);