Pergunta

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

O que é a matemática que eu preciso para que os zooms Z dentro e fora corretamente?

Foi útil?

Solução 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);

Outras dicas

Se os dois objetos têm z = 0, e seu ângulo de tela de visualização (do Centro da tela para uma vantagem) é machado e ay para os ângulos horizontais e verticais, em seguida:

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.

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.

Deve precisam ser corrigidos como,

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

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top