3d Camera Position dado alguns pontos
Pergunta
Heyo,
Atualmente estou trabalhando em um projeto onde eu preciso colocar a câmera de forma que o movimento completo de um personagem seria visível sem mover a câmera. Não tenho a posição onde os caracteres inicia, assim como a distância máxima que o personagem irá viajar em todas as três direcções (X, Y, e Z). Também tem o campo de visão (ou seja, 90 graus).
Existe uma equação que vai descobrir onde eu preciso colocar a câmera para que ele não terá que se mover para ver o movimento total?
Nota:. Isso é usando OpenGL
Esclarecimento:. A câmera deve ser "à frente" do personagem que está em movimento, e não acima
Ele também vai estar se movendo ao longo de um plano de terra.
Solução
Se você fizer uma esfera delimitadora dos pontos, tudo que você precisa fazer é manter a câmera a uma distância maior do que ou igual ao raio da delimitadora esfera / sin (FOV / 2).
Por exemplo, se você tem uma esfera saltando com o raio Radius, e um campo específico de Ver FOV, a câmera só precisa estar em um ponto "Dist" de distância, apontando para o centro da esfera delimitadora.
A equação para calcular a distância é: Dist = Raio / sin (FOV / 2);
Isto irá funcionar em 3D, para uma câmera em qualquer orientação.
Outras dicas
Basta ter o alcance máximo de (X, Y, Z) não é por si próprio suficiente, porque a porta de visualização é essencialmente em forma de pirâmide, com o vértice da pirâmide na posição de olho.
Por uma questão de discussão, vamos supor que todo o movimento é no (X, Z) plano (isto é, o chão), e o olho é directamente acima da 10m origem ao longo do eixo Y.
Assumindo uma janela quadrada, com o seu campo de visão 90° você seria capaz de ver a partir de ± 10m ao longo ambos os eixos X e Z, mas apenas por objetos que estão no chão (Y = 0). Assim que eles saem do chão a sua visão é reduzida. Se é 1m do solo, em seguida, o seu (X, Z) medida só é ± 9m.
É evidente que uma câmera real poderia ser colocado qualquer maneira na cena, de frente para qualquer direção. Mesmo o ângulo "roll" da câmera poderia mudar o quanto é visível. Há realmente um número infinito de tais pontos de câmera, então você vai precisar para restringir seus critérios pouco.
Leve o segmento de linha a partir do ponto inicial até o ponto final. Construir um plano ortogonal a este segmento de linha através do ponto médio do segmento de linha. Em seguida, posicione a algum lugar câmera neste plano a uma distância de mais do que o seguinte a partir do ponto de intersecção do plano e linha de olhar para o ponto de interseção. O vector de cima da câmara tem de estar situado no plano e o campo de visão horizontal deve ser de 90 graus.
distance = sqrt(dx^2 + dy^2 + dz^2) / 2
Este posições de câmera, todos eles terão o ponto inicial eo ponto final na fronteira esquerda ou direita da porta de vista e verticaly centrado.
Outra solução poderia ser a de escrever uma função que leva o ponto inicial, o ponto final, e a posição desejada de ambos os pontos na tela. Em seguida, basta resolver a equação projeção para a transformação câmera.
Depende, por exemplo, se o objeto está indo mudar em um avião, você pode apenas colocar a câmera fora uma bola circunscrito sua área de movimento (isso depende do fato de que FOV é 90, que é um ângulo de sorte).
Se o objeto vai movimento em 3D, é muito mais difícil. Seria bom se você especificar a região onde o objeto se move (cubo de esferas vs. ...) e a direção que você quer vê-lo partir.