Caméra 3D Zoom et suivez la physique en java?
Question
Je suis en train de faire en sorte que peu importe à quelle distance deux objets sont ils restent tous deux à l'écran. J'utilise JOGL, mais cela ne devrait pas d'importance que j'ai juste besoin d'aide avec les mathématiques. Voilà ce que j'ai jusqu'à présent:
float distance = (float) ((Math.sqrt((p1.x - p2.x) + (p1.y - p2.y))));
float camx = (float)((p1.x + p2.x) * 0.5);
float camy = (float)((p1.y + p2.y) * 0.5);
float camz = (float) (distance * 5);
Qu'est-ce que les mathématiques que j'ai besoin de sorte que le Z effectue un zoom avant et correctement?
La solution 4
float distance = (float) ((Math.sqrt(Math.pow((p1.x - p2.x),2.0) + Math.pow((p1.y - p2.y), 2.0))));
float camx = (float)((p1.x + p2.x) * 0.5);
float camy = (float)((p1.y + p2.y) * 0.5);
float camz = (float) Math.abs(distance);
Autres conseils
Si les deux objets ont z = 0, et l'angle de vue de l'écran (à partir du centre de l'écran à un bord) est hache et ay pour les angles horizontaux et verticaux, puis:
zx = abs((p1.x-p2.x)*0.5)/tan(ax)
zy = abs((p1.y-p2.y)*0.5)/tan(ay)
et
camz = max(zx, zy)
Ici zx et zy sont les distances pour obtenir les objets sur les dimensions horizontales et verticales de l'écran, et Camz est la distance qui satisfait les deux critères. A noter également que la hache et ay sont en radians (par exemple, si vous assumez votre écran est de 40 degrés de large, puis la hache est de 20 degrés, ou ax = 20 * (pi / 180) = 0,3419 radians).
Vos valeurs pour CAMX et camy étaient corrects.
Peut-être que je suis malentendu votre situation, mais ne pouvait pas vous faire juste
float camx = (p1.x + p2.x) * 0.5;
float camy = (p1.y + p2.y) * 0.5;
float camz = (p1.z + p2.z) * 0.5;
qui placerait l'appareil photo directement entre les deux objets.
Faut-il besoin d'être corrigée comme,
distance du flotteur = (float) ((Math.sqrt ((P1.x - p2.x) ^ 2 + (p1.y - p2.y) ^ 2)));
Je ne suis pas prettey sûr de la syntaxe. Je vous dis simplement besoin d'obtenir la puissance de 2 avant d'ajouter des vecteurs.