RenderScript 矩陣函式

總覽

這些函式可讓您操控排名 2x2、3x3 和 4x4 的方形矩陣。特別適合用於圖形轉換,且與 OpenGL 相容。

我們對列和欄使用從零開始的索引。例如,rs_ Matrix4x4 的最後一個元素是在 (3, 3) 處。

RenderScript 會使用資料欄主要矩陣和資料欄型向量。轉換向量的方式是透過將向量 (例如 (matrix * vector)) 後乘上而完成,如 rsMatrixMultiply() 所提供。

若要建立一次執行兩項轉換的轉換矩陣,請將兩個來源矩陣乘以第一個轉換,做為右引數。舉例來說,如要建立同時套用轉換 s1 和 s2 的轉換矩陣,請呼叫 rsMatrixLoadMultiply(&combined, &s2, &s1)。這會從 s2 * (s1 * v) 衍生,也就是 (s2 * s1) * v

我們有兩種函式可以建立轉換矩陣:rsMatrixLoadTransformation 和 rsMatrixTransformation。先前的樣式只會將轉換矩陣儲存在第一個引數中。後者會修改既有的轉換矩陣,讓新的轉換先進行。舉例來說,如果您在已經執行資源調度的矩陣上呼叫 rsMatrixTranslate(),則先將產生的矩陣套用至向量時,會先進行平移,再進行資源調度。

摘要

函式
rsExtractFrustumPlanes 計算砂輪飛機
rsIsSphereInFrustum 檢查球面是否位於視錐體內
rsMatrixGet 取得 1 個元素
rsMatrixInverse 將定位點反轉
rsMatrixInverseTranspose 反轉並轉置矩陣
rsMatrixLoad 載入或複製矩陣
rsMatrixLoadFrustum 載入視錐範圍投影矩陣
rsMatrixLoadIdentity 載入識別資訊矩陣
rsMatrixLoadMultiply 將兩個矩陣相乘
rsMatrixLoadOrtho 載入正規投影矩陣
rsMatrixLoadPerspective 載入透視投影矩陣
rsMatrixLoadRotate 載入旋轉矩陣
rsMatrixLoadScale 載入資源調度矩陣
rsMatrixLoadTranslate 載入翻譯矩陣
rsMatrixMultiply 將矩陣乘以向量或其他矩陣
rsMatrixRotate 對轉換矩陣套用旋轉角度
rsMatrixScale 對轉換矩陣套用縮放比例
rsMatrixSet 設定一個元素
rsMatrixTranslate 將平移套用到轉換矩陣
rsMatrixTranspose 轉置矩陣位置

函式

rsExtractFrustumPlanes :運算視錐面

void rsExtractFrustumPlanes(const rs_ Matrix4x4* viewProj, float4* left, float4* righ, float4* top, float4* top, float4* 附近, float4*); 已在 API 級別 24 中新增。
void rsExtractFrustumPlanes(const rs_ Matrix4x4* viewProj, float4* left, float4* left, float4* top, float4* top, float4* 附近, float4*); 已從 API 級別 24 以上移除
參數
ViewProj用來擷取平面的矩陣。
左飛機。
向右箭頭右飛機。
上半局頂端飛機,
下半局底部飛機。
附近靠近飛機。
遠程飛機,

從檢視畫面投影矩陣計算 6 個視錐體

rsIsSphereInFrustum :檢查球體是否位於滾筒內

bool rsIsSphereInFrustum(float4* 球體,float4* left, float4* left, float4* top, float4* top, float4* 就靠近 float4*);
參數
球體浮點值,代表球體。
左飛機。
向右箭頭右飛機。
上半局頂端飛機,
下半局底部飛機。
附近靠近飛機。
遠程飛機,

如果球體在 6 顆灰塵的平面中,則傳回 true。

rsMatrixGet :取得 1 個元素

float rsMatrixGet(const rs_ Matrix2x2* m, uint32_t col, uint32_t 列);
float rsMatrixGet(const rs_ Matrix3x3* m, uint32_t col, uint32_t 列);
float rsMatrixGet(const rs_ Matrix4x4* m, uint32_t col, uint32_t 列);
參數
分鐘用來擷取元素的矩陣。
要擷取的元素從零開始。
要擷取的元素列,從零開始。

