Je souhaite pincer le zoom autour d'une coordonnée spécifique sur une carte 3D en mosaïque 15 x 15. C'est à dire. Je ne veux pas faire un zoom sur l'origine. J'ai donc besoin de paner le tableau en conséquence. J'utilise un PerspectiveCamera
(proche = 0.1f, lointain = 100f). Pour un ajustement parfait de l'écran, la caméra est située au approx.z=13.4
avant de zoomer.Pincer le zoom et effectuer un panoramique à des coordonnées d'écran spécifiques
maintenant ce que (je pense) que je veux faire est de:
Unproject les coordonnées d'écran (méthode GestureDetector.pinch
) fait une fois pour chaque pincée de zoom:
float icx = (initialPointer1.x + initialPointer2.x)/2;
float icy = (initialPointer1.y + initialPointer2.y)/2;
pointToMaintain = new Vector3(icx, icy, 0f);
mCamera.unproject(pointToMaintain);
maintenant pour chaque cycle de zoom (comme Je régler le mCamera.z
en conséquence et faire mCamera.update()
) Je projette le point de retour à l'écran les coordonnées:
Vector3 pointNewPos = new Vector3(pointToMaintain);
mCamera.project(pointNewPos);
calcule ensuite la delta et panoramique en conséquence:
int dX = (int) (pointNewPos.x - icx);
int dY = (int) (pointNewPos.y - icy);
pan(...); /* I.e. mCamera.translate(...) */
Mon problème est que le mCamera.z est initialement au-dessus pointToMaintain.z puis passe ci-dessous lorsque l'utilisateur déplace les doigts:
cam.z ptm.z dX dY
0 13.40
1 13.32 13.30 12 134
2 13.24 13.30 12 -188
...
(0) est l'original valeur de mCamera.z avant le début du zoom. (1) n'est pas valide? Cependant (2) devrait être OK.
Mes questions sont les suivantes:
(1) Comment puis-je obtenir un "valide" pointToMaintain
lorsque l'écran unprojecting coordonnées sur l'appareil photo. C'est à dire. un point qui n'est pas inférieur à cam.z
. (La raison pour laquelle je reçois le point à 13.30 est (je suppose) parce que près = 0.1f Mais comme vu ci-dessus cela se traduit par (étranges?) Coordonnées de l'écran).
(2) Est-ce une bonne stratégie pour rapprocher le panneau de carreaux des coordonnées que l'utilisateur a pincées?
thisZoom est initialement pas 0 droit? Vous le définissez à la valeur camera.z? – Henrik
thisZoom commence à 1 –