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.
Notas
[editar | editar código-fonte]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 )