我正在开发一个OpenGL ES 2.0 android应用程序,通过移植一个renderscript创建的应用程序的代码。在renderscript中使用此函数:
float4 rsMatrixMultiply(rs_matrix4x4 *m, float3 in);
有谁知道这个函数到底是做什么以及它是如何实现的,因为我需要在使用Java的OpenGL应用程序中使用它。
答案 0 :(得分:4)
这在矩阵'm'和矢量'in'之间进行标准矩阵乘法。结果放回'm'。为了将4x4矩阵与大小为3的向量相乘,此函数的行为就好像向量为float4,w维度的值为1。
有关此功能的文档,请查看此处: 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;
}