Estoy creando un rompecabezas 2D para iOS y actualmente estoy intentando implementar el zoom y el desplazamiento con UIPinchGestureRecognizer.Acercar y deslizar con OpenGL ES
El zoom se hace de esta manera: tengo un vector 2D objetivo que es un "punto de acercamiento". El código es:
glTranslatef(target.x, target.y, 0);
glScalef(scale, scale, 0);
glTranslatef(-target.x, -target.y, 0);
objetivo se está seleccionando con reconocedor gesto de esta manera:
-(void)handlePinchGesture:(UIPinchGestureRecognizer*)recognizer
{
if (UIGestureRecognizerStateBegan == [recognizer state])
{
view->setTarget([recognizer locationInView:self]);
}
// Rest of the code omitted
}
Todo funciona muy bien.
Inicialmente, el juego fue diseñado para iPAD, pero también quiero que funcione en iPhone y en iPOD. Pero iPhone y iPOD tienen una relación de aspecto diferente. Para mantener las proporciones iniciales de la imagen, decidí hacer la escala Y inicial un poco más grande. También esto hizo posible deslizar el campo de juego hacia arriba y hacia abajo con el factor de zoom inicial. El código es:
glTranslatef(target.x, target.y, 0);
glScalef(scale, scale * aspectRatio, 0);
glTranslatef(-target.x, -target.y, 0);
Esto funciona bien si el campo de juego está "centrado" en la pantalla (por ejemplo, cuando hay un espacio igual en direcciones bot banda magnética (arriba y abajo).). Pero si deslizamos el campo hacia arriba o hacia abajo y comenzamos un gesto de pellizco, el campo de juego vuelve a saltar al centro.
Entiendo que necesito traducir la posición del gesto por un desplazamiento, pero no puedo calcular exactamente durante 3 días.
No obtuve exactamente el zoom y el código móvil, pero parece que no se tiene en cuenta la nueva posición de la escena después del movimiento y el zoom con la posición anterior como centro de acercamiento. Debes recordar en qué posición está tu escena actualmente y escalar y traducir concat. –
No manejo la posición de la escena, solo escala el "objetivo", que puede estar en cualquier lugar de la pantalla y no se puede confiar en :( – riens
En lugar de encontrar y recalibrar la función "glOrthof", escalar con una relación de aspecto .. –