2011-11-25 73 views
2

我正在開發一個OpenGL ES 2.0 android應用程序,通過從renderscript創建的應用程序中移植代碼。在此的renderScript功能用於:renderscript rsMatrixMultiply函數

float4 rsMatrixMultiply(rs_matrix4x4 *m, float3 in); 

有誰知道正是這種功能是什麼,它是如何實現的,因爲我需要使用Java使用它在我的OpenGL應用程序。

+0

看看這裏的http://開發商.android.com/reference/android/opengl/Matrix.html。你可能不得不做一些手動矩陣乘法。 –

回答

4

這是矩陣'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; 
} 
+0

謝謝你的回覆。但是從這個鏈接中我看不到能準確解釋這個函數做什麼的代碼。因爲你可以看到,它將一個4x4矩陣乘以** float3 **向量。從基礎數學我知道你可以用float4向量乘4x4矩陣。在這種情況下,它是一種重載函數,它執行不同的計算。 – Sandra

+0

@Sandra,該函數爲矢量的w值假定值爲1。我編輯了我的回覆。 – spatulamania

+0

@spatulamania所以這可以用來旋轉圖像?如果是這樣,怎麼樣? –