Fotocamera 3D zoom e seguire la fisica in java?
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?
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.