總覽
這些函式可讓您操控排名 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。