Domanda

che sto cercando di fare in modo che non importa quanto distanti due oggetti che faranno entrambi rimangono sullo schermo. Sto utilizzando JOGL, ma che non dovrebbe importare come ho solo bisogno di aiuto con la matematica. Questo è quello che ho finora:

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);

Qual è la matematica che ho bisogno in modo che la Z zoom in e out correttamente?

È stato utile?

Soluzione 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);

Altri suggerimenti

Se entrambi gli oggetti hanno z = 0, e l'angolo di visualizzazione dello schermo (dalla centrale dello schermo ad un bordo) è ax e ay per gli angoli orizzontali e verticali, quindi:

zx = abs((p1.x-p2.x)*0.5)/tan(ax)
zy = abs((p1.y-p2.y)*0.5)/tan(ay)

e

camz = max(zx, zy)

Qui zx e zy sono le distanze per ottenere gli oggetti sulle dimensioni orizzontali e verticali dello schermo, e camz è la distanza che soddisfa entrambi i criteri. Si noti inoltre che Ax e Ay sono in radianti (ad esempio, se si assume lo schermo è largo 40 gradi, allora ax è di 20 gradi, o ax = 20 * (pi / 180) = 0,3419 radianti).

I tuoi valori per CAMx e Camy erano corrette.

Forse sto equivoco la vostra situazione, ma non poteva semplicemente fare

float camx = (p1.x + p2.x) * 0.5;
float camy = (p1.y + p2.y) * 0.5;
float camz = (p1.z + p2.z) * 0.5;

Ciò posizionare la telecamera direttamente tra i due oggetti.

Nel caso in cui devono essere corretti come,

  

distanza float = (float) ((Math.sqrt ((P1.x - p2.x) ^ 2 + (p1.y - p2.y) ^ 2)));

Non sto prettey sicuro della sintassi. Sto solo dicendo è necessario per ottenere la potenza di 2 prima di aggiungere vettori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top