RenderScript 行列関数

概要

これらの関数を使用すると、ランク 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);
パラメータ
設定する行列。
xx コンポーネントのスケーリング倍率。
yy コンポーネントのスケーリング倍率を指定します。
zz コンポーネントのスケーリング倍率を指定します。

この関数は、ベクトルの各成分に数値を乗算するスケーリング マトリックスを作成します。この数値は負の数でもかまいません。

ベクトルのスケーリングを行うには、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);
パラメータ
変更するマトリックス。
xx コンポーネントのスケーリング倍率。
yy コンポーネントのスケーリング倍率を指定します。
zz コンポーネントのスケーリング倍率を指定します。

行列 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 を所定の位置で転置します。