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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top