Câmera 3D Zoom e siga física em java?

votos
0

Eu estou tentando fazê-lo de modo que não importa o quão distante dois objetos são os dois vão permanecer na tela. Estou usando JOGL, mas isso não importa como eu só preciso de ajuda com a matemática. Isto é o que eu tenho até agora:

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 é a matemática que eu preciso para que o Z zumbe dentro e fora corretamente?

Publicado 16/05/2009 em 01:26
fonte usuário
Em outras línguas...                            


4 respostas

votos
3

Se os dois objetos têm z = 0, e sua tela ângulo de visão (a partir do centro da tela para uma vantagem) é machado e ay para os ângulos horizontais e verticais, então:

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)

Aqui ZX e zy são as distâncias para obter os objetos para as dimensões horizontal e vertical da tela, e Camz é a distância que satisfaça ambos os critérios. Observe também que machado e ay estão em radianos (por exemplo, se você assumir sua tela é de 40 graus de largura, em seguida, machado é de 20 graus, ou ax = 20 * (pi / 180) = 0.3419 radianos).

Seus valores para camx e camy estavam corretas.

Respondeu 16/05/2009 em 04:08
fonte usuário

votos
2

Talvez eu esteja mal-entendido a sua situação, mas você não pode apenas fazer

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

Isso seria posicionar a câmera diretamente entre os dois objetos.

Respondeu 16/05/2009 em 01:31
fonte usuário

votos
1

Caso ele precisa ser corrigido o mais,

distância flutuador = (float) ((Math.sqrt ((p1.x - p2.x) ^ 2 + (p1.y - p2.y) ^ 2)));

Não estou Prettey certeza sobre a sintaxe. Estou apenas dizendo que você precisa para obter a potência de 2 antes de adicionar vetores.

Respondeu 16/05/2009 em 02:58
fonte usuário

votos
0

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);
Respondeu 17/05/2009 em 19:53
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more