iphone - rotacion - Código de muestra del giroscopio Apple
rotar pantalla iphone 6 (4)
Estoy planeando desarrollar un proyecto basado en un giroscopio como rotar una textura opengl utilizando datos de giroscopio , ¿hay algún código de muestra lanzado de manzana sobre giroscopio o cualquier tutorial sobre la integración de giroscopio con OpenGL ... Busqué en google no encontré nada excepto núcleo guía de movimiento y guía de manejo de eventos .
Actualizado: por favor, avíseme si hay alguna muestra disponible ..
A continuación se incluye un ejemplo del código de muestra de Apple para el marco CoreMotion: http://developer.apple.com/library/ios/#samplecode/pARk/Introduction/Intro.html#//apple_ref/doc/uid/DTS40011083
Y el UIAccelerometer de estilo antiguo (pero tiene un buen código de muestra para trabajar con OpenGL): http://developer.apple.com/library/ios/#samplecode/GLGravity/Listings/Classes_GLGravityView_m.html#//apple_ref/doc/uid/DTS40007327-Classes_GLGravityView_m-DontLinkElementID_6
CoreMotion es cómo obtener datos de giroscopio. Mire CMGyrodata para datos brutos o use la actitud DeviceMotion y las propiedades de velocidad de rotación.
Recomiendo ver la sesión WWDC de ''Device Motion'' si eres un desarrollador de Apple registrado.
He estado buscando un código de muestra como un proyecto muy simple. Después de varios días de búsqueda, finalmente lo encontré. ¡Aquí van chicos!
http://cs491f10.wordpress.com/2010/10/28/core-motion-gyroscope-example/
Para obtener actualizaciones de giroscopios, debe crear un objeto de gestor de movimiento y, opcionalmente (pero recomendado), un objeto de actitud de referencia.
Entonces en su definición de interfaz agrega:
CMMotionManager *motionManager;
CMAttitude *referenceAttitude;
Según los documentos, solo debe crear uno de estos administradores por aplicación. Recomiendo hacer accesible el MotionManager a través de un singleton, pero ese es un trabajo extra que quizás no necesite hacer si solo crea una instancia de su clase una vez.
Luego, en su método init, debe asignar el objeto gestor de movimiento de esa manera;
motionManager = [[CMMotionManager alloc] init];
referenceAttitude = nil;
Cuando desee habilitar las actualizaciones de movimiento, puede crear un método enableMotion o simplemente llamarlo desde el método init. Lo siguiente almacenará la actitud inicial del dispositivo y hará que el dispositivo continúe muestreando el giroscopio y actualizando su propiedad de actitud.
-(void) enableMotion{
CMDeviceMotion *deviceMotion = motionManager.deviceMotion;
CMAttitude *attitude = deviceMotion.attitude;
referenceAttitude = [attitude retain];
[motionManager startDeviceMotionUpdates];
}
Para las aplicaciones de realidad virtual que usan el giroscopio y OpenGL es bastante simple. Necesita obtener la actitud (giro) actual del giroscopio y luego almacenarla en una matriz compatible con OpenGL. El siguiente código recupera y guarda el movimiento actual del 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;
}
Dependiendo de lo que quieras hacer con eso, tendrás que invertirlo, lo cual es muy fácil. La inversa de una rotación es simplemente su transposición, lo que significa el intercambio de columnas y filas. Entonces lo anterior se convierte en:
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 quieres los ángulos de inclinación, inclinación y balanceo, entonces puedes acceder a ellos fácilmente usando
attitude.yaw
attitude.pitch
attitude.roll