Panda3D/Manual/A câmera padrão

Por padrão, o Panda roda uma task que permite a você mover a câmera usando o mouse. Esta task vai conflitar com qualquer código que você escreva para mover a câmera. A task controla a câmera atualizando a sua posição a cada frame para onde o mouse está. Isso significa que qualquer outro codigo que afete diretamente a camera parecerá não funcionar, porque ele vai lutar com o mouse pelo controle.

Se você quiser mover a camera diretamente, você precisa primeiro desabilitar a tarefa de controle da camera, e só então, a camera irá funcionar como você espera

   base.disableMouse()

A classe ShowBase contem alguns metodos para permitir que o usuário controle a camera. O comando useDrive() permite que o mouse e o teclado controlem a camera. Ambos os sistemas de controle só movimentam-se nos eixos x e y, então, mover para cima ou para baixo no eixo Z é impossível com esse sistema.

O sistema de teclado usa as setas do teclado. Cima move a camera para frente, baixo a move para trás. As setas esquerda e direita rotacionam a camera

O sistema do mouse responde assim que qualquer botão é pressionado. Se a seta do mouse está no topo da tela, a camera se move para frente. Se a seta do mouse estiver na parte inferior da tela, a camera se move para trás. Se a seta estiver em qualquer lado na horizontal, a camera rotaciona nessa direção. A velocidade que a camera se move é determinada por quão longe do centro o cursor do mouse está. Existe tambem outro comando que permite controles baseados na rodinha central do mouse.

   base.useDrive()
   base.useTrackball()

ShowBase também providencia o metodo oobe(), que lhe da controle do node basico da camera( base.cam ), com o mouse/rodinha enquanto o codigo continua a mover o node da camera ( base.camera ). Isso pode ser útil para propositos de debug. A palavra oobe significa "out-of-body-experience" ou "experiencia fora do corpo" e é util para lhe dar uma visão aérea da sua aplicação á qualquer momento do desenvolvimento. Chame o metodo uma vez para ligar o modo OOBE, e chame novamente para desligá-lo.

   base.oobe()

oobeCull() é uma variante de oobe(), e trabalha de maneira similar, exceto que ele ainda dá cull na cena, como se a camera ainda estivesse na posição original, enquanto desenha a cena do ponto de vista da nova posição de sua camera. Então você pode agora ver a cena da sua "experiencia extra-corpórea" e andar, e você verá coisas aparecerem e desapererem do seu campo de visão enquanto voce se move pelo mundo.

A câmera padrão fica sempre posicionada em 0,0,0 e você pode facilmente fazer por exemplo com que sua câmera siga o personagem de seu jogo criando uma visão de terceira pessoa.

Aqui está um simples exemplo:

   base.camera.reparentTo(seu-modelo)
   base.camera.setPos(0,80,5)
   base.camera.lookAt(seu-modelo)

Veja que este processo faz o parenteamento entre câmera e seu personagem, para retirar o parenteamento você deve parentear a câmera para render novamente.

Ao parentear o objeto, você trabalha não mais com coordenadas globais, mas sim locais e relativas ao objeto parenteado sendo os parametros 0,80,5 respectivamente x,y,z em relação ao objeto parenteado.

Além disso é recomendável setar a câmera para estar apontando para o seu modelo ( lookAt )