2 Stimmen

RenderScript rsMatrixMultiply-Funktion

Ich entwickle eine OpenGL ES 2.0 Android-Anwendung, indem ich den Code aus einer Renderscript-erstellten Anwendung portiere. In Renderscript wird diese Funktion verwendet:

float4 rsMatrixMultiply(rs_matrix4x4 *m, float3 in);

Weiß jemand, was genau diese Funktion macht und wie sie implementiert ist, da ich sie in meiner OpenGL-Anwendung mit Java nutzen muss.

0 Stimmen

Schauen Sie sich hier developer.android.com/reference/android/opengl/Matrix.html an. Möglicherweise müssen Sie eine manuelle Matrixmultiplikation durchführen.

4voto

spatulamania Punkte 6533

Dies führt eine Standardmatrixmultiplikation zwischen der Matrix 'm' und dem Vektor 'in' durch. Das Ergebnis wird wieder in 'm' platziert. Um die 4x4-Matrix mit einem Vektor der Größe 3 zu multiplizieren, verhält sich diese Funktion so, als ob der Vektor float4 mit einem Wert von 1 für die w-Dimension wäre.

Für die Dokumentation zu dieser Funktion schauen Sie hier nach: http://developer.android.com/reference/renderscript/rs__matrix_8rsh.html

Im Folgenden finden Sie den tatsächlichen Code aus rs_core.c des AOSP:

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 Stimmen

Danke für Ihre Antwort. Aber aus diesem Link kann ich nicht den Code sehen, der genau erklärt, was diese Funktion macht. Wie Sie sehen können, multipliziert sie eine 4x4-Matrix mit einem float3-Vektor. Aus der Grundrechenart weiß ich, dass Sie eine 4x4-Matrix mit einem float4-Vektor multiplizieren können. In diesem Fall handelt es sich um eine Art überladene Funktion, die eine andere Berechnung durchführt.

0 Stimmen

@Sandra, die Funktion nimmt einen Wert von 1 für den w-Wert des Vektors an. Ich habe meine Antwort bearbeitet.

0 Stimmen

@spatulamania könnte dies verwendet werden, um Bilder zu drehen? Wenn ja, wie?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X