2011-11-25 7 views
2

나는 renderscript 만든 응용 프로그램에서 코드를 이식하여 OpenGL ES 2.0 android 응용 프로그램을 개발 중입니다. renderscript에서이 기능이 사용됩니다renderscript rsMatrixMultiply 함수

float4 rsMatrixMultiply(rs_matrix4x4 *m, float3 in); 

내가 자바를 사용하여 내 OpenGL을 응용 프로그램에서 사용할 필요가 있기 때문에 사람이, 그 구현 방법을 정확하게이 기능이 무엇을 알고 있습니까.

+0

: 아래 http://developer.android.com/reference/renderscript/rs__matrix_8rsh.html

는 AOSP의 rs_core.c에서 실제 코드입니다 // 개발자 .android.com/reference/android/opengl/Matrix.html. 수동 행렬 곱셈을해야 할 수도 있습니다. –

답변

4

이것은 'm'행렬과 'in'행렬 사이의 표준 행렬 곱셈입니다. 결과는 'm'에 다시 배치됩니다. 4x4 행렬에 크기 3의 벡터를 곱하기 위해이 함수는 벡터가 w 치수에 대해 1의 값으로 float4 인 것처럼 동작합니다. 이 기능을 주위에 문서에 대해서는

, 여기 좀 봐 : HTTP에게 여기를보세요

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

고맙습니다. 그러나이 링크에서이 함수가 무엇을하는지 정확히 설명하는 코드를 볼 수는 없습니다. u가 볼 수 있듯이, 4x4 행렬에 ** float3 ** 벡터가 곱해지기 때문입니다. 기본 수학에서 4x4 행렬에 float4 벡터를 곱할 수 있다는 것을 알고 있습니다. 이 경우에는 다른 계산을하는 일종의 오버로드 된 함수입니다. – Sandra

+0

@Sandra의 경우 함수는 벡터의 w 값에 대해 1 값을 가정합니다. 나는 내 대답을 편집했다. – spatulamania

+0

@spatulamania 그래서 이미지를 회전시키기 위해 이것을 사용할 수 있습니까? 그렇다면 어떻게? –

관련 문제