Я создаю что-то вроде приложения с дополненной реальностью, в котором у меня есть сцена OpenGL, в которой я хочу оставаться наравне с гравитацией независимо от того, как движется устройство iOS. Я думал, что у меня все в порядке с CMDeviceMotion.attitude.pitch, пока не обнаружил, что наклонение iPhone вбок мешает этому числу. Поэтому я взял некоторый код из примера pARk * и сейчас пытаюсь изолировать вращение вокруг вертикального доступа. Сцена, которую я рисую, не волнует, к какому заголовку направлен пользователь, фигуры всегда будут отрисовываться на заданном расстоянии от зрителя. Я думаю, что когда я вычисляю компонент вращения по вертикальной оси, я могу повернуть его и умножить на матрицу вращения, чтобы сохранять значения OpenGL, когда пользователь меняет курс.
Вот мой код:
CMDeviceMotion *d = motionManager.deviceMotion;
if (d != nil) {
CMRotationMatrix r = d.attitude.rotationMatrix;
transformFromCMRotationMatrix(cameraTransform, &r);
mat4f_t projectionCameraTransform;
multiplyMatrixAndMatrix(projectionCameraTransform, projectionTransform, cameraTransform);
GLKMatrix4 rotMatrix = GLKMatrix4Make(projectionCameraTransform[0],
projectionCameraTransform[1],
projectionCameraTransform[2],
projectionCameraTransform[3],
projectionCameraTransform[4],
projectionCameraTransform[5],
projectionCameraTransform[6],
projectionCameraTransform[7],
projectionCameraTransform[8],
projectionCameraTransform[9],
projectionCameraTransform[10],
projectionCameraTransform[11],
projectionCameraTransform[12],
projectionCameraTransform[13],
projectionCameraTransform[14],
projectionCameraTransform[15]);
}
Затем я использую rotMatrix как обычно в OpenGL.
Мысли, предложения? Заранее спасибо.
* Пример кода pARk устанавливает несколько точек в реальном пространстве, определяет местоположение пользователя и относительное направление этих точек и рисует их на экране, так что кажется, что они плавают на горизонте, указывая на их местоположение.