Código de exemplo do giroscópio da Apple

Eu estou planejando desenvolver um projeto baseado em giroscópio como girar uma textura opengl usando dados de giroscópio , existe algum código de amostra liberado de apple sobre giroscópio ou qualquer tutorial sobre a integração do giroscópio com openGL … Eu procurei no google eu não encontrei nada, exceto núcleo guia de movimento e guia de manipulação de events .

Atualizado: Por favor, deixe-me saber se alguma amostra disponível ..

Para obter atualizações giroscópicas, você precisa criar um object gerenciador de movimentos e, opcionalmente (mas recomendado), um object de atitude de referência

Então, na sua definição de interface, você adiciona:

CMMotionManager *motionManager; CMAttitude *referenceAttitude; 

De acordo com os documentos, você deve criar apenas um desses gerenciadores por aplicativo. Eu recomendo tornar o motionManager acessível por meio de um singleton, mas isso é um trabalho extra que talvez você não precise fazer se instanciar sua class apenas uma vez.

Em seguida, no seu método init, você deve alocar o object gerenciador de movimentos como tal;

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

Quando você quiser ativar as atualizações de movimento, você pode criar um método enableMotion ou apenas chamá-lo pelo método init. O seguinte irá armazenar a atitude inicial do dispositivo e fazer com que o dispositivo continue a amostragem do giroscópio e atualizando sua propriedade de atitude.

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

Para aplicações de realidade virtual usando o giroscópio e OpenGL é bem simples. Você precisa obter a atitude giroscópica atual (rotação) e armazená-la em uma matriz compatível com OpenGL. O código abaixo recupera e salva o movimento atual do dispositivo.

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

Dependendo do que você quer fazer com isso, você pode ter que invertê-lo, o que é muito fácil. O inverso de uma rotação é apenas sua transposição, o que significa trocar as colunas e linhas. Então, o acima se torna:

 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; 

Se você quer os ângulos de inclinação, inclinação e inclinação, você pode acessá-los facilmente usando

 attitude.yaw attitude.pitch attitude.roll 

Eu tenho procurado por algum código de exemplo como um projeto muito simples. Depois de vários dias de busca, finalmente encontrei. Aqui vai vocês!

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

O CoreMotion é como obter dados do giroscópio. Olhe para CMGyrodata para dados brutos ou use as propriedades de atitude e rotação de DeviceMotion.

Eu recomendaria assistir à session do WWDC “Device Motion” se você fosse um desenvolvedor de maçã registrado.

Veja alguns dos exemplos de código da Apple para a estrutura do CoreMotion: http://developer.apple.com/library/ios/#samplecode/pARk/Introduction/Intro.html#//apple_ref/doc/uid/DTS40011083

E o UIAccelerometer de estilo antigo (mas ele tem um bom código de exemplo para trabalhar com o OpenGL): http://developer.apple.com/library/ios/#samplecode/GLGravity/Listings/Classes_GLGravityView_m.html#//apple_ref/doc/ uid / DTS40007327-Classes_GLGravityView_m-DontLinkElementID_6