マット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
行
指定された行データを用いて行列を作成します。 また、オプションで逆行列データを提供することもできる。 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() // -> 数
イコール
2つの行列が等しいかどうかを、指定された浮動小数点数の許容誤差でチェックする。
ecs.math.mat4.equals(m: Mat4, tolerance: number) // -> boolean
イン
行列を反転させる。行列が反転不可能な場合は throw する。 Mat4は事前に計算された逆数を保存しているので、この演算は非常に高速である。
ecs.math.mat4.inv() // -> mat4
逆データ
逆行列の生データを列-長順で取得。行列が逆行列でない場合は null。
ecs.math.mat4.inverseData() // -> number[] | null
ルックアット
この行列と同じ位置とスケールを持つ行列を取得しますが、ターゲットを見るように回転を設定します。
ecs.math.mat4.lookAt(target: Vec3Source, up: Vec3Source) // -> mat4
スケール
行列にスカラーを乗じる。
0によるスケーリングはエラーをスローする。
ecs.math.mat4.scale(s: number) // -> mat4
転置行列
行列の転置行列を取得します。
ecs.math.mat4.transpose() // -> mat4
回
行列に別の行列を掛ける。
ecs.math.mat4.times(m: Mat4) // -> mat4
タイムズベック
同次座標を使って行列にベクトルを掛ける。
ecs.math.mat4.timesVec(v: Vec3Source, target?: Vec3) // -> vec3
ミュータブル
以下のメソッドは、Mat4 の現在値に基づいて結果を計算し、その内容を直接変更します。 これらは、先に説明したImmutable APIのメソッドを反映している。 Mat4 型を返すメソッドは、同じオブジェクトへの参照を提供し、メソッドの連鎖を可能にする。 ミュータブルAPIはイミュータブルAPIよりもパフォーマンスが向上する一方で、安全性や可読性に劣り、エラーが発生しやすい傾向がある。
コードが1フレーム内で頻繁に実行される可能性が低い場合は、コードの安全性と明瞭性を高めるためにImmutable APIを使用することを検討してください。
セットインヴ
行列を反転させる。行列が反転不可能な場合は throw する。 Mat4は事前に計算された逆数を保存しているので、この演算は非常に高速である。 この Mat4 に結果を格納し、この Mat4 をチェイン用に返す。
existingMat4.setInv() // -> mat4
setLookAt
平行移動とスケールは変えずに、ターゲットに向くようにマトリックスの回転を設定する。 この Mat4 に結果を格納し、この Mat4 をチェイン用に返す。
existingMat4.setLookAt(target: Vec3Source, up: Vec3Source) // -> mat4
setPremultiply
この行列を m 倍した結果をこの行列に設定する。 この Mat4 に結果を格納し、この Mat4 をチェイン用に返す。
existingMat4.setPremultiply(m: Mat4) // -> mat4