web-dev-qa-db-fra.com

Apple exemple de code de gyroscope

Je prévois de développer un projet basé sur le gyroscope comme la rotation d'une texture opengl en utilisant les données du gyroscope , y a-t-il un exemple de code publié à partir de Apple sur le gyroscope ou tout tutoriel sur l'intégration du gyroscope avec openGL ... J'ai recherché sur google je n'ai rien trouvé sauf guide de mouvement de base et guide de gestion des événements .

Mise à jour: veuillez me faire savoir si un échantillon est disponible.

30
Chandan Shetty SP

Pour obtenir des mises à jour du gyroscope, vous devez créer un objet motion manager 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 les documents, vous ne devez créer qu'un seul de ces gestionnaires par application. Je recommande de rendre le motionManager accessible via un singleton, mais c'est un travail supplémentaire que vous pourriez ne pas avoir à faire si vous instanciez votre classe une seule fois.

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

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 à partir de la méthode init. Ce qui suit stockera l'attitude initiale de l'appareil et amènera l'appareil à continuer d'é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, l'utilisation du gyroscope et d'OpenGL est assez simple. Vous devez obtenir l'attitude gyroscopique actuelle (rotation), puis la stocker dans une matrice compatible OpenGL. Le code ci-dessous récupère et enregistre le mouvement actuel de l'appareil.

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 n'est que sa transposition, ce qui signifie l'échange des colonnes et des lignes. Donc, ce qui précède 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 voulez les angles de lacet, de tangage et de roulis, vous pouvez y accéder facilement en utilisant

attitude.yaw
attitude.pitch
attitude.roll
58
twerdster

Je cherchais un exemple de code comme un projet très simple. Après plusieurs jours de recherche, je l'ai finalement trouvé. Voilà, les gars!

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

15
SamB

CoreMotion est la façon d'obtenir des données de gyroscope. Regardez CMGyrodata pour les données brutes ou utilisez les propriétés d'attitude et de taux de rotation de DeviceMotion.

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

5
mbehan
3
drewish