Android opengl проблема с перекосом усеченного в левом / правом направлениях - PullRequest
0 голосов
/ 13 сентября 2011

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

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

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

1 Ответ

0 голосов
/ 13 сентября 2011

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

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

...