傳回矩陣的一個元素。

警告:資料欄和資料列參數的順序可能不符合預期。

rsMatrixInverse :反轉定位矩陣

bool rsMatrixInverse(rs_ Matrix4x4* m);
參數
分鐘反向矩陣。

如果矩陣已成功反轉,則傳回 true。

rsMatrixInverseTranspose :反轉並轉置矩陣

bool rsMatrixInverseTranspose(rs_ Matrix4x4* m);
參數
分鐘要修改的矩陣。

系統會先將矩陣反轉,再轉置。如果矩陣已成功反轉,則傳回 true。

rsMatrixLoad :載入或複製矩陣

void rsMatrixLoad(rs_ Matrix2x2* 目的地, const float* 陣列);
void rsMatrixLoad(rs_ Matrix2x2* 目的地, const rs_ Matrix2x2* 來源);
void rsMatrixLoad(rs_ Matrix3x3* 目的地, const float* 陣列);
void rsMatrixLoad(rs_ Matrix3x3* 目的地, const rs_ Matrix3x3* 來源);
void rsMatrixLoad(rs_ Matrix4x4* 目的地, const float* 陣列);
void rsMatrixLoad(rs_ Matrix4x4* 目的地, const rs_ Matrix2x2* 來源);
void rsMatrixLoad(rs_ Matrix4x4* 目的地, const rs_ Matrix3x3* 來源);
void rsMatrixLoad(rs_ Matrix4x4* 目的地, const rs_ Matrix4x4* 來源);
參數
目的地要設定的矩陣。
陣列用來設定矩陣的值陣列。視矩陣大小而定,這些陣列的長度應為 4、9 或 16 浮點值。
來源來源矩陣。

從浮點陣列或其他矩陣設定矩陣元素。

如果是從陣列載入,浮點數應以資料列為單位,也就是說,row 0, column 0 應先在元素前方,接著是 row 0, column 1 的元素,依此類推。

如果從矩陣載入且來源小於目的地,目的地的其餘部分會填入身分矩陣的元素。例如,將 rs_ Matrix2x2 載入 rs_ Matrix4x4 中,可獲得:

公尺 平方公尺 0.0 0.0
分 10 秒 平方公尺 0.0 0.0
0.0 0.0 1.0 0.0
0.0 0.0 0.0 1.0

rsMatrixLoadFrustum :載入阻斷器投影矩陣

void rsMatrixLoadFrustum(rs_矩陣 4x4* m, 浮動式, 浮動式, 浮動式最下方, 浮動式, 浮點值, 接近, 浮動值);
參數
分鐘要設定的矩陣。
向右箭頭
下半局
上半局
附近

建構阻斷式投影矩陣,轉換六種裁剪平面 left, right, bottom, top, near, far 識別的方塊。

如要將此投影套用至向量,請使用 rsMatrixMultiply() 將向量乘以建立的矩陣。

rsMatrixLoadIdentity :載入身分矩陣

void rsMatrixLoadIdentity(rs_ Matrix2x2* m);
void rsMatrixLoadIdentity(rs_ Matrix3x3* m);
void rsMatrixLoadIdentity(rs_ Matrix4x4* m);
參數
分鐘要設定的矩陣。

將矩陣的元素設為身分矩陣。

rsMatrixLoadMultiply :將兩個矩陣相乘

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);
參數
分鐘要設定的矩陣。
人物產品的左矩陣。
Rhs產品的右側矩陣。

將 m 設為 lhs * rhs 的矩陣乘積。

如要合併兩個 4x4 轉換矩陣,請將第二個轉換矩陣乘以第一個轉換矩陣。舉例來說,如要建立同時套用轉換 s1 和 s2 的轉換矩陣,請呼叫 rsMatrixLoadMultiply(&combined, &s2, &s1)

警告:21 以下版本不支援儲存結果至右矩陣,且會導致未定義的行為。請改用 rsMatrixMulitply。舉例來說,請使用 rsMatrixMultiply (&m2r, &m2l),而非執行 rsMatrixLoadMultiply (&m2r、&m2r 和 &m2l)。 rsMatrixLoadMultiply (&m2l、&m2r、&m2l) 可正常運作。

rsMatrixLoadOrtho :載入正規投影矩陣

void rsMatrixLoadOrtho(rs_矩陣 4x4* m, 浮動式, 浮動式, 浮動式底部, 浮動式, 浮點值, 浮動於, 浮點值)
參數
分鐘要設定的矩陣。
向右箭頭
下半局
上半局
附近

建構正規投影矩陣,將六面裁剪平面 left, right, bottom, top, near, far 識別的方框轉換為一個直角為 (-1, -1, -1) 的單位方塊,而對面是 (1, 1, 1)

如要將此投影套用至向量,請使用 rsMatrixMultiply() 將向量乘以建立的矩陣。

請參閱 https://en.wikipedia.org/wiki/Orthographic_Forecast 。

rsMatrixLoadPerspective :載入透視投影矩陣

void rsMatrixLoadPerspective(rs_ Matrix4x4* m, 浮點型, 浮動式, 浮動式, 浮動式訊息, 浮點值]
參數
分鐘要設定的矩陣。
多霧視野 (以度為單位)。
切面x / y 的比率。
附近靠近裁切飛機的地方。
遠程裁剪飛機。

建構透視投影矩陣,並假設視野為對稱。

如要將此投影套用至向量,請使用 rsMatrixMultiply() 將向量乘以建立的矩陣。

rsMatrixLoadrot :載入旋轉矩陣

void rsMatrixLoadRotate(rs_ Matrix4x4* m, float rot, float x, float y, float z);
參數
分鐘要設定的矩陣。
旋轉要測量的旋轉角度,以度為單位。
x旋轉軸的向量 X 元件。
y旋轉軸的向量 Y 元件。
z旋轉軸的向量 Z 元件。

這個函式會建立旋轉矩陣。旋轉軸為 (x, y, z) 向量。

如要旋轉向量,請使用 rsMatrixMultiply() 將向量乘以建立的矩陣。

請參閱 https://zh.wikipedia.org/wiki/Rotation_ Matrix。

rsMatrixLoadScale :載入縮放矩陣

void rsMatrixLoadScale(rs_ Matrix4x4* m, float x, float y, float z);
參數
分鐘要設定的矩陣。
x多重元件的縮放比例。
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);
參數
分鐘產品的左矩陣和要設定的矩陣。
Rhs產品的右側矩陣。
英寸

如果是矩陣的矩陣變化版本,請將 m 設為矩陣乘積 m * rhs

使用這個函式結合兩個 4x4 轉換矩陣時,產生的矩陣會對應至執行 rhs 轉換,然後再執行原始的 m 轉換。

針對按向量變體劃分的矩陣,請用矩陣 (即) 傳迴向量的後乘。m * in

將 float3 乘以 rs_ Matrix4x4,時會展開 (1)。

將 float2 乘以 rs_ Matrix4x4,向量會以 (0, 1) 展開。

將 float2 乘以 rs_ Matrix3x3,向量會以 (0) 展開。

從 API 14 開始,這個函式會使用常數矩陣做為第一個引數。

rsMatrixRotate :將旋轉作業套用至轉換矩陣

void rsMatrixrot(rs_ Matrix4x4* m, 浮點旋轉, 浮點值 x, 浮點 y, 浮點 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多重元件的縮放比例。
y多重元件的縮放比例。
z多重縮放 Z 元件。

將矩陣 m 與縮放矩陣相乘。

這個函式會修改轉換矩陣,先執行縮放作業。縮放時,向量的每個元件都會乘以數字。這個數字可以是負數。

如要將這個合併轉換套用至向量,請使用 rsMatrixMultiply() 將向量乘以建立的矩陣。

rsMatrixSet :設定一個元素

void rsMatrixSet(rs_ Matrix2x2* m, uint32_t 資料欄, uint32_t 列, float v);
void rsMatrixSet(rs_ Matrix3x3* m, uint32_t 資料欄, uint32_t 列, float v);
void rsMatrixSet(rs_ Matrix4x4* m, uint32_t 資料欄, uint32_t 列, float v);
參數
分鐘會修改的矩陣。
要設定的元素從零開始。
要設定的元素列,從零開始。
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。