Масштабирование и прокрутка с помощью OpenGL ES

Я делаю 2D-головоломку для iOS, и в настоящее время я пытаюсь реализовать масштабирование и прокрутку с помощью UIPinchGestureRecognizer.

Масштабирование выполняется следующим образом: у меня есть целевой 2D-вектор, который является "точкой масштабирования". Код:

glTranslatef(target.x, target.y, 0);
glScalef(scale, scale, 0);
glTranslatef(-target.x, -target.y, 0);

Цель выбирается с помощью распознавателя жестов следующим образом:

-(void)handlePinchGesture:(UIPinchGestureRecognizer*)recognizer
{
    if (UIGestureRecognizerStateBegan == [recognizer state])
    {
        view->setTarget([recognizer locationInView:self]);
    }
    // Rest of the code omitted
}

Все работает отлично.

Первоначально игра была разработана для iPAD, но я хочу, чтобы она работала и на iPhone, и на iPOD. Но iPhone и iPOD имеют разные пропорции. Чтобы сохранить начальные пропорции изображения, я решил сделать начальную шкалу Y немного больше. Также это позволило прокручивать игровое поле вверх и вниз с первоначальным коэффициентом масштабирования. Код:

glTranslatef(target.x, target.y, 0);
glScalef(scale, scale * aspectRatio, 0);
glTranslatef(-target.x, -target.y, 0);

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

Я понимаю, что мне нужно перевести позицию жестов на какое-то смещение, но я не могу понять, как именно на 3 дня.

Ответ 1

Сохраните объем перевода, который вы делаете при прокрутке, затем после каждого вызова handlePinchGesture примените перевод, который вы сохранили при прокрутке.

Надеюсь, это поможет.