30 votes

Exemple de code pour le gyroscope d'Apple

J'ai l'intention de développer un projet basé sur le gyroscope, comme faire tourner un texture opengl utilisant les données du gyroscope Est-ce qu'il y a un exemple de code publié par Apple sur le gyroscope ou un tutoriel sur l'intégration du gyroscope avec openGL ? J'ai cherché sur google et je n'ai rien trouvé sauf guide de mouvement du noyau y guide de gestion des événements .

Mis à jour : S'il vous plaît laissez-moi savoir si un échantillon disponible..

58voto

twerdster Points 3065

Pour obtenir des mises à jour du gyroscope, vous devez créer un objet de gestion du mouvement et éventuellement (mais recommandé) un objet d'attitude de référence.

Donc dans votre définition d'interface vous ajoutez :

CMMotionManager *motionManager;
CMAttitude *referenceAttitude;

Selon la documentation, vous ne devez créer qu'un seul de ces gestionnaires par application. Je recommande de rendre le motionManager accessible par un singleton, mais c'est un travail supplémentaire que vous n'aurez peut-être pas besoin de faire si vous n'instanciez votre classe qu'une seule fois.

Ensuite, dans votre méthode init, vous devez allouer l'objet motion manager comme suit ;

motionManager = [[CMMotionManager alloc] init];
referenceAttitude = nil; 

Lorsque vous souhaitez activer les mises à jour de mouvement, vous pouvez créer une méthode enableMotion ou simplement l'appeler depuis la méthode init. La méthode suivante stocke l'attitude initiale du dispositif et fait en sorte que le dispositif continue à échantillonner le gyroscope et à mettre à jour sa propriété d'attitude.

-(void) enableMotion{
        CMDeviceMotion *deviceMotion = motionManager.deviceMotion;      
        CMAttitude *attitude = deviceMotion.attitude;
        referenceAttitude = [attitude retain];
        [motionManager startDeviceMotionUpdates];
}

Pour les applications de réalité virtuelle, utiliser le gyroscope et OpenGL est assez simple. Vous devez obtenir l'attitude actuelle du gyroscope (rotation) et la stocker dans une matrice compatible OpenGL. Le code ci-dessous récupère et enregistre le mouvement actuel du dispositif.

GLfloat rotMatrix[16];

-(void) getDeviceGLRotationMatrix 
{
        CMDeviceMotion *deviceMotion = motionManager.deviceMotion;      
        CMAttitude *attitude = deviceMotion.attitude;

        if (referenceAttitude != nil) [attitude multiplyByInverseOfAttitude:referenceAttitude];
        CMRotationMatrix rot=attitude.rotationMatrix;
        rotMatrix[0]=rot.m11; rotMatrix[1]=rot.m21; rotMatrix[2]=rot.m31;  rotMatrix[3]=0;
        rotMatrix[4]=rot.m12; rotMatrix[5]=rot.m22; rotMatrix[6]=rot.m32;  rotMatrix[7]=0;
        rotMatrix[8]=rot.m13; rotMatrix[9]=rot.m23; rotMatrix[10]=rot.m33; rotMatrix[11]=0;
        rotMatrix[12]=0;      rotMatrix[13]=0;      rotMatrix[14]=0;       rotMatrix[15]=1;
}

Selon ce que vous voulez en faire, vous devrez peut-être l'inverser, ce qui est très facile. L'inverse d'une rotation est simplement sa transposition, ce qui signifie échanger les colonnes et les lignes. Ainsi, la phrase ci-dessus devient :

rotMatrix[0]=rot.m11; rotMatrix[4]=rot.m21; rotMatrix[8]=rot.m31;  rotMatrix[12]=0;
rotMatrix[1]=rot.m12; rotMatrix[5]=rot.m22; rotMatrix[9]=rot.m32;  rotMatrix[13]=0;
rotMatrix[2]=rot.m13; rotMatrix[6]=rot.m23; rotMatrix[10]=rot.m33; rotMatrix[14]=0;
rotMatrix[3]=0;       rotMatrix[7]=0;       rotMatrix[11]=0;       rotMatrix[15]=1;

Si vous souhaitez connaître les angles de lacet, de tangage et de roulis, vous pouvez y accéder facilement à l'aide de la fonction

attitude.yaw
attitude.pitch
attitude.roll

15voto

SamB Points 454

J'ai cherché un exemple de code pour un projet très simple. Après plusieurs jours de recherche, je l'ai enfin trouvé. Et voilà les gars !

http://cs491f10.wordpress.com/2010/10/28/core-motion-gyroscope-example/

5voto

mbehan Points 2203

CoreMotion permet d'obtenir les données du gyroscope. Regardez CMGyrodata pour les données brutes ou utilisez les propriétés d'attitude et de taux de rotation de DeviceMotion.

Je vous recommande de regarder la session "Device Motion" de la WWDC si vous êtes un développeur Apple enregistré.

3voto

drewish Points 2114

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X