2

我正在开发一个 OpenGL ES 2.0 android 应用程序,通过从渲染脚本创建的应用程序中移植代码。在 renderscript 中使用了这个函数:

float4 rsMatrixMultiply(rs_matrix4x4 *m, float3 in);

有谁知道这个函数究竟做了什么以及它是如何实现的,因为我需要在我的使用 Java 的 OpenGL 应用程序中使用它。

4

1 回答 1

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;
}
于 2012-02-01T04:15:57.063 回答