Я пишу простое приложение для тестирования гироскопа, в котором я хочу, чтобы можно было использовать разные стороны многоугольника, наклоняя телефон в другую ориентацию. Это похоже на технику рендеринга с отслеживанием головы, но я предполагаю фиксированное положение глаза, и только телефон перемещается относительно глаза (камеры).
Для этого я использовал трюк с перекошенным усечением в opengl es. Я мог бы смещать усеченный в верхнем / нижнем / ближнем / дальнем направлениях без проблем. По-настоящему странная часть возникла, когда я получил направление влево / вправо, только если разделить значения смещения на 2. Эффективно «сжимая» усеченный конус от того, чем оно действительно должно быть.
Вот рабочий пример кода с ошибкой деления на 2 в левом / правом направлении:
// xEyePhone is the transform of eye relative to the screen, note the /2.0f for the 3rd and 4th params.
Matrix.frustumM(_ProjMatrix, 0, -ratio-xEyePhone[12]/2.0f, ratio-xEyePhone[12]/2.0f, 1-xEyePhone[13], 1-xEyePhone[13], xEyePhone[14], xEyePhone[14]+10);
Matrix.setLookAtM(_VMatrix, 0, xEyePhone[12], xEyePhone[13], xEyePhone[14],
XEyeCenterWorld[12], xEyeCenterWorld[13], xEyeCenterWorld[14],
XUpVectorWorld[12], xUpVectorWorld[13], xUpVectorWorld[14]);
Кто-нибудь сталкивался с этим?