概要
これらの関数を使用すると、ランク 2x2、3x3、4x4 の平方行列を操作できます。特にグラフィカルな変換に役立ち、OpenGL と互換性があります。
行と列にはゼロベースのインデックスを使用します。たとえば、rs_matrix4x4 の最後の要素は (3, 3) にあります。
RenderScript は、列優先の行列と列ベースのベクトルを使用します。ベクトルの変換は、ベクトルを事後乗算することで行われます(例: rsMatrixMultiply() により提供される (matrix * vector)
)。
一度に 2 つの変換を行う変換行列を作成するには、2 つのソース行列を乗算します(最初の変換を正しい引数とします)。たとえば、変換 s1 の後に s2 が続く変換行列を作成するには、rsMatrixLoadMultiply(&combined, &s2, &s1)
を呼び出します。これは s2 * (s1 * v)
((s2 * s1) * v
)から派生します。
変換行列を作成するための関数には、rsMatrixLoadTransformation と rsMatrixTransformation の 2 つがあります。前者のスタイルでは、単に最初の引数に変換行列を格納します。後者は、既存の変換行列を変更して、新しい変換が最初に行われるようにします。たとえば、すでにスケーリングが行われている行列に対して rsMatrixTranslate() を呼び出した場合、結果の行列をベクトルに適用したときに、まず翻訳が行われ、その後にスケーリングが行われます。
まとめ
関数 | |
---|---|
rsExtractFrustumPlanes | 錐台平面の計算 |
rsIsSphereInFrustum | 球が円錐面内にあるかどうかを確認します。 |
rsMatrixGet | 1 つの要素を取得する |
rsMatrixInverse | 行列を所定の位置で反転します。 |
rsMatrixInverseTranspose | 所定の位置で行列を反転、転置する |
rsMatrixLoad | マトリックスの読み込みまたはコピー |
rsMatrixLoadFrustum | 錐台射影行列を読み込む |
rsMatrixLoadIdentity | ID マトリックスの読み込み |
rsMatrixLoadMultiply | 2 つの行列を乗算する |
rsMatrixLoadOrtho | 正投影行列を読み込む |
rsMatrixLoadPerspective | 視点射影行列を読み込む |
rsMatrixLoadRotate | 回転マトリックスを読み込む |
rsMatrixLoadScale | スケーリング マトリックスを読み込む |
rsMatrixLoadTranslate | 変換マトリックスを読み込む |
rsMatrixMultiply | 行列とベクトルまたは他の行列を乗算する |
rsMatrixRotate | 変換行列に回転を適用する |
rsMatrixScale | 変換行列にスケーリングを適用する |
rsMatrixSet | 要素を 1 つ設定する |
rsMatrixTranslate | 変換行列に平行移動を適用する |
rsMatrixTranspose | 行列の転置 |
関数
rsExtractFrustumPlanes : 錐面の計算
void rsExtractFrustumPlanes(const rs_matrix4x4* viewProj, float4* left, float4* righ, float4* top, float4* down, float4* Near, float4* Far); | API レベル 24 で追加されました |
void rsExtractFrustumPlanes(const rs_matrix4x4* viewProj, float4* left, float4* right, float4* top, float4* bottom, float4* Near, float4* Far); | API レベル 24 以降から削除 |
パラメータ
viewProj | プレーンの抽出元となる行列。 |
---|---|
left | 左の飛行機。 |
right | 右のプレーン。 |
上 | 上面。 |
下 | ボトム プレーン。 |
近い | 飛行機の近くです。 |
遠い | 遠くの飛行機。 |
リッ |
ビュー射影行列から 6 つの円錐面を計算します。
rsIsSphereInFrustum : 球が円錐台平面内にあるかどうかを確認します。
bool rsIsSphereInFrustum(float4* sphere, float4* left, float4* right, float4* top, float4* bottom, float4* Near, float4* far); |
パラメータ
球体 | 球を表す浮動小数点数 4。 |
---|---|
left | 左の飛行機。 |
right | 右のプレーン。 |
上 | 上面。 |
下 | ボトム プレーン。 |
近い | 飛行機の近くです。 |
遠い | 遠くの飛行機。 |
球が 6 つの円錐面内にある場合、true を返します。
rsMatrixGet : 1 つの要素を取得する
float rsMatrixGet(const rs_matrix2x2* m, uint32_t col, uint32_t row); | |
float rsMatrixGet(const rs_matrix3x3* m, uint32_t col, uint32_t row); | |
float rsMatrixGet(const rs_matrix4x4* m, uint32_t col, uint32_t row); |
パラメータ
分 | 要素を抽出する行列。 |
---|---|
列 | 抽出される要素のゼロベースの列。 |
行 | 抽出する要素の 0 ベースの行。 |
行列の 1 つの要素を返します。
警告: 列パラメータと行パラメータの順序は想定外である可能性があります。
rsMatrixInverse : 所定の位置で行列を反転します
bool rsMatrixInverse(rs_matrix4x4* m); |
パラメータ
分 | 反転する行列。 |
---|
行列の反転が正常に完了した場合は true を返します。
rsMatrixInverseTranspose : 所定の位置で行列を反転して転置する
bool rsMatrixInverseTranspose(rs_matrix4x4* m); |
パラメータ
分 | 変更するマトリックス。 |
---|
この行列は、最初に反転されてから転置されます。行列が正常に反転された場合は true を返します。
rsMatrixLoad : 行列を読み込みまたはコピーします
void rsMatrixLoad(rs_matrix2x2* destination, const float* array); | |
void rsMatrixLoad(rs_matrix2x2* destination, const rs_matrix2x2* source); | |
void rsMatrixLoad(rs_matrix3x3* destination, const float* array); | |
void rsMatrixLoad(rs_matrix3x3* destination, const rs_matrix3x3* source); | |
void rsMatrixLoad(rs_matrix4x4* destination, const float* array); | |
void rsMatrixLoad(rs_matrix4x4* destination, const rs_matrix2x2* source); | |
void rsMatrixLoad(rs_matrix4x4* destination, const rs_matrix3x3* source); | |
void rsMatrixLoad(rs_matrix4x4* destination, const rs_matrix4x4* source); |
パラメータ
目的 | 設定する行列。 |
---|---|
array | 行列を設定する値の配列。これらの配列は、行列のサイズに応じて、4、9、または 16 浮動小数点数にする必要があります。 |
source | ソース マトリックス。 |
浮動小数点数の配列または別の行列から、行列の要素を設定します。
配列から読み込む場合、float 型は行優先の順序でなければなりません。つまり、row 0, column 0
の要素が最初に来、その後に row 0, column 1
の要素が続きます。
マトリックスからの読み込みで、ソースがデスティネーションよりも小さい場合、デスティネーションの残りの部分は単位マトリックスの要素で満たされます。たとえば、rs_matrix2x2 を rs_matrix4x4 に読み込むと、次のようになります。
分 | M01 | 0.0 | 0.0 |
M10 | M11 | 0.0 | 0.0 |
0.0 | 0.0 | 1.0 | 0.0 |
0.0 | 0.0 | 0.0 | 1.0 |
rsMatrixLoadFrustum : 錐台射影行列を読み込む
void rsMatrixLoadFrustum(rs_matrix4x4* m, float left, float right, float bottom, float top, float near, float far); |
パラメータ
分 | 設定する行列。 |
---|---|
left | |
right | |
下 | |
上 | |
近い | |
遠い |
6 つのクリップ面 left, right, bottom, top, near, far
で識別されるボックスを変換して、錐台投影行列を作成します。
この射影をベクトルに適用するには、rsMatrixMultiply() を使用して、作成した行列をベクトルに乗算します。
rsMatrixLoadIdentity : 単位行列の読み込み
void rsMatrixLoadIdentity(rs_matrix2x2* m); | |
void rsMatrixLoadIdentity(rs_matrix3x3* m); | |
void rsMatrixLoadIdentity(rs_matrix4x4* m); |
パラメータ
分 | 設定する行列。 |
---|
行列の要素を単位行列に設定します。
rsMatrixLoadMultiply : 2 つの行列を乗算する
void rsMatrixLoadMultiply(rs_matrix2x2* m, const rs_matrix2x2* lhs, const rs_matrix2x2* rhs); | |
void rsMatrixLoadMultiply(rs_matrix3x3* m, const rs_matrix3x3* lhs, const rs_matrix3x3* rhs); | |
void rsMatrixLoadMultiply(rs_matrix4x4* m, const rs_matrix4x4* lhs, const rs_matrix4x4* rhs); |
パラメータ
分 | 設定する行列。 |
---|---|
LH | 商品の左側の行列。 |
右側の | 商品の右のマトリックス。 |
m を lhs * rhs
の行列積に設定します。
2 つの 4x4 変換行列を結合するには、2 番目の変換行列と 1 番目の変換行列を乗算します。たとえば、変換 s1 の後に s2 が続く変換行列を作成するには、rsMatrixLoadMultiply(&combined, &s2, &s1)
を呼び出します。
警告: バージョン 21 より前では、適切なマトリックスに結果を再度格納することはサポートされておらず、未定義の動作になります。代わりに rsMatrixMulitply を使用してください。たとえば、rsMatrixLoadMultiply (&m2r, &m2r, &m2l) ではなく、rsMatrixMultiply (&m2r, &m2l) を使用してください。rsMatrixLoadMultiply (&m2l, &m2r, &m2l) は想定どおりに機能します。
rsMatrixLoadOrtho : 正投影行列を読み込みます。
void rsMatrixLoadOrtho(rs_matrix4x4* m, float left, float right, float down, float top, float near, float far); |
パラメータ
分 | 設定する行列。 |
---|---|
left | |
right | |
下 | |
上 | |
近い | |
遠い |
6 つのクリッピング面 left, right, bottom, top, near, far
で識別される箱を、(-1, -1, -1)
が角、その反対が (1, 1, 1)
の単位立方体に変換します。
この射影をベクトルに適用するには、rsMatrixMultiply() を使用して、作成したベクトルと作成した行列を乗算します。
https://en.wikipedia.org/wiki/Orthographic_projection をご覧ください。
rsMatrixLoadPerspective : 透視投影行列を読み込みます。
void rsMatrixLoadPerspective(rs_matrix4x4* m, float fovy, float であること, float near, float far); |
パラメータ
分 | 設定する行列。 |
---|---|
Fevy | 画角(Y 軸に沿った度数)。 |
アスペクト | x と y の比率。 |
近い | クリッピング面の近くに。 |
遠い | 遠くのクリッピング プレーン。 |
画角が対称であると仮定して、透視投影行列を作成します。
この射影をベクトルに適用するには、rsMatrixMultiply() を使用して、作成したベクトルと作成した行列を乗算します。
rsMatrixLoadRotate : 回転行列を読み込む
void rsMatrixLoadRotate(rs_matrix4x4* m, float rot, float x, float y, float z); |
パラメータ
分 | 設定する行列。 |
---|---|
腐った | 何度回転するのか(度単位)。 |
x | 回転の軸であるベクトルの X 成分。 |
y | 回転の軸であるベクトルの Y コンポーネント。 |
z | 回転の軸であるベクトルの Z 成分。 |
この関数は、回転マトリックスを作成します。回転の軸は (x, y, z)
ベクトルです。
ベクトルを回転するには、rsMatrixMultiply() を使用して、作成したベクトルにベクトルを乗算します。
https://en.wikipedia.org/wiki/Rotation_matrix (英語)をご覧ください。
rsMatrixLoadScale : スケーリング マトリックスを読み込む
void rsMatrixLoadScale(rs_matrix4x4* m, float x, float y, float z); |
パラメータ
分 | 設定する行列。 |
---|---|
x | x コンポーネントのスケーリング倍率。 |
y | y コンポーネントのスケーリング倍率を指定します。 |
z | z コンポーネントのスケーリング倍率を指定します。 |
この関数は、ベクトルの各成分に数値を乗算するスケーリング マトリックスを作成します。この数値は負の数でもかまいません。
ベクトルのスケーリングを行うには、rsMatrixMultiply() を使用して、作成したベクトルと、作成した行列を乗算します。
rsMatrixLoadTranslate : 翻訳行列を読み込む
void rsMatrixLoadTranslate(rs_matrix4x4* m, float x, float y, float z); |
パラメータ
分 | 設定する行列。 |
---|---|
x | 各 x コンポーネントに追加する数値。 |
y | 各 y コンポーネントに加算する数値。 |
z | 各 Z コンポーネントに加算する数値。 |
この関数は、ベクトルの各要素に数値を追加する変換行列を作成します。
ベクトルを変換するには、rsMatrixMultiply() を使用して、ベクトルと作成した行列を乗算します。
rsMatrixMultiply : ある行列と、ベクトルまたは他の行列を乗算します
float2 rsMatrixMultiply(const rs_matrix2x2* m, float2 in); | API レベル 14 で追加されました |
float2 rsMatrixMultiply(rs_matrix2x2* m, float2 in); | API レベル 14 以降から削除 |
float3 rsMatrixMultiply(const rs_matrix3x3* m, float2 in); | API レベル 14 で追加されました |
float3 rsMatrixMultiply(const rs_matrix3x3* m, float3 in); | API レベル 14 で追加されました |
float3 rsMatrixMultiply(rs_matrix3x3* m, float2 in); | API レベル 14 以降から削除 |
float3 rsMatrixMultiply(rs_matrix3x3* m, float3 in); | API レベル 14 以降から削除 |
float4 rsMatrixMultiply(const rs_matrix4x4* m, float2 in); | API レベル 14 で追加されました |
float4 rsMatrixMultiply(const rs_matrix4x4* m, float3 in); | API レベル 14 で追加されました |
float4 rsMatrixMultiply(const rs_matrix4x4* m, float4 in); | API レベル 14 で追加されました |
float4 rsMatrixMultiply(rs_matrix4x4* m, float2 in); | API レベル 14 以降から削除 |
float4 rsMatrixMultiply(rs_matrix4x4* m, float3 in); | API レベル 14 以降から削除 |
float4 rsMatrixMultiply(rs_matrix4x4* m, float4 in); | API レベル 14 以降から削除 |
void rsMatrixMultiply(rs_matrix2x2* m, const rs_matrix2x2* rhs); | |
void rsMatrixMultiply(rs_matrix3x3* m, const rs_matrix3x3* rhs); | |
void rsMatrixMultiply(rs_matrix4x4* m, const rs_matrix4x4* rhs); |
パラメータ
分 | 積と設定する行列の左行列。 |
---|---|
右側の | 商品の右のマトリックス。 |
および |
行列別行列バリアントの場合、m を行列積 m * rhs
に設定します。
この関数を使用して 2 つの 4x4 変換行列を結合すると、結果として得られる行列は、最初に rhs 変換を実行し、その後に元の m 変換を実行することに対応します。
ベクトル バリアントによる行列の場合、ベクトルと行列の乗算後を返します。つまり、m * in
float3 を rs_matrix4x4 に乗算すると、ベクトルは(1)に展開されます。
float2 に rs_matrix4x4 を乗算すると、ベクトルは (0, 1) に展開されます。
float2 を rs_matrix3x3 に乗算すると、ベクトルは(0)に展開されます。
API 14 以降、この関数は最初の引数として定数行列を受け取ります。
rsMatrixRotate : 変換行列に回転を適用します
void rsMatrixRotate(rs_matrix4x4* m, float rot, float x, float y, float z); |
パラメータ
分 | 変更するマトリックス。 |
---|---|
腐った | 何度回転するのか(度単位)。 |
x | 回転の軸であるベクトルの X 成分。 |
y | 回転の軸であるベクトルの Y コンポーネント。 |
z | 回転の軸であるベクトルの Z 成分。 |
行列 m に回転行列を乗算します。
この関数は、変換行列を変更して最初に回転を行います。回転の軸は (x, y, z)
ベクトルです。
この結合された変換をベクトルに適用するには、rsMatrixMultiply() を使用して、作成したベクトルにベクトルを乗算します。
rsMatrixScale : 変換行列にスケーリングを適用します。
void rsMatrixScale(rs_matrix4x4* m, float x, float y, float z); |
パラメータ
分 | 変更するマトリックス。 |
---|---|
x | x コンポーネントのスケーリング倍率。 |
y | y コンポーネントのスケーリング倍率を指定します。 |
z | z コンポーネントのスケーリング倍率を指定します。 |
行列 m にスケーリング行列を乗算します。
この関数は、変換行列を変更して最初にスケーリングを行います。スケーリングするときは、ベクトルの各成分に数値を乗算します。この数値は負の数でもかまいません。
この結合された変換をベクトルに適用するには、rsMatrixMultiply() を使用して、作成したベクトルにベクトルを乗算します。
rsMatrixSet : 要素を 1 つ設定します
void rsMatrixSet(rs_matrix2x2* m, uint32_t col, uint32_t row, float v); | |
void rsMatrixSet(rs_matrix3x3* m, uint32_t col, uint32_t row, float v); | |
void rsMatrixSet(rs_matrix4x4* m, uint32_t col, uint32_t row, float v); |
パラメータ
分 | 変更されるマトリックス。 |
---|---|
列 | 設定する要素の 0 から始まる列。 |
行 | 設定する要素の 0 ベースの行。 |
v | 設定する値です。 |
行列の要素を設定します。
警告: 列パラメータと行パラメータの順序は想定外である可能性があります。
rsMatrixTranslate : 変換行列に平行移動を適用します
void rsMatrixTranslate(rs_matrix4x4* m, float x, float y, float z); |
パラメータ
分 | 変更するマトリックス。 |
---|---|
x | 各 x コンポーネントに追加する数値。 |
y | 各 y コンポーネントに加算する数値。 |
z | 各 Z コンポーネントに加算する数値。 |
行列 m と平行移動行列を乗算します。
この関数は、変換行列を変更して最初に変換を行います。翻訳時には、ベクトルの各要素に数値が追加されます。
この結合された変換をベクトルに適用するには、rsMatrixMultiply() を使用して、そのベクトルと作成した行列を乗算します。
rsMatrixTranspose : 行列の転置
void rsMatrixTranspose(rs_matrix2x2* m); | |
void rsMatrixTranspose(rs_matrix3x3* m); | |
void rsMatrixTranspose(rs_matrix4x4* m); |
パラメータ
分 | 転置する行列。 |
---|
行列 m を所定の位置で転置します。