Перевод с помощью GLKMatrix4Translate, кажется, перемещается по камере, а не по происхождению - PullRequest
0 голосов
/ 11 января 2012

Я пытаюсь разрешить пользователю перемещаться вверх / вниз и влево / вправо к объекту в OpenGL ES.Я использую GLKit для всего рисования и движения.Я включил сенсорные события, чтобы отслеживать, как пользователь хочет переместить объект.Я использую GLKMatrix4Translate для сдвига панорамирования объекта, но по некоторым причинам он также имеет вращательный компонент.

Я собираю точки перевода от прикосновения пользователя и сохраняю их в CGPoint:

CGPoint center;

Я использую center.x и center.y для позиций X и Y, которые я хочу перевести.Я выполняю перевод с этой строкой:

GLKMatrix4 modelViewMatrix = GLKMatrix4Translate(GLKMatrix4Identity, center.x, center.y, 0.0f);

Есть идеи?

1 Ответ

0 голосов
/ 13 января 2012

Я понял, в чем здесь проблема.Я прекратил использовать GLKMatrix4Translate и заменил его на GLKMatrix4MakeLookAt.GLKMatrix4MakeLookAt позволяет перемещать камеру, что дает искомый эффект.

Простое использование этого кода приводит к той же проблеме, которую я уже видел.Модель поворачивается во время панорамирования.

GLKMatrix4MakeLookAt(0, 0, 7,
                     center.x, center.y 0,
                     0, 1, 0);

Это означает, что вы хотите, чтобы камера всегда смотрела на (0,0,7) с центром в (center.x, center.y,0) с осью Y, направленной вверх.Направление глаза - это проблема.Если модель вращается (что и есть), вам нужно направить глаз на вновь повернутую точку.

Замена вышеприведенного кода ниже, похоже, помогает.

GLKMatrix4MakeLookAt(rotation.x, rotation.y, 7,
                     center.x, center.y, 0,
                     0, 1, 0);
...