總覽
這些函式可讓您操控排名 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 列); |
參數
分鐘 | 用來擷取元素的矩陣。 |
---|---|
欄 | 要擷取的元素從零開始。 |
列 | 要擷取的元素列,從零開始。 |
傳回矩陣的一個元素。
警告:資料欄和資料列參數的順序可能不符合預期。
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。