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.

Foi útil?

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.

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