Проблема Android opengl с перекосом усеченного конуса влево/вправо

Я пишу простое приложение для тестирования гироскопа, в котором я хочу иметь разные стороны многоугольника, наклоняя телефон в другую ориентацию. Это похоже на технику рендеринга с отслеживанием головы, но я предполагаю фиксированное положение глаз, и только телефон перемещается относительно глаза (камеры).

Чтобы сделать это, я использовал трюк с перекосом усеченного конуса в 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]);

Кто-нибудь сталкивался с этим?


person bill    schedule 13.09.2011    source источник
comment
Может быть связано с stackoverflow.com/questions/11697728/   -  person Learn OpenGL ES    schedule 28.07.2012


Ответы (1)


Вы применяете обзорную матрицу к проекции. Вы не должны этого делать. Преобразование проекции лишь задает свойства «виртуального объектива». Размещение камеры происходит при преобразовании вида модели.

Отсутствие разделения этих двух элементов вызывает проблемы при реализации освещения.

person datenwolf    schedule 13.09.2011
comment
code.google.com/p/android/issues/detail?id= 35646 Нет, это ошибка фреймворка. - person PawelP; 17.10.2013