Panda3D/Manual/As lentes e o campo de visão

Toda Câmera tem o seu objeto lens que define as propriedades da sua visão. Para aplicações simples, você não precisa pensar sobre a lente; provavelmente você vai ficar feliz com as propriedades padrão da lente. Contudo, você vai ocasionalmente querer ajustar algumas propriedades da lente, como o seu campo de visão, e existem diversas interfaces para fazer isto, depende de como você quer pensar sobre a lente.

Quando você iniciar o Panda3D, a camera padrão e a lente são criados para você automaticamente. O objeto padrão da câmera é armazenado em base.cam(embora por convenção, se você quer mover a câmera padrão você deve manipular base.camera em vez disso), e a lente padrão é base.camLens.

A lente padrão vai ser quase sempre uma lente perspectiva --- que é, uma instância da classe Perspective Lens --- a não ser que você tenha feito alguma coisa para mudá-la para outro tipo qualquer de lente. Uma lente perspectiva é de longe o tipo mais comum de lente usada, e ela se comporta da mesma maneira que a lente real de uma câmera funciona, ou para o que importa, da mesma forma que a lente dos nossos olhos funcionam.

A ilustração acima mostra a câmera com uma lente comum na perspectiva observando um modelo no mundo. A câmera só pode ver a parte do mundo que está dentro das linhas pretas; esta área é chamada de frustum da lente.

Na figura, você pode ver também a imagem que a lente captura(e a imagem está de cabeça para baixo, justamente da forma como estaria no mundo real, uma câmera real). Esta imagem serve apenas de ilustração; ela não faz parte da câmera do Panda3D. Ela foi incluída para ajudar a mostrar a relação entre a lente do Panda3D e uma lente real, a lente física.

Existem diversas propriedades diferentes que podem ser configuradas na PerspectiveLens. Nem todas são independentes; configurar algumas propriedades vai mudar os valores de outras propriedades. Aqui está uma ilustração:

A. Este ponto é o nodal point ou o ponto dos olhos da lente. Ele é também(normalmente) a origem, isto é, o ponto (0,0,0) da câmera que segura a lente. Normalmente (num sistema de coordenada onde Z aponta para cima), a lente vai estar olhando em direção ao eixo Y, então na ilustração o eixo positivo Y se estende à direita do ponto A. O plano que contém o nodal point, perpendicular a direção da visão(que é, o plano correspondente a linha vertical através do ponto A), é chamado de camera plane.

Embora seja possível modificar o nodal point ou a direção da visão da lente para outro ponto que não seja (0,0,0) ou alguma direção que não seja sobre o eixo Y, é normalmente muito mais simples e melhor apenas mover toda a câmera usando as operações básicas do NodePath como setPos() e setHpr().

B. Este ângulo é o field of view ou campo de visão, ou fov, da lente. Você pode facilmente mudar ele configurando um novo valor em graus com lens.setFov(angle). Deixar o campo de visão menor vai trazer as coisas para mais perto, como uma lente de telefoto; vai diminuir também os efeitos visíveis da perspectiva. Deixar o campo de visão maior vai abrir a visão para muito mais objetos, como uma lente expandida; vai também aumentar as distorções visíveis da perspectiva. O campo de visão deve ser maior que 0 graus e menor que 180 graus, porém valores acima de 90 graus vão parecer extremamente distorcidos. No mundo real, as lentes perspectivas raramente se expandem mais do que 80 graus, e isto já é bastante expandida. O valor padrão do campo de visão é de 40 graus, que já é normalmente um ângulo de visão bastante confortável.

Existe realmente um campo de visão separado na horizontal e um campo de visão na vertical, ambas devem ser controladas independentemente com a forma de dois parâmetros do setFov: lens.setFov(anguloHorizontal, anguloVertical). Usar a forma de dois parâmetros vai mudar o aspect ratio da lente(veja abaixo). Normalmente, você poderia configurar o campo de visão usando apenas a forma com um parâmetro, que configura o campo de visão horizontal diretamente, e automaticamente computa o campo de visão vertical para preservar o mesmo aspect ratio.

C. A distância é chamada near distance ou near plane (algo como distância próxima ou plano próximo) da lente. Objetos que estão muito mais próximos do que essa variável da camera plane não são renderizados. Você pode configurar a distância para o valor que você quiser, sempre lembrando que deve ser maior que 0; e quanto mais baixo o valor maior a probabilidade de você obervar um artefato chamado Z-fighting, apenas o brilho dos objetos que estão distantes. O valor padrão para a near distance é 1.0, que para muitos cenários é razoável. Obviamente, o valor mais apropriado para o seu cenário depende da natureza do cenário (assim como as unidades de medida em que seu cenário foi modelado).

Você pode mudar a near distance a qualquer momento com chamando lens.setNear(distance)