Я пишу простое приложение для тестирования гироскопа, в котором я хочу иметь разные стороны многоугольника, наклоняя телефон в другую ориентацию. Это похоже на технику рендеринга с отслеживанием головы, но я предполагаю фиксированное положение глаз, и только телефон перемещается относительно глаза (камеры).
Чтобы сделать это, я использовал трюк с перекосом усеченного конуса в opengles. Я мог без проблем сместить усеченную пирамиду в верхнем/нижнем/ближнем/дальнем направлениях. Действительно странная часть началась, когда я получил направления влево/вправо для работы только в том случае, если я разделил значения смещения на 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]);
Кто-нибудь сталкивался с этим?