我正在開發一個OpenGL ES 2.0 android應用程序,通過從renderscript創建的應用程序中移植代碼。在此的renderScript功能用於:renderscript rsMatrixMultiply函數
float4 rsMatrixMultiply(rs_matrix4x4 *m, float3 in);
有誰知道正是這種功能是什麼,它是如何實現的,因爲我需要使用Java使用它在我的OpenGL應用程序。
我正在開發一個OpenGL ES 2.0 android應用程序,通過從renderscript創建的應用程序中移植代碼。在此的renderScript功能用於:renderscript rsMatrixMultiply函數
float4 rsMatrixMultiply(rs_matrix4x4 *m, float3 in);
有誰知道正是這種功能是什麼,它是如何實現的,因爲我需要使用Java使用它在我的OpenGL應用程序。
這是矩陣'm'和矢量'in'之間的標準矩陣乘法。結果放回'm'。爲了將4x4矩陣與大小爲3的矢量相乘,此函數的行爲就好像矢量爲w維度的值爲1的float4。
爲了解決這個函數的文檔,看看這裏: http://developer.android.com/reference/renderscript/rs__matrix_8rsh.html
下面是從AOSP的rs_core.c的實際代碼:
extern float4 __attribute__((overloadable))
rsMatrixMultiply(const rs_matrix4x4 *m, float3 in) {
float4 ret;
ret.x = (m->m[0] * in.x) + (m->m[4] * in.y) + (m->m[8] * in.z) + m->m[12];
ret.y = (m->m[1] * in.x) + (m->m[5] * in.y) + (m->m[9] * in.z) + m->m[13];
ret.z = (m->m[2] * in.x) + (m->m[6] * in.y) + (m->m[10] * in.z) + m->m[14];
ret.w = (m->m[3] * in.x) + (m->m[7] * in.y) + (m->m[11] * in.z) + m->m[15];
return ret;
}
謝謝你的回覆。但是從這個鏈接中我看不到能準確解釋這個函數做什麼的代碼。因爲你可以看到,它將一個4x4矩陣乘以** float3 **向量。從基礎數學我知道你可以用float4向量乘4x4矩陣。在這種情況下,它是一種重載函數,它執行不同的計算。 – Sandra
@Sandra,該函數爲矢量的w值假定值爲1。我編輯了我的回覆。 – spatulamania
@spatulamania所以這可以用來旋轉圖像?如果是這樣,怎麼樣? –
看看這裏的http://開發商.android.com/reference/android/opengl/Matrix.html。你可能不得不做一些手動矩陣乘法。 –