2010-01-10 21 views
3

J'essaie d'appliquer un filtre de Kalman aux données provenant de l'accéléromètre de l'iPhone. J'ai besoin d'effectuer la multiplication et l'inversion de matrices aussi vite que possible, ainsi j'étais curieux au sujet de la possibilité d'employer le GPU pour effectuer ces deux tâches. A partir de maintenant je trouve qu'une seule référence pour la multiplication de la matrice:Multiplication et inversion de la matrice iPhone

float mBone01[16] = { ... } 
float mBone02[16] = { ... } 
float mResult[16]; 

glMatrixMode (GL_MODELVIEW); 
glLoadIdentity(); 
glLoadMatrix (mBone01); 
glMultMatrix (mBone02); 
glGetMatrix (GL_MODELVIEW, mResult); 

même difficile l'utilisateur est pas vraiment sûr du fait que cette multiplication est réalisée à l'intérieur du GPU. Avez-vous un indice sur la façon de faire (si possible) la même chose pour l'inversion?

Merci à tous!

+0

Regardez [MGKalman] (https://github.com/ghenania/MGKalman). C'est exactement ce dont vous avez besoin. –

Répondre

2

Le seul moyen sûr d'effectuer des calculs sur le GPU est d'utiliser shaders. Cela dit, ni OpenGL ni GLSL n'ont de fonction intégrée pour calculer les matrices inverses, vous devez les coder vous-même.

5

Comme Kornel (et le OpenGL FAQ) l'a déjà dit, OpenGL ne fournit pas une implémentation d'une inversion de matrice.
This thread a quelques implémentations C++, cela devrait fonctionner avec le SDK de l'iPhone.
En outre, en appelant l'API OpenGL, votre code ne s'exécute pas sur le GPU.
Pour utiliser le GPU de l'iPhone, vous devez utiliser OpenGL ES 2.0, qui est actuellement disponible uniquement sur les modèles suivants:

  • iPhone 3GS
  • nouveau iPod touch 32 Go
  • nouvelle 64Go iPod touch

Apple a un exemple de projet, qui utilise OpenGL ES 2.0 et shaders: http://developer.apple.com/iphone/library/samplecode/GLES2Sample/index.html

+0

+1 pour une réponse plus complète :) –

+0

Merci! Je viens de vous donner un vote, parce que c'est aussi correct. –

+0

"votre code ne fonctionne pas sur le GPU" -> vous voulez probablement dire le code matriciel, puisque sans l'accélération GPU dans d'autres domaines, OpenGL aurait très peu de sens sur l'iPhone. –

0

Le code vfpmathlibrary sur Google contient un assemblage vfp rapide pour plusieurs opérations de matrice, y compris une inversion. Ce serait probablement gagner à l'aide de shaders simplement en raison des frais généraux que cela impliquerait.