マット4
Mat4 インターフェースは 4x4 の行列を表し,列長順の 16 要素配列として格納される. このタイプの行列は、3D幾何学で位置、回転、スケールなどの変換を表現するためによく使われる(TRS行列とも呼ばれる)。 これらの行列は、3Dシーン内のオブジェクトの位置、向き、大きさを定義するために不可欠である。
TRS行列のようなある種の行列は、効率的に計算可能な逆行列を持つ。 このような場合、Mat4は逆行列を定数時間で計算することができ、O(1)の非常に高速な演算となる。 Mat4 オブジェクトは、ecs.math.mat4 ファクトリ(Mat4Factory)を使用するか、既存の Mat4 インスタンスに対する操作によって作成されます。
工場
i
恒等行列
ecs.math.mat4.i() // -> mat4
の
直接指定されたデータを用いて,列-長順の行列を作成します. オプションで逆数を指定することもできる。 逆行列を指定しない場合,行列が可逆行列であれば自動的に逆行列が計算される. 非可逆行列の逆行列を計算しようとするとエラーが発生する。
ecs.math.mat4.of(data: number[], inverseData?: number[]) // -> mat4
r
四元数から回転行列を作成します。
ecs.math.mat4.r(q: QuatSource) // -> mat4
rows
指定された行データを用いて行列を作成します。 また、オプションで逆行列データを提供することもできる。 dataRowsとinverseDataRowsは、それぞれ4つの数値を含む配列でなければならない。 逆行列が与えられない場合、行列が可逆であれば自動的に計算される。
非可逆行列の逆行列を計算しようとするとエラーが発生する。
ecs.math.mat4.rows(dataRows: number[][], inverseDataRows?: number[][]) // -> mat4
s
スケール行列を作成します。 x軸、y軸、z軸のスケールファクターを指定する。
ecs.math.mat4.s(x: 数, y: 数, z: 数) // -> mat4
t
変換行列を作成します。 x軸、y軸、z軸の移動オフセットを指定する。
ecs.math.mat4.t(x: 数, y: 数, z: 数) // -> mat4
ト
並進ベクトルと回転用のクォータニオンを使用して、並進と回転を組み合わせた行列を作成します。
ecs.math.mat4.tr(t: Vec3Source, r: QuatSource) // -> mat4
トラス
平行移動、回転、スケールを組み合わせた行列を作成します。 並進ベクトル、回転にはクォータニオン、x、y、z軸にはスケールファクターを使用する。
ecs.math.mat4.trs(t: Vec3Source, r: QuatSource, s: Vec3Source) // -> mat4
不変
以下のメソッドは,Mat4 の内容を変更することなく,その現在の値を用いて計算を行います. Mat4 型を返すメソッドは,新しいインスタンスを生成する. イミュータブルAPIは一般的に、ミュータブルAPIに比べて安全で、可読性が高く、エラーを減らすことができるが、毎フレーム何千ものオブジェクトが生成されるようなシナリオでは効率が悪くなる可能性がある。
ガベージ・コレクションがパフォーマンスの問題になるようなら、Mutable APIを使うことを検討しよう。
クローン
この行列と同じ成分を持つ新しい行列を作成する。
ecs.math.mat4.clone() // -> mat4
データ
行列の生データを列の長さ順に取得する。
ecs.math.mat4.data() // -> number[].
分解Trs
行列が平行移動、回転、スケールの順で形成されていると仮定して、行列を平行移動、回転、スケールの各成分に分解する。 target'が与えられた場合、結果は'target'に格納され、'target'が返される。 そうでない場合は、新しい {t, r, s} オブジェクトが作成されて返される。
ecs.math.mat4.decomposeTrs(target?: {t: Vec3, r: Quat, s: Vec3}) // -> {t: Vec3, r: Quat, s: Vec3}
行列式
行列の行列式を計算する。
ecs.math.mat4.determinant() // -> 数