Пример кода гироскопа Apple - PullRequest
30 голосов
/ 14 июля 2010

Я планирую разработать проект на основе гироскопа, например, вращение текстуры opengl с использованием данных гироскопа , есть ли какой-нибудь пример кода, выпущенный из apple по гироскопу, или какое-либо руководство по интеграции гироскопа с openGL ... Я искалGoogle, я не нашел ничего, кроме основного руководства по движению и руководства по обработке событий .

Обновлено: пожалуйста, дайте мне знать, если какой-либо образец доступен ..

Ответы [ 4 ]

58 голосов
/ 16 октября 2010

Для получения обновлений гироскопа необходимо создать объект диспетчера движения и, при желании (но рекомендуется), объект ссылочной ориентации

Итак, в вашем определении интерфейса вы добавляете:

CMMotionManager *motionManager;
CMAttitude *referenceAttitude;

Согласно документам, вы должны создать только одного из этих менеджеров для каждого приложения. Я рекомендую сделать motionManager доступным через синглтон, но это некоторая дополнительная работа, которая может не потребоваться, если вы создаете экземпляр класса только один раз.

Тогда в вашем методе init вы должны выделить объект менеджера движений следующим образом;

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

Если вы хотите включить обновления движения, вы можете создать метод enableMotion или просто вызвать его из метода init. Следующее будет сохранять начальное положение устройства и заставлять устройство продолжать выборку гироскопа и обновлять его свойство ориентации.

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

Для приложений виртуальной реальности использовать гироскоп и OpenGL довольно просто. Вам необходимо получить текущее положение гироскопа (вращение) и затем сохранить его в OpenGL-совместимой матрице. Приведенный ниже код извлекает и сохраняет текущее движение устройства.

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;
}

В зависимости от того, что вы хотите сделать с этим, вам, возможно, придется инвертировать это, что очень легко. Инверсия вращения - это просто его транспонирование, что означает обмен столбцами и строками. Таким образом, выше становится:

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;

Если вам нужны углы рыскания, тангажа и крена, вы можете легко получить к ним доступ, используя

attitude.yaw
attitude.pitch
attitude.roll
15 голосов
/ 01 октября 2011

Я искал пример кода как очень простой проект.После нескольких дней поисков я наконец нашел его.Вот, пожалуйста, ребята!

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

5 голосов
/ 14 июля 2010

CoreMotion - это способ получения данных гироскопа.Посмотрите на CMGyrodata для необработанных данных или используйте свойства ориентации и скорости вращения DeviceMotion.

Я бы порекомендовал посмотреть сеанс WWDC Device Motion, если вы являетесь зарегистрированным разработчиком Apple.

3 голосов
/ 14 ноября 2011

Вот пример кода Apple для платформы CoreMotion: http://developer.apple.com/library/ios/#samplecode/pARk/Introduction/Intro.html#//apple_ref/doc/uid/DTS40011083

И UIAccelerometer старого стиля (но у него есть хороший пример кода для работы с OpenGL): http://developer.apple.com/library/ios/#samplecode/GLGravity/Listings/Classes_GLGravityView_m.html#//apple_ref/doc/uid/DTS40007327-Classes_GLGravityView_m-DontLinkElementID_6

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